lib/enumish.rb in enumish-0.9.0 vs lib/enumish.rb in enumish-0.9.1
- old
+ new
@@ -6,26 +6,41 @@
module Enumish
extend ActiveSupport::Concern
module ClassMethods
def method_missing(method_id, *args, &block)
- if !method_id.to_s.match(/\?$/)
+ if !method_id.to_s.match(/\?$/) && enum_ids.include?(method_id.to_s)
obj = self.where(enum_id => method_id.to_s).first
return obj if obj.present?
end
super method_id, *args, &block
end
def enum_id
:short
end
+
+ def refresh_enum_ids!
+ Mutex.new.synchronize do
+ @enum_ids = self.pluck(enum_id)
+ end
+ end
+
+ def enum_ids
+ refresh_enum_ids! if @enum_ids.blank?
+ @enum_ids
+ end
end
# Allow calls such as object.friendly? or model.attitude.friendly?
def method_missing(method_id, *args, &block)
- if method_id.to_s.match(/\?$/) && args.empty? && block.nil?
- self.send(self.class.enum_id.to_s) == method_id.to_s.sub(/\?$/, "")
+ bare_method = if method_id.to_s.match(/\?$/) && args.empty? && block.nil?
+ method_id.to_s.sub(/\?$/, "")
+ end
+
+ if bare_method && self.class.enum_ids.include?(bare_method)
+ self.send(self.class.enum_id.to_s) == bare_method
else
super
end
end