Class: Hash
- Inherits:
-
Object
- Object
- Hash
- Defined in:
- lib/ext.rb
Instance Method Summary collapse
- #deep_merge(*keys, val) ⇒ Object
- #extract!(*keys) ⇒ Object
- #insert_after(key, obj) ⇒ Object
- #slice(*keys) ⇒ Object
- #slice!(*keys) ⇒ Object
Instance Method Details
#deep_merge(*keys, val) ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/ext.rb', line 49 def deep_merge(*keys, val) merge_target = keys.inject(self) { |h, k| h[k.numstr_to_i] } if keys.one? self[keys.last] = merge_target.merge(val) else if merge_target.kind_of?(Array) merge_to_array(*keys, merge_target, val) else merge_to_hash(*keys, merge_target, val) end end self end |
#extract!(*keys) ⇒ Object
36 37 38 |
# File 'lib/ext.rb', line 36 def extract!(*keys) keys.each_with_object(self.class.new) { |key, result| result[key] = delete(key) if has_key?(key) } end |
#insert_after(key, obj) ⇒ Object
40 41 42 43 44 45 46 47 |
# File 'lib/ext.rb', line 40 def insert_after(key, obj) splitter = self.keys.index(key) before_keys = self.keys[0..splitter] before = self.extract!(*before_keys) after = self.slice!(*before_keys) merged = before.merge(obj).merge(after) merged end |
#slice(*keys) ⇒ Object
21 22 23 24 |
# File 'lib/ext.rb', line 21 def slice(*keys) keys.map! { |key| convert_key(key) } if respond_to?(:convert_key, true) keys.each_with_object(self.class.new) { |k, hash| hash[k] = self[k] if has_key?(k) } end |
#slice!(*keys) ⇒ Object
26 27 28 29 30 31 32 33 34 |
# File 'lib/ext.rb', line 26 def slice!(*keys) keys.map! { |key| convert_key(key) } if respond_to?(:convert_key, true) omit = slice(*self.keys - keys) hash = slice(*keys) hash.default = default hash.default_proc = default_proc if default_proc replace(hash) omit end |