module Scrivito class BinaryRouting < Struct.new(:request, :scrivito_engine) def binary_url(binary, redirect_url_or_path) binary_url_from_cache(binary) || binary_redirect_url(binary, redirect_url_or_path) end def transformed_binary_url(binary, redirect_url_or_path, image_options = {}) binary = if image_options.key?(:transform) apply_custom_transformation(binary, image_options[:transform]) else apply_default_transformation(binary) end binary_url(binary, redirect_url_or_path) end def resolved_binary_url(binary) BinaryRewrite.call(request, apply_default_transformation(binary).url) end private def binary_url_from_cache(binary) if url_from_cache = binary.url_from_cache BinaryRewrite.call(request, url_from_cache) end end def binary_redirect_url(binary, url_or_path) encrypted_params = BinaryParamVerifier.generate(binary) scrivito_engine.public_send("binary_#{url_or_path}", encrypted_params: encrypted_params) end def apply_custom_transformation(binary, transformation_definition) if transformation_definition binary.transform(transformation_definition) else binary end end def apply_default_transformation(binary) if Scrivito::Configuration.default_image_transformation binary.transform(Scrivito::Configuration.default_image_transformation) else binary end end end end