Module: ClassAction::ClassMethods

Defined in:
lib/class_action.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#action_load_pathObject

Returns the value of attribute action_load_path.



26
27
28
# File 'lib/class_action.rb', line 26

def action_load_path
  @action_load_path
end

Instance Method Details

#class_action(*actions, klass: nil) ⇒ Object



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

def class_action(*actions, klass: nil)
  actions.each do |action|
    action_class = klass || find_action_class(action)
    raise ArgumentError, "ClassAction does not support anonymous classes" if action_class.name.nil?

    class_eval <<-RUBY, __FILE__, __LINE__+1
      def _#{action}_action_class
        @_class_action ||= #{action_class.name}.new self
      end
      private :_#{action}_action_class

      def #{action}
        _#{action}_action_class._execute
      end
    RUBY

    inject_class_action_mimes action.to_s, action_class
  end
end

#class_action_delegate(*methods) ⇒ Object

Delegates the given method to the current class action.



49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/class_action.rb', line 49

def class_action_delegate(*methods)
  file, line = caller.first.split(':', 2)
  line = line.to_i

  methods.each do |method|
    definition = (method =~ /[^\]]=$/) ? 'arg' : '*args, &block'

    module_eval(<<-RUBY, file, line)
      def #{method}(#{definition})
        _class_action.send :#{method}, #{definition}
      end
    RUBY
  end
end