Sha256: 54644d099a8a17e58823a43d5ccc42c1adb50427d8c1a4c279917d9fe231751e

Contents?: true

Size: 1.25 KB

Versions: 21

Compression:

Stored size: 1.25 KB

Contents

# BaseTransmogrifier holds shared code for the transmogrifier classes
class BaseTransmogrifier
  def self.inject_value(hash, key_grams, value, original_key)
    # if we only have 1 gram, we can set the value
    if key_grams.size == 1
      # If the new value is nil, and the old value was a hash, it's because
      # somebody didn't provide a full default value; ignore it.
      unless value.nil? && hash[key_grams[0]].is_a?(Hash)
        hash[key_grams[0]] = value
      end
      return
    end

    # if there's more than one gram, keep going

    # Initialize a hash if we're going deeper than what's currently available;
    # sometimes we want to override when the old value is nil (i.e. no default)
    # but the new value is a hash.
    hash[key_grams[0]] = {} if hash[key_grams[0]].nil?
    # error out if we're trying to override
    # an existing value that's not a hash
    unless hash[key_grams[0]].is_a?(Hash)
      raise NonHashValueOverride, \
            "Refusing to override non-hash value #{hash[key_grams[0]].inspect} " \
            "with #{value.inspect}: '#{key_grams.join('.')}'" \
            " - Complete key: '#{original_key}'"
    end
    # keep going deeper
    inject_value(hash[key_grams[0]], key_grams.drop(1), value, original_key)
  end
end

Version data entries

21 entries across 21 versions & 1 rubygems

Version Path
configgin-0.20.3 lib/base_transmogrifier.rb
configgin-0.20.2 lib/base_transmogrifier.rb
configgin-0.20.1.1 lib/base_transmogrifier.rb
configgin-0.20.1 lib/base_transmogrifier.rb
configgin-0.20.0 lib/base_transmogrifier.rb
configgin-0.19.6 lib/base_transmogrifier.rb
configgin-0.19.5 lib/base_transmogrifier.rb
configgin-0.19.4 lib/base_transmogrifier.rb
configgin-0.19.3 lib/base_transmogrifier.rb
configgin-0.19.2 lib/base_transmogrifier.rb
configgin-0.19.1 lib/base_transmogrifier.rb
configgin-0.19.0 lib/base_transmogrifier.rb
configgin-0.18.8 lib/base_transmogrifier.rb
configgin-0.18.7 lib/base_transmogrifier.rb
configgin-0.18.6 lib/base_transmogrifier.rb
configgin-0.18.5 lib/base_transmogrifier.rb
configgin-0.18.4 lib/base_transmogrifier.rb
configgin-0.18.3 lib/base_transmogrifier.rb
configgin-0.18.2 lib/base_transmogrifier.rb
configgin-0.18.1 lib/base_transmogrifier.rb