Class: ActiveSupport::Callbacks::CallbackChain

Inherits:
Array show all
Defined in:
activesupport/lib/active_support/callbacks.rb

Overview

An Array with a compile method

Instance Attribute Summary (collapse)

Instance Method Summary (collapse)

Methods inherited from Array

#as_json, #encode_json, #extract_options!, #fifth, #forty_two, #fourth, #from, #in_groups, #in_groups_of, #sample, #second, #split, #third, #to, #to_formatted_s, #to_param, #to_query, #to_sentence, #to_xml, #uniq_by, #uniq_by!, wrap

Constructor Details

- (CallbackChain) initialize(name, config)

Returns a new instance of CallbackChain



329
330
331
332
333
334
335
336
# File 'activesupport/lib/active_support/callbacks.rb', line 329

def initialize(name, config)
  @name = name
  @config = {
    :terminator => "false",
    :rescuable => false,
    :scope => [ :kind ]
  }.merge(config)
end

Instance Attribute Details

- (Object) config (readonly)

:nodoc:#



327
328
329
# File 'activesupport/lib/active_support/callbacks.rb', line 327

def config
  @config
end

- (Object) name (readonly)

:nodoc:#



327
328
329
# File 'activesupport/lib/active_support/callbacks.rb', line 327

def name
  @name
end

Instance Method Details

- (Object) compile(key = nil, object = nil)



338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
# File 'activesupport/lib/active_support/callbacks.rb', line 338

def compile(key=nil, object=nil)
  method = []
  method << "value = nil"
  method << "halted = false"

  each do |callback|
    method << callback.start(key, object)
  end

  if config[:rescuable]
    method << "rescued_error = nil"
    method << "begin"
  end

  method << "value = yield if block_given? && !halted"

  if config[:rescuable]
    method << "rescue Exception => e"
    method << "rescued_error = e"
    method << "end"
  end

  reverse_each do |callback|
    method << callback.end(key, object)
  end

  method << "raise rescued_error if rescued_error" if config[:rescuable]
  method << "halted ? false : (block_given? ? value : true)"
  method.compact.join("\n")
end