Sha256: f02bf71452b53c9f2de6073a1500f5f3f216a5229ea7bb2abb9f962aa890ef65

Contents?: true

Size: 1.66 KB

Versions: 6

Compression:

Stored size: 1.66 KB

Contents

require 'rack'

module Voom
  module Presenters
      class Router

        attr_reader :base_url

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

        def url(command: nil, render: nil, host: false, context:)
          _params_ = context.dup
          return build_render_url(render, _params_, host: host) 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, host:)
          return '#' unless render_
          render = render_.to_s
          return render if render.start_with?('http')
          render = render.gsub(':', '/')
          seperator = render.start_with?('/') ? '' : '/'
          url = "#{host ? base_url : nil}#{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

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
voom-presenters-2.1.2 lib/voom/presenters/router.rb
voom-presenters-2.1.0 lib/voom/presenters/router.rb
voom-presenters-2.0.3 lib/voom/presenters/router.rb
voom-presenters-2.0.2 lib/voom/presenters/router.rb
voom-presenters-2.0.1 lib/voom/presenters/router.rb
voom-presenters-2.0.0 lib/voom/presenters/router.rb