Class: LcpRuby::ModelFactory::AuditingApplicator
- Inherits:
-
Object
- Object
- LcpRuby::ModelFactory::AuditingApplicator
- Defined in:
- lib/lcp_ruby/model_factory/auditing_applicator.rb
Instance Method Summary collapse
- #apply! ⇒ Object
-
#initialize(model_class, model_definition) ⇒ AuditingApplicator
constructor
A new instance of AuditingApplicator.
Constructor Details
#initialize(model_class, model_definition) ⇒ AuditingApplicator
Returns a new instance of AuditingApplicator.
4 5 6 7 |
# File 'lib/lcp_ruby/model_factory/auditing_applicator.rb', line 4 def initialize(model_class, model_definition) @model_class = model_class @model_definition = model_definition end |
Instance Method Details
#apply! ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/lcp_ruby/model_factory/auditing_applicator.rb', line 9 def apply! return unless @model_definition.auditing? model_def = @model_definition = model_def. # Install after_create callback @model_class.after_create do next unless Auditing::Registry.available? Auditing::AuditWriter.log( action: :create, record: self, options: , model_definition: model_def ) end # Install after_update callback (skip if record was just created) @model_class.after_update do next unless Auditing::Registry.available? Auditing::AuditWriter.log( action: :update, record: self, options: , model_definition: model_def ) end # Install after_destroy callback @model_class.after_destroy do next unless Auditing::Registry.available? Auditing::AuditWriter.log( action: :destroy, record: self, options: , model_definition: model_def ) end # Add has_many :audit_logs association (polymorphic via auditable_type/auditable_id) fields = LcpRuby.configuration.audit_model_fields.transform_keys(&:to_s) type_field = fields["auditable_type"] id_field = fields["auditable_id"] @model_class.define_method(:audit_logs) do audit_class = Auditing::Registry.audit_model_class return audit_class.none unless audit_class audit_class .where(type_field => model_def.name, id_field => id) .order(created_at: :desc) end # Convenience method with limit @model_class.define_method(:audit_history) do |limit: 50| audit_logs.limit(limit) end end |