Class: NestedHash
- Inherits:
-
Hash
- Object
- Hash
- NestedHash
- Defined in:
- lib/nested_hash.rb,
lib/nested_hash/version.rb
Constant Summary collapse
- VERSION =
"0.2.4"
Instance Method Summary collapse
- #compact_arrays!(element = self) ⇒ Object
- #delete(key) ⇒ Object
- #get(key) ⇒ Object
-
#initialize(hash = {}) ⇒ NestedHash
constructor
A new instance of NestedHash.
- #look_for(key, value, op = :set) ⇒ Object
- #set(key, value) ⇒ Object
- #split_key(key) ⇒ Object
Constructor Details
#initialize(hash = {}) ⇒ NestedHash
Returns a new instance of NestedHash.
5 6 7 8 9 10 |
# File 'lib/nested_hash.rb', line 5 def initialize(hash = {}) hash.each do |key,value| set(key,value) end post_process end |
Instance Method Details
#compact_arrays!(element = self) ⇒ Object
22 23 24 25 26 27 |
# File 'lib/nested_hash.rb', line 22 def compact_arrays!(element = self) element.each do |item| item.compact! if item.is_a?(Array) compact_arrays!(item) if item.is_a?(Array) || item.is_a?(Hash) end end |
#delete(key) ⇒ Object
29 30 31 32 33 34 35 |
# File 'lib/nested_hash.rb', line 29 def delete(key) if split_key(key).size > 1 look_for(key,nil, :delete) else super(key) end end |
#get(key) ⇒ Object
65 66 67 |
# File 'lib/nested_hash.rb', line 65 def get(key) look_for(key,nil, :get) end |
#look_for(key, value, op = :set) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/nested_hash.rb', line 41 def look_for(key,value, op = :set) keys = split_key(key).map{|k| sanitize_key(k)} value = sanitize_value(value) previous = keys.shift top = (keys.inject(self) do |memo,key| memo[previous] ||= ( is_for_array?(key) ? [] : {} ) memo = memo[previous] previous = key memo end) case op when :set top[previous] = value when :get top[previous] when :delete top.delete(previous) end rescue => e handle_exception(e, key, value) end |
#set(key, value) ⇒ Object
12 13 14 15 16 17 18 19 20 |
# File 'lib/nested_hash.rb', line 12 def set(key,value) key = sanitize_long_key(key) if is_valid_key?(key) look_for(key,value) elsif copy_invalid_keys? copy(key,value) end end |
#split_key(key) ⇒ Object
37 38 39 |
# File 'lib/nested_hash.rb', line 37 def split_key(key) key.split(".") end |