droid 1.0.3 → 1.1.0
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/.gitignore +6 -0
- data/Gemfile +3 -0
- data/Rakefile +6 -32
- data/droid.gemspec +22 -91
- data/lib/droid.rb +5 -4
- data/lib/droid/heroku.rb +0 -61
- data/lib/droid/json_server.rb +1 -1
- data/lib/droid/queue.rb +2 -1
- data/lib/droid/request.rb +1 -2
- data/lib/droid/version.rb +5 -0
- data/spec/publish_spec.rb +2 -2
- data/spec/response_spec.rb +5 -5
- data/spec/spec_helper.rb +3 -4
- data/spec/utils_spec.rb +11 -11
- data/spec/wait_for_port_spec.rb +3 -3
- metadata +109 -118
- data/VERSION +0 -1
- data/examples/async_reply.rb +0 -25
- data/examples/heroku_async_reply.rb +0 -22
- data/lib/droid/heroku/stats.rb +0 -14
- data/lib/heroku_droid.rb +0 -1
- data/lib/local_stats.rb +0 -1
- data/lib/memcache_cluster.rb +0 -1
- data/lib/stats.rb +0 -1
data/.gitignore
CHANGED
data/Gemfile
ADDED
data/Rakefile
CHANGED
@@ -1,37 +1,11 @@
|
|
1
|
-
|
2
|
-
require
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
require "bundler/gem_tasks"
|
3
3
|
|
4
|
-
|
5
|
-
require 'jeweler'
|
6
|
-
Jeweler::Tasks.new do |gem|
|
7
|
-
gem.name = "droid"
|
8
|
-
gem.summary = %Q{AMQP Wrapper Library}
|
9
|
-
gem.description = %Q{Easy to use AMQP Library with constructs for typical usage patterns}
|
10
|
-
gem.email = "ricardo@heroku.com"
|
11
|
-
gem.homepage = "http://heroku.com"
|
12
|
-
gem.authors = ["Ricardo Chimal, Jr."]
|
4
|
+
require "rake/testtask"
|
13
5
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
gem.add_dependency 'json_pure', '>= 1.2.0'
|
18
|
-
gem.add_dependency 'rest-client', '>= 1.2.0'
|
19
|
-
gem.add_dependency 'amqp', '0.6.7'
|
20
|
-
gem.add_dependency 'bunny', '~> 0.6.0'
|
21
|
-
gem.add_dependency 'eventmachine_httpserver', '0.2.0'
|
22
|
-
end
|
23
|
-
Jeweler::GemcutterTasks.new
|
24
|
-
rescue LoadError
|
25
|
-
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
26
|
-
end
|
27
|
-
|
28
|
-
require 'rake/testtask'
|
29
|
-
Rake::TestTask.new(:spec) do |spec|
|
30
|
-
spec.libs << 'lib' << 'spec'
|
31
|
-
spec.pattern = 'spec/**/*_spec.rb'
|
32
|
-
spec.verbose = true
|
6
|
+
Rake::TestTask.new(:spec) do |t|
|
7
|
+
t.pattern = "spec/*_spec.rb"
|
8
|
+
t.verbose = true
|
33
9
|
end
|
34
10
|
|
35
|
-
task :spec => :check_dependencies
|
36
|
-
|
37
11
|
task :default => :spec
|
data/droid.gemspec
CHANGED
@@ -1,97 +1,28 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/droid/version', __FILE__)
|
5
3
|
|
6
|
-
Gem::Specification.new do |
|
7
|
-
|
8
|
-
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.authors = ["Ricardo Chimal, Jr."]
|
6
|
+
gem.email = ["ricardo@heroku.com"]
|
7
|
+
gem.description = %q{Easy to use AMQP Library with constructs for typical usage patterns}
|
8
|
+
gem.summary = %q{AMQP Wrapper Library}
|
9
|
+
gem.homepage = %q{http://www.heroku.com}
|
9
10
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
s.files = [
|
18
|
-
".gitignore",
|
19
|
-
"Rakefile",
|
20
|
-
"VERSION",
|
21
|
-
"bin/bleedq",
|
22
|
-
"droid.gemspec",
|
23
|
-
"examples/async_reply.rb",
|
24
|
-
"examples/heroku_async_reply.rb",
|
25
|
-
"examples/sync.rb",
|
26
|
-
"examples/worker.rb",
|
27
|
-
"lib/droid.rb",
|
28
|
-
"lib/droid/em.rb",
|
29
|
-
"lib/droid/heroku.rb",
|
30
|
-
"lib/droid/heroku/local_stats.rb",
|
31
|
-
"lib/droid/heroku/logger_client.rb",
|
32
|
-
"lib/droid/heroku/memcache_cluster.rb",
|
33
|
-
"lib/droid/heroku/stats.rb",
|
34
|
-
"lib/droid/json_server.rb",
|
35
|
-
"lib/droid/monkey.rb",
|
36
|
-
"lib/droid/publish.rb",
|
37
|
-
"lib/droid/queue.rb",
|
38
|
-
"lib/droid/request.rb",
|
39
|
-
"lib/droid/sync.rb",
|
40
|
-
"lib/droid/utilization.rb",
|
41
|
-
"lib/droid/utils.rb",
|
42
|
-
"lib/heroku_droid.rb",
|
43
|
-
"lib/local_stats.rb",
|
44
|
-
"lib/memcache_cluster.rb",
|
45
|
-
"lib/stats.rb",
|
46
|
-
"spec/publish_spec.rb",
|
47
|
-
"spec/response_spec.rb",
|
48
|
-
"spec/spec_helper.rb",
|
49
|
-
"spec/utils_spec.rb",
|
50
|
-
"spec/wait_for_port_spec.rb"
|
51
|
-
]
|
52
|
-
s.homepage = %q{http://heroku.com}
|
53
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
54
|
-
s.require_paths = ["lib"]
|
55
|
-
s.rubygems_version = %q{1.3.6}
|
56
|
-
s.summary = %q{AMQP Wrapper Library}
|
57
|
-
s.test_files = [
|
58
|
-
"spec/publish_spec.rb",
|
59
|
-
"spec/response_spec.rb",
|
60
|
-
"spec/spec_helper.rb",
|
61
|
-
"spec/utils_spec.rb",
|
62
|
-
"spec/wait_for_port_spec.rb",
|
63
|
-
"examples/async_reply.rb",
|
64
|
-
"examples/heroku_async_reply.rb",
|
65
|
-
"examples/sync.rb",
|
66
|
-
"examples/worker.rb"
|
67
|
-
]
|
11
|
+
gem.rubygems_version = %q{1.3.7}
|
12
|
+
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
13
|
+
gem.files = `git ls-files`.split("\n")
|
14
|
+
gem.test_files = `git ls-files -- {examples,spec}/*`.split("\n")
|
15
|
+
gem.name = "droid"
|
16
|
+
gem.require_paths = ["lib"]
|
17
|
+
gem.version = Droid.version
|
68
18
|
|
69
|
-
|
70
|
-
|
71
|
-
|
19
|
+
gem.add_dependency "json_pure", ">= 1.2.0"
|
20
|
+
gem.add_dependency "rest-client", ">= 1.2.0"
|
21
|
+
gem.add_dependency "amqp", "= 0.6.7"
|
22
|
+
gem.add_dependency "bunny", "~> 0.7.0"
|
23
|
+
gem.add_dependency "eventmachine_httpserver", "= 0.2.0"
|
72
24
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
s.add_runtime_dependency(%q<rest-client>, [">= 1.2.0"])
|
77
|
-
s.add_runtime_dependency(%q<amqp>, ["= 0.6.7"])
|
78
|
-
s.add_runtime_dependency(%q<bunny>, ["~> 0.6.0"])
|
79
|
-
s.add_runtime_dependency(%q<eventmachine_httpserver>, ["= 0.2.0"])
|
80
|
-
else
|
81
|
-
s.add_dependency(%q<baconmocha>, [">= 0"])
|
82
|
-
s.add_dependency(%q<json_pure>, [">= 1.2.0"])
|
83
|
-
s.add_dependency(%q<rest-client>, [">= 1.2.0"])
|
84
|
-
s.add_dependency(%q<amqp>, ["= 0.6.7"])
|
85
|
-
s.add_dependency(%q<bunny>, ["~> 0.6.0"])
|
86
|
-
s.add_dependency(%q<eventmachine_httpserver>, ["= 0.2.0"])
|
87
|
-
end
|
88
|
-
else
|
89
|
-
s.add_dependency(%q<baconmocha>, [">= 0"])
|
90
|
-
s.add_dependency(%q<json_pure>, [">= 1.2.0"])
|
91
|
-
s.add_dependency(%q<rest-client>, [">= 1.2.0"])
|
92
|
-
s.add_dependency(%q<amqp>, ["= 0.6.7"])
|
93
|
-
s.add_dependency(%q<bunny>, ["~> 0.6.0"])
|
94
|
-
s.add_dependency(%q<eventmachine_httpserver>, ["= 0.2.0"])
|
95
|
-
end
|
25
|
+
gem.add_development_dependency "rake"
|
26
|
+
gem.add_development_dependency "mocha"
|
27
|
+
gem.add_development_dependency "minitest"
|
96
28
|
end
|
97
|
-
|
data/lib/droid.rb
CHANGED
@@ -8,9 +8,11 @@ if RUBY_VERSION[0,3] == "1.8"
|
|
8
8
|
DroidTimer = SystemTimer
|
9
9
|
rescue LoadError
|
10
10
|
# systemtimer wasn't available, fall back to Timeout
|
11
|
+
require 'timeout'
|
11
12
|
DroidTimer = Timeout
|
12
13
|
end
|
13
14
|
else
|
15
|
+
require 'timeout'
|
14
16
|
DroidTimer = Timeout
|
15
17
|
end
|
16
18
|
|
@@ -20,6 +22,9 @@ if !defined?(JSON) && !defined?(JSON_LOADED)
|
|
20
22
|
require 'json/pure'
|
21
23
|
end
|
22
24
|
|
25
|
+
|
26
|
+
require 'droid/version'
|
27
|
+
|
23
28
|
require 'droid/monkey'
|
24
29
|
|
25
30
|
require 'droid/utils'
|
@@ -30,10 +35,6 @@ require 'droid/queue'
|
|
30
35
|
require 'droid/em'
|
31
36
|
|
32
37
|
class Droid
|
33
|
-
def self.version
|
34
|
-
@@version ||= File.read(File.dirname(__FILE__) + '/../VERSION').strip
|
35
|
-
end
|
36
|
-
|
37
38
|
def self.name
|
38
39
|
@@name ||= nil
|
39
40
|
end
|
data/lib/droid/heroku.rb
CHANGED
@@ -24,18 +24,6 @@ rescue LoadError => e
|
|
24
24
|
end
|
25
25
|
|
26
26
|
class HerokuDroid < Droid
|
27
|
-
attr_reader :extended_stats
|
28
|
-
|
29
|
-
def initialize(name, opts={}, &blk)
|
30
|
-
@extended_stats = !(opts[:extended_stats] == false)
|
31
|
-
|
32
|
-
super(name, opts) do |droid|
|
33
|
-
setup_standard_topics(self) unless opts[:standard_topics] == false
|
34
|
-
LocalStats.attach
|
35
|
-
blk.call(self)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
27
|
def stats(&blk)
|
40
28
|
@stats = blk
|
41
29
|
out = call_stats
|
@@ -50,53 +38,4 @@ class HerokuDroid < Droid
|
|
50
38
|
def name
|
51
39
|
Droid.name
|
52
40
|
end
|
53
|
-
|
54
|
-
def ruby_path
|
55
|
-
if File.exists?("/usr/ruby1.8.6/bin/ruby")
|
56
|
-
"/usr/ruby1.8.6/bin"
|
57
|
-
else
|
58
|
-
"/usr/local/bin"
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
def setup_standard_topics(droid)
|
63
|
-
setup_ping_topic(droid)
|
64
|
-
end
|
65
|
-
|
66
|
-
def setup_ping_topic(droid)
|
67
|
-
require 'time'
|
68
|
-
|
69
|
-
droid.listener('ping').subscribe do |req|
|
70
|
-
Droid::Utilization.latency = (Time.now.to_f - req['departed_at']).abs
|
71
|
-
end
|
72
|
-
|
73
|
-
blk = Proc.new do |d|
|
74
|
-
begin
|
75
|
-
t1 = Time.now
|
76
|
-
response = {}.merge(LocalStats.stats)
|
77
|
-
|
78
|
-
estats = nil
|
79
|
-
if self.extended_stats
|
80
|
-
estats = droid.call_stats
|
81
|
-
estats = { :notes => estats } unless estats.kind_of?(Hash)
|
82
|
-
estats[:notes] ||= estats.map { |k, v| "#{v} #{k}" }.join(", ")
|
83
|
-
estats.merge!(LocalStats.extended_stats)
|
84
|
-
end
|
85
|
-
|
86
|
-
response.merge!({
|
87
|
-
:extended_stats => estats,
|
88
|
-
:droid_name => Droid.name,
|
89
|
-
:latency => Droid::Utilization.latency,
|
90
|
-
})
|
91
|
-
|
92
|
-
d.publish('pong', response.merge(:stat_collection => (Time.now - t1)))
|
93
|
-
rescue Object => e
|
94
|
-
log.error "Ping Block Error: #{e.class} -> #{e.message}", :exception => e
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
EM.add_timer(2) { blk.call(droid) }
|
99
|
-
EM.add_periodic_timer(50 + (rand*15).to_i) { blk.call(droid) }
|
100
|
-
end
|
101
41
|
end
|
102
|
-
|
data/lib/droid/json_server.rb
CHANGED
@@ -17,7 +17,7 @@ class Droid
|
|
17
17
|
default_response
|
18
18
|
else
|
19
19
|
method_name = "get_#{@http_request_uri.split("/")[1]}".gsub(/[^\d\w_]/,'').downcase
|
20
|
-
if public_methods.include?(method_name)
|
20
|
+
if public_methods.map(&:to_sym).include?(method_name.to_sym)
|
21
21
|
generate_response(method_name)
|
22
22
|
else
|
23
23
|
not_found_response
|
data/lib/droid/queue.rb
CHANGED
@@ -29,6 +29,7 @@ class Droid
|
|
29
29
|
def tag
|
30
30
|
s = "queue=#{q.name}"
|
31
31
|
s += " exchange=#{ex.name}" if ex
|
32
|
+
s
|
32
33
|
end
|
33
34
|
|
34
35
|
def subscribe(amqp_opts={}, opts={})
|
@@ -106,7 +107,7 @@ class Droid
|
|
106
107
|
class ReplyQueue < BaseQueue
|
107
108
|
def initialize(queue_name, opts={})
|
108
109
|
opts[:auto_delete] = true
|
109
|
-
super
|
110
|
+
super(queue_name, opts)
|
110
111
|
end
|
111
112
|
|
112
113
|
def setup
|
data/lib/droid/request.rb
CHANGED
@@ -72,8 +72,7 @@ class Droid
|
|
72
72
|
def publish(name, data, opts={}, popts={}, &block)
|
73
73
|
opts = default_publish_opts.merge(opts)
|
74
74
|
if block
|
75
|
-
|
76
|
-
Droid::ReplyQueue.new(opts[:reply_to]).subscribe(&block)
|
75
|
+
raise StandardError, "async publish/reply no longer directly supported... for now."
|
77
76
|
end
|
78
77
|
Droid.publish(name, data, opts, popts)
|
79
78
|
end
|
data/spec/publish_spec.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require 'spec_helper'
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
|
2
2
|
|
3
3
|
describe 'AMQP Publish' do
|
4
4
|
before do
|
@@ -8,7 +8,7 @@ describe 'AMQP Publish' do
|
|
8
8
|
|
9
9
|
it "publishes a message to a queue" do
|
10
10
|
@q = mock('queue')
|
11
|
-
::MQ.expects(:queue).with('topic').returns(@q)
|
11
|
+
::MQ.expects(:queue).with('topic', :passive => true).returns(@q)
|
12
12
|
@q.expects(:publish).with(@json, @publish_opts)
|
13
13
|
Droid.publish_to_q('topic', :x => 1, :y => 2)
|
14
14
|
end
|
data/spec/response_spec.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require 'spec_helper'
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
|
2
2
|
|
3
3
|
describe 'Request' do
|
4
4
|
before do
|
@@ -19,10 +19,10 @@ describe 'Request' do
|
|
19
19
|
end
|
20
20
|
|
21
21
|
it "allows access to response via symbols or strings in array access" do
|
22
|
-
@res['x'].
|
23
|
-
@res[:x].
|
24
|
-
@res['y'].
|
25
|
-
@res[:y].
|
22
|
+
@res['x'].must_be :==, 123
|
23
|
+
@res[:x].must_be :==, 123
|
24
|
+
@res['y'].must_be :==, 'abc'
|
25
|
+
@res[:y].must_be :==, 'abc'
|
26
26
|
end
|
27
27
|
|
28
28
|
it "calls ack on the header" do
|
data/spec/spec_helper.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
|
-
require '
|
2
|
-
require '
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'minitest/spec'
|
3
|
+
require 'mocha'
|
3
4
|
|
4
5
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
5
6
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
@@ -7,5 +8,3 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
7
8
|
require 'droid'
|
8
9
|
|
9
10
|
Droid.log.level = Logger::FATAL
|
10
|
-
|
11
|
-
Bacon.summary_on_exit
|
data/spec/utils_spec.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
-
require 'spec_helper'
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
|
2
2
|
|
3
3
|
describe 'Utils' do
|
4
4
|
before do
|
5
5
|
end
|
6
6
|
|
7
7
|
it "parses a json message" do
|
8
|
-
Droid::Utils.parse_message('{"x":1,"y":2}').
|
8
|
+
Droid::Utils.parse_message('{"x":1,"y":2}').must_be :==, {'x' => 1, 'y' => 2}
|
9
9
|
end
|
10
10
|
|
11
11
|
it "parses custom headers and force integers on a few values" do
|
@@ -19,25 +19,25 @@ describe 'Utils' do
|
|
19
19
|
|
20
20
|
h = Droid::Utils.parse_custom_headers(headers)
|
21
21
|
|
22
|
-
h.size.
|
23
|
-
h[:ttl].
|
24
|
-
h[:reply_to].
|
25
|
-
h[:published_on].
|
26
|
-
h[:event_hash].
|
22
|
+
h.size.must_be :==, 6
|
23
|
+
h[:ttl].must_be :==, -1
|
24
|
+
h[:reply_to].must_be :==, 'q.random.reply'
|
25
|
+
h[:published_on].must_be :==, 12345
|
26
|
+
h[:event_hash].must_be :==, 'x123'
|
27
27
|
end
|
28
28
|
|
29
29
|
it "raises an exception if the data to format for publish is not a hash" do
|
30
|
-
lambda { Droid::Utils.format_publish('bad payload') }.
|
30
|
+
lambda { Droid::Utils.format_publish('bad payload') }.must_raise Droid::BadPayload
|
31
31
|
end
|
32
32
|
|
33
33
|
it "generates a name for the instance" do
|
34
34
|
Socket.stubs(:gethostname).returns('deepblue.123')
|
35
|
-
Droid::Utils.generate_name_for_instance('woo').
|
35
|
+
Droid::Utils.generate_name_for_instance('woo').must_be :==, 'woo.deepblue.123'
|
36
36
|
end
|
37
37
|
|
38
38
|
it "generates queue name, really more like a generic identifier" do
|
39
39
|
Socket.stubs(:gethostname).returns('deepblue.123')
|
40
|
-
Droid::Utils.generate_queue('topic').
|
41
|
-
Droid::Utils.generate_queue('topic', 'local').
|
40
|
+
Droid::Utils.generate_queue('topic').must_be :==, "topic.deepblue.123.#{$$}"
|
41
|
+
Droid::Utils.generate_queue('topic', 'local').must_be :==, "topic.deepblue.123.local"
|
42
42
|
end
|
43
43
|
end
|
data/spec/wait_for_port_spec.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require 'spec_helper'
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
|
2
2
|
|
3
3
|
Thread.new do
|
4
4
|
sleep 2
|
@@ -10,7 +10,7 @@ describe 'Connectivity' do
|
|
10
10
|
start = Time.now
|
11
11
|
Droid.wait_for_tcp_port('localhost', 20_001)
|
12
12
|
finish = Time.now
|
13
|
-
(finish - start).
|
14
|
-
(finish - start).
|
13
|
+
(finish - start).must_be :>, 1
|
14
|
+
(finish - start).must_be :<, 3
|
15
15
|
end
|
16
16
|
end
|
metadata
CHANGED
@@ -1,120 +1,117 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: droid
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
- 1
|
7
|
-
- 0
|
8
|
-
- 3
|
9
|
-
version: 1.0.3
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.1.0
|
5
|
+
prerelease:
|
10
6
|
platform: ruby
|
11
|
-
authors:
|
7
|
+
authors:
|
12
8
|
- Ricardo Chimal, Jr.
|
13
9
|
autorequire:
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
dependencies:
|
20
|
-
- !ruby/object:Gem::Dependency
|
21
|
-
name: baconmocha
|
22
|
-
prerelease: false
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
-
requirements:
|
25
|
-
- - ">="
|
26
|
-
- !ruby/object:Gem::Version
|
27
|
-
segments:
|
28
|
-
- 0
|
29
|
-
version: "0"
|
30
|
-
type: :development
|
31
|
-
version_requirements: *id001
|
32
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-01-30 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
33
15
|
name: json_pure
|
34
|
-
|
35
|
-
|
36
|
-
requirements:
|
37
|
-
- -
|
38
|
-
- !ruby/object:Gem::Version
|
39
|
-
segments:
|
40
|
-
- 1
|
41
|
-
- 2
|
42
|
-
- 0
|
16
|
+
requirement: &2160293160 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
43
21
|
version: 1.2.0
|
44
22
|
type: :runtime
|
45
|
-
version_requirements: *id002
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
|
-
name: rest-client
|
48
23
|
prerelease: false
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
24
|
+
version_requirements: *2160293160
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rest-client
|
27
|
+
requirement: &2160292560 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
57
32
|
version: 1.2.0
|
58
33
|
type: :runtime
|
59
|
-
version_requirements: *id003
|
60
|
-
- !ruby/object:Gem::Dependency
|
61
|
-
name: amqp
|
62
34
|
prerelease: false
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
35
|
+
version_requirements: *2160292560
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: amqp
|
38
|
+
requirement: &2160292040 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - =
|
42
|
+
- !ruby/object:Gem::Version
|
71
43
|
version: 0.6.7
|
72
44
|
type: :runtime
|
73
|
-
version_requirements: *id004
|
74
|
-
- !ruby/object:Gem::Dependency
|
75
|
-
name: bunny
|
76
45
|
prerelease: false
|
77
|
-
|
78
|
-
|
46
|
+
version_requirements: *2160292040
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: bunny
|
49
|
+
requirement: &2160291540 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
79
52
|
- - ~>
|
80
|
-
- !ruby/object:Gem::Version
|
81
|
-
|
82
|
-
- 0
|
83
|
-
- 6
|
84
|
-
- 0
|
85
|
-
version: 0.6.0
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.7.0
|
86
55
|
type: :runtime
|
87
|
-
version_requirements: *id005
|
88
|
-
- !ruby/object:Gem::Dependency
|
89
|
-
name: eventmachine_httpserver
|
90
56
|
prerelease: false
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
57
|
+
version_requirements: *2160291540
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: eventmachine_httpserver
|
60
|
+
requirement: &2160291080 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - =
|
64
|
+
- !ruby/object:Gem::Version
|
99
65
|
version: 0.2.0
|
100
66
|
type: :runtime
|
101
|
-
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *2160291080
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
requirement: &2160290700 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *2160290700
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: mocha
|
82
|
+
requirement: &2160290160 !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
88
|
+
type: :development
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: *2160290160
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: minitest
|
93
|
+
requirement: &2160289680 !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
type: :development
|
100
|
+
prerelease: false
|
101
|
+
version_requirements: *2160289680
|
102
102
|
description: Easy to use AMQP Library with constructs for typical usage patterns
|
103
|
-
email:
|
104
|
-
|
103
|
+
email:
|
104
|
+
- ricardo@heroku.com
|
105
|
+
executables:
|
105
106
|
- bleedq
|
106
107
|
extensions: []
|
107
|
-
|
108
108
|
extra_rdoc_files: []
|
109
|
-
|
110
|
-
files:
|
109
|
+
files:
|
111
110
|
- .gitignore
|
111
|
+
- Gemfile
|
112
112
|
- Rakefile
|
113
|
-
- VERSION
|
114
113
|
- bin/bleedq
|
115
114
|
- droid.gemspec
|
116
|
-
- examples/async_reply.rb
|
117
|
-
- examples/heroku_async_reply.rb
|
118
115
|
- examples/sync.rb
|
119
116
|
- examples/worker.rb
|
120
117
|
- lib/droid.rb
|
@@ -123,7 +120,6 @@ files:
|
|
123
120
|
- lib/droid/heroku/local_stats.rb
|
124
121
|
- lib/droid/heroku/logger_client.rb
|
125
122
|
- lib/droid/heroku/memcache_cluster.rb
|
126
|
-
- lib/droid/heroku/stats.rb
|
127
123
|
- lib/droid/json_server.rb
|
128
124
|
- lib/droid/monkey.rb
|
129
125
|
- lib/droid/publish.rb
|
@@ -132,52 +128,47 @@ files:
|
|
132
128
|
- lib/droid/sync.rb
|
133
129
|
- lib/droid/utilization.rb
|
134
130
|
- lib/droid/utils.rb
|
135
|
-
- lib/
|
136
|
-
- lib/local_stats.rb
|
137
|
-
- lib/memcache_cluster.rb
|
138
|
-
- lib/stats.rb
|
131
|
+
- lib/droid/version.rb
|
139
132
|
- spec/publish_spec.rb
|
140
133
|
- spec/response_spec.rb
|
141
134
|
- spec/spec_helper.rb
|
142
135
|
- spec/utils_spec.rb
|
143
136
|
- spec/wait_for_port_spec.rb
|
144
|
-
|
145
|
-
homepage: http://heroku.com
|
137
|
+
homepage: http://www.heroku.com
|
146
138
|
licenses: []
|
147
|
-
|
148
139
|
post_install_message:
|
149
|
-
rdoc_options:
|
150
|
-
|
151
|
-
require_paths:
|
140
|
+
rdoc_options: []
|
141
|
+
require_paths:
|
152
142
|
- lib
|
153
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
143
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
144
|
+
none: false
|
145
|
+
requirements:
|
146
|
+
- - ! '>='
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: '0'
|
149
|
+
segments:
|
158
150
|
- 0
|
159
|
-
|
160
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
151
|
+
hash: -591860115473353597
|
152
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ! '>='
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
158
|
+
segments:
|
165
159
|
- 0
|
166
|
-
|
160
|
+
hash: -591860115473353597
|
167
161
|
requirements: []
|
168
|
-
|
169
162
|
rubyforge_project:
|
170
|
-
rubygems_version: 1.
|
163
|
+
rubygems_version: 1.8.11
|
171
164
|
signing_key:
|
172
165
|
specification_version: 3
|
173
166
|
summary: AMQP Wrapper Library
|
174
|
-
test_files:
|
167
|
+
test_files:
|
168
|
+
- examples/sync.rb
|
169
|
+
- examples/worker.rb
|
175
170
|
- spec/publish_spec.rb
|
176
171
|
- spec/response_spec.rb
|
177
172
|
- spec/spec_helper.rb
|
178
173
|
- spec/utils_spec.rb
|
179
174
|
- spec/wait_for_port_spec.rb
|
180
|
-
- examples/async_reply.rb
|
181
|
-
- examples/heroku_async_reply.rb
|
182
|
-
- examples/sync.rb
|
183
|
-
- examples/worker.rb
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
1.0.3
|
data/examples/async_reply.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
$:.unshift File.dirname(__FILE__) + '/../lib'
|
2
|
-
require 'droid'
|
3
|
-
|
4
|
-
def log
|
5
|
-
Droid.log
|
6
|
-
end
|
7
|
-
|
8
|
-
Droid.new('Example Reply') do |droid|
|
9
|
-
droid.worker('example.target').subscribe do |req|
|
10
|
-
log.debug "headers: #{req.header.headers.inspect}"
|
11
|
-
log.debug "event_hash should be woot -> #{req.droid_headers[:event_hash]}"
|
12
|
-
req.reply(:target_received_at => Time.now.to_i)
|
13
|
-
req.ack
|
14
|
-
end
|
15
|
-
|
16
|
-
droid.listener('example.check.target').subscribe do |req|
|
17
|
-
req.publish('example.target', { :checking => Time.now.to_i }) do |req2|
|
18
|
-
log.debug "event_hash should be woot -> #{req2.droid_headers[:event_hash]}"
|
19
|
-
log.info "We're done checking!"
|
20
|
-
Droid.stop_safe
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
droid.timer(2) { Droid.publish('example.check.target', {:sent_at => Time.now.to_i}, {:event_hash => "woot"}) }
|
25
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
$:.unshift File.dirname(__FILE__) + '/../lib/'
|
2
|
-
require 'heroku_droid'
|
3
|
-
|
4
|
-
def log
|
5
|
-
Droid.log
|
6
|
-
end
|
7
|
-
|
8
|
-
HerokuDroid.new('Example Reply') do |droid|
|
9
|
-
droid.worker('example.target').subscribe do |req|
|
10
|
-
req.reply(:target_received_at => Time.now.to_i)
|
11
|
-
req.ack
|
12
|
-
end
|
13
|
-
|
14
|
-
droid.listener('example.check.target').subscribe do |req|
|
15
|
-
req.publish('example.target', { :checking => Time.now.to_i }) do |req2|
|
16
|
-
log.info "We're done checking!"
|
17
|
-
Droid.stop_safe
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
EM.add_timer(2) { Droid.publish('example.check.target', :sent_at => Time.now.to_i ) }
|
22
|
-
end
|
data/lib/droid/heroku/stats.rb
DELETED
data/lib/heroku_droid.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require 'droid/heroku'
|
data/lib/local_stats.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require 'droid/heroku/local_stats'
|
data/lib/memcache_cluster.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require 'droid/heroku/memcache_cluster'
|
data/lib/stats.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require 'droid/heroku/stats'
|