class Koine::Url

Url builder

Constants

ArgumentError

Exception for when the argument is invalid

Public Class Methods

new(url) click to toggle source
# File lib/koine/url.rb, line 11
def initialize(url)
  @url = validate(url).to_s.freeze
  freeze
end

Public Instance Methods

==(other) click to toggle source
# File lib/koine/url.rb, line 56
def ==(other)
  other.class == self.class && other.to_s == to_s
end
query_params() click to toggle source
# File lib/koine/url.rb, line 34
def query_params
  parsed.query_values || {}
end
to_s(unescape: nil) click to toggle source
# File lib/koine/url.rb, line 42
def to_s(unescape: nil)
  unless unescape
    return @url
  end

  url = @url.to_s.dup

  unescape.to_s.each_char do |char|
    url = url.gsub(CGI.escape(char), char)
  end

  url
end
uri() click to toggle source
# File lib/koine/url.rb, line 38
def uri
  parsed.request_uri
end
with_query_param(param_name, value) click to toggle source
# File lib/koine/url.rb, line 30
def with_query_param(param_name, value)
  with_query_params(query_params.merge(param_name.to_s => value))
end
with_query_params(params) click to toggle source

:reek: UncommunicativeVariableName :reek: DuplicateMethodCall

# File lib/koine/url.rb, line 18
def with_query_params(params)
  if params.empty?
    return self.class.new(to_s.split('?').first)
  end

  url = parsed.tap do |p|
    p.query_values = params
  end

  self.class.new(url.to_s)
end

Private Instance Methods

parsed(url = nil) click to toggle source
# File lib/koine/url.rb, line 62
def parsed(url = nil)
  url ||= to_s
  Addressable::URI.parse(url.to_s)
end
reject(url) click to toggle source
# File lib/koine/url.rb, line 80
def reject(url)
  raise ArgumentError, "Invalid url '#{url}'"
end
validate(input_url) click to toggle source

:reek: TooManyStatements

# File lib/koine/url.rb, line 68
def validate(input_url)
  parsed(input_url).tap do |url|
    url.send(:validate)

    unless url.scheme
      reject(url)
    end
  end
rescue StandardError => _exception
  reject(input_url)
end