class TTWatcher::Sites::InternetConnection::Url

TODO REFACTOR

Attributes

encoding[R]
url[R]

Public Class Methods

new(url, **params) click to toggle source

Creates new Url instance.

@param [String] url

An url in any form.

@param [Hash] params @option params [Symbol] :force_scheme @option params [Hash] :query_params @option params [String] :encoding

@return [InternetConnection::Url]

# File sources/ttwatcher/sites/connection/url.rb, line 22
def initialize(url, **params)
  self.class.include Scheme

  @url      = url
  @query    = params[:query_params] || {}
  @encoding = params[:encoding]     || 'utf-8'

  set_scheme params[:force_scheme]
  encode_url
end

Private Instance Methods

encode_url() click to toggle source

Normalization. String to rfc-standard uri

# File sources/ttwatcher/sites/connection/url.rb, line 58
def encode_url
  uri = Addressable::URI.parse url
  uri.query_values = query_normalization
  @url.replace uri.normalize.to_s.force_encoding(@encoding)
end
query_normalization() click to toggle source

return query with correct encoding

# File sources/ttwatcher/sites/connection/url.rb, line 41
def query_normalization
  uri =  Addressable::URI.parse url
  tmp_q = (uri.query_values || {}).merge(@query)

  return tmp_q if tmp_q.empty? && tmp_q.values.all? { |v| v.encode == @encoding }

  tmp_q.each_key do |k|
    tmp_q[k] = tmp_q[k].encode(encoding, invalid: :replace,
                                         undef: :replace)
  end

  return tmp_q
end