Class: Eye::Trigger
Defined Under Namespace
Classes: Custom, Flapping, StopChildren, Transition
Constant Summary
collapse
- TYPES =
{:flapping => 'Flapping', :transition => 'Transition', :stop_children => 'StopChildren'}
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
included
Constructor Details
#initialize(process, options = {}) ⇒ Trigger
Returns a new instance of Trigger.
43
44
45
46
47
48
49
|
# File 'lib/eye/trigger.rb', line 43
def initialize(process, options = {})
@options = options
@process = process
@full_name = @process.full_name if @process
debug "add #{options}"
end
|
Instance Attribute Details
Returns the value of attribute message.
10
11
12
|
# File 'lib/eye/trigger.rb', line 10
def message
@message
end
|
Returns the value of attribute options.
10
11
12
|
# File 'lib/eye/trigger.rb', line 10
def options
@options
end
|
Returns the value of attribute process.
10
11
12
|
# File 'lib/eye/trigger.rb', line 10
def process
@process
end
|
Class Method Details
.create(process, options = {}) ⇒ Object
31
32
33
34
35
36
37
|
# File 'lib/eye/trigger.rb', line 31
def self.create(process, options = {})
get_class(options[:type]).new(process, options)
rescue Exception, Timeout::Error => ex
log_ex(ex)
nil
end
|
.depends_on ⇒ Object
105
106
|
# File 'lib/eye/trigger.rb', line 105
def self.depends_on
end
|
.get_class(type) ⇒ Object
22
23
24
25
26
27
28
29
|
# File 'lib/eye/trigger.rb', line 22
def self.get_class(type)
klass = eval("Eye::Trigger::#{TYPES[type]}") rescue nil
raise "unknown trigger #{type}" unless klass
if deps = klass.depends_on
Array(deps).each { |d| require d }
end
klass
end
|
.name_and_class(type) ⇒ Object
12
13
14
15
16
17
18
19
20
|
# File 'lib/eye/trigger.rb', line 12
def self.name_and_class(type)
type = type.to_sym
return {:name => type, :type => type} if TYPES[type]
if type =~ /\A(.*?)_?[0-9]+\z/
ctype = $1.to_sym
return {:name => type, :type => ctype} if TYPES[ctype]
end
end
|
.register(base) ⇒ Object
98
99
100
101
102
103
|
# File 'lib/eye/trigger.rb', line 98
def self.register(base)
name = base.to_s.gsub('Eye::Trigger::', '')
type = name.underscore.to_sym
Eye::Trigger::TYPES[type] = name
Eye::Trigger.const_set(name, base)
end
|
.validate!(options = {}) ⇒ Object
39
40
41
|
# File 'lib/eye/trigger.rb', line 39
def self.validate!(options = {})
get_class(options[:type]).validate(options)
end
|
Instance Method Details
#check(transition) ⇒ Object
86
87
88
|
# File 'lib/eye/trigger.rb', line 86
def check(transition)
raise NotImplementedError
end
|
#defer(&block) ⇒ Object
94
95
96
|
# File 'lib/eye/trigger.rb', line 94
def defer(&block)
Celluloid::Future.new(&block).value
end
|
#filter_transition(trans) ⇒ Object
78
79
80
81
82
83
84
|
# File 'lib/eye/trigger.rb', line 78
def filter_transition(trans)
return true unless to || from || event
compare_state(trans.to_name, to) &&
compare_state(trans.from_name, from) &&
compare_state(trans.event, event)
end
|
51
52
53
|
# File 'lib/eye/trigger.rb', line 51
def inspect
"<#{self.class} @process='#{@full_name}' @options=#{@options}>"
end
|
#logger_sub_tag ⇒ Object
59
60
61
|
# File 'lib/eye/trigger.rb', line 59
def logger_sub_tag
"trigger(#{@options[:type]})"
end
|
#logger_tag ⇒ Object
55
56
57
|
# File 'lib/eye/trigger.rb', line 55
def logger_tag
@process.logger.prefix
end
|
#notify(transition, reason) ⇒ Object
63
64
65
66
67
68
69
70
71
72
|
# File 'lib/eye/trigger.rb', line 63
def notify(transition, reason)
debug "check (:#{transition.event}) :#{transition.from} => :#{transition.to}"
@reason = reason
@transition = transition
check(transition) if filter_transition(transition)
rescue Exception, Timeout::Error => ex
log_ex(ex)
end
|
#run_in_process_context(p) ⇒ Object
90
91
92
|
# File 'lib/eye/trigger.rb', line 90
def run_in_process_context(p)
process.instance_exec(&p) if process.alive?
end
|