module Hashie::Extensions::MethodQuery
MethodQuery
gives you the ability to check for the truthiness of a key via method calls. Note that it will return false if the key is set to a non-truthful value, not if the key isn’t set at all. Use key? for checking if a key has been set.
MethodQuery
will check against both string and symbol names of the method for existing keys. It also patches respond_to to appropriately detect the query methods.
@example
class MyHash < Hash include Hashie::Extensions::MethodQuery end h = MyHash.new h['abc'] = 123 h.abc? # => true h['def'] = nil h.def? # => false h.hji? # => NoMethodError
Public Instance Methods
Source
# File lib/hashie/extensions/method_access.rb, line 117 def method_missing(name, *args) return super unless args.empty? if query_method?(name) key = key_from_query_method(name) if indifferent_key?(key) !!(self[key] || self[key.to_sym]) else super end else super end end
Calls superclass method
Source
# File lib/hashie/extensions/method_access.rb, line 109 def respond_to_missing?(name, include_private = false) if query_method?(name) && indifferent_key?(key_from_query_method(name)) true else super end end
Calls superclass method
Private Instance Methods
Source
# File lib/hashie/extensions/method_access.rb, line 134 def indifferent_key?(name) name = name.to_s key?(name) || key?(name.to_sym) end
Source
# File lib/hashie/extensions/method_access.rb, line 139 def key_from_query_method(query_method) query_method.to_s[0..-2] end
Source
# File lib/hashie/extensions/method_access.rb, line 143 def query_method?(name) name.to_s.end_with?('?') end