Easily work with Postgres tstzrange fields by setting the entire range,
the start and end separately, using ranges, strings, {:begin, :end} hashes,
objects that respond to #begin and #end, etc.
Defining a model class with a timestamptz range:
class ACME::Lease < Sequel::Model(:leases)
plugin :tstzrange_fields, :active_during
end
And in the schema:
create_table(:leases) do
primary_key :id
tstzrange :active_during
end
You can use it as follows:
lease = ACME::Lease.new
lease.active_during_begin = Time.now
lease.active_during_end = 1.year.from_now
lease.active_during = 1.year.ago..1.year.from_now
lease.active_during_end = nil # Unbounded end set
lease.active_during = nil # Empty set
Defining a model class with a timestamptz multirange:
class Reminder < Sequel::Model(:reminders)
plugin :tstzmultirange_fields, :active_during
end
And in the schema:
create_table(:reminders) do
primary_key :id
tstzmultirange :active_during
end
You can use it as follows:
r = Reminder.new
reminder.active_during = [{begin: Time.now, end: 1.year.from_now}]
reminder.active_during = [1.year.ago..1.year.from_now]
reminder.active_during = [Time.now..]
reminder.active_during = []