noah 0.1-jruby → 0.2-jruby
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/bin/noah-watcher.rb +3 -57
- data/config/warble.rb +1 -1
- data/lib/noah/agent.rb +53 -0
- data/lib/noah/agents/dummy_agent.rb +29 -0
- data/lib/noah/agents/http_agent.rb +37 -0
- data/lib/noah/models/watchers.rb +9 -0
- data/lib/noah/version.rb +1 -1
- metadata +89 -25
data/bin/noah-watcher.rb
CHANGED
@@ -12,6 +12,7 @@ begin
|
|
12
12
|
require 'eventmachine'
|
13
13
|
require 'em-http-request'
|
14
14
|
require 'noah'
|
15
|
+
require 'noah/agent'
|
15
16
|
require 'json'
|
16
17
|
rescue LoadError
|
17
18
|
puts HELP
|
@@ -20,67 +21,13 @@ end
|
|
20
21
|
|
21
22
|
LOGGER = Logger.new(STDOUT)
|
22
23
|
|
23
|
-
class EventMachine::NoahAgent
|
24
|
-
include EM::Deferrable
|
25
|
-
|
26
|
-
@@watchers = Noah::Watcher.watch_list
|
27
|
-
|
28
|
-
def initialize
|
29
|
-
@logger = LOGGER
|
30
|
-
@logger.debug("Initializing with #{@@watchers.size} registered watches")
|
31
|
-
if EventMachine.reactor_running?
|
32
|
-
@worker = EM.spawn {|event, message, watch_list|
|
33
|
-
logger = LOGGER
|
34
|
-
logger.info("Worker initiated")
|
35
|
-
logger.debug("got event on http worker: #{event}")
|
36
|
-
matches = watch_list.find_all{|w| event =~ /^#{Base64.decode64(w)}/}
|
37
|
-
logger.debug("Found #{matches.size} matches for #{event}")
|
38
|
-
EM::Iterator.new(matches).each do |watch, iter|
|
39
|
-
p, ep = Base64.decode64(watch).split("|")
|
40
|
-
logger.info("Sending message to: #{ep} for pattern: #{p}")
|
41
|
-
http = EM::HttpRequest.new(ep, :connection_timeout => 2, :inactivity_timeout => 4).post :body => message
|
42
|
-
http.callback {
|
43
|
-
logger.info("Message posted to #{ep} successfully")
|
44
|
-
}
|
45
|
-
http.errback {
|
46
|
-
logger.error("Something went wrong")
|
47
|
-
}
|
48
|
-
iter.next
|
49
|
-
end
|
50
|
-
}
|
51
|
-
self.succeed("Succeed callback")
|
52
|
-
else
|
53
|
-
logger.fatal("Must be inside a reactor!")
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
def watchers
|
58
|
-
@@watchers.size
|
59
|
-
end
|
60
|
-
|
61
|
-
def reread_watchers
|
62
|
-
@logger.debug("Found new watches")
|
63
|
-
@logger.debug("Current watch count: #{@@watchers.size}")
|
64
|
-
@@watchers = Noah::Watcher.watch_list
|
65
|
-
@logger.debug("New watch count: #{@@watchers.size}")
|
66
|
-
#@logger.debug(@@watchers)
|
67
|
-
end
|
68
|
-
|
69
|
-
def broker(msg)
|
70
|
-
# This is just for testing for now
|
71
|
-
e,m = msg.split("|")
|
72
|
-
be = Base64.encode64(e).gsub("\n","")
|
73
|
-
@worker.notify e, m, @@watchers.clone
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
24
|
EventMachine.run do
|
78
25
|
EM.error_handler do |e|
|
79
|
-
|
26
|
+
LOGGER.warn(e)
|
80
27
|
end
|
81
28
|
logger = LOGGER
|
82
29
|
trap("INT") { logger.debug("Shutting down. Watches will not be fired");EM.stop }
|
83
|
-
noah =
|
30
|
+
noah = Noah::Agent.new
|
84
31
|
noah.errback{|x| logger.error("Errback: #{x}")}
|
85
32
|
noah.callback{|y| logger.info("Callback: #{y}")}
|
86
33
|
# Passing messages...like a boss
|
@@ -93,7 +40,6 @@ EventMachine.run do
|
|
93
40
|
r.on(:pmessage) do |pattern, event, message|
|
94
41
|
noah.reread_watchers if event =~ /^\/\/noah\/watcher\/.*/
|
95
42
|
master_channel.push "#{event}|#{message}"
|
96
|
-
logger.debug("Saw[#{event}]")
|
97
43
|
end
|
98
44
|
|
99
45
|
sub = master_channel.subscribe {|msg|
|
data/config/warble.rb
CHANGED
@@ -8,7 +8,7 @@ Warbler::Config.new do |config|
|
|
8
8
|
config.includes = FileList["config.ru"]
|
9
9
|
config.excludes = FileList["noah.gemspec", "Gemfile", "Gemfile.lock"]
|
10
10
|
config.bundler = false
|
11
|
-
config.gems += ["json", "ohm", "ohm-contrib", "sinatra", "
|
11
|
+
config.gems += ["json", "ohm", "ohm-contrib", "sinatra", "haml"]
|
12
12
|
config.gem_excludes = [/^(test|spec)\//]
|
13
13
|
config.public_html = FileList["views/**/*"]
|
14
14
|
config.webxml.booter = :rack
|
data/lib/noah/agent.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
$:.unshift(File.expand_path(File.join(File.dirname(__FILE__), "..", "lib")))
|
2
|
+
require 'rubygems'
|
3
|
+
require 'logger'
|
4
|
+
require 'noah'
|
5
|
+
require 'noah/agents/http_agent'
|
6
|
+
require 'noah/agents/dummy_agent'
|
7
|
+
|
8
|
+
module Noah
|
9
|
+
class Agent
|
10
|
+
include EM::Deferrable
|
11
|
+
|
12
|
+
Noah::Agents::HttpAgent.register
|
13
|
+
Noah::Agents::DummyAgent.register
|
14
|
+
|
15
|
+
@@watchers = Noah::Watcher.watch_list
|
16
|
+
@@agents = Noah::Watchers.agents
|
17
|
+
|
18
|
+
def initialize
|
19
|
+
@logger = LOGGER
|
20
|
+
@logger.debug("Initializing with #{@@watchers.size} registered watches")
|
21
|
+
@logger.debug("#{@@agents} agents registered")
|
22
|
+
if EventMachine.reactor_running?
|
23
|
+
self.succeed("Succeed callback")
|
24
|
+
else
|
25
|
+
logger.fatal("Must be inside a reactor!")
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def watchers
|
30
|
+
@@watchers.size
|
31
|
+
end
|
32
|
+
|
33
|
+
def http_worker
|
34
|
+
@http_worker
|
35
|
+
end
|
36
|
+
|
37
|
+
def reread_watchers
|
38
|
+
@logger.debug("Found new watches")
|
39
|
+
@logger.debug("Current watch count: #{@@watchers.size}")
|
40
|
+
@@watchers = Noah::Watcher.watch_list
|
41
|
+
@logger.debug("New watch count: #{@@watchers.size}")
|
42
|
+
end
|
43
|
+
|
44
|
+
def broker(msg)
|
45
|
+
e,m = msg.split("|")
|
46
|
+
be = Base64.encode64(e).gsub("\n","")
|
47
|
+
EM::Iterator.new(@@agents).each do |agent, iter|
|
48
|
+
agent.send(:notify, e, m, @@watchers.clone)
|
49
|
+
iter.next
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Noah::Agents
|
2
|
+
class DummyAgent
|
3
|
+
include EM::Deferrable
|
4
|
+
|
5
|
+
PREFIX = "dummy"
|
6
|
+
NAME = "dummy"
|
7
|
+
|
8
|
+
def self.register
|
9
|
+
Noah::Watchers.register_agent(self)
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.notify(event, message, watch_list)
|
13
|
+
logger = LOGGER
|
14
|
+
logger.info("#{NAME}: Worker initiated")
|
15
|
+
logger.debug("#{NAME}: got event - #{event}")
|
16
|
+
matches = watch_list.find_all{|w| event =~ /^#{Base64.decode64(w)}/}
|
17
|
+
logger.debug("#{NAME}: Found #{matches.size} possible matches for #{event}")
|
18
|
+
EM::Iterator.new(matches).each do |watch, iter|
|
19
|
+
p, ep = Base64.decode64(watch).split("|")
|
20
|
+
if ep =~ /^#{PREFIX}/
|
21
|
+
logger.info("#{NAME}: Sending message to: #{ep} for pattern: #{p}")
|
22
|
+
logger.debug("#{NAME}: message received: #{message}")
|
23
|
+
end
|
24
|
+
iter.next
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'logger'
|
2
|
+
|
3
|
+
module Noah::Agents
|
4
|
+
class HttpAgent
|
5
|
+
include EM::Deferrable
|
6
|
+
|
7
|
+
PREFIX = "http"
|
8
|
+
NAME = "http"
|
9
|
+
|
10
|
+
def self.register
|
11
|
+
Noah::Watchers.register_agent(self)
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.notify(event, message, watch_list)
|
15
|
+
logger = LOGGER
|
16
|
+
logger.info("#{NAME}: Worker initiated")
|
17
|
+
logger.debug("#{NAME}: got event - #{event}")
|
18
|
+
matches = watch_list.find_all{|w| event =~ /^#{Base64.decode64(w)}/}
|
19
|
+
logger.debug("#{PREFIX}: Found #{matches.size} possible matches for #{event}")
|
20
|
+
EM::Iterator.new(matches).each do |watch, iter|
|
21
|
+
p, ep = Base64.decode64(watch).split("|")
|
22
|
+
if ep =~ /^#{PREFIX}/
|
23
|
+
logger.info("#{NAME}: Sending message to (#{ep}) for pattern (#{p})")
|
24
|
+
http = EM::HttpRequest.new(ep, :connection_timeout => 2, :inactivity_timeout => 4).post :body => message
|
25
|
+
http.callback {
|
26
|
+
logger.info("#{NAME}: Message posted to #{ep} successfully")
|
27
|
+
}
|
28
|
+
http.errback {
|
29
|
+
logger.error("#{NAME}: Something went wrong with #{ep}")
|
30
|
+
}
|
31
|
+
iter.next
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
data/lib/noah/models/watchers.rb
CHANGED
@@ -55,8 +55,17 @@ module Noah
|
|
55
55
|
end
|
56
56
|
|
57
57
|
class Watchers
|
58
|
+
@@agents = []
|
58
59
|
def self.all(options = {})
|
59
60
|
options.empty? ? Watcher.all.sort : Watcher.find(options).sort
|
60
61
|
end
|
62
|
+
|
63
|
+
def self.register_agent(agent_class)
|
64
|
+
@@agents << agent_class
|
65
|
+
end
|
66
|
+
|
67
|
+
def self.agents
|
68
|
+
@@agents
|
69
|
+
end
|
61
70
|
end
|
62
71
|
end
|
data/lib/noah/version.rb
CHANGED
metadata
CHANGED
@@ -1,8 +1,11 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: noah
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 2
|
8
|
+
version: "0.2"
|
6
9
|
platform: jruby
|
7
10
|
authors:
|
8
11
|
- John E. Vincent
|
@@ -10,17 +13,22 @@ autorequire:
|
|
10
13
|
bindir: bin
|
11
14
|
cert_chain: []
|
12
15
|
|
13
|
-
date: 2011-03-
|
16
|
+
date: 2011-03-15 00:00:00 -04:00
|
14
17
|
default_executable:
|
15
18
|
dependencies:
|
16
19
|
- !ruby/object:Gem::Dependency
|
17
20
|
name: eventmachine
|
18
21
|
prerelease: false
|
19
22
|
requirement: &id001 !ruby/object:Gem::Requirement
|
20
|
-
none: false
|
21
23
|
requirements:
|
22
24
|
- - "="
|
23
25
|
- !ruby/object:Gem::Version
|
26
|
+
segments:
|
27
|
+
- 1
|
28
|
+
- 0
|
29
|
+
- 0
|
30
|
+
- beta
|
31
|
+
- 3
|
24
32
|
version: 1.0.0.beta.3
|
25
33
|
type: :runtime
|
26
34
|
version_requirements: *id001
|
@@ -28,10 +36,15 @@ dependencies:
|
|
28
36
|
name: em-http-request
|
29
37
|
prerelease: false
|
30
38
|
requirement: &id002 !ruby/object:Gem::Requirement
|
31
|
-
none: false
|
32
39
|
requirements:
|
33
40
|
- - "="
|
34
41
|
- !ruby/object:Gem::Version
|
42
|
+
segments:
|
43
|
+
- 1
|
44
|
+
- 0
|
45
|
+
- 0
|
46
|
+
- beta
|
47
|
+
- 3
|
35
48
|
version: 1.0.0.beta.3
|
36
49
|
type: :runtime
|
37
50
|
version_requirements: *id002
|
@@ -39,10 +52,13 @@ dependencies:
|
|
39
52
|
name: redis
|
40
53
|
prerelease: false
|
41
54
|
requirement: &id003 !ruby/object:Gem::Requirement
|
42
|
-
none: false
|
43
55
|
requirements:
|
44
56
|
- - "="
|
45
57
|
- !ruby/object:Gem::Version
|
58
|
+
segments:
|
59
|
+
- 2
|
60
|
+
- 1
|
61
|
+
- 1
|
46
62
|
version: 2.1.1
|
47
63
|
type: :runtime
|
48
64
|
version_requirements: *id003
|
@@ -50,10 +66,13 @@ dependencies:
|
|
50
66
|
name: nest
|
51
67
|
prerelease: false
|
52
68
|
requirement: &id004 !ruby/object:Gem::Requirement
|
53
|
-
none: false
|
54
69
|
requirements:
|
55
70
|
- - "="
|
56
71
|
- !ruby/object:Gem::Version
|
72
|
+
segments:
|
73
|
+
- 1
|
74
|
+
- 1
|
75
|
+
- 0
|
57
76
|
version: 1.1.0
|
58
77
|
type: :runtime
|
59
78
|
version_requirements: *id004
|
@@ -61,10 +80,13 @@ dependencies:
|
|
61
80
|
name: rack
|
62
81
|
prerelease: false
|
63
82
|
requirement: &id005 !ruby/object:Gem::Requirement
|
64
|
-
none: false
|
65
83
|
requirements:
|
66
84
|
- - "="
|
67
85
|
- !ruby/object:Gem::Version
|
86
|
+
segments:
|
87
|
+
- 1
|
88
|
+
- 2
|
89
|
+
- 1
|
68
90
|
version: 1.2.1
|
69
91
|
type: :runtime
|
70
92
|
version_requirements: *id005
|
@@ -72,10 +94,13 @@ dependencies:
|
|
72
94
|
name: tilt
|
73
95
|
prerelease: false
|
74
96
|
requirement: &id006 !ruby/object:Gem::Requirement
|
75
|
-
none: false
|
76
97
|
requirements:
|
77
98
|
- - "="
|
78
99
|
- !ruby/object:Gem::Version
|
100
|
+
segments:
|
101
|
+
- 1
|
102
|
+
- 2
|
103
|
+
- 2
|
79
104
|
version: 1.2.2
|
80
105
|
type: :runtime
|
81
106
|
version_requirements: *id006
|
@@ -83,10 +108,13 @@ dependencies:
|
|
83
108
|
name: sinatra
|
84
109
|
prerelease: false
|
85
110
|
requirement: &id007 !ruby/object:Gem::Requirement
|
86
|
-
none: false
|
87
111
|
requirements:
|
88
112
|
- - "="
|
89
113
|
- !ruby/object:Gem::Version
|
114
|
+
segments:
|
115
|
+
- 1
|
116
|
+
- 1
|
117
|
+
- 2
|
90
118
|
version: 1.1.2
|
91
119
|
type: :runtime
|
92
120
|
version_requirements: *id007
|
@@ -94,10 +122,13 @@ dependencies:
|
|
94
122
|
name: ohm
|
95
123
|
prerelease: false
|
96
124
|
requirement: &id008 !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
125
|
requirements:
|
99
126
|
- - "="
|
100
127
|
- !ruby/object:Gem::Version
|
128
|
+
segments:
|
129
|
+
- 0
|
130
|
+
- 1
|
131
|
+
- 3
|
101
132
|
version: 0.1.3
|
102
133
|
type: :runtime
|
103
134
|
version_requirements: *id008
|
@@ -105,10 +136,13 @@ dependencies:
|
|
105
136
|
name: ohm-contrib
|
106
137
|
prerelease: false
|
107
138
|
requirement: &id009 !ruby/object:Gem::Requirement
|
108
|
-
none: false
|
109
139
|
requirements:
|
110
140
|
- - "="
|
111
141
|
- !ruby/object:Gem::Version
|
142
|
+
segments:
|
143
|
+
- 0
|
144
|
+
- 1
|
145
|
+
- 1
|
112
146
|
version: 0.1.1
|
113
147
|
type: :runtime
|
114
148
|
version_requirements: *id009
|
@@ -116,10 +150,13 @@ dependencies:
|
|
116
150
|
name: haml
|
117
151
|
prerelease: false
|
118
152
|
requirement: &id010 !ruby/object:Gem::Requirement
|
119
|
-
none: false
|
120
153
|
requirements:
|
121
154
|
- - "="
|
122
155
|
- !ruby/object:Gem::Version
|
156
|
+
segments:
|
157
|
+
- 3
|
158
|
+
- 0
|
159
|
+
- 25
|
123
160
|
version: 3.0.25
|
124
161
|
type: :runtime
|
125
162
|
version_requirements: *id010
|
@@ -127,10 +164,13 @@ dependencies:
|
|
127
164
|
name: vegas
|
128
165
|
prerelease: false
|
129
166
|
requirement: &id011 !ruby/object:Gem::Requirement
|
130
|
-
none: false
|
131
167
|
requirements:
|
132
168
|
- - "="
|
133
169
|
- !ruby/object:Gem::Version
|
170
|
+
segments:
|
171
|
+
- 0
|
172
|
+
- 1
|
173
|
+
- 8
|
134
174
|
version: 0.1.8
|
135
175
|
type: :runtime
|
136
176
|
version_requirements: *id011
|
@@ -138,10 +178,11 @@ dependencies:
|
|
138
178
|
name: jruby-openssl
|
139
179
|
prerelease: false
|
140
180
|
requirement: &id012 !ruby/object:Gem::Requirement
|
141
|
-
none: false
|
142
181
|
requirements:
|
143
182
|
- - ">="
|
144
183
|
- !ruby/object:Gem::Version
|
184
|
+
segments:
|
185
|
+
- 0
|
145
186
|
version: "0"
|
146
187
|
type: :runtime
|
147
188
|
version_requirements: *id012
|
@@ -149,10 +190,11 @@ dependencies:
|
|
149
190
|
name: json
|
150
191
|
prerelease: false
|
151
192
|
requirement: &id013 !ruby/object:Gem::Requirement
|
152
|
-
none: false
|
153
193
|
requirements:
|
154
194
|
- - ">="
|
155
195
|
- !ruby/object:Gem::Version
|
196
|
+
segments:
|
197
|
+
- 0
|
156
198
|
version: "0"
|
157
199
|
type: :runtime
|
158
200
|
version_requirements: *id013
|
@@ -160,10 +202,13 @@ dependencies:
|
|
160
202
|
name: warbler
|
161
203
|
prerelease: false
|
162
204
|
requirement: &id014 !ruby/object:Gem::Requirement
|
163
|
-
none: false
|
164
205
|
requirements:
|
165
206
|
- - "="
|
166
207
|
- !ruby/object:Gem::Version
|
208
|
+
segments:
|
209
|
+
- 1
|
210
|
+
- 2
|
211
|
+
- 1
|
167
212
|
version: 1.2.1
|
168
213
|
type: :development
|
169
214
|
version_requirements: *id014
|
@@ -171,10 +216,13 @@ dependencies:
|
|
171
216
|
name: diff-lcs
|
172
217
|
prerelease: false
|
173
218
|
requirement: &id015 !ruby/object:Gem::Requirement
|
174
|
-
none: false
|
175
219
|
requirements:
|
176
220
|
- - "="
|
177
221
|
- !ruby/object:Gem::Version
|
222
|
+
segments:
|
223
|
+
- 1
|
224
|
+
- 1
|
225
|
+
- 2
|
178
226
|
version: 1.1.2
|
179
227
|
type: :development
|
180
228
|
version_requirements: *id015
|
@@ -182,10 +230,13 @@ dependencies:
|
|
182
230
|
name: sinatra-reloader
|
183
231
|
prerelease: false
|
184
232
|
requirement: &id016 !ruby/object:Gem::Requirement
|
185
|
-
none: false
|
186
233
|
requirements:
|
187
234
|
- - "="
|
188
235
|
- !ruby/object:Gem::Version
|
236
|
+
segments:
|
237
|
+
- 0
|
238
|
+
- 5
|
239
|
+
- 0
|
189
240
|
version: 0.5.0
|
190
241
|
type: :development
|
191
242
|
version_requirements: *id016
|
@@ -193,10 +244,12 @@ dependencies:
|
|
193
244
|
name: rspec
|
194
245
|
prerelease: false
|
195
246
|
requirement: &id017 !ruby/object:Gem::Requirement
|
196
|
-
none: false
|
197
247
|
requirements:
|
198
248
|
- - ~>
|
199
249
|
- !ruby/object:Gem::Version
|
250
|
+
segments:
|
251
|
+
- 2
|
252
|
+
- 5
|
200
253
|
version: "2.5"
|
201
254
|
type: :development
|
202
255
|
version_requirements: *id017
|
@@ -204,10 +257,13 @@ dependencies:
|
|
204
257
|
name: rcov
|
205
258
|
prerelease: false
|
206
259
|
requirement: &id018 !ruby/object:Gem::Requirement
|
207
|
-
none: false
|
208
260
|
requirements:
|
209
261
|
- - "="
|
210
262
|
- !ruby/object:Gem::Version
|
263
|
+
segments:
|
264
|
+
- 0
|
265
|
+
- 9
|
266
|
+
- 9
|
211
267
|
version: 0.9.9
|
212
268
|
type: :development
|
213
269
|
version_requirements: *id018
|
@@ -215,10 +271,13 @@ dependencies:
|
|
215
271
|
name: rack-test
|
216
272
|
prerelease: false
|
217
273
|
requirement: &id019 !ruby/object:Gem::Requirement
|
218
|
-
none: false
|
219
274
|
requirements:
|
220
275
|
- - "="
|
221
276
|
- !ruby/object:Gem::Version
|
277
|
+
segments:
|
278
|
+
- 0
|
279
|
+
- 5
|
280
|
+
- 7
|
222
281
|
version: 0.5.7
|
223
282
|
type: :development
|
224
283
|
version_requirements: *id019
|
@@ -263,6 +322,9 @@ files:
|
|
263
322
|
- examples/websocket.html
|
264
323
|
- examples/websocket.rb
|
265
324
|
- lib/noah.rb
|
325
|
+
- lib/noah/agent.rb
|
326
|
+
- lib/noah/agents/dummy_agent.rb
|
327
|
+
- lib/noah/agents/http_agent.rb
|
266
328
|
- lib/noah/app.rb
|
267
329
|
- lib/noah/application_routes.rb
|
268
330
|
- lib/noah/ark.rb
|
@@ -315,21 +377,23 @@ rdoc_options: []
|
|
315
377
|
require_paths:
|
316
378
|
- lib
|
317
379
|
required_ruby_version: !ruby/object:Gem::Requirement
|
318
|
-
none: false
|
319
380
|
requirements:
|
320
381
|
- - ">="
|
321
382
|
- !ruby/object:Gem::Version
|
383
|
+
segments:
|
384
|
+
- 0
|
322
385
|
version: "0"
|
323
386
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
324
|
-
none: false
|
325
387
|
requirements:
|
326
388
|
- - ">="
|
327
389
|
- !ruby/object:Gem::Version
|
390
|
+
segments:
|
391
|
+
- 0
|
328
392
|
version: "0"
|
329
393
|
requirements: []
|
330
394
|
|
331
395
|
rubyforge_project: noah
|
332
|
-
rubygems_version: 1.
|
396
|
+
rubygems_version: 1.3.6
|
333
397
|
signing_key:
|
334
398
|
specification_version: 3
|
335
399
|
summary: Application registry based on Apache Zookeeper
|