lib/timber/events/controller_call.rb in timber-2.5.1 vs lib/timber/events/controller_call.rb in timber-2.6.0.pre.beta1

- old
+ new

@@ -6,26 +6,34 @@ # 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::LogSubscriber} integration. + # 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) - @controller = attributes[:controller] || raise(ArgumentError.new(":controller is required")) - @action = attributes[:action] || raise(ArgumentError.new(":action is required")) - @params = sanitize_params(attributes[:params]) - @format = attributes[:format] + 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 - {controller: controller, action: action, params_json: params_json} + @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 = {}) @@ -40,26 +48,8 @@ if !params.nil? && params.length > 0 message << "\n Parameters: #{params.inspect}" end message end - - private - def params_json - @params_json ||= - if params.nil? || params == {} - nil - else - params.to_json.byteslice(0, PARAMS_JSON_MAX_BYTES) - end - end - - def sanitize_params(params) - if params.is_a?(::Hash) - Util::Hash.sanitize(params, [PASSWORD_NAME]) - else - params - end - end end end end \ No newline at end of file