Module: SequelTstzrangeFields::Helpers::ClassMethods
- Defined in:
- lib/sequel_tstzrange_fields/helpers.rb
Instance Method Summary collapse
- #new_tstzrange(b, e) ⇒ Object
- #value_to_time(v) ⇒ Object
-
#value_to_tstzrange(value) ⇒ Object
Convert a range-like value into a PGRange.
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 |