module Shrine::Plugins::Versions::Utils
Public Instance Methods
deep_map(object, path = [], transform_keys:) { |path, object| ... }
click to toggle source
# File lib/shrine/plugins/versions.rb, line 143 def deep_map(object, path = [], transform_keys:, &block) if object.is_a?(Hash) result = yield path, object return result if result object.inject({}) do |hash, (key, value)| key = key.send(transform_keys) result = yield [*path, key], value hash.merge! key => (result || deep_map(value, [*path, key], transform_keys: transform_keys, &block)) end elsif object.is_a?(Array) result = yield path, object return result if result object.map.with_index do |value, idx| result = yield [*path, idx], value result || deep_map(value, [*path, idx], transform_keys: transform_keys, &block) end else result = yield path, object result or fail Shrine::Error, "leaf reached" end end
each_file(object) { |path, file| ... }
click to toggle source
# File lib/shrine/plugins/versions.rb, line 122 def each_file(object) return enum_for(__method__, object) unless block_given? map_file(object) do |path, file| yield path, file file end end
map_file(object, transform_keys: :to_sym) { |path, value| ... }
click to toggle source
# File lib/shrine/plugins/versions.rb, line 131 def map_file(object, transform_keys: :to_sym) if object.is_a?(Hash) || object.is_a?(Array) deep_map(object, transform_keys: transform_keys) do |path, value| yield path, value unless value.is_a?(Hash) || value.is_a?(Array) end elsif object yield nil, object else object end end