Sha256: 508adcde2e5a0fcee5382da5e566247c72d92c38dde29b9ef86d2f0c3fca496c

Contents?: true

Size: 1.16 KB

Versions: 2

Compression:

Stored size: 1.16 KB

Contents

module Rack::ActionLogger
  class Emitter

    def initialize
      @can_emit = !Container.get_is_emit_started
      unless @can_emit
        Rack::ActionLogger.logger.error("#{self.class} is already defined.")
        Rack::ActionLogger.logger.error("#{Thread.current.backtrace.join("\n")}")
      end
      @emit_adapter = Rack::ActionLogger.configuration.emit_adapter
      @container = Container
    end

    def emit(context=nil)
      @container.set_is_emit_started
      @container.import(context) if context
      result = yield
      emit_all_logs  # emit log unless exception raised
      result
    ensure
      @container.clear if @can_emit
    end

    private

    def emit_all_logs
      return unless @can_emit
      emit_request_log
      emit_append_logs
    end

    def emit_request_log
      return unless (@container.get_request_log.is_a?(Hash) && @container.get_request_log != {})
      hash = @container.get_request_log.merge @container.get_attributes
      @emit_adapter.emit(hash)
    end

    def emit_append_logs
      @container.get_append_logs.each do |hash|
        @emit_adapter.emit(@container.get_attributes.merge!(hash))
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rack-action_logger-0.1.1 lib/rack/action_logger/emitter.rb
rack-action_logger-0.1.0 lib/rack/action_logger/emitter.rb