Class: Pangea::Testing::IndifferentHash
- Defined in:
- lib/pangea/testing/indifferent_hash.rb
Overview
Hash that transparently handles both string and symbol keys. TerraformSynthesizer#synthesis returns symbol keys, but many tests use string keys. This class makes both work seamlessly.
Class Method Summary collapse
Instance Method Summary collapse
- #[](key) ⇒ Object
- #dig(key, *rest) ⇒ Object
- #fetch(key, *args, &block) ⇒ Object
- #has_key?(key) ⇒ Boolean (also: #key?, #include?)
Class Method Details
.deep_convert(obj) ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/pangea/testing/indifferent_hash.rb', line 55 def self.deep_convert(obj) case obj when Hash result = IndifferentHash.new obj.each { |k, v| result[k.to_s] = deep_convert(v) } result when Array obj.map { |v| deep_convert(v) } else obj end end |
Instance Method Details
#[](key) ⇒ Object
23 24 25 26 27 28 |
# File 'lib/pangea/testing/indifferent_hash.rb', line 23 def [](key) result = super(key.to_s) return result unless result.nil? key.respond_to?(:to_sym) ? super(key.to_sym) : nil end |
#dig(key, *rest) ⇒ Object
30 31 32 33 34 35 |
# File 'lib/pangea/testing/indifferent_hash.rb', line 30 def dig(key, *rest) val = self[key] return val if rest.empty? || val.nil? val.respond_to?(:dig) ? val.dig(*rest) : nil end |
#fetch(key, *args, &block) ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/pangea/testing/indifferent_hash.rb', line 43 def fetch(key, *args, &block) if has_key?(key) self[key] elsif args.any? args.first elsif block block.call(key) else raise KeyError, "key not found: #{key.inspect}" end end |
#has_key?(key) ⇒ Boolean Also known as: key?, include?
37 38 39 |
# File 'lib/pangea/testing/indifferent_hash.rb', line 37 def has_key?(key) super(key.to_s) || (key.respond_to?(:to_sym) && super(key.to_sym)) end |