24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
# File 'lib/state_manager/adapters/active_record.rb', line 24
def state_manager_added(property, klass, options)
class_eval do
klass.specification.states.each do |state, specification_klass|
scope state, lambda {
conn = ::ActiveRecord::Base.connection
table = conn.quote_table_name table_name
column = conn.quote_column_name klass._state_property
namespaced_col = "#{table}.#{column}"
states = [state].concat specification_klass.specification.descendant_names.map{|s| "#{state}.#{s}"}
query = "#{namespaced_col} in (?)"
where(query, states)
}
end
after_initialize do
self.state_managers ||= {}
end
before_validation do
validate_states!
end
after_commit(:on => :create) { state_managers.values.map(&:after_commit) }
after_commit(:on => :update) { state_managers.values.map(&:after_commit) }
before_save { state_managers.values.map(&:before_save) }
after_save { state_managers.values.map(&:after_save) }
end
end
|