class Ponominalu::Middleware

Faraday middleware for a passing the session param to the request and config data to the response under the hood. Also it handles errors

Public Class Methods

new(app) click to toggle source

Passes the session param @param [Hash] env Request data.

Calls superclass method
# File lib/ponominalu/middleware.rb, line 8
def initialize(app)
  super(app)
  @session = Ponominalu.session
  @logger = Ponominalu.logger
end

Public Instance Methods

call(env) click to toggle source
Calls superclass method
# File lib/ponominalu/middleware.rb, line 14
def call(env)
  # Parse the params and the method name from request body
  @method_name = env.url.to_s.split('/').last
  @params = Helpers.parse_params(env.body)

  if Ponominalu.log_requests?
    @logger.debug "Ponominalu: #{@method_name.upcase} #{env.url.to_s}"
    @logger.debug "session: #{@session} params: #{@params}"
  end

  # Add the session to the user request params
  env.body << "&session=#{@session}"
  super
end
on_complete(env) click to toggle source

Passes the user params and handle request errors @param [Hash] env Response data.

# File lib/ponominalu/middleware.rb, line 31
def on_complete(env)
  if env.status != 200
    @logger.error "Request failed with status code #{env.status}."
    raise "Request failed with status code #{env.status}."
  end

  config_data = {
    method_name: @method_name,
    params: @params,
    session: @session
  }

  env.body = Hashie::Mash.new(Oj.load(env.body).merge(config_data))

  if env.body.code.zero? && !Ponominalu.empty_strict
    @logger.warn 'Nothing was found. Result is empty.'
  elsif env.body.code < 1
    @logger.error "#{env.body.code}: #{env.body.message}."
    raise Ponominalu::Error.new(env.body)
  else
    @logger.debug "body: #{env.body}" if Ponominalu.log_responses?
  end
end