Changeset 9225 for trunk/activesupport/lib/active_support/callbacks.rb
- Timestamp:
- 04/04/08 20:26:42 (5 months ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/activesupport/lib/active_support/callbacks.rb
r9055 r9225 150 150 end 151 151 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) 154 154 rescue LocalJumpError 155 155 raise ArgumentError, … … 159 159 160 160 private 161 def evaluate_method(method, object, &block)161 def evaluate_method(method, *args, &block) 162 162 case method 163 163 when Symbol 164 object.send(method, &block) 164 object = args.shift 165 object.send(method, *args, &block) 165 166 when String 166 eval(method, object.instance_eval { binding })167 eval(method, args.first.instance_eval { binding }) 167 168 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) 176 170 else 177 171 if method.respond_to?(kind) 178 method.send(kind, object, &block)172 method.send(kind, *args, &block) 179 173 else 180 174 raise ArgumentError, … … 185 179 end 186 180 187 def should_run_callback?( object)181 def should_run_callback?(*args) 188 182 if options[:if] 189 evaluate_method(options[:if], object)183 evaluate_method(options[:if], *args) 190 184 elsif options[:unless] 191 !evaluate_method(options[:unless], object)185 !evaluate_method(options[:unless], *args) 192 186 else 193 187 true