Sha256: e6b41fd3dce0ab0d39d38402b32216ed8b3d32777766efa700ad2b83edf51cd7

Contents?: true

Size: 1.84 KB

Versions: 5

Compression:

Stored size: 1.84 KB

Contents

require "timber/event"
require "timber/util"

module Timber
  module Events
    # The controller call event tracks controller invocations. For example, this line in Rails:
    #
    #   Processing by PagesController#home as HTML
    #
    # @note This event should be installed automatically through integrations,
    #   such as the {Integrations::ActionController} integration.
    class ControllerCall < Timber::Event
      ACTION_MAX_BYTES = 256.freeze
      FORMAT_MAX_BYTES = 256.freeze
      CONTROLLER_MAX_BYTES = 256.freeze
      PARAMS_JSON_MAX_BYTES = 32_768.freeze
      PASSWORD_NAME = 'password'.freeze

      attr_reader :controller, :action, :params, :format

      def initialize(attributes)
        normalizer = Util::AttributeNormalizer.new(attributes)
        @controller = normalizer.fetch!(:controller, :string, :limit => CONTROLLER_MAX_BYTES)
        @action = normalizer.fetch!(:action, :string, :limit => ACTION_MAX_BYTES)
        @params = normalizer.fetch(:params, :hash, :sanitize => [PASSWORD_NAME])
        @format = normalizer.fetch(:format, :string, :limit => FORMAT_MAX_BYTES)
      end

      def to_hash
        @to_hash ||= Util::NonNilHashBuilder.build do |h|
          h.add(:controller, controller)
          h.add(:action, action)
          h.add(:params_json, params.to_json.byteslice(0, PARAMS_JSON_MAX_BYTES))
        end
      end
      alias to_h to_hash

      # Builds a hash representation containing simple objects, suitable for serialization (JSON).
      def as_json(_options = {})
        {:controller_call => to_hash}
      end

      def message
        message = "Processing by #{controller}##{action}"
        if !message.nil?
          message << " as #{format}"
        end
        if !params.nil? && params.length > 0
          message << "\n  Parameters: #{params.inspect}"
        end
        message
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
timber-2.6.2 lib/timber/events/controller_call.rb
timber-2.6.1 lib/timber/events/controller_call.rb
timber-2.6.0 lib/timber/events/controller_call.rb
timber-2.6.0.pre.beta2 lib/timber/events/controller_call.rb
timber-2.6.0.pre.beta1 lib/timber/events/controller_call.rb