Sha256: c3849077fb84a70d97c96a54f88ddf82ba5e577cfab859976d24280e2ec39f99

Contents?: true

Size: 1007 Bytes

Versions: 1

Compression:

Stored size: 1007 Bytes

Contents

class HashIsh
  class AddDefaultValues
    def add(kwargs, defaults)
      hash = kwargs.dup

      hash.tap do |hash|
        add_defaults(hash, defaults)
      end
    end

    def add_defaults(hash, defaults)
      defaults.each do |key, value|
        if is_a_hash?(value)
          arg_hash = hash[key] || {}
          hash[key] = AddDefaultValues.new.add(arg_hash, value)
        else
          hash[key] ||= value
        end
      end
    end

    def truthy?(hash, key)
      !!hash[key]
    end

    def is_a_hash?(object)
      object.is_a? Hash
    end
  end
end

# puts AddDefaultValues.new.add({}, { a: 1 }).inspect
# puts AddDefaultValues.new.add({a: 2}, { a: 1 }).inspect
# puts AddDefaultValues.new.add({a: 2}, { a: 1, b: 1 }).inspect
# puts AddDefaultValues.new.add({ a: { b: nil }}, { a: { b: 1 } }).inspect
# puts AddDefaultValues.new.add({ a: { b: 2 }}, { a: { b: 1 } }).inspect
# puts AddDefaultValues.new.add({ a: { b: false }, c: { d: true }}, { a: { b: 1 }, c: { d: 123} }).inspect

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
hash_ish-0.3.0 lib/hash_ish/add_default_values.rb