74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
# File 'lib/statelogic/activerecord.rb', line 74
def state(name, options = {}, &block)
name = name.to_s
uname = name.underscore
attr = @config[:attribute]
attr_was = :"#{attr}_was"
find_all_by_attr = "find_all_by_#{attr}"
Util.defmethod(@class, "#{uname}?") { send(attr) == name }
Util.defmethod(@class, "was_#{uname}?") { send(attr_was) == name }
[uname, "#{attr}_is_#{uname}".to_sym].each do |named_scope_name|
unless @class.respond_to?(named_scope_name)
@class.send(:named_scope, named_scope_name, :conditions => {attr.to_sym => name })
Util.debug { "Statelogic has defined named scope #{named_scope_name} on #{@class.name}." }
else
Util.warn { "Statelogic won't override class method #{named_scope_name} already defined on #{@class.name}." }
end
end
Util.defmethod(@class, "find_all_#{uname}", true) {|*args| send(find_all_by_attr, name, *args) }
StateScopeHelper.new(@class, name, @config).instance_eval(&block) if block_given?
@config[:states] << name
@config[:initial] << name if options[:initial]
end
|