Module: RackResize::InputParsers::QueryString

Extended by:
QueryString
Included in:
QueryString
Defined in:
lib/rack_resize/input_parsers/query_string.rb

Constant Summary collapse

CANONICAL_PARAMS =

Supports Fastly and bunny.net style query params: /assets/photo.jpg?width=200&height=100&quality=85&fit=cover /assets/photo.jpg?w=200&h=100&dpr=2&format=webp /assets/photo.jpg?w=200&f=webp&q=80&fit=contain

Shortcuts: f=format, q=quality

%w[width height quality dpr format fit bg-color background].freeze
PARAM_ALIASES =
{ 'f' => :format, 'q' => :quality, 'h' => :height, 'w' => :width, 'bg' => :'bg-color' }.freeze
RESIZE_PARAMS =
(CANONICAL_PARAMS + PARAM_ALIASES.keys).freeze

Instance Method Summary collapse

Instance Method Details

#parse_input(fullpath, query_string) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/rack_resize/input_parsers/query_string.rb', line 15

def parse_input(fullpath, query_string)
  params = Rack::Utils.parse_query(query_string.to_s)

  unless params.keys.any? { |k| RESIZE_PARAMS.include?(k) }
    return { route_matched: false, req_params: nil, asset_path: nil }
  end

  # Aliases are applied first; canonical names overwrite them if both are present.
  aliased   = params.slice(*PARAM_ALIASES.keys).transform_keys { |k| PARAM_ALIASES[k] }
  canonical = params.slice(*CANONICAL_PARAMS).transform_keys(&:to_sym)
  req_params = aliased.merge(canonical)
  asset_path = fullpath.sub(/-[\da-f]{8}(?=\.\w{2,}$)/, '')

  { route_matched: true, req_params:, asset_path: }
end