module Shrine::Plugins::Derivatives::ClassMethods
Public Instance Methods
derivatives(object)
click to toggle source
Converts data into a Hash of derivatives.
Shrine.derivatives('{"thumb":{"id":"foo","storage":"store","metadata":{}}}') #=> { thumb: #<Shrine::UploadedFile id="foo" storage=:store metadata={}> } Shrine.derivatives({ "thumb" => { "id" => "foo", "storage" => "store", "metadata" => {} } }) #=> { thumb: #<Shrine::UploadedFile id="foo" storage=:store metadata={}> } Shrine.derivatives({ thumb: { id: "foo", storage: "store", metadata: {} } }) #=> { thumb: #<Shrine::UploadedFile id="foo" storage=:store metadata={}> }
# File lib/shrine/plugins/derivatives.rb, line 568 def derivatives(object) if object.is_a?(String) derivatives JSON.parse(object) elsif object.is_a?(Hash) || object.is_a?(Array) map_derivative( object, transform_keys: :to_sym, leaf: -> (value) { value.is_a?(Hash) && (value["id"] || value[:id]).is_a?(String) }, ) { |_, value| uploaded_file(value) } else fail ArgumentError, "cannot convert #{object.inspect} to derivatives" end end
derivatives_options()
click to toggle source
Returns derivatives plugin options.
# File lib/shrine/plugins/derivatives.rb, line 613 def derivatives_options opts[:derivatives] end
map_derivative(object, path = [], transform_keys: :to_sym, leaf: nil) { |path, object| ... }
click to toggle source
Iterates over a nested collection, yielding on each part of the path. If the block returns a truthy value, that branch is terminated
# File lib/shrine/plugins/derivatives.rb, line 584 def map_derivative(object, path = [], transform_keys: :to_sym, leaf: nil, &block) return enum_for(__method__, object) unless block_given? if leaf && leaf.call(object) yield path, object elsif object.is_a?(Hash) object.inject({}) do |hash, (key, value)| key = key.send(transform_keys) hash.merge! key => map_derivative( value, [*path, key], transform_keys: transform_keys, leaf: leaf, &block ) end elsif object.is_a?(Array) object.map.with_index do |value, idx| map_derivative( value, [*path, idx], transform_keys: transform_keys, leaf: leaf, &block ) end else yield path, object end end