Sha256: a0cbe5bc7f9ff79c22e5f0984955a0697a34492e45890e3bcbaee9995806d256

Contents?: true

Size: 1.63 KB

Versions: 1

Compression:

Stored size: 1.63 KB

Contents

require 'rack'

module Voom
  module Presenters
    module WebClient
      class Router

        attr_reader :base_url

        def initialize(base_url: nil)
          @base_url = base_url
        end

        def url(command: nil, render: nil, context:)
          _params_ = context.dup
          return build_render_url(render, _params_) unless command
          _params_[:redirect]=build_render_url(render, _params_) if render
          build_command_url(command, _params_)
        end

        def scrub_params(_params_)
          _params_.delete('captures')
          _params_.delete('presenter')
          _params_.delete('action')
          _params_.delete('errors')
          _params_
        end

        private

        def build_command_url(command, params)
          return '' unless command
          add_query_params(command, params)
        end

        def build_render_url(render_, params)
          return '#' unless render_
          render = render_.to_s
          return render if render.start_with?('http')
          render = render.gsub(':', '/')
          seperator = render.start_with?('/') ? '' : '/'
          url = "#{base_url}#{seperator}#{render}"
          add_query_params(url, params)
        end

        def add_query_params(url, params)
          query_params = build_params(params)
          if (!query_params.nil? && !query_params.empty?)
            query_seperator = url.include?('?') ? '&' : '?'
            url = "#{url}#{query_seperator}#{query_params}"
          end
          url
        end

        def build_params(params)
          Rack::Utils.build_nested_query(scrub_params(params))
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
voom-presenters-0.2.0 lib/voom/presenters/web_client/router.rb