SRP: This extension will fail an error whenever a key is accessed that does not exist in the hash.
EXAMPLE: class StrictKeyAccessHash < Hash include Hashie::Extensions::StrictKeyAccess end >> hash = StrictKeyAccessHash[foo: "bar"] => {:foo=>"bar"} >> hash[:foo] => "bar" >> hash[:cow] KeyError: key not found: :cow
NOTE: For googlers coming from Python to Ruby, this extension makes a Hash behave more like a “Dictionary”.
NOTE: Defaults don't make any sense with a StrictKeyAccess. NOTE: When key lookup fails a KeyError is raised.
Normal:
>> a = Hash.new(123) => {} >> a["noes"] => 123
With StrictKeyAccess:
>> a = StrictKeyAccessHash.new(123) => {} >> a["noes"] KeyError: key not found: "noes"
# File lib/hashie/extensions/strict_key_access.rb, line 44 def [](key) fetch(key) end
# File lib/hashie/extensions/strict_key_access.rb, line 48 def default(_ = nil) raise DefaultError end
# File lib/hashie/extensions/strict_key_access.rb, line 52 def default=(_) raise DefaultError end
# File lib/hashie/extensions/strict_key_access.rb, line 56 def default_proc raise DefaultError end
# File lib/hashie/extensions/strict_key_access.rb, line 60 def default_proc=(_) raise DefaultError end
# File lib/hashie/extensions/strict_key_access.rb, line 64 def key(value) super.tap do |result| if result.nil? && (!key?(result) || self[result] != value) raise KeyError, "key not found with value of #{value.inspect}" end end end