Sha256: 86e8a9f20f07b1c1725448e5870ef1be01b49384679f38c43dc61797873eacde

Contents?: true

Size: 570 Bytes

Versions: 12

Compression:

Stored size: 570 Bytes

Contents

# -*- encoding : utf-8 -*-

module Phrase::HashFlattener
  
  FLATTEN_SEPARATOR = "."
  SEPARATOR_ESCAPE_CHAR = "\001"

  def self.escape_default_separator(key)
    key.to_s.tr(FLATTEN_SEPARATOR, SEPARATOR_ESCAPE_CHAR)
  end

  def self.flatten(hash, escape, previous_key=nil, &block)
    hash.each_pair do |key, value|
      key = escape_default_separator(key) if escape
      current_key = [previous_key, key].compact.join(FLATTEN_SEPARATOR).to_sym
      yield current_key, value
      flatten(value, escape, current_key, &block) if value.is_a?(Hash)
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
phrase-0.4.1 lib/phrase/hash_flattener.rb
phrase-0.4.0 lib/phrase/hash_flattener.rb
phrase-0.3.7 lib/phrase/hash_flattener.rb
phrase-0.3.6 lib/phrase/hash_flattener.rb
phrase-0.3.5 lib/phrase/hash_flattener.rb
phrase-0.3.4 lib/phrase/hash_flattener.rb
phrase-0.3.3 lib/phrase/hash_flattener.rb
phrase-0.3.2 lib/phrase/hash_flattener.rb
phrase-0.3.1 lib/phrase/hash_flattener.rb
phrase-0.3.0 lib/phrase/hash_flattener.rb
phrase-0.2.5 lib/phrase/hash_flattener.rb
phrase-0.2.4 lib/phrase/hash_flattener.rb