ringleader 1.1.7 → 1.1.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.
- data/lib/ringleader.rb +1 -0
- data/lib/ringleader/celluloid_fix.rb +139 -0
- data/lib/ringleader/version.rb +1 -1
- data/ringleader.gemspec +2 -2
- data/spec/fixtures/chruby.yml +1 -1
- data/spec/ringleader/config_spec.rb +1 -1
- metadata +8 -7
data/lib/ringleader.rb
CHANGED
@@ -0,0 +1,139 @@
|
|
1
|
+
# FIXME: see zerowidth/ringleader#36 and celluloid/celluloid-io#23. If the
|
2
|
+
# celluloid issue is ever merged, this monkeypatch / wholesale rewrite needs to
|
3
|
+
# go away.
|
4
|
+
|
5
|
+
require 'nio'
|
6
|
+
|
7
|
+
module Celluloid
|
8
|
+
module IO
|
9
|
+
# React to external I/O events. This is kinda sorta supposed to resemble the
|
10
|
+
# Reactor design pattern.
|
11
|
+
class Reactor
|
12
|
+
extend Forwardable
|
13
|
+
|
14
|
+
# Unblock the reactor (i.e. to signal it from another thread)
|
15
|
+
def_delegator :@selector, :wakeup
|
16
|
+
# Terminate the reactor
|
17
|
+
def_delegator :@selector, :close, :shutdown
|
18
|
+
|
19
|
+
def initialize
|
20
|
+
@selector = NIO::Selector.new
|
21
|
+
@monitors = {}
|
22
|
+
end
|
23
|
+
|
24
|
+
# Wait for the given IO object to become readable
|
25
|
+
def wait_readable(io)
|
26
|
+
wait io do |monitor|
|
27
|
+
monitor.wait_readable
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# Wait for the given IO object to become writable
|
32
|
+
def wait_writable(io)
|
33
|
+
wait io do |monitor|
|
34
|
+
monitor.wait_writable
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# Wait for the given IO operation to complete
|
39
|
+
def wait(io)
|
40
|
+
# zomg ugly type conversion :(
|
41
|
+
unless io.is_a?(::IO) or io.is_a?(OpenSSL::SSL::SSLSocket)
|
42
|
+
if io.respond_to? :to_io
|
43
|
+
io = io.to_io
|
44
|
+
elsif ::IO.respond_to? :try_convert
|
45
|
+
io = ::IO.try_convert(io)
|
46
|
+
end
|
47
|
+
|
48
|
+
raise TypeError, "can't convert #{io.class} into IO" unless io.is_a?(::IO)
|
49
|
+
end
|
50
|
+
|
51
|
+
unless monitor = @monitors[io]
|
52
|
+
monitor = Monitor.new(@selector, io)
|
53
|
+
@monitors[io] = monitor
|
54
|
+
end
|
55
|
+
|
56
|
+
yield monitor
|
57
|
+
end
|
58
|
+
|
59
|
+
# Run the reactor, waiting for events or wakeup signal
|
60
|
+
def run_once(timeout = nil)
|
61
|
+
@selector.select(timeout) do |monitor|
|
62
|
+
monitor.value.resume
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
class Monitor
|
67
|
+
def initialize(selector, io)
|
68
|
+
@selector = selector
|
69
|
+
@io = io
|
70
|
+
@interests = {}
|
71
|
+
end
|
72
|
+
|
73
|
+
def wait_readable
|
74
|
+
wait :r
|
75
|
+
end
|
76
|
+
|
77
|
+
def wait_writable
|
78
|
+
wait :w
|
79
|
+
end
|
80
|
+
|
81
|
+
def wait(interest)
|
82
|
+
raise "Already waiting for #{interest.inspect}" if @interests.include?(interest)
|
83
|
+
@interests[interest] = Task.current
|
84
|
+
reregister
|
85
|
+
Task.suspend :iowait
|
86
|
+
end
|
87
|
+
|
88
|
+
def reregister
|
89
|
+
if @monitor
|
90
|
+
@monitor.close
|
91
|
+
@monitor = nil
|
92
|
+
end
|
93
|
+
|
94
|
+
if interests_symbol
|
95
|
+
@monitor = @selector.register(@io, interests_symbol)
|
96
|
+
@monitor.value = self
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def interests_symbol
|
101
|
+
case @interests.keys
|
102
|
+
when [:r]
|
103
|
+
:r
|
104
|
+
when [:w]
|
105
|
+
:w
|
106
|
+
when [:r, :w]
|
107
|
+
:rw
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def resume
|
112
|
+
raise "No monitor" unless @monitor
|
113
|
+
|
114
|
+
if @monitor.readable?
|
115
|
+
resume_for :r
|
116
|
+
end
|
117
|
+
|
118
|
+
if @monitor.writable?
|
119
|
+
resume_for :w
|
120
|
+
end
|
121
|
+
|
122
|
+
reregister
|
123
|
+
end
|
124
|
+
|
125
|
+
def resume_for(interest)
|
126
|
+
task = @interests.delete(interest)
|
127
|
+
|
128
|
+
if task
|
129
|
+
if task.running?
|
130
|
+
task.resume
|
131
|
+
else
|
132
|
+
raise "reactor attempted to resume a dead task"
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
data/lib/ringleader/version.rb
CHANGED
data/ringleader.gemspec
CHANGED
@@ -16,8 +16,8 @@ Gem::Specification.new do |gem|
|
|
16
16
|
gem.version = Ringleader::VERSION
|
17
17
|
gem.required_ruby_version = "> 1.9.3"
|
18
18
|
|
19
|
-
gem.add_dependency "celluloid", "~> 0.
|
20
|
-
gem.add_dependency "celluloid-io", "~> 0.
|
19
|
+
gem.add_dependency "celluloid", "~> 0.15.0"
|
20
|
+
gem.add_dependency "celluloid-io", "~> 0.15.0"
|
21
21
|
gem.add_dependency "reel", "~> 0.3.0"
|
22
22
|
gem.add_dependency "trollop", "~> 1.16.2"
|
23
23
|
gem.add_dependency "rainbow", "~> 1.1.4"
|
data/spec/fixtures/chruby.yml
CHANGED
@@ -86,7 +86,7 @@ describe Ringleader::Config do
|
|
86
86
|
context "with a config with an 'chruby' key instead of a 'command'" do
|
87
87
|
it "replaces the command with a command to use chruby" do
|
88
88
|
config = Ringleader::Config.new "spec/fixtures/chruby.yml"
|
89
|
-
expect(config.apps["chruby_app"].command).to eq("source /usr/local/share/chruby/chruby.sh ; source /usr/local/share/chruby/auto.sh ; cd /Users/
|
89
|
+
expect(config.apps["chruby_app"].command).to eq("source /usr/local/share/chruby/chruby.sh ; source /usr/local/share/chruby/auto.sh ; cd /Users/demo/apps/main ; foreman start")
|
90
90
|
end
|
91
91
|
end
|
92
92
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ringleader
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.8
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2014-05-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: celluloid
|
@@ -18,7 +18,7 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 0.
|
21
|
+
version: 0.15.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 0.
|
29
|
+
version: 0.15.0
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: celluloid-io
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
@@ -34,7 +34,7 @@ dependencies:
|
|
34
34
|
requirements:
|
35
35
|
- - ~>
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version: 0.
|
37
|
+
version: 0.15.0
|
38
38
|
type: :runtime
|
39
39
|
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -42,7 +42,7 @@ dependencies:
|
|
42
42
|
requirements:
|
43
43
|
- - ~>
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version: 0.
|
45
|
+
version: 0.15.0
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
47
|
name: reel
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
@@ -237,6 +237,7 @@ files:
|
|
237
237
|
- lib/ringleader.rb
|
238
238
|
- lib/ringleader/app.rb
|
239
239
|
- lib/ringleader/app_serializer.rb
|
240
|
+
- lib/ringleader/celluloid_fix.rb
|
240
241
|
- lib/ringleader/cli.rb
|
241
242
|
- lib/ringleader/config.rb
|
242
243
|
- lib/ringleader/controller.rb
|
@@ -278,7 +279,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
278
279
|
version: '0'
|
279
280
|
segments:
|
280
281
|
- 0
|
281
|
-
hash:
|
282
|
+
hash: 2596261918463299872
|
282
283
|
requirements: []
|
283
284
|
rubyforge_project:
|
284
285
|
rubygems_version: 1.8.23
|