def has_state(*names)
opts = names.extract_options!
names.each do |name|
constant = opts[:with] || const_get(name.to_s.pluralize.upcase)
constant.each do |state|
scope "#{name}_#{state.downcase}", -> {
where(arel_table[name].eq state)
}
scope "#{name}_not_#{state.downcase}", -> {
where(arel_table[name].not_eq state)
}
self.class_eval %Q{
def #{name}_#{state.downcase}?
#{name} == '#{state}'
end
def #{name}_not_#{state.downcase}?
#{name} != '#{state}'
end
}
end
scope "#{name}", ->(state) {
where(arel_table[name].eq state)
}
scope "#{name}_not", ->(state) {
where(arel_table[name].not_eq state)
}
end
end