Skip to content
  • Yoshiyuki Hirano's avatar
    470d0e45
    Fix validation callbacks on multiple context · 470d0e45
    Yoshiyuki Hirano authored
    I found a bug that validation callbacks don't fire on multiple context.
    So I've fixed it.
    
    Example:
    
    ```ruby
    class Dog
      include ActiveModel::Validations
      include ActiveModel::Validations::Callbacks
    
      attr_accessor :history
    
      def initialize
        @history = []
      end
    
      before_validation :set_before_validation_on_a, on: :a
      before_validation :set_before_validation_on_b, on: :b
      after_validation :set_after_validation_on_a, on: :a
      after_validation :set_after_validation_on_b, on: :b
    
      def set_before_validation_on_a; history << "before_validation on a"; end
      def set_before_validation_on_b; history << "before_validation on b"; end
      def set_after_validation_on_a;  history << "after_validation on a" ; end
      def set_after_validation_on_b;  history << "after_validation on b" ; end
    end
    ```
    
    Before:
    
    ```
    d = Dog.new
    d.valid?([:a, :b])
    d.history # []
    ```
    
    After:
    
    ```
    d = Dog.new
    d.valid?([:a, :b])
    d.history # ["before_validation on a", "before_validation on b", "after_validation on a", "after_validation on b"]
    ```
    470d0e45
    Fix validation callbacks on multiple context
    Yoshiyuki Hirano authored
    I found a bug that validation callbacks don't fire on multiple context.
    So I've fixed it.
    
    Example:
    
    ```ruby
    class Dog
      include ActiveModel::Validations
      include ActiveModel::Validations::Callbacks
    
      attr_accessor :history
    
      def initialize
        @history = []
      end
    
      before_validation :set_before_validation_on_a, on: :a
      before_validation :set_before_validation_on_b, on: :b
      after_validation :set_after_validation_on_a, on: :a
      after_validation :set_after_validation_on_b, on: :b
    
      def set_before_validation_on_a; history << "before_validation on a"; end
      def set_before_validation_on_b; history << "before_validation on b"; end
      def set_after_validation_on_a;  history << "after_validation on a" ; end
      def set_after_validation_on_b;  history << "after_validation on b" ; end
    end
    ```
    
    Before:
    
    ```
    d = Dog.new
    d.valid?([:a, :b])
    d.history # []
    ```
    
    After:
    
    ```
    d = Dog.new
    d.valid?([:a, :b])
    d.history # ["before_validation on a", "before_validation on b", "after_validation on a", "after_validation on b"]
    ```
Loading