class URLSignature::URL
Constants
- SEQUENCIAL_PARAMS
Attributes
fragment[R]
host[R]
params[R]
password[R]
path[R]
scheme[R]
uri[R]
user[R]
Public Class Methods
new(url)
click to toggle source
# File lib/url_signature/url.rb, line 11 def initialize(url) @uri = parse_url(url) @scheme = uri.scheme @host = uri.host @user = uri.user @password = uri.password @path = uri.path.empty? ? "/" : uri.path @params = parse_query(uri.query) @fragment = uri.fragment end
Public Instance Methods
add_query(key, value, replace: true)
click to toggle source
# File lib/url_signature/url.rb, line 29 def add_query(key, value, replace: true) params[key] ||= [] params[key] = [] if replace params[key] += [value].flatten.map(&:to_s) end
clear_query!()
click to toggle source
# File lib/url_signature/url.rb, line 55 def clear_query! @params = {} end
port()
click to toggle source
# File lib/url_signature/url.rb, line 22 def port return if uri.port == 80 && @scheme == "http" return if uri.port == 443 && @scheme == "https" uri.port end
query()
click to toggle source
# File lib/url_signature/url.rb, line 39 def query return if params.empty? query = params.each_with_object([]) do |(param, value), buffer| param = param.to_s if param.include?("[") value.each {|v| buffer << "#{encode(param)}=#{encode(v)}" } else buffer << "#{encode(param)}=#{encode(value.last)}" end end query.sort.join("&") end
remove_query(key)
click to toggle source
# File lib/url_signature/url.rb, line 35 def remove_query(key) params.delete(key) || [] end
to_s()
click to toggle source
# File lib/url_signature/url.rb, line 59 def to_s [ "#{scheme}://#{host}", port ? ":#{port}" : nil, path, query ? "?#{query}" : nil, fragment ? "##{fragment}" : nil ].compact.join end
Private Instance Methods
encode(value)
click to toggle source
# File lib/url_signature/url.rb, line 69 def encode(value) CGI.escape(value).gsub("+", "%20") end
parse_query(query)
click to toggle source
# File lib/url_signature/url.rb, line 73 def parse_query(query) Hash[CGI.parse(query.to_s).to_a] end
parse_url(url)
click to toggle source
# File lib/url_signature/url.rb, line 77 def parse_url(url) uri = URI(url) unless %w[URI::HTTPS URI::HTTP].include?(uri.class.name) raise_invalid_url_error(url) end uri rescue ::URI::InvalidURIError raise_invalid_url_error(url) end
raise_invalid_url_error(url)
click to toggle source
# File lib/url_signature/url.rb, line 89 def raise_invalid_url_error(url) raise InvalidURL, "#{url} must be a fully qualified URL (http/https)" end