Module: Folder

Defined in:
lib/folder.rb,
lib/folder/version.rb

Constant Summary collapse

DEFAULT_SEPARATOR =
'.'.freeze
VERSION =
"0.0.2"

Instance Method Summary collapse

Instance Method Details

#fold(separator = DEFAULT_SEPARATOR) ⇒ Object



28
29
30
# File 'lib/folder.rb', line 28

def fold(separator = DEFAULT_SEPARATOR)
  clone.fold! separator
end

#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