module AppleCore::ActionView::Helpers::WebClientUrl

Public Instance Methods

web_client_url(**options) click to toggle source

rubocop:disable Metrics/AbcSize, Metrics/MethodLength

# File lib/apple_core/action_view/helpers/web_client_url.rb, line 13
def web_client_url(**options)
  route_name = options.delete(:name)

  if defined?(::Chamber)
    default_options = Chamber.env.web_client.slice('host', 'port', 'protocol')
    original_path   = Chamber.env.web_client.urls[route_name]
  else
    default_options = {}
    original_path   = options.delete(:path)
  end

  path          = options.dup.inject(original_path) do |memo, (key, value)|
    key_pattern = %r{/:#{key}(?=(/|\z))}

    if memo.match?(key_pattern)
      options.delete(key)
      memo.gsub(key_pattern, "/#{value}")
    else
      memo
    end
  end

  options   = default_options.merge(options)
  anchor    = options.delete('anchor')
  arguments = [
                options.delete('protocol'),
                options.delete('authentication'),
                options.delete('host'),
                options.delete('port') || 443,
                nil,
                path,
                nil,
                options.to_query,
                anchor,
              ]

  URI::HTTPS.new(*arguments).to_s
end