Sha256: 4583285cd9ec123d6e096c159fd7ef3b1f2a1a738a8c7d2937223348a9fe7556

Contents?: true

Size: 1.12 KB

Versions: 124

Compression:

Stored size: 1.12 KB

Contents

# frozen_string_literal: true

class ReeHash::TransformValues
  include Ree::FnDSL

  fn :transform_values

  doc("Transforms values with passed parameter (block). By default transforms deeply")
  contract(Hash, Kwargs[deep: Bool], Block => Hash)
  def call(hash, deep: true, &proc)
    recursively_transform_values(nil, hash, deep, &proc)
  end

  private

  def recursively_transform_values(parent_key, object, deep, &block)
    case object
    when Hash
      result = {}

      result.default = object.default
      result.default_proc = object.default_proc if object.default_proc

      object.each do |key, value|
        result[key] = if deep
          yield(
            key, recursively_transform_values(key, value, deep, &block)
          )
        else
          yield(key, value)
        end
      end

      result
    when Array
      if deep
        object.map do
          yield(
            parent_key, recursively_transform_values(
              parent_key, _1, deep, &block
            )
          )
        end
      else
        yield(parent_key, object)
      end
    else
      yield(parent_key, object)
    end
  end
end

Version data entries

124 entries across 124 versions & 1 rubygems

Version Path
ree_lib-1.0.124 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.123 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.122 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.121 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.120 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.119 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.118 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.117 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.116 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.115 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.114 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.113 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.112 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.111 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.110 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.109 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.108 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.107 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.106 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.105 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb