wires 0.3.7 → 0.3.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/wires/channel.rb +21 -29
- data/lib/wires/hub.rb +20 -51
- data/lib/wires/{expect_type.rb → util/expect_type.rb} +0 -0
- data/lib/wires/util/hooks.rb +56 -0
- data/lib/wires.rb +3 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 486d20e1c2995dea50118010dd60c4b9c8a5bbd8
|
4
|
+
data.tar.gz: d93b97c600da203bfcabd55781b80f2e6b0190ab
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 204086554b9b668d2ca5d559d99e3abf0173c23de146fb7232d80c9cb728e2f2c0de2dd82cd8ac619e0a5bc010beaf6c6a83e1b0d09e5682b170f418cd8cf598
|
7
|
+
data.tar.gz: f392ff623d48525508a535ea280d1924ea214f3a9276c1351a7d68d661ee78f70a164185be9585b7f560e0310f47f8ea3aa2dc23a4a59a338cf79d65381d04a8
|
data/lib/wires/channel.rb
CHANGED
@@ -64,31 +64,18 @@ module Wires
|
|
64
64
|
end)
|
65
65
|
end
|
66
66
|
|
67
|
-
#
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
def self.run_hooks(hooks_sym, *exc_args)
|
80
|
-
hooks = self.instance_variable_get(hooks_sym.to_sym)
|
81
|
-
for hook in hooks
|
82
|
-
proc, retain = hook
|
83
|
-
proc.call(*exc_args)
|
84
|
-
end if hooks
|
85
|
-
nil end
|
86
|
-
|
87
|
-
def self.clear_hooks(hooks_sym, force=false)
|
88
|
-
hooks = self.instance_variable_get(hooks_sym.to_sym)
|
89
|
-
self.instance_variable_set(hooks_sym.to_sym,
|
90
|
-
(force ? [] : hooks.select{|h| h[1]})) if hooks
|
91
|
-
nil end
|
67
|
+
# Add hook methods
|
68
|
+
class << self
|
69
|
+
include Hooks
|
70
|
+
|
71
|
+
def before_fire(*args, &proc)
|
72
|
+
add_hook(:@before_fire, *args, &proc)
|
73
|
+
end
|
74
|
+
|
75
|
+
def after_fire(*args, &proc)
|
76
|
+
add_hook(:@after_fire, *args, &proc)
|
77
|
+
end
|
78
|
+
end
|
92
79
|
|
93
80
|
# Fire an event on this channel
|
94
81
|
def fire(event, blocking:false)
|
@@ -100,7 +87,7 @@ module Wires
|
|
100
87
|
# Create an instance object from one of several acceptable input forms
|
101
88
|
event = Event.new_from event
|
102
89
|
|
103
|
-
self.class.run_hooks(:@
|
90
|
+
self.class.run_hooks(:@before_fire, event, self)
|
104
91
|
|
105
92
|
# Fire to each relevant target on each channel
|
106
93
|
for chan in relevant_channels()
|
@@ -113,10 +100,15 @@ module Wires
|
|
113
100
|
backtrace) # captured backtrace
|
114
101
|
end end end
|
115
102
|
|
116
|
-
self.class.run_hooks(:@
|
103
|
+
self.class.run_hooks(:@after_fire, event, self)
|
117
104
|
|
118
105
|
nil end
|
119
106
|
|
107
|
+
# Fire a blocking event on this channel
|
108
|
+
def fire_and_wait(event)
|
109
|
+
self.fire(event, blocking:true)
|
110
|
+
end
|
111
|
+
|
120
112
|
# Convert events to array of unique codestrings
|
121
113
|
def _normalize_event_list(events)
|
122
114
|
events = [events] unless events.is_a? Array
|
@@ -168,8 +160,8 @@ module Wires
|
|
168
160
|
end
|
169
161
|
|
170
162
|
hub.before_kill(true) do
|
171
|
-
self.clear_hooks(:@
|
172
|
-
self.clear_hooks(:@
|
163
|
+
self.clear_hooks(:@before_fire)
|
164
|
+
self.clear_hooks(:@after_fire)
|
173
165
|
end
|
174
166
|
|
175
167
|
end
|
data/lib/wires/hub.rb
CHANGED
@@ -76,25 +76,25 @@ module Wires
|
|
76
76
|
sleep 0 until request_state :dead unless (flags.include? :nonblocking)
|
77
77
|
nil end
|
78
78
|
|
79
|
-
#
|
80
|
-
|
81
|
-
@before_runs << [block, retain]
|
82
|
-
nil end
|
79
|
+
# Add hook methods
|
80
|
+
include Hooks
|
83
81
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
nil end
|
82
|
+
def before_run(*args, &proc)
|
83
|
+
add_hook(:@before_run, *args, &proc)
|
84
|
+
end
|
88
85
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
86
|
+
def after_run(*args, &proc)
|
87
|
+
add_hook(:@after_run, *args, &proc)
|
88
|
+
end
|
89
|
+
|
90
|
+
def before_kill(*args, &proc)
|
91
|
+
add_hook(:@before_kill, *args, &proc)
|
92
|
+
end
|
93
|
+
|
94
|
+
def after_kill(*args, &proc)
|
95
|
+
add_hook(:@after_kill, *args, &proc)
|
96
|
+
end
|
93
97
|
|
94
|
-
# Register hook to execute after kill - can call multiple times
|
95
|
-
def after_kill(retain=false, &block)
|
96
|
-
@after_kills << [block, retain]
|
97
|
-
nil end
|
98
98
|
|
99
99
|
def on_neglect(&block)
|
100
100
|
@on_neglect=block
|
@@ -243,35 +243,6 @@ module Wires
|
|
243
243
|
end
|
244
244
|
nil end
|
245
245
|
|
246
|
-
# Flush/run queue of [proc, retain]s, retaining those with retain==true
|
247
|
-
def run_hooks(hooks, *args)
|
248
|
-
retained = Queue.new
|
249
|
-
while not hooks.empty?
|
250
|
-
proc, retain = hooks.shift
|
251
|
-
retained << [proc, retain] if retain
|
252
|
-
proc.call(*args)
|
253
|
-
end
|
254
|
-
while not retained.empty?
|
255
|
-
hooks << retained.shift
|
256
|
-
end
|
257
|
-
nil end
|
258
|
-
|
259
|
-
# Run queue of [proc, retain]s, retaining all
|
260
|
-
def run_fire_hooks(hooks, *args)
|
261
|
-
for hook in hooks
|
262
|
-
proc, retain = hook
|
263
|
-
proc.call(*args)
|
264
|
-
end
|
265
|
-
nil end
|
266
|
-
|
267
|
-
# Clear queue of [proc, retain]s, retaining those with retain==true
|
268
|
-
def clear_fire_hooks(hooks, *args)
|
269
|
-
hooks.select! do |hook|
|
270
|
-
proc, retain = hook
|
271
|
-
retain
|
272
|
-
end
|
273
|
-
nil end
|
274
|
-
|
275
246
|
end
|
276
247
|
|
277
248
|
|
@@ -299,20 +270,18 @@ module Wires
|
|
299
270
|
|
300
271
|
declare_state :dead do
|
301
272
|
transition_to :alive do
|
302
|
-
before {
|
303
|
-
after {
|
273
|
+
before { flush_hooks :@before_run }
|
274
|
+
after { flush_hooks :@after_run }
|
304
275
|
end
|
305
276
|
end
|
306
277
|
|
307
278
|
declare_state :alive do
|
308
279
|
transition_to :dead do
|
309
|
-
before {
|
280
|
+
before { flush_hooks :@before_kill }
|
310
281
|
before { purge_neglected }
|
311
282
|
before { join_children if @please_finish_all }
|
312
283
|
after { @please_finish_all = false }
|
313
|
-
after {
|
314
|
-
after { clear_fire_hooks @before_fires }
|
315
|
-
after { clear_fire_hooks @after_fires }
|
284
|
+
after { flush_hooks :@after_kill }
|
316
285
|
end
|
317
286
|
end
|
318
287
|
|
File without changes
|
@@ -0,0 +1,56 @@
|
|
1
|
+
|
2
|
+
module Wires
|
3
|
+
module Hooks
|
4
|
+
|
5
|
+
# Register a hook - can be called multiple times if retain is true
|
6
|
+
def add_hook(hooks_sym, retain=false, &proc)
|
7
|
+
hooks = instance_variable_get(hooks_sym.to_sym)
|
8
|
+
if hooks
|
9
|
+
hooks << [proc, retain]
|
10
|
+
else
|
11
|
+
instance_variable_set(hooks_sym.to_sym, [[proc, retain]])
|
12
|
+
end
|
13
|
+
proc
|
14
|
+
end
|
15
|
+
|
16
|
+
# Remove a hook by proc reference
|
17
|
+
def remove_hook(hooks_sym, &proc)
|
18
|
+
hooks = instance_variable_get(hooks_sym.to_sym)
|
19
|
+
return unless hooks
|
20
|
+
hooks.reject! {|h| h[0]==proc}
|
21
|
+
end
|
22
|
+
|
23
|
+
# Run all hooks, deleting those not marked for retention
|
24
|
+
def run_hooks(hooks_sym, *exc_args)
|
25
|
+
hooks = instance_variable_get(hooks_sym.to_sym)
|
26
|
+
return unless hooks
|
27
|
+
for hook in hooks
|
28
|
+
proc, retain = hook
|
29
|
+
proc.call(*exc_args)
|
30
|
+
end
|
31
|
+
nil end
|
32
|
+
|
33
|
+
# Clear hooks not marked for retention (or all hooks if force)
|
34
|
+
def clear_hooks(hooks_sym, force=false)
|
35
|
+
hooks = instance_variable_get(hooks_sym.to_sym)
|
36
|
+
return unless hooks
|
37
|
+
(force ? hooks.clear : hooks.select!{|h| h[1]})
|
38
|
+
nil end
|
39
|
+
|
40
|
+
# Flush/run all hooks, keeping only those marked for retention
|
41
|
+
def flush_hooks(hooks_sym, *exc_args)
|
42
|
+
hooks = instance_variable_get(hooks_sym.to_sym)
|
43
|
+
return unless hooks
|
44
|
+
retained = Queue.new
|
45
|
+
while not hooks.empty?
|
46
|
+
proc, retain = hooks.shift
|
47
|
+
retained << [proc, retain] if retain
|
48
|
+
proc.call(*exc_args)
|
49
|
+
end
|
50
|
+
while not retained.empty?
|
51
|
+
hooks << retained.shift
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
data/lib/wires.rb
CHANGED
@@ -4,7 +4,9 @@ require 'active_support/core_ext' # Convenience functions from Rails
|
|
4
4
|
require 'threadlock' # Easily add re-entrant lock to instance methods
|
5
5
|
require 'hegemon' # State machine management
|
6
6
|
|
7
|
-
require 'wires/expect_type'
|
7
|
+
require 'wires/util/expect_type'
|
8
|
+
require 'wires/util/hooks'
|
9
|
+
|
8
10
|
require 'wires/event'
|
9
11
|
require 'wires/hub'
|
10
12
|
require 'wires/channel'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wires
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joe McIlvain
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-09-
|
11
|
+
date: 2013-09-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport-core-ext
|
@@ -105,8 +105,9 @@ files:
|
|
105
105
|
- lib/wires/time.rb
|
106
106
|
- lib/wires/hub.rb
|
107
107
|
- lib/wires/core_ext.rb
|
108
|
-
- lib/wires/expect_type.rb
|
109
108
|
- lib/wires/clean.rb
|
109
|
+
- lib/wires/util/expect_type.rb
|
110
|
+
- lib/wires/util/hooks.rb
|
110
111
|
- lib/wires/convenience.rb
|
111
112
|
- lib/wires/channel.rb
|
112
113
|
- lib/wires/event.rb
|