Module: Sequel::Plugins::Dirty::InstanceMethods
- Defined in:
- lib/sequel/plugins/dirty.rb
Instance Attribute Summary collapse
-
#previous_changes ⇒ Object
readonly
A hash of previous changes before the object was saved, in the same format as #column_changes.
Instance Method Summary collapse
-
#column_change(column) ⇒ Object
An array with the initial value and the current value of the column, if the column has been changed.
-
#column_changed?(column) ⇒ Boolean
Either true or false depending on whether the column has changed.
-
#column_changes ⇒ Object
A hash with column symbol keys and pairs of initial and current values for all changed columns.
-
#freeze ⇒ Object
Freeze internal data structures.
-
#initial_value(column) ⇒ Object
The initial value of the given column.
-
#initial_values ⇒ Object
A hash with column symbol keys and initial values.
-
#reset_column(column) ⇒ Object
Reset the column to its initial value.
-
#will_change_column(column) ⇒ Object
Manually specify that a column will change.
Instance Attribute Details
#previous_changes ⇒ Object (readonly)
A hash of previous changes before the object was saved, in the same format as #column_changes. Note that this is not necessarily the same as the columns that were used in the update statement.
62 63 64 |
# File 'lib/sequel/plugins/dirty.rb', line 62 def previous_changes @previous_changes end |
Instance Method Details
#column_change(column) ⇒ Object
An array with the initial value and the current value of the column, if the column has been changed. If the column has not been changed, returns nil.
column_change(:name) # => ['Initial', 'Current']
69 70 71 |
# File 'lib/sequel/plugins/dirty.rb', line 69 def column_change(column) [initial_value(column), get_column_value(column)] if column_changed?(column) end |
#column_changed?(column) ⇒ Boolean
Either true or false depending on whether the column has changed. Note that this is not exactly the same as checking if the column is in changed_columns, if the column was not set initially.
column_changed?(:name) # => true
91 92 93 |
# File 'lib/sequel/plugins/dirty.rb', line 91 def column_changed?(column) initial_values.has_key?(column) end |
#column_changes ⇒ Object
A hash with column symbol keys and pairs of initial and current values for all changed columns.
column_changes # => {:name => ['Initial', 'Current']}
77 78 79 80 81 82 83 |
# File 'lib/sequel/plugins/dirty.rb', line 77 def column_changes h = {} initial_values.each do |column, value| h[column] = [value, get_column_value(column)] end h end |
#freeze ⇒ Object
Freeze internal data structures
96 97 98 99 100 101 |
# File 'lib/sequel/plugins/dirty.rb', line 96 def freeze initial_values.freeze missing_initial_values.freeze @previous_changes.freeze if @previous_changes super end |
#initial_value(column) ⇒ Object
The initial value of the given column. If the column value has not changed, this will be the same as the current value of the column.
initial_value(:name) # => 'Initial'
108 109 110 |
# File 'lib/sequel/plugins/dirty.rb', line 108 def initial_value(column) initial_values.fetch(column){get_column_value(column)} end |
#initial_values ⇒ Object
A hash with column symbol keys and initial values.
initial_values # {:name => 'Initial'}
115 116 117 |
# File 'lib/sequel/plugins/dirty.rb', line 115 def initial_values @initial_values ||= {} end |
#reset_column(column) ⇒ Object
Reset the column to its initial value. If the column was not set initial, removes it from the values.
reset_column(:name)
name # => 'Initial'
124 125 126 127 128 129 130 131 |
# File 'lib/sequel/plugins/dirty.rb', line 124 def reset_column(column) if initial_values.has_key?(column) set_column_value(:"#{column}=", initial_values[column]) end if missing_initial_values.include?(column) values.delete(column) end end |
#will_change_column(column) ⇒ Object
Manually specify that a column will change. This should only be used if you plan to modify a column value in place, which is not recommended.
will_change_column(:name)
name.gsub(/i/i, 'o')
column_change(:name) # => ['Initial', 'onotoal']
139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
# File 'lib/sequel/plugins/dirty.rb', line 139 def will_change_column(column) changed_columns << column unless changed_columns.include?(column) check_missing_initial_value(column) value = if initial_values.has_key?(column) initial_values[column] else get_column_value(column) end initial_values[column] = if value && value != true && value.respond_to?(:clone) begin value.clone rescue TypeError value end else value end end |