Module: Shrine::Plugins::Versions::Utils
- Defined in:
- lib/shrine/plugins/versions.rb
Class Method Summary collapse
- .deep_map(object, path = [], transform_keys:, &block) ⇒ Object
- .each_file(object) ⇒ Object
- .map_file(object, transform_keys: :to_sym) ⇒ Object
Class Method Details
.deep_map(object, path = [], transform_keys:, &block) ⇒ Object
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 |
# 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) ⇒ Object
122 123 124 125 126 127 128 129 |
# 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) ⇒ Object
131 132 133 134 135 136 137 138 139 140 141 |
# 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 |