class Katinguele::Request

Constants

ACCESSORS
DEFAULT

Public Class Methods

new(options = {}) click to toggle source
# File lib/katinguele/request.rb, line 30
def initialize(options = {})
  setup!(options)
end

Public Instance Methods

after!(*params) click to toggle source
# File lib/katinguele/request.rb, line 46
def after!(*params)
  hook!(:after, params)
end
attributes() click to toggle source
# File lib/katinguele/request.rb, line 38
def attributes
  ACCESSORS.each_with_object({}) { |accessor, obj| obj[accessor] = send(accessor) }
end
before!(*params) click to toggle source
# File lib/katinguele/request.rb, line 42
def before!(*params)
  hook!(:before, params)
end
log() click to toggle source
# File lib/katinguele/request.rb, line 34
def log
  Katinguele::Logger.request(self, @method.to_s.upcase)
end

Private Instance Methods

accessors!(params) click to toggle source
# File lib/katinguele/request.rb, line 70
def accessors!(params)
  params.slice(*ACCESSORS)
        .each { |k, v| instance_variable_set("@#{k}", v) }
end
build_urn!() click to toggle source
# File lib/katinguele/request.rb, line 75
def build_urn!
  @uri = [@protocol, [@url, @path].compact.join('/')].compact.join('://')
end
handle_query_params!() click to toggle source
# File lib/katinguele/request.rb, line 87
def handle_query_params!
  return unless @params.is_a?(Hash)

  @params.reject { |k, _v| @uri.include?(":#{k}") }
         .map    { |k, v|  "#{k}=#{v}" }
         .then   { |array| array.join('&') }
         .then   { |query| query unless query.empty? }
         .then   { |query| @uri = [@uri, query].compact.join('?') }
end
handle_urn_params!() click to toggle source
# File lib/katinguele/request.rb, line 79
def handle_urn_params!
  return unless @params.is_a?(Hash)

  @params.filter { |k, _v| @uri.include?(":#{k}") }
         .each   { |k, v|  @uri.gsub!(":#{k}", v.to_s) }
         .then   { @uri.gsub!(/:[a-z_-]+/, '') }
end
hook!(hook, params) click to toggle source
# File lib/katinguele/request.rb, line 60
def hook!(hook, params)
  return unless send(hook)&.is_a?(Proc)

  send(hook).call(*params[0..(send(hook).parameters.length - 1)])
end
setup!(options = {}) click to toggle source
# File lib/katinguele/request.rb, line 52
def setup!(options = {})
  accessors!(DEFAULT.merge(options || {}))
  validate!
  build_urn!
  handle_query_params!
  handle_urn_params!
end
validate!() click to toggle source
# File lib/katinguele/request.rb, line 66
def validate!
  raise Katinguele::RequiredFieldError.new(self.class, :url) unless @url
end