Class: Yerba::Map
Instance Attribute Summary collapse
-
#key ⇒ Object
readonly
Returns the value of attribute key.
-
#location ⇒ Object
readonly
Returns the value of attribute location.
-
#selector ⇒ Object
readonly
Returns the value of attribute selector.
Instance Method Summary collapse
- #[](key) ⇒ Object
- #[]=(key, value) ⇒ Object
- #delete(key = nil) ⇒ Object
- #dig(*keys) ⇒ Object
- #each ⇒ Object
-
#initialize(document_or_hash = nil, selector = nil, location = nil, key = nil) ⇒ Map
constructor
A new instance of Map.
- #insert(key, value, before: nil, after: nil) ⇒ Object
- #inspect ⇒ Object
- #key?(key) ⇒ Boolean (also: #has_key?, #include?)
- #keys ⇒ Object
- #sort_keys(order) ⇒ Object
- #to_h ⇒ Object (also: #to_hash)
- #to_yaml ⇒ Object
- #value ⇒ Object
Constructor Details
#initialize(document_or_hash = nil, selector = nil, location = nil, key = nil) ⇒ Map
Returns a new instance of Map.
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/yerba/map.rb', line 9 def initialize(document_or_hash = nil, selector = nil, location = nil, key = nil) if document_or_hash.is_a?(Document) @document = document_or_hash @selector = selector @location = location @key = key @data = nil elsif document_or_hash.is_a?(Hash) @document = nil @selector = nil @location = nil @data = document_or_hash else @document = nil @selector = nil @location = nil @data = {} end end |
Instance Attribute Details
#key ⇒ Object (readonly)
Returns the value of attribute key.
7 8 9 |
# File 'lib/yerba/map.rb', line 7 def key @key end |
#location ⇒ Object (readonly)
Returns the value of attribute location.
7 8 9 |
# File 'lib/yerba/map.rb', line 7 def location @location end |
#selector ⇒ Object (readonly)
Returns the value of attribute selector.
7 8 9 |
# File 'lib/yerba/map.rb', line 7 def selector @selector end |
Instance Method Details
#[](key) ⇒ Object
29 30 31 32 33 34 35 36 |
# File 'lib/yerba/map.rb', line 29 def [](key) if @document new_path = @selector.empty? ? key.to_s : "#{@selector}.#{key}" @document[new_path] else @data[key] end end |
#[]=(key, value) ⇒ Object
38 39 40 41 42 43 44 45 |
# File 'lib/yerba/map.rb', line 38 def []=(key, value) if @document new_path = @selector.empty? ? key.to_s : "#{@selector}.#{key}" @document.set(new_path, value) else @data[key] = value end end |
#delete(key = nil) ⇒ Object
94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/yerba/map.rb', line 94 def delete(key = nil) if key && @document new_path = @selector.empty? ? key.to_s : "#{@selector}.#{key}" @document.delete(new_path) elsif @document @document.delete(@selector) else @data.delete(key) end self end |
#dig(*keys) ⇒ Object
85 86 87 88 89 90 91 92 |
# File 'lib/yerba/map.rb', line 85 def dig(*keys) if @document result = keys.reduce(self) { |node, key| node.nil? ? nil : node[key] } result&.value else @data.dig(*keys) end end |
#each ⇒ Object
75 76 77 78 79 80 81 82 83 |
# File 'lib/yerba/map.rb', line 75 def each(&) return enum_for(:each) unless block_given? if @document keys.each { |key| yield key, self[key] } else @data.each(&) end end |
#insert(key, value, before: nil, after: nil) ⇒ Object
47 48 49 50 51 52 53 54 55 56 |
# File 'lib/yerba/map.rb', line 47 def insert(key, value, before: nil, after: nil) if @document new_path = @selector.empty? ? key.to_s : "#{@selector}.#{key}" @document.insert(new_path, value.to_s, before: before, after: after) else @data[key] = value end self end |
#inspect ⇒ Object
139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 |
# File 'lib/yerba/map.rb', line 139 def inspect if @document results = @document.find(@selector) if results.is_a?(Array) && !results.empty? && results.first.is_a?(Hash) map_keys = results.first.keys.first(5) preview = map_keys.map { |key| "#{key}: #{results.first[key].inspect}" }.join(", ") "#<Yerba::Map selector=#{@selector.inspect} {#{preview}}>" else "#<Yerba::Map selector=#{@selector.inspect}>" end else "#<Yerba::Map {#{@data.map { |key, value| "#{key}: #{value.inspect}" }.join(", ")}}>" end end |
#key?(key) ⇒ Boolean Also known as: has_key?, include?
107 108 109 110 111 112 113 114 |
# File 'lib/yerba/map.rb', line 107 def key?(key) if @document new_path = @selector.empty? ? key.to_s : "#{@selector}.#{key}" @document.exists?(new_path) else @data.key?(key) end end |
#keys ⇒ Object
64 65 66 67 68 69 70 71 72 73 |
# File 'lib/yerba/map.rb', line 64 def keys if @document results = @document.find(@selector) return [] unless results.is_a?(Array) && results.first.is_a?(Hash) results.first.keys else @data.keys end end |
#sort_keys(order) ⇒ Object
58 59 60 61 62 |
# File 'lib/yerba/map.rb', line 58 def sort_keys(order) @document&.sort_keys(@selector, order) self end |
#to_h ⇒ Object Also known as: to_hash
122 123 124 125 126 127 128 129 |
# File 'lib/yerba/map.rb', line 122 def to_h if @document results = @document.find(@selector) results&.first || {} else @data end end |
#to_yaml ⇒ Object
132 133 134 135 136 137 |
# File 'lib/yerba/map.rb', line 132 def to_yaml to_hash.map do |key, val| formatted = format_value(val) "#{key}: #{formatted}" end.join("\n") end |
#value ⇒ Object
118 119 120 |
# File 'lib/yerba/map.rb', line 118 def value @data || nil end |