Method: Folder#fold!
- Defined in:
- lib/folder.rb
#fold!(separator = DEFAULT_SEPARATOR) ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/folder.rb', line 6 def fold!(separator = DEFAULT_SEPARATOR) klass = self.class folded = klass.new each do |key, value| next unless key.is_a?(String) and key.include?(separator) keys = key.split(separator, -1) last = keys.pop current = keys.reduce(folded) {|memo, item| memo[item].is_a?(klass) ? memo[item] : (memo[item] = klass.new) } current[last] = value unless current[last].is_a?(klass) delete key end merge! folded end |