Class: Hash
- Includes:
- HashRecursiveBlank, HashRecursiveMerge
- Defined in:
- lib/lib/utils.rb,
lib/lib/utils.rb
Instance Method Summary collapse
- #diff(other) ⇒ Object
-
#nested_set(keys, value) ⇒ Object
ensures nested hash from keys, and sets final key to value keys: Array of Symbol|String value: any.
Methods included from HashRecursiveBlank
Methods included from HashRecursiveMerge
Instance Method Details
#diff(other) ⇒ Object
229 230 231 232 233 234 235 236 237 238 239 240 |
# File 'lib/lib/utils.rb', line 229 def diff(other) (self.keys + other.keys).uniq.inject({}) do |memo, key| unless self[key] == other[key] if self[key].kind_of?(Hash) && other[key].kind_of?(Hash) memo[key] = self[key].diff(other[key]) else memo[key] = [self[key], other[key]] end end memo end end |
#nested_set(keys, value) ⇒ Object
ensures nested hash from keys, and sets final key to value keys: Array of Symbol|String value: any
249 250 251 252 253 254 255 256 257 258 259 260 261 |
# File 'lib/lib/utils.rb', line 249 def nested_set(keys, value) raise "DEBUG: nested_set keys must be an Array" unless keys.is_a?(Array) final_key = keys.pop return unless valid_key?(final_key) position = self for key in keys return unless valid_key?(key) position[key] = {} unless position[key].is_a?(Hash) position = position[key] end position[final_key] = value end |