class ComposeURL

Attributes

params[RW]

Public Class Methods

new(base_url, params={}) click to toggle source
# File lib/compose_url.rb, line 8
def initialize(base_url, params={})
  @url = init_url(base_url)
  @params = init_params(base_url).merge(params)
  url
end

Public Instance Methods

add_param(k, v) click to toggle source
# File lib/compose_url.rb, line 14
def add_param(k, v)
  @params[k] = v
end
remove_param(k) click to toggle source
# File lib/compose_url.rb, line 18
def remove_param(k)
  @params.delete(k)
end
to_s() click to toggle source
# File lib/compose_url.rb, line 26
def to_s
  url
end
url() click to toggle source
# File lib/compose_url.rb, line 22
def url
  validate_url(build_url)
end

Private Instance Methods

build_url() click to toggle source
# File lib/compose_url.rb, line 56
def build_url
  @params.length == 0 ? "#{@url}" : "#{@url}?#{params_string}"
end
escape(s) click to toggle source
# File lib/compose_url.rb, line 52
def escape(s)
  CGI.escape(s)
end
init_params(base_url) click to toggle source
# File lib/compose_url.rb, line 36
def init_params(base_url)
  query_string = base_url.gsub(init_url(base_url), '')
  query_string != '' ? CGI.parse(URI.parse(query_string).query) : {}
end
init_url(base_url) click to toggle source
# File lib/compose_url.rb, line 32
def init_url(base_url)
  base_url[/[^?]+/]
end
params_string() click to toggle source
# File lib/compose_url.rb, line 46
def params_string
  uri = Addressable::URI.new
  uri.query_values = @params
  uri.query
end
validate_url(url) click to toggle source
# File lib/compose_url.rb, line 41
def validate_url(url)
  raise ComposeURLError.new('Resulting URL is invalid') unless url =~ /\A#{URI::regexp}\z/
  url
end