Class: ActiveSupport::Callbacks::Filters::Before

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(user_callback, user_conditions, chain_config, filter, name) ⇒ Before

Returns a new instance of Before.



165
166
167
168
169
# File 'activesupport/lib/active_support/callbacks.rb', line 165

def initialize(user_callback, user_conditions, chain_config, filter, name)
  halted_lambda = chain_config[:terminator]
  @user_callback, @user_conditions, @halted_lambda, @filter, @name = user_callback, user_conditions, halted_lambda, filter, name
  freeze
end

Instance Attribute Details

#filterObject (readonly)

Returns the value of attribute filter.



170
171
172
# File 'activesupport/lib/active_support/callbacks.rb', line 170

def filter
  @filter
end

#halted_lambdaObject (readonly)

Returns the value of attribute halted_lambda.



170
171
172
# File 'activesupport/lib/active_support/callbacks.rb', line 170

def halted_lambda
  @halted_lambda
end

#nameObject (readonly)

Returns the value of attribute name.



170
171
172
# File 'activesupport/lib/active_support/callbacks.rb', line 170

def name
  @name
end

#user_callbackObject (readonly)

Returns the value of attribute user_callback.



170
171
172
# File 'activesupport/lib/active_support/callbacks.rb', line 170

def user_callback
  @user_callback
end

#user_conditionsObject (readonly)

Returns the value of attribute user_conditions.



170
171
172
# File 'activesupport/lib/active_support/callbacks.rb', line 170

def user_conditions
  @user_conditions
end

Instance Method Details

#apply(callback_sequence) ⇒ Object



188
189
190
# File 'activesupport/lib/active_support/callbacks.rb', line 188

def apply(callback_sequence)
  callback_sequence.before(self)
end

#call(env) ⇒ Object



172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
# File 'activesupport/lib/active_support/callbacks.rb', line 172

def call(env)
  target = env.target
  value  = env.value
  halted = env.halted

  if !halted && user_conditions.all? { |c| c.call(target, value) }
    result_lambda = -> { user_callback.call target, value }
    env.halted = halted_lambda.call(target, result_lambda)
    if env.halted
      target.send :halted_callback_hook, filter, name
    end
  end

  env
end