Sha256: 6640888c841f8134cc3831f32fb374ebce592c092a0f59c6c599f3729743787c

Contents?: true

Size: 1.14 KB

Versions: 3

Compression:

Stored size: 1.14 KB

Contents

require "faraday"
require "multi_json"

module Ashikawa
  module Core
    # Preprocessor for Faraday Requests
    class RequestPreprocessor < Faraday::Middleware
      # Create a new Request Preprocessor
      #
      # @param [Object] app Faraday internal
      # @param [Object] logger The object you want to log to
      # @return [RequestPreprocessor]
      # @api private
      def initialize(app, logger)
        @app = app
        @logger = logger
      end

      # Process a Request
      #
      # @param [Hash] env Environment info
      # @return [Object]
      # @api private
      def call(env)
        body = env[:body]
        env[:body] = MultiJson.dump(body) if body
        log(env[:method], env[:url], body)
        @app.call(env)
      end

      private

      # Log a Request
      #
      # @param [Symbol] method
      # @param [String] url
      # @param [String] body
      # @return [nil]
      # @api private
      def log(method, url, body)
        @logger.info("#{method.upcase} #{url} #{body}")
        nil
      end
    end

    Faraday.register_middleware :request,
      :ashikawa_request => lambda { RequestPreprocessor}
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
ashikawa-core-0.7.2 lib/ashikawa-core/request_preprocessor.rb
ashikawa-core-0.7.1 lib/ashikawa-core/request_preprocessor.rb
ashikawa-core-0.7.0 lib/ashikawa-core/request_preprocessor.rb