Module: ActiveRecord::Bitemporal

Extended by:
Optionable, ActiveSupport::Concern
Defined in:
lib/activerecord-bitemporal/bitemporal.rb,
lib/activerecord-bitemporal/version.rb,
lib/activerecord-bitemporal/callbacks.rb,
lib/activerecord-bitemporal/global_id.rb,
lib/activerecord-bitemporal/bitemporal.rb,
lib/activerecord-bitemporal/visualizer.rb,
lib/activerecord-bitemporal/bitemporal_checker.rb,
lib/activerecord-bitemporal/patches.rb,
lib/activerecord-bitemporal/errors.rb,
lib/activerecord-bitemporal/scope.rb,
lib/activerecord-bitemporal.rb

Overview

Add Optionable to Bitemporal Example: ActiveRecord::Bitemporal.valid_at(“2018/4/1”)

# in valid_datetime is "2018/4/1".

Defined Under Namespace

Modules: BitemporalChecker, Bitemporalize, Callbacks, CollectionProxy, GlobalID, NodeBitemporalInclude, Optionable, Patches, Persistence, Relation, Scope, Uniqueness, Visualizer Classes: BitemporalError, Current, ValidDatetimeRangeError

Constant Summary collapse

VERSION =
"6.1.0"
DEFAULT_VALID_FROM =
Time.utc(1900, 12, 31).in_time_zone.freeze
DEFAULT_VALID_TO =
Time.utc(9999, 12, 31).in_time_zone.freeze
DEFAULT_TRANSACTION_FROM =
Time.utc(1900, 12, 31).in_time_zone.freeze
DEFAULT_TRANSACTION_TO =
Time.utc(9999, 12, 31).in_time_zone.freeze

Class Method Summary collapse

Methods included from Optionable

bitemporal_option, bitemporal_option_merge!, with_bitemporal_option

Class Method Details

.bitemporal_at(datetime, &block) ⇒ Object



83
84
85
# File 'lib/activerecord-bitemporal/bitemporal.rb', line 83

def bitemporal_at(datetime, &block)
  transaction_at(datetime) { valid_at(datetime, &block) }
end

.bitemporal_at!(datetime, &block) ⇒ Object



87
88
89
# File 'lib/activerecord-bitemporal/bitemporal.rb', line 87

def bitemporal_at!(datetime, &block)
  transaction_at!(datetime) { valid_at!(datetime, &block) }
end

.ignore_transaction_datetime(&block) ⇒ Object



79
80
81
# File 'lib/activerecord-bitemporal/bitemporal.rb', line 79

def ignore_transaction_datetime(&block)
  with_bitemporal_option(ignore_transaction_datetime: true, transaction_datetime: nil, &block)
end

.ignore_valid_datetime(&block) ⇒ Object



63
64
65
# File 'lib/activerecord-bitemporal/bitemporal.rb', line 63

def ignore_valid_datetime(&block)
  with_bitemporal_option(ignore_valid_datetime: true, valid_datetime: nil, &block)
end

.merge_by(option) ⇒ Object



91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/activerecord-bitemporal/bitemporal.rb', line 91

def merge_by(option)
  option_ = option.dup
  if bitemporal_option_storage[:force_valid_datetime]
    option_.merge!(valid_datetime: bitemporal_option_storage[:valid_datetime])
  end

  if bitemporal_option_storage[:force_transaction_datetime]
    option_.merge!(transaction_datetime: bitemporal_option_storage[:transaction_datetime])
  end

  bitemporal_option_storage.merge(option_)
end

.transaction_at(datetime, &block) ⇒ Object



67
68
69
# File 'lib/activerecord-bitemporal/bitemporal.rb', line 67

def transaction_at(datetime, &block)
  with_bitemporal_option(ignore_transaction_datetime: false, transaction_datetime: datetime, &block)
end

.transaction_at!(datetime, &block) ⇒ Object



71
72
73
# File 'lib/activerecord-bitemporal/bitemporal.rb', line 71

def transaction_at!(datetime, &block)
  with_bitemporal_option(ignore_transaction_datetime: false, transaction_datetime: datetime, force_transaction_datetime: true, &block)
end

.transaction_datetimeObject



75
76
77
# File 'lib/activerecord-bitemporal/bitemporal.rb', line 75

def transaction_datetime
  bitemporal_option[:transaction_datetime]&.in_time_zone
end

.valid_at(datetime, &block) ⇒ Object



47
48
49
# File 'lib/activerecord-bitemporal/bitemporal.rb', line 47

def valid_at(datetime, &block)
  with_bitemporal_option(ignore_valid_datetime: false, valid_datetime: datetime, &block)
end

.valid_at!(datetime, &block) ⇒ Object



51
52
53
# File 'lib/activerecord-bitemporal/bitemporal.rb', line 51

def valid_at!(datetime, &block)
  with_bitemporal_option(ignore_valid_datetime: false, valid_datetime: datetime, force_valid_datetime: true, &block)
end

.valid_dateObject



59
60
61
# File 'lib/activerecord-bitemporal/bitemporal.rb', line 59

def valid_date
  valid_datetime&.to_date
end

.valid_datetimeObject



55
56
57
# File 'lib/activerecord-bitemporal/bitemporal.rb', line 55

def valid_datetime
  bitemporal_option[:valid_datetime]&.in_time_zone
end