class ParsableHash::HashStrategy

Attributes

hash[R]
origin_hash[RW]

Public Class Methods

new(strategy, origin_hash = nil) click to toggle source
# File lib/parsable_hash/hash_strategy.rb, line 8
def initialize(strategy, origin_hash = nil)
  @hash = prepare(strategy)
  self.origin_hash = origin_hash

  clean_for_hash!(origin_hash) unless origin_hash.nil?
end

Public Instance Methods

clean_for_hash!(value_hash) click to toggle source
# File lib/parsable_hash/hash_strategy.rb, line 19
def clean_for_hash!(value_hash)
  @hash = clean_pairs(@hash, value_hash)
end
each() { |strategy| ... } click to toggle source
# File lib/parsable_hash/hash_strategy.rb, line 15
def each(&block)
  hash.each { |strategy| yield strategy }
end

Private Instance Methods

clean_pairs(strategy_hash, value_hash) click to toggle source
# File lib/parsable_hash/hash_strategy.rb, line 37
def clean_pairs(strategy_hash, value_hash)
  strategy_hash.each_pair do |key, val|
    if value_hash[key].is_a?(Hash)
      if val.is_a?(Hash)
        clean_pairs(strategy_hash[key], value_hash[key])
      else
        strategy_hash.delete(key)
      end
    else
      strategy_hash.delete(key) unless value_hash.has_key?(key)
    end
  end
end
prepare(hash) click to toggle source
# File lib/parsable_hash/hash_strategy.rb, line 25
def prepare(hash)
  hash.inject({}) do |h, (k, v)|
    h[k] = if v.is_a? Hash
                prepare(v)
              else
                Strategy::ConverterLoader.from_value(v)
              end

    h
  end
end