Module: Sequel::Plugins::TstzmultirangeFields

Defined in:
lib/sequel/plugins/tstzmultirange_fields.rb

Defined Under Namespace

Modules: ClassMethods, DatasetMethods

Constant Summary collapse

VERSION =
SequelTstzrangeFields::VERSION

Class Method Summary collapse

Class Method Details

.apply(_model, _opts = {}) ⇒ Object



37
38
39
# File 'lib/sequel/plugins/tstzmultirange_fields.rb', line 37

def self.apply(_model, _opts={})
  Sequel.extension :pg_range_ops
end

.configure(model, *args) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
# File 'lib/sequel/plugins/tstzmultirange_fields.rb', line 41

def self.configure(model, *args)
  SequelTstzrangeFields::Helpers.check_schema_type_available(model.db, :tstzmultirange, :pg_multirange)
  args << :periods if args.empty?
  args = args.flatten

  setup_model(model)
  model.tstzrange_columns = args
  model.tstzrange_columns.each do |column|
    create_accessors(model, column)
  end
end

.create_accessors(model, column) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/sequel/plugins/tstzmultirange_fields.rb', line 57

def self.create_accessors(model, column)
  get_column_method = column.to_sym
  set_column_method = :"#{column}="

  model.define_method(get_column_method) do
    self[column]
  end

  model.define_method(set_column_method) do |values|
    values = [values] unless values.respond_to?(:to_ary)
    ranges = values.map { |v| self.class.value_to_tstzrange(v) }
    multirange = Sequel.pg_multirange(ranges, :tstzmultirange)
    self[column] = multirange
  end
end

.setup_model(model) ⇒ Object



53
54
55
# File 'lib/sequel/plugins/tstzmultirange_fields.rb', line 53

def self.setup_model(model)
  model.extend(SequelTstzrangeFields::Helpers::ClassMethods)
end