Sha256: b9a62f03ab901cf73e4b7ae954339c6d7d8175e14c56d09b025e4204b4256491

Contents?: true

Size: 857 Bytes

Versions: 8

Compression:

Stored size: 857 Bytes

Contents

require "cgi"

class Simple::Httpd::BaseController
  helpers do
    def base_url
      @base_url ||= request.base_url
    end

    def full_url(path, opts = {})
      build_url(base_url, path, opts)
    end

    def url(path, opts = {})
      build_url(path, opts)
    end

    def build_url(base, *args)
      option_args, string_args = args.partition { |arg| arg.is_a?(Hash) }
      options = option_args.inject({}) { |hsh, option| hsh.update option }

      url = File.join([base] + string_args)

      query = build_url_query(options)
      url += url.index("?") ? "&#{query}" : "?#{query}" if query
      url
    end

    private

    def build_url_query(params)
      params = params.reject { |_k, v| v.nil? || v.to_s.empty? }
      return nil if params.empty?

      params.map { |k, value| "#{k}=#{escape(value.to_s)}" }.join("&")
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
simple-httpd-0.4.3 lib/simple/httpd/base_controller/build_url.rb
simple-httpd-0.4.2 lib/simple/httpd/base_controller/build_url.rb
simple-httpd-0.4.1 lib/simple/httpd/base_controller/build_url.rb
simple-httpd-0.4.0 lib/simple/httpd/base_controller/build_url.rb
simple-httpd-0.3.5 lib/simple/httpd/base_controller/build_url.rb
simple-httpd-0.3.4 lib/simple/httpd/base_controller/build_url.rb
simple-httpd-0.3.3 lib/simple/httpd/base_controller/build_url.rb
simple-httpd-0.3.1 lib/simple/httpd/base_controller/build_url.rb