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.64 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.63 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.62 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.61 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.60 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.59 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.58 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.57 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.56 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.55 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.54 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.53 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.52 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.51 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.50 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.49 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.48 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.47 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.46 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb
ree_lib-1.0.45 lib/ree_lib/packages/ree_hash/package/ree_hash/functions/transform_values.rb