module CarrierWave::Cloudflare::URL
Constants
- ALLOWED_OPTIONS
Public Instance Methods
append_options!(uri, options)
click to toggle source
# File lib/carrierwave/cloudflare/url.rb, line 53 def append_options!(uri, options) if should_modify_path? query = options.map { |k, v| "#{k}=#{v}" }.join(",") segment = "/cdn-cgi/image/#{query}" uri.path = segment + uri.path else uri.query = QueryString.new(uri.query).tap do |params| # the format is "width-500.height.200", only safe symbols are used param_with_options = options.map { |k, v| "#{k}-#{v}" }.join(".") params["cdn-cgi"] = param_with_options end.to_query end end
extract(url)
click to toggle source
# File lib/carrierwave/cloudflare/url.rb, line 16 def extract(url) uri = URI.parse(url) options = {} if should_modify_path? if %r{/cdn-cgi/image/([^/]+)(/.*)} =~ uri.path formatted = $LAST_MATCH_INFO[1] original_path = $LAST_MATCH_INFO[2] options = parse_options(formatted) uri.path = original_path end else query = QueryString.new(uri.query) if query.key?("cdn-cgi") options = parse_options(query["cdn-cgi"], separator: ".", assigner: "-") end end [uri, options] end
parse_options(str, separator: ",", assigner: "=")
click to toggle source
converts strings “w=foo,h=bar” into hashes
# File lib/carrierwave/cloudflare/url.rb, line 84 def parse_options(str, separator: ",", assigner: "=") kv = str.split(separator).map { |s| s.strip.split(assigner) } Hash[kv] end
sanitized_options(options)
click to toggle source
# File lib/carrierwave/cloudflare/url.rb, line 69 def sanitized_options(options) ordered = options.map do |k, v| idx = ALLOWED_OPTIONS.index(k) [idx, [k, v]] end filtered = ordered.select { |i,| i }.sort filtered.map do |_, (k, v)| v = v.join("x") if v.is_a?(Array) [k, v] end end
should_modify_path?()
click to toggle source
# File lib/carrierwave/cloudflare/url.rb, line 12 def should_modify_path? ::CarrierWave::Cloudflare.cloudflare_transform end
transform(url, **options)
click to toggle source
# File lib/carrierwave/cloudflare/url.rb, line 39 def transform(url, **options) uri, existing_opts = extract(url) options = existing_opts.merge(options.transform_keys(&:to_s)) pairs = sanitized_options(options) if pairs.empty? url else append_options!(uri, pairs) uri.to_s end end