Module: SequelTstzrangeFields::Helpers::ClassMethods

Defined in:
lib/sequel_tstzrange_fields/helpers.rb

Instance Method Summary collapse

Instance Method Details

#new_tstzrange(b, e) ⇒ Object



5
6
7
8
9
10
# File 'lib/sequel_tstzrange_fields/helpers.rb', line 5

def new_tstzrange(b, e)
  b = value_to_time(b)
  e = value_to_time(e)
  return Sequel::Postgres::PGRange.empty(:tstzrange) if b.nil? && e.nil?
  return Sequel::Postgres::PGRange.new(b&.to_time, e&.to_time, db_type: :tstzrange, exclude_end: true)
end

#value_to_time(v) ⇒ Object



12
13
14
15
16
# File 'lib/sequel_tstzrange_fields/helpers.rb', line 12

def value_to_time(v)
  return v if v.nil?
  return v if v.respond_to?(:to_time)
  return Time.parse(v)
end

#value_to_tstzrange(value) ⇒ Object

Convert a range-like value into a PGRange. Note that we accept 'start' in addition to 'begin' since this is also very common, and trying to coerce the keys of objects in an array during input can be very annoying.



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/sequel_tstzrange_fields/helpers.rb', line 22

def value_to_tstzrange(value)
  case value
    when Sequel::Postgres::PGRange
      return value
    when Float::INFINITY
      range = Sequel::Postgres::PGRange.new(nil, nil, empty: false, db_type: :tstzrange)
      return range
    when "empty", nil
      return Sequel::Postgres::PGRange.empty(:tstzrange)
    else
      beg = if value.respond_to?(:begin)
              value.begin
        elsif value.respond_to?(:start)
          value.start
      else
        value[:begin] || value["begin"] || value[:start] || value["start"]
        end
      en = value.respond_to?(:end) ? value.end : (value[:end] || value["end"])
      return self.new_tstzrange(beg, en)
  end
end