Module: ActionArgs::ActiveSupport::CallbackParameterizer

Included in:
ActiveSupport::Callbacks::Callback
Defined in:
lib/action_args/callbacks.rb

Instance Method Summary collapse

Instance Method Details

#apply(code) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/action_args/callbacks.rb', line 29

def apply(code)
  if (Symbol === @filter) && (@klass < ActionController::Base)
    method_body = <<-FILTER
      meth = method :#{@filter}
      method_parameters = meth.parameters
      ActionArgs::ParamsHandler.strengthen_params!(self.class, method_parameters, params)
      values = ActionArgs::ParamsHandler.extract_method_arguments_from_params method_parameters, params
      send :#{@filter}, *values
    FILTER
    if @kind == :before
      @filter = "begin\n#{method_body}\nend"
    else
      @filter = method_body.chomp
    end
  end
  super
end

#make_lambda(filter) ⇒ Object

Extending AS::Callbacks::Callback’s ‘make_lambda` not just to call specified method but to call the method with method parameters taken from `params`. This would happen only when

  • the filter was defined in Symbol form

  • the target object is_a ActionController object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/action_args/callbacks.rb', line 10

def make_lambda(filter)
  if Symbol === filter
    lambda do |target, _, &blk|
      if ActionController::Base === target
        meth = target.method filter
        method_parameters = meth.parameters
        ActionArgs::ParamsHandler.strengthen_params!(target.class, method_parameters, target.params)
        values = ActionArgs::ParamsHandler.extract_method_arguments_from_params method_parameters, target.params
        target.send filter, *values, &blk
      else
        target.send filter, &blk
      end
    end
  else
    super
  end
end

#start(key = nil, object = nil) ⇒ Object

Rails 3.2



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/action_args/callbacks.rb', line 48

def start(key=nil, object=nil)
  if (Symbol === @filter) && (@klass < ActionController::Base)
    method_body = <<-FILTER
      meth = method :#{@filter}
      method_parameters = meth.parameters
      ActionArgs::ParamsHandler.strengthen_params!(self.class, method_parameters, params)
      values = ActionArgs::ParamsHandler.extract_method_arguments_from_params method_parameters, params
      send :#{@filter}, *values
    FILTER
    if @kind == :before
      @filter = "begin\n#{method_body}\nend"
    else
      @filter = method_body.chomp
    end
  end
  super
end