lib/authlogic/session/callbacks.rb in authlogic-4.0.1 vs lib/authlogic/session/callbacks.rb in authlogic-4.1.0

- old
+ new

@@ -56,64 +56,71 @@ # # You can NOT define a "before_validation" method, this is bad practice and does not # allow Authlogic to extend properly with multiple extensions. Please ONLY use the # method above. module Callbacks - METHODS = [ - "before_persisting", - "persist", - "after_persisting", - "before_validation", - "before_validation_on_create", - "before_validation_on_update", - "validate", - "after_validation_on_update", - "after_validation_on_create", - "after_validation", - "before_save", - "before_create", - "before_update", - "after_update", - "after_create", - "after_save", - "before_destroy", - "after_destroy" + METHODS = %w[ + before_persisting + persist + after_persisting + before_validation + before_validation_on_create + before_validation_on_update + validate + after_validation_on_update + after_validation_on_create + after_validation + before_save + before_create + before_update + after_update + after_create + after_save + before_destroy + after_destroy ].freeze def self.included(base) #:nodoc: base.send :include, ActiveSupport::Callbacks - if Gem::Version.new(ActiveSupport::VERSION::STRING) >= Gem::Version.new('5') + + if Gem::Version.new(ActiveSupport::VERSION::STRING) >= Gem::Version.new("5") base.define_callbacks( *METHODS + [{ terminator: ->(_target, result_lambda) { result_lambda.call == false } }] ) base.define_callbacks( - 'persist', + "persist", terminator: ->(_target, result_lambda) { result_lambda.call == true } ) - elsif Gem::Version.new(ActiveSupport::VERSION::STRING) >= Gem::Version.new('4.1') - base.define_callbacks(*METHODS + [{ terminator: ->(_target, result) { result == false } }]) - base.define_callbacks('persist', terminator: ->(_target, result) { result == true }) else - base.define_callbacks(*METHODS + [{ terminator: 'result == false' }]) - base.define_callbacks('persist', terminator: 'result == true') + base.define_callbacks( + *METHODS + [{ terminator: ->(_target, result) { result == false } }] + ) + base.define_callbacks("persist", terminator: ->(_target, result) { result == true }) end - # If Rails 3, support the new callback syntax - if base.singleton_class.method_defined?(:set_callback) - METHODS.each do |method| - base.class_eval <<-EOS, __FILE__, __LINE__ - def self.#{method}(*methods, &block) - set_callback :#{method}, *methods, &block - end - EOS - end + # Now we define the "callback installation methods". These class methods + # will be used by other modules to install their callbacks. Examples: + # + # ``` + # # Timeout.included + # before_persisting :reset_stale_state + # + # # Session::Password.included + # validate :validate_by_password, if: :authenticating_with_password? + # ``` + METHODS.each do |method| + base.class_eval <<-EOS, __FILE__, __LINE__ + 1 + def self.#{method}(*methods, &block) + set_callback :#{method}, *methods, &block + end + EOS end end private METHODS.each do |method| - class_eval <<-EOS, __FILE__, __LINE__ + class_eval <<-EOS, __FILE__, __LINE__ + 1 def #{method} run_callbacks(:#{method}) end EOS end