module Sequel::Plugins::Bitemporal::ClassMethods

Attributes

audit_class[R]
audit_updated_by_method[R]
current_version_alias[R]
excluded_columns[R]
propagate_per_column[R]
use_ranges[R]
version_class[R]
version_uses_string_nilifier[R]
versions_alias[R]

Public Instance Methods

existence_range(qualifier=nil) click to toggle source
# File lib/sequel/plugins/bitemporal.rb, line 258
def existence_range(qualifier=nil)
  created_at_column = :created_at
  created_at_column = Sequel.qualify qualifier, created_at_column if qualifier
  expired_at_column = :expired_at
  expired_at_column = Sequel.qualify qualifier, expired_at_column if qualifier
  Sequel.function(
    :tsrange, created_at_column, expired_at_column, "[)"
  ).pg_range
end
existence_range_contains(point_in_time, qualifier=nil) click to toggle source
# File lib/sequel/plugins/bitemporal.rb, line 268
def existence_range_contains(point_in_time, qualifier=nil)
  existence_range(qualifier).contains(
    Sequel.cast(point_in_time, :timestamp)
  )
end
validity_cast_type() click to toggle source
# File lib/sequel/plugins/bitemporal.rb, line 247
def validity_cast_type
  case validity_range_type
  when :daterange
    :date
  when :tsrange, :tstzrange
    :timestamp
  else
    raise "Don't know how to handle cast for range type: #{validity_range_type}"
  end
end
validity_range(qualifier=nil) click to toggle source
# File lib/sequel/plugins/bitemporal.rb, line 274
def validity_range(qualifier=nil)
  valid_from_column = :valid_from
  valid_from_column = Sequel.qualify qualifier, valid_from_column if qualifier
  valid_to_column = :valid_to
  valid_to_column = Sequel.qualify qualifier, valid_to_column if qualifier

  Sequel.function(
    validity_range_type, valid_from_column, valid_to_column, "[)"
  ).pg_range
end
validity_range_contains(now, qualifier=nil) click to toggle source
# File lib/sequel/plugins/bitemporal.rb, line 285
def validity_range_contains(now, qualifier=nil)
  validity_range(qualifier).contains(
    Sequel.cast(now, validity_cast_type)
  )
end
validity_range_type() click to toggle source
# File lib/sequel/plugins/bitemporal.rb, line 224
def validity_range_type
  @validity_range_type ||= begin
    valid_from_infos = db.schema(
      version_class.table_name
    ).detect do |column_name, _|
      column_name==:valid_from
    end
    unless valid_from_infos
      raise "Could not find valid_from column in #{version_class.table_name}"
    end
    case valid_from_infos.last[:db_type]
    when "date"
      :daterange
    when "timestamp without time zone"
      :tsrange
    when "timestamp with time zone"
      :tstzrange
    else
      raise "Don't know how to handle ranges for type: #{valid_from_infos[:db_type]}"
    end
  end
end