class Engine2::Action
Attributes
assets[R]
invokable[R]
meta[R]
node[R]
static[R]
Public Class Methods
action_type(at = nil)
click to toggle source
# File lib/engine2/action.rb, line 9 def action_type at = nil at ? @action_type = at : @action_type end
http_method(hm = nil)
click to toggle source
# File lib/engine2/action.rb, line 13 def http_method hm = nil hm ? @http_method = hm : @http_method end
inherit(&blk)
click to toggle source
# File lib/engine2/action.rb, line 21 def inherit &blk cls = Class.new self do action_type superclass.action_type end cls.instance_eval &blk if block_given? cls end
inherited(cls)
click to toggle source
# File lib/engine2/action.rb, line 17 def inherited cls cls.http_method http_method end
new(node, assets, static = self)
click to toggle source
# File lib/engine2/action.rb, line 33 def initialize node, assets, static = self @meta = {} @node = node @assets = assets @static = static end
Public Instance Methods
action_type()
click to toggle source
# File lib/engine2/action.rb, line 44 def action_type @action_type || (raise E2Error.new("No action_type for action #{self.class}")) end
arguments(args)
click to toggle source
# File lib/engine2/action.rb, line 84 def arguments args (@meta[:arguments] ||= {}).merge! args end
check_anonymous_action_class(name)
click to toggle source
# File lib/engine2/action.rb, line 52 def check_anonymous_action_class name raise E2Error.new("Defining method '#{name}'' for named class '#{self.class}', consider using #inherit") if self.class.name end
check_static_action()
click to toggle source
# File lib/engine2/action.rb, line 48 def check_static_action raise E2Error.new("Static action required") if dynamic? end
define_invoke(&blk)
click to toggle source
# File lib/engine2/action.rb, line 61 def define_invoke &blk check_static_action define_method :invoke, &blk # self.class.class_eval{define_method :invoke, &blk} end
define_method(name, &blk)
click to toggle source
# File lib/engine2/action.rb, line 56 def define_method name, &blk check_anonymous_action_class name self.class.class_eval{define_method name, &blk} end
dynamic?()
click to toggle source
# File lib/engine2/action.rb, line 92 def dynamic? self != @static end
execute(command)
click to toggle source
# File lib/engine2/action.rb, line 88 def execute command (@meta[:execute] ||= []) << command end
freeze_action()
click to toggle source
# File lib/engine2/action.rb, line 123 def freeze_action hash = @meta hash.freeze # hash.each_pair{|k, v| freeze(v) if v.is_a? Hash} freeze end
http_method()
click to toggle source
# File lib/engine2/action.rb, line 40 def http_method @http_method # || (raise E2Error.new("No http method for action #{self.class}")) end
invoke!(handler)
click to toggle source
# File lib/engine2/action.rb, line 67 def invoke! handler if rmp = @request_action_proc action = self.class.new(node, assets, self) result = action.instance_exec(handler, *action.request_action_proc_params(handler), &rmp) action.post_process response = @requestable ? (result.is_a?(Hash) ? result : {}) : action.invoke(handler) response[:meta] = action.meta response else invoke(handler) end end
join_keys(id)
click to toggle source
# File lib/engine2/action.rb, line 171 def join_keys id Sequel::join_keys(id) end
lookup(*keys)
click to toggle source
def []= *keys, value
@meta.path!(*keys, value)
end
# File lib/engine2/action.rb, line 104 def lookup *keys if dynamic? # we are the request action value = @meta.path(*keys) value.nil? ? @static.meta.path(*keys) : value # value || @static.value.path(keys) else @meta.path(*keys) end end
merge(*keys)
click to toggle source
# File lib/engine2/action.rb, line 114 def merge *keys if keys.length == 1 key = keys.first dynamic? ? @static.meta[key].merge(@meta[key] || {}) : @meta[key] else dynamic? ? @static.meta.path(*keys).merge(@meta.path(*keys)) : @meta.path(*keys) end end
node_defined()
click to toggle source
# File lib/engine2/action.rb, line 146 def node_defined end
post_process()
click to toggle source
# File lib/engine2/action.rb, line 164 def post_process end
post_run()
click to toggle source
# File lib/engine2/action.rb, line 149 def post_run if respond_to? :invoke @invokable = true else if @request_action_proc @invokable = true @requestable = true else @meta[:invokable] = false end end @meta[:dynamic_meta] = true if @request_action_proc post_process end
pre_run()
click to toggle source
# File lib/engine2/action.rb, line 141 def pre_run @action_type = self.class.action_type @http_method = self.class.http_method end
repeat(time)
click to toggle source
# File lib/engine2/action.rb, line 80 def repeat time @meta[:repeat] = time end
request(&blk)
click to toggle source
# File lib/engine2/action.rb, line 134 def request &blk raise E2Error.new("No block given for request action") unless blk raise E2Error.new("No request block in request action allowed") if dynamic? @request_action_proc = @request_action_proc ? @request_action_proc.chain_args(&blk) : blk nil end
request_action_proc_params(handler)
click to toggle source
# File lib/engine2/action.rb, line 130 def request_action_proc_params handler [] end
split_keys(id)
click to toggle source
# File lib/engine2/action.rb, line 167 def split_keys id Sequel::split_keys(id) end