Module: Sequel::Plugins::Bitemporal::ClassMethods

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#audit_classObject (readonly)

Returns the value of attribute audit_class.



194
195
196
# File 'lib/sequel/plugins/bitemporal.rb', line 194

def audit_class
  @audit_class
end

#audit_updated_by_methodObject (readonly)

Returns the value of attribute audit_updated_by_method.



194
195
196
# File 'lib/sequel/plugins/bitemporal.rb', line 194

def audit_updated_by_method
  @audit_updated_by_method
end

#current_version_aliasObject (readonly)

Returns the value of attribute current_version_alias.



194
195
196
# File 'lib/sequel/plugins/bitemporal.rb', line 194

def current_version_alias
  @current_version_alias
end

#excluded_columnsObject (readonly)

Returns the value of attribute excluded_columns.



194
195
196
# File 'lib/sequel/plugins/bitemporal.rb', line 194

def excluded_columns
  @excluded_columns
end

#propagate_per_columnObject (readonly)

Returns the value of attribute propagate_per_column.



194
195
196
# File 'lib/sequel/plugins/bitemporal.rb', line 194

def propagate_per_column
  @propagate_per_column
end

#use_rangesObject (readonly)

Returns the value of attribute use_ranges.



194
195
196
# File 'lib/sequel/plugins/bitemporal.rb', line 194

def use_ranges
  @use_ranges
end

#version_classObject (readonly)

Returns the value of attribute version_class.



194
195
196
# File 'lib/sequel/plugins/bitemporal.rb', line 194

def version_class
  @version_class
end

#version_uses_string_nilifierObject (readonly)

Returns the value of attribute version_uses_string_nilifier.



194
195
196
# File 'lib/sequel/plugins/bitemporal.rb', line 194

def version_uses_string_nilifier
  @version_uses_string_nilifier
end

#versions_aliasObject (readonly)

Returns the value of attribute versions_alias.



194
195
196
# File 'lib/sequel/plugins/bitemporal.rb', line 194

def versions_alias
  @versions_alias
end

Instance Method Details

#existence_range(qualifier = nil) ⇒ Object



232
233
234
235
236
237
238
239
240
# File 'lib/sequel/plugins/bitemporal.rb', line 232

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) ⇒ Object



242
243
244
245
246
# File 'lib/sequel/plugins/bitemporal.rb', line 242

def existence_range_contains(point_in_time, qualifier=nil)
  existence_range(qualifier).contains(
    Sequel.cast(point_in_time, :timestamp)
  )
end

#validity_cast_typeObject



221
222
223
224
225
226
227
228
229
230
# File 'lib/sequel/plugins/bitemporal.rb', line 221

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) ⇒ Object



248
249
250
251
252
253
254
255
256
257
# File 'lib/sequel/plugins/bitemporal.rb', line 248

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) ⇒ Object



259
260
261
262
263
# File 'lib/sequel/plugins/bitemporal.rb', line 259

def validity_range_contains(now, qualifier=nil)
  validity_range(qualifier).contains(
    Sequel.cast(now, validity_cast_type)
  )
end

#validity_range_typeObject



198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
# File 'lib/sequel/plugins/bitemporal.rb', line 198

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