collectiveidea / audited

Audited (formerly acts_as_audited) is an ORM extension that logs all changes to your Rails models.
MIT License
3.34k stars 645 forks source link

Fix audited on crash when run_conditional_check condition is true #697

Open malvads opened 4 months ago

malvads commented 4 months ago

The function run_conditional_check crash when condition is set to true, as it tries to convert true to symbol

      def run_conditional_check(condition, matching: true)
        return true if condition.blank?
        return condition.call(self) == matching if condition.respond_to?(:call)
        return send(condition) == matching if respond_to?(condition.to_sym, true
 #<NoMethodError: undefined method `to_sym' for true:TrueClass
Did you mean?  to_s>
E, [2024-01-31T15:43:09.682642 #2655809] ERROR -- : /usr/lib/rvm/gems/ruby-2.7.5@web/gems/audited-5.4.2/lib/audited/auditor.rb:412:in `run_conditional_check'
/usr/lib/rvm/gems/ruby-2.7.5@web/gems/audited-5.4.2/lib/audited/auditor.rb:403:in `auditing_enabled'
/usr/lib/rvm/gems/ruby-2.7.5@web/gems/audited-5.4.2/lib/audited/auditor.rb:359:in `write_audit'
/usr/lib/rvm/gems/ruby-2.7.5@web/gems/audited-5.4.2/lib/audited/auditor.rb:331:in `audit_create'

a good aproach is to set return to true if condition :if is true

  audited on: [:create, :update, :destroy, :apply], if: MyApp::CONFIG[:audit_my_model]
      def run_conditional_check(condition, matching: true)
        return true if condition.blank? or condition == true
        return condition.call(self) == matching if condition.respond_to?(:call)
        return send(condition) == matching if respond_to?(condition.to_sym, true)