17
18
19
20
21
22
23
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
# File 'lib/status-manager.rb', line 17
def attr_as_status (status_attribute, status_sets={})
status_store = StatusStore.new(status_attribute, status_sets)
status_store_list.add(status_store)
scope "#{status_store.attribute_name}", lambda{ | status |
if status_store.status?(status)
where("#{self.table_name}.#{status_store.attribute_name.to_s}" => status_store_list.get(status_store.attribute_name).value(status))
elsif status_store.group_status?(status)
where("#{self.table_name}.#{status_store.attribute_name} in (?)", status_store.get_group_status_sets(status).values)
end
}
status_store.status_sets.each do |key, value|
scope "#{status_store.attribute_name}_#{key}", where("#{self.table_name}.#{status_store.attribute_name}" => value)
define_method "#{status_store.attribute_name}_#{key}?" do
self.send("#{status_store.attribute_name}") == value
end
define_method "#{status_store.attribute_name}_was_#{key}?" do
self.send("#{status_store.attribute_name}_was") == value
end
define_method "update_#{status_store.attribute_name}_to_#{key}" do
self.update_attributes("#{status_store.attribute_name}" => "#{value}")
end
define_method "#{status_store.attribute_name}_to_#{key}" do
self.send("#{status_store.attribute_name}=", value)
end
end
define_method "#{status_store.attribute_name}?" do |status|
self.send("#{status_store.attribute_name}_#{status}?")
end
define_method "#{status_store.attribute_name}_was?" do |status|
self.send("#{status_store.attribute_name}_was_#{status}?")
end
define_method "#{status_store.attribute_name}_to" do |status|
status_value = self.class.status_store_list.get(status_store.attribute_name).value(status)
self.send("#{status_store.attribute_name}=", status_value)
end
define_method "update_#{status_store.attribute_name}_to" do |status|
self.update_attributes(status_attribute.to_sym => self.class.status_store_list.get(status_store.attribute_name).value(status))
end
define_singleton_method "#{status_store.attribute_name.to_s.pluralize}" do
self.class.status_store_list.get(status_attribute).status_sets
end
end
|