Module: Sequel::Plugins::Bitemporal::ClassMethods
- Defined in:
- lib/sequel/plugins/bitemporal.rb
Instance Attribute Summary collapse
-
#audit_class ⇒ Object
readonly
Returns the value of attribute audit_class.
-
#audit_updated_by_method ⇒ Object
readonly
Returns the value of attribute audit_updated_by_method.
-
#current_version_alias ⇒ Object
readonly
Returns the value of attribute current_version_alias.
-
#excluded_columns ⇒ Object
readonly
Returns the value of attribute excluded_columns.
-
#propagate_per_column ⇒ Object
readonly
Returns the value of attribute propagate_per_column.
-
#use_ranges ⇒ Object
readonly
Returns the value of attribute use_ranges.
-
#version_class ⇒ Object
readonly
Returns the value of attribute version_class.
-
#version_uses_string_nilifier ⇒ Object
readonly
Returns the value of attribute version_uses_string_nilifier.
-
#versions_alias ⇒ Object
readonly
Returns the value of attribute versions_alias.
Instance Method Summary collapse
- #existence_range(qualifier = nil) ⇒ Object
- #existence_range_contains(point_in_time, qualifier = nil) ⇒ Object
- #validity_cast_type ⇒ Object
- #validity_range(qualifier = nil) ⇒ Object
- #validity_range_contains(now, qualifier = nil) ⇒ Object
- #validity_range_type ⇒ Object
Instance Attribute Details
#audit_class ⇒ Object (readonly)
Returns the value of attribute audit_class.
220 221 222 |
# File 'lib/sequel/plugins/bitemporal.rb', line 220 def audit_class @audit_class end |
#audit_updated_by_method ⇒ Object (readonly)
Returns the value of attribute audit_updated_by_method.
220 221 222 |
# File 'lib/sequel/plugins/bitemporal.rb', line 220 def audit_updated_by_method @audit_updated_by_method end |
#current_version_alias ⇒ Object (readonly)
Returns the value of attribute current_version_alias.
220 221 222 |
# File 'lib/sequel/plugins/bitemporal.rb', line 220 def current_version_alias @current_version_alias end |
#excluded_columns ⇒ Object (readonly)
Returns the value of attribute excluded_columns.
220 221 222 |
# File 'lib/sequel/plugins/bitemporal.rb', line 220 def excluded_columns @excluded_columns end |
#propagate_per_column ⇒ Object (readonly)
Returns the value of attribute propagate_per_column.
220 221 222 |
# File 'lib/sequel/plugins/bitemporal.rb', line 220 def propagate_per_column @propagate_per_column end |
#use_ranges ⇒ Object (readonly)
Returns the value of attribute use_ranges.
220 221 222 |
# File 'lib/sequel/plugins/bitemporal.rb', line 220 def use_ranges @use_ranges end |
#version_class ⇒ Object (readonly)
Returns the value of attribute version_class.
220 221 222 |
# File 'lib/sequel/plugins/bitemporal.rb', line 220 def version_class @version_class end |
#version_uses_string_nilifier ⇒ Object (readonly)
Returns the value of attribute version_uses_string_nilifier.
220 221 222 |
# File 'lib/sequel/plugins/bitemporal.rb', line 220 def version_uses_string_nilifier @version_uses_string_nilifier end |
#versions_alias ⇒ Object (readonly)
Returns the value of attribute versions_alias.
220 221 222 |
# File 'lib/sequel/plugins/bitemporal.rb', line 220 def versions_alias @versions_alias end |
Instance Method Details
#existence_range(qualifier = nil) ⇒ Object
258 259 260 261 262 263 264 265 266 |
# 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) ⇒ Object
268 269 270 271 272 |
# 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 ⇒ Object
247 248 249 250 251 252 253 254 255 256 |
# 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) ⇒ Object
274 275 276 277 278 279 280 281 282 283 |
# 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) ⇒ Object
285 286 287 288 289 |
# 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 ⇒ Object
224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 |
# 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 |