Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source
Show
Ignore:
Timestamp:
04/04/08 20:26:42 (5 months ago)
Author:
josh
Message:

Replaced callback method evaluation in AssociationCollection class to use ActiveSupport::Callbacks. Modified ActiveSupport::Callbacks::Callback#call to accept multiple arguments.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/activesupport/lib/active_support/callbacks.rb

    r9055 r9225  
    150150      end 
    151151 
    152       def call(object, &block) 
    153         evaluate_method(method, object, &block) if should_run_callback?(object
     152      def call(*args, &block) 
     153        evaluate_method(method, *args, &block) if should_run_callback?(*args
    154154      rescue LocalJumpError 
    155155        raise ArgumentError, 
     
    159159 
    160160      private 
    161         def evaluate_method(method, object, &block) 
     161        def evaluate_method(method, *args, &block) 
    162162          case method 
    163163            when Symbol 
    164               object.send(method, &block) 
     164              object = args.shift 
     165              object.send(method, *args, &block) 
    165166            when String 
    166               eval(method, object.instance_eval { binding }) 
     167              eval(method, args.first.instance_eval { binding }) 
    167168            when Proc, Method 
    168               case method.arity 
    169                 when -1, 1 
    170                   method.call(object, &block) 
    171                 when 2 
    172                   method.call(object, block) 
    173                 else 
    174                   raise ArgumentError, 'Callback blocks must take one or two arguments.' 
    175               end 
     169              method.call(*args, &block) 
    176170            else 
    177171              if method.respond_to?(kind) 
    178                 method.send(kind, object, &block) 
     172                method.send(kind, *args, &block) 
    179173              else 
    180174                raise ArgumentError, 
     
    185179        end 
    186180 
    187         def should_run_callback?(object
     181        def should_run_callback?(*args
    188182          if options[:if] 
    189             evaluate_method(options[:if], object
     183            evaluate_method(options[:if], *args
    190184          elsif options[:unless] 
    191             !evaluate_method(options[:unless], object
     185            !evaluate_method(options[:unless], *args
    192186          else 
    193187            true