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.23 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.22 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.21 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.20 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.19 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.18 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.17 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.16 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.15 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.14 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.13 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.12 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.11 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.10 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.9 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.8 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.7 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.6 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.5 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.4 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb