Sha256: 57976bb7a8e9f206ab514ed04e1b9e469f027a30932ae2cf4dc3f152126f1c67

Contents?: true

Size: 1.69 KB

Versions: 8

Compression:

Stored size: 1.69 KB

Contents

require 'active_support'
require 'active_record'

module ContextualizedLogs
  module ContextualizedModel
    extend ActiveSupport::Concern

    class << self
      attr_writer :current_context

      def current_context
        @current_context || ContextualizedLogs.config.current_context
      end

      def included(base)
        unless base.ancestors.include? ActiveRecord::Base
          raise ArgumentError, "ContextualizedLogs::ContextualizedModel can only be included in a ActiveRecord::Base"
        end

        base.extend(ClassMethods)

        base.class_eval do
          after_find do |object|
            # Rails.logger.debug "after_find #{object}"
            ContextualizedModel.contextualize(object, self.class.contextualizable_keys, ContextualizedModel.current_context)
          end

          after_create do
            # Rails.logger.debug "after_create #{self}"
            ContextualizedModel.contextualize(self, self.class.contextualizable_keys, ContextualizedModel.current_context)
          end
        end
      end

      def contextualize(model, keys, context)
        # Rails.logger.debug "model: #{model}"
        # Rails.logger.debug "keys: #{keys}"
        # Rails.logger.debug "context.context: #{context}"
        # Rails.logger.debug "context.contextualize_model_enabled: #{context.contextualize_model_enabled}"
        return unless context.contextualize_model_enabled
        keys&.each do |k, v|
          v = model.try(v.to_sym)
          context.add_context(k, v) if v
        end
      end
    end

    module ClassMethods
      attr_reader :contextualizable_keys

      private

      def contextualizable(keys: {})
        @contextualizable_keys = keys
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
contextualized_logs-0.0.8.pre.alpha lib/contextualized_logs/contextualized_model.rb
contextualized_logs-0.0.7.pre.alpha lib/contextualized_logs/contextualized_model.rb
contextualized_logs-0.0.6.pre.alpha lib/contextualized_logs/contextualized_model.rb
contextualized_logs-0.0.5.pre.alpha lib/contextualized_logs/contextualized_model.rb
contextualized_logs-0.0.4.pre.demo lib/contextualized_logs/contextualized_model.rb
contextualized_logs-0.0.4.pre.alpha lib/contextualized_logs/contextualized_model.rb
contextualized_logs-0.0.3.pre.alpha lib/contextualized_logs/contextualized_model.rb
contextualized_logs-0.0.2.pre.alpha lib/contextualized_logs/contextualized_model.rb