cloudist 0.0.2 → 0.0.3
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/VERSION +1 -1
- data/cloudist.gemspec +114 -0
- data/examples/queue_message.rb +0 -2
- data/examples/sandwich_client.rb +15 -1
- data/examples/sandwich_worker.rb +19 -2
- data/lib/cloudist.rb +1 -1
- data/lib/cloudist/basic_queue.rb +2 -1
- data/lib/cloudist/job.rb +21 -8
- data/lib/cloudist/job_queue.rb +2 -2
- data/lib/cloudist/listener.rb +3 -4
- data/lib/cloudist/payload.rb +24 -15
- data/lib/cloudist/reply_queue.rb +1 -0
- data/lib/cloudist/request.rb +2 -2
- data/lib/cloudist/utils.rb +9 -0
- data/spec/cloudist/payload_spec.rb +16 -16
- metadata +51 -50
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.3
|
data/cloudist.gemspec
ADDED
@@ -0,0 +1,114 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{cloudist}
|
8
|
+
s.version = "0.0.3"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Ivan Vanderbyl"]
|
12
|
+
s.date = %q{2011-01-18}
|
13
|
+
s.description = %q{Cloudist is a simple, highly scalable job queue for Ruby applications, it can run within Rails, or on EC2, and does not load your entire Rails stack like delayed job does.}
|
14
|
+
s.email = %q{ivanvanderbyl@me.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE.txt",
|
17
|
+
"README.md"
|
18
|
+
]
|
19
|
+
s.files = [
|
20
|
+
".document",
|
21
|
+
".rspec",
|
22
|
+
"Gemfile",
|
23
|
+
"Gemfile.lock",
|
24
|
+
"LICENSE.txt",
|
25
|
+
"README.md",
|
26
|
+
"Rakefile",
|
27
|
+
"VERSION",
|
28
|
+
"cloudist.gemspec",
|
29
|
+
"examples/queue_message.rb",
|
30
|
+
"examples/sandwich_client.rb",
|
31
|
+
"examples/sandwich_worker.rb",
|
32
|
+
"lib/cloudist.rb",
|
33
|
+
"lib/cloudist/basic_queue.rb",
|
34
|
+
"lib/cloudist/core_ext/string.rb",
|
35
|
+
"lib/cloudist/errors.rb",
|
36
|
+
"lib/cloudist/job.rb",
|
37
|
+
"lib/cloudist/job_queue.rb",
|
38
|
+
"lib/cloudist/listener.rb",
|
39
|
+
"lib/cloudist/payload.rb",
|
40
|
+
"lib/cloudist/publisher.rb",
|
41
|
+
"lib/cloudist/reply_queue.rb",
|
42
|
+
"lib/cloudist/request.rb",
|
43
|
+
"lib/cloudist/utils.rb",
|
44
|
+
"lib/cloudist/worker.rb",
|
45
|
+
"spec/cloudist/basic_queue_spec.rb",
|
46
|
+
"spec/cloudist/job_spec.rb",
|
47
|
+
"spec/cloudist/payload_spec.rb",
|
48
|
+
"spec/cloudist/request_spec.rb",
|
49
|
+
"spec/cloudist_spec.rb",
|
50
|
+
"spec/core_ext/string_spec.rb",
|
51
|
+
"spec/spec_helper.rb"
|
52
|
+
]
|
53
|
+
s.homepage = %q{http://github.com/ivanvanderbyl/cloudist}
|
54
|
+
s.licenses = ["MIT"]
|
55
|
+
s.require_paths = ["lib"]
|
56
|
+
s.rubygems_version = %q{1.3.7}
|
57
|
+
s.summary = %q{Super fast job queue using AMQP}
|
58
|
+
s.test_files = [
|
59
|
+
"examples/queue_message.rb",
|
60
|
+
"examples/sandwich_client.rb",
|
61
|
+
"examples/sandwich_worker.rb",
|
62
|
+
"spec/cloudist/basic_queue_spec.rb",
|
63
|
+
"spec/cloudist/job_spec.rb",
|
64
|
+
"spec/cloudist/payload_spec.rb",
|
65
|
+
"spec/cloudist/request_spec.rb",
|
66
|
+
"spec/cloudist_spec.rb",
|
67
|
+
"spec/core_ext/string_spec.rb",
|
68
|
+
"spec/spec_helper.rb"
|
69
|
+
]
|
70
|
+
|
71
|
+
if s.respond_to? :specification_version then
|
72
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
73
|
+
s.specification_version = 3
|
74
|
+
|
75
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
76
|
+
s.add_runtime_dependency(%q<amqp>, [">= 0"])
|
77
|
+
s.add_runtime_dependency(%q<json>, [">= 0"])
|
78
|
+
s.add_runtime_dependency(%q<activesupport>, [">= 0"])
|
79
|
+
s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
|
80
|
+
s.add_development_dependency(%q<moqueue>, [">= 0"])
|
81
|
+
s.add_development_dependency(%q<mocha>, [">= 0"])
|
82
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
83
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
|
84
|
+
s.add_development_dependency(%q<rcov>, [">= 0"])
|
85
|
+
s.add_development_dependency(%q<reek>, ["~> 1.2.8"])
|
86
|
+
s.add_development_dependency(%q<roodi>, ["~> 2.1.0"])
|
87
|
+
else
|
88
|
+
s.add_dependency(%q<amqp>, [">= 0"])
|
89
|
+
s.add_dependency(%q<json>, [">= 0"])
|
90
|
+
s.add_dependency(%q<activesupport>, [">= 0"])
|
91
|
+
s.add_dependency(%q<rspec>, ["~> 2.3.0"])
|
92
|
+
s.add_dependency(%q<moqueue>, [">= 0"])
|
93
|
+
s.add_dependency(%q<mocha>, [">= 0"])
|
94
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
95
|
+
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
96
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
97
|
+
s.add_dependency(%q<reek>, ["~> 1.2.8"])
|
98
|
+
s.add_dependency(%q<roodi>, ["~> 2.1.0"])
|
99
|
+
end
|
100
|
+
else
|
101
|
+
s.add_dependency(%q<amqp>, [">= 0"])
|
102
|
+
s.add_dependency(%q<json>, [">= 0"])
|
103
|
+
s.add_dependency(%q<activesupport>, [">= 0"])
|
104
|
+
s.add_dependency(%q<rspec>, ["~> 2.3.0"])
|
105
|
+
s.add_dependency(%q<moqueue>, [">= 0"])
|
106
|
+
s.add_dependency(%q<mocha>, [">= 0"])
|
107
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
108
|
+
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
109
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
110
|
+
s.add_dependency(%q<reek>, ["~> 1.2.8"])
|
111
|
+
s.add_dependency(%q<roodi>, ["~> 2.1.0"])
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
data/examples/queue_message.rb
CHANGED
@@ -2,8 +2,6 @@ $:.unshift File.dirname(__FILE__) + '/../lib'
|
|
2
2
|
require "rubygems"
|
3
3
|
require "cloudist"
|
4
4
|
|
5
|
-
ENV["AMQP_URL"] = 'amqp://test_pilot:t35t_p1l0t!@ec2-50-16-134-211.compute-1.amazonaws.com:5672/'
|
6
|
-
|
7
5
|
::Signal.trap('INT') { Cloudist.stop }
|
8
6
|
::Signal.trap('TERM'){ Cloudist.stop }
|
9
7
|
|
data/examples/sandwich_client.rb
CHANGED
@@ -1,7 +1,20 @@
|
|
1
|
+
# Cloudst Example: Sandwich Client
|
2
|
+
#
|
3
|
+
# This example demonstrates dispatching a job to the worker and receiving event callbacks.
|
4
|
+
#
|
5
|
+
# Be sure to update the Cloudist connection settings if they differ from defaults:
|
6
|
+
# user: guest
|
7
|
+
# pass: guest
|
8
|
+
# port: 5672
|
9
|
+
# host: localhost
|
10
|
+
# vhost: /
|
11
|
+
#
|
1
12
|
$:.unshift File.dirname(__FILE__) + '/../lib'
|
2
13
|
require "rubygems"
|
3
14
|
require "cloudist"
|
4
15
|
|
16
|
+
ENV['AMQP_URL'] = 'amqp://test_pilot:t35t_p1l0t!@ec2-50-16-8-137.compute-1.amazonaws.com:5672/ivan'
|
17
|
+
|
5
18
|
Cloudist.signal_trap!
|
6
19
|
|
7
20
|
Cloudist.start {
|
@@ -11,7 +24,8 @@ Cloudist.start {
|
|
11
24
|
|
12
25
|
# Listen to all sandwich jobs
|
13
26
|
listen('make.sandwich') {
|
14
|
-
Cloudist.log.info("Make sandwich event: #{
|
27
|
+
# Cloudist.log.info("Make sandwich event: #{data[:event]}")
|
28
|
+
Cloudist.log.debug(queue_header.headers.inspect)
|
15
29
|
}
|
16
30
|
|
17
31
|
}
|
data/examples/sandwich_worker.rb
CHANGED
@@ -1,7 +1,21 @@
|
|
1
|
+
# Cloudst Example: Sandwich Worker
|
2
|
+
#
|
3
|
+
# This example demonstrates receiving a job and sending back events to the client to let it know we've started and finsihed
|
4
|
+
# making a sandwich. From here you could dispatch an eat.sandwich event.
|
5
|
+
#
|
6
|
+
# Be sure to update the Cloudist connection settings if they differ from defaults:
|
7
|
+
# user: guest
|
8
|
+
# pass: guest
|
9
|
+
# port: 5672
|
10
|
+
# host: localhost
|
11
|
+
# vhost: /
|
12
|
+
#
|
1
13
|
$:.unshift File.dirname(__FILE__) + '/../lib'
|
2
14
|
require "rubygems"
|
3
15
|
require "cloudist"
|
4
16
|
|
17
|
+
ENV['AMQP_URL'] = 'amqp://test_pilot:t35t_p1l0t!@ec2-50-16-8-137.compute-1.amazonaws.com:5672/ivan'
|
18
|
+
|
5
19
|
Cloudist.signal_trap!
|
6
20
|
|
7
21
|
Cloudist.start {
|
@@ -10,12 +24,15 @@ Cloudist.start {
|
|
10
24
|
worker {
|
11
25
|
job('make.sandwich') {
|
12
26
|
# Fire the started event
|
13
|
-
started!
|
14
27
|
|
15
28
|
log.info("JOB (#{id}) Make sandwich with #{data[:bread]} bread")
|
16
29
|
log.debug(data.inspect)
|
17
30
|
|
18
|
-
|
31
|
+
EM.defer {
|
32
|
+
started!
|
33
|
+
sleep(5)
|
34
|
+
finished!
|
35
|
+
}
|
19
36
|
}
|
20
37
|
}
|
21
38
|
}
|
data/lib/cloudist.rb
CHANGED
data/lib/cloudist/basic_queue.rb
CHANGED
@@ -51,7 +51,7 @@ module Cloudist
|
|
51
51
|
raise Cloudist::ExpiredMessage if request.expired?
|
52
52
|
yield request if block_given?
|
53
53
|
finished = Time.now.utc.to_i
|
54
|
-
|
54
|
+
|
55
55
|
rescue Cloudist::ExpiredMessage
|
56
56
|
log.info "amqp_message action=timeout #{tag} ttl=#{request.ttl} age=#{request.age} #{request.inspect}"
|
57
57
|
request.ack if amqp_opts[:ack]
|
@@ -76,6 +76,7 @@ module Cloudist
|
|
76
76
|
body, headers = payload.formatted
|
77
77
|
q.publish(body, headers)
|
78
78
|
payload.publish
|
79
|
+
return headers
|
79
80
|
end
|
80
81
|
|
81
82
|
def teardown
|
data/lib/cloudist/job.rb
CHANGED
@@ -21,25 +21,38 @@ module Cloudist
|
|
21
21
|
|
22
22
|
end
|
23
23
|
|
24
|
-
def reply(data, headers = {})
|
25
|
-
|
24
|
+
def reply(data, headers = {}, options = {})
|
25
|
+
options = {
|
26
|
+
:echo => false
|
27
|
+
}.update(options)
|
28
|
+
|
26
29
|
headers = {
|
27
30
|
:message_id => payload.headers[:message_id],
|
28
|
-
:
|
31
|
+
:message_type => "reply"
|
29
32
|
}.update(headers)
|
30
33
|
|
34
|
+
# Echo the payload back
|
35
|
+
data.merge!(payload.body) if options[:echo] == true
|
36
|
+
|
31
37
|
reply_payload = Payload.new(data, headers)
|
32
38
|
|
33
39
|
reply_queue = ReplyQueue.new(payload.reply_to)
|
34
40
|
reply_queue.setup
|
35
|
-
reply_queue.publish_to_q(reply_payload)
|
41
|
+
published_headers = reply_queue.publish_to_q(reply_payload)
|
36
42
|
|
37
|
-
|
43
|
+
log.debug("Replying: #{data.inspect} - Headers: #{published_headers.inspect}")
|
44
|
+
end
|
45
|
+
|
46
|
+
# Sends a progress update
|
47
|
+
# Inputs: percentage - Integer
|
48
|
+
# Optional description, this could be displayed to the user e.g. Resizing image
|
49
|
+
def progress(percentage, description = nil)
|
50
|
+
reply({:progress => percentage, :description => description}, {:message_type => 'progress'})
|
38
51
|
end
|
39
52
|
|
40
|
-
def event(event_name,
|
41
|
-
|
42
|
-
reply({:event => event_name
|
53
|
+
def event(event_name, event_data = {}, options = {})
|
54
|
+
event_data = {} if event_data.nil?
|
55
|
+
reply(event_data, {:event => event_name, :message_type => 'event'}, options)
|
43
56
|
end
|
44
57
|
|
45
58
|
def method_missing(meth, *args, &blk)
|
data/lib/cloudist/job_queue.rb
CHANGED
@@ -15,7 +15,7 @@ module Cloudist
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def subscribe(amqp_opts={}, opts={})
|
18
|
-
amqp_opts[:ack]
|
18
|
+
amqp_opts[:ack] ||= true
|
19
19
|
super(amqp_opts, opts) do |request|
|
20
20
|
begin
|
21
21
|
yield request if block_given?
|
@@ -25,4 +25,4 @@ module Cloudist
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
28
|
-
end
|
28
|
+
end
|
data/lib/cloudist/listener.rb
CHANGED
@@ -19,10 +19,9 @@ module Cloudist
|
|
19
19
|
reply_queue = Cloudist::ReplyQueue.new(job_queue_name)
|
20
20
|
reply_queue.setup(job_id) if job_id
|
21
21
|
|
22
|
-
reply_queue.subscribe do |request|
|
23
|
-
job = Job.new(request.payload)
|
24
|
-
|
25
|
-
job.instance_eval(&block)
|
22
|
+
reply_queue.subscribe do |request|
|
23
|
+
# job = Job.new(request.payload)
|
24
|
+
request.instance_eval(&block)
|
26
25
|
end
|
27
26
|
end
|
28
27
|
|
data/lib/cloudist/payload.rb
CHANGED
@@ -4,22 +4,25 @@ module Cloudist
|
|
4
4
|
class Payload
|
5
5
|
include Utils
|
6
6
|
|
7
|
-
|
7
|
+
attr_reader :body, :publish_opts, :headers
|
8
8
|
|
9
|
-
def initialize(data_hash_or_json, headers = {})
|
9
|
+
def initialize(data_hash_or_json, headers = {}, publish_opts = {})
|
10
|
+
@publish_opts, @headers = publish_opts, headers
|
11
|
+
@published = false
|
12
|
+
|
10
13
|
data_hash_or_json = parse_message(data_hash_or_json) if data_hash_or_json.is_a?(String)
|
11
14
|
|
12
15
|
raise Cloudist::BadPayload, "Expected Hash for payload" unless data_hash_or_json.is_a?(Hash)
|
13
16
|
|
14
|
-
@body
|
17
|
+
@body = HashWithIndifferentAccess.new(data_hash_or_json)
|
15
18
|
update_headers
|
16
19
|
end
|
17
20
|
|
21
|
+
# Return message formatted as JSON and headers ready for transport in array
|
18
22
|
def formatted
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
[body.to_json, headers]
|
23
|
+
update_headers
|
24
|
+
|
25
|
+
[body.to_json, publish_opts]
|
23
26
|
end
|
24
27
|
|
25
28
|
def id
|
@@ -41,8 +44,12 @@ module Cloudist
|
|
41
44
|
end
|
42
45
|
|
43
46
|
def update_headers
|
47
|
+
headers = extract_custom_headers
|
48
|
+
(publish_opts[:headers] ||= {}).merge!(headers)
|
49
|
+
end
|
50
|
+
|
51
|
+
def extract_custom_headers
|
44
52
|
raise StaleHeadersError, "Headers cannot be changed because payload has already been published" if published?
|
45
|
-
|
46
53
|
headers[:published_on] ||= body.delete('published_on') || Time.now.utc.to_i
|
47
54
|
headers[:ttl] ||= body.delete('ttl') || Cloudist::DEFAULT_TTL
|
48
55
|
|
@@ -54,15 +61,17 @@ module Cloudist
|
|
54
61
|
|
55
62
|
# We use JSON for message transport exclusively
|
56
63
|
headers[:content_type] ||= 'application/json'
|
57
|
-
|
64
|
+
|
65
|
+
# headers[:headers][:message_type] = 'event'
|
66
|
+
# ||= body.delete('message_type') || 'reply'
|
67
|
+
|
68
|
+
# headers[:headers] = custom_headers
|
69
|
+
|
58
70
|
# some strange behavior with integers makes it better to
|
59
71
|
# convert all amqp headers to strings to avoid any problems
|
60
72
|
headers.each { |k,v| headers[k] = v.to_s }
|
61
|
-
|
62
|
-
|
63
|
-
def apply_custom_headers
|
64
|
-
update_headers
|
65
|
-
[body, headers]
|
73
|
+
|
74
|
+
headers
|
66
75
|
end
|
67
76
|
|
68
77
|
def parse_custom_headers
|
@@ -107,7 +116,7 @@ module Cloudist
|
|
107
116
|
|
108
117
|
def parse_message(raw)
|
109
118
|
return { } unless raw
|
110
|
-
|
119
|
+
decode_json(raw)
|
111
120
|
end
|
112
121
|
|
113
122
|
def [](key)
|
data/lib/cloudist/reply_queue.rb
CHANGED
data/lib/cloudist/request.rb
CHANGED
@@ -5,9 +5,9 @@ module Cloudist
|
|
5
5
|
def initialize(queue, json_encoded_message, queue_header)
|
6
6
|
@qobj, @queue_header = queue, queue_header
|
7
7
|
|
8
|
-
@payload = Cloudist::Payload.new(json_encoded_message.dup, queue_header.
|
8
|
+
@payload = Cloudist::Payload.new(json_encoded_message.dup, queue_header.headers.dup)
|
9
9
|
@headers = @payload.parse_custom_headers
|
10
|
-
|
10
|
+
|
11
11
|
@start = Time.now.utc.to_i
|
12
12
|
end
|
13
13
|
|
data/lib/cloudist/utils.rb
CHANGED
@@ -15,28 +15,25 @@ describe Cloudist::Payload do
|
|
15
15
|
|
16
16
|
it "should prepare headers" do
|
17
17
|
payload = Cloudist::Payload.new({:bread => 'white'})
|
18
|
-
body
|
19
|
-
|
20
|
-
headers.has_key?(:
|
21
|
-
headers
|
22
|
-
headers
|
23
|
-
headers.has_key?(:
|
24
|
-
headers.has_key?(:
|
25
|
-
headers.has_key?(:message_id).should be_true
|
18
|
+
payload.body.should == {"bread"=>"white"}
|
19
|
+
payload.headers.has_key?(:ttl).should be_true
|
20
|
+
payload.headers.has_key?(:content_type).should be_true
|
21
|
+
payload.headers[:content_type].should == "application/json"
|
22
|
+
payload.headers.has_key?(:published_on).should be_true
|
23
|
+
payload.headers.has_key?(:event_hash).should be_true
|
24
|
+
payload.headers.has_key?(:message_id).should be_true
|
26
25
|
end
|
27
26
|
|
28
27
|
it "should extract published_on from data" do
|
29
28
|
payload = Cloudist::Payload.new({:bread => 'white', :published_on => 12345678})
|
30
|
-
body
|
31
|
-
|
32
|
-
headers[:published_on].should == "12345678"
|
29
|
+
payload.body.should == {"bread"=>"white"}
|
30
|
+
payload.headers[:published_on].should == "12345678"
|
33
31
|
end
|
34
32
|
|
35
33
|
it "should extract custom event hash from data" do
|
36
34
|
payload = Cloudist::Payload.new({:bread => 'white', :event_hash => 'foo'})
|
37
|
-
body
|
38
|
-
|
39
|
-
headers[:event_hash].should == "foo"
|
35
|
+
payload.body.should == {"bread"=>"white"}
|
36
|
+
payload.headers[:event_hash].should == "foo"
|
40
37
|
end
|
41
38
|
|
42
39
|
it "should parse JSON message" do
|
@@ -67,10 +64,13 @@ describe Cloudist::Payload do
|
|
67
64
|
end
|
68
65
|
|
69
66
|
it "should format payload for sending" do
|
70
|
-
payload = Cloudist::Payload.new({:bread => 'white'}, {:event_hash => 'foo'})
|
71
|
-
json,
|
67
|
+
payload = Cloudist::Payload.new({:bread => 'white'}, {:event_hash => 'foo', :message_type => 'reply'})
|
68
|
+
json, popts = payload.formatted
|
69
|
+
headers = popts[:headers]
|
70
|
+
|
72
71
|
json.should == "{\"bread\":\"white\"}"
|
73
72
|
headers[:ttl].should == "300"
|
73
|
+
headers[:message_type].should == 'reply'
|
74
74
|
end
|
75
75
|
|
76
76
|
it "should generate a unique payload ID" do
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cloudist
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 3
|
10
|
+
version: 0.0.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Ivan Vanderbyl
|
@@ -15,14 +15,11 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-01-
|
18
|
+
date: 2011-01-18 00:00:00 +11:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
-
|
23
|
-
prerelease: false
|
24
|
-
name: amqp
|
25
|
-
version_requirements: &id001 !ruby/object:Gem::Requirement
|
22
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
26
23
|
none: false
|
27
24
|
requirements:
|
28
25
|
- - ">="
|
@@ -31,12 +28,12 @@ dependencies:
|
|
31
28
|
segments:
|
32
29
|
- 0
|
33
30
|
version: "0"
|
34
|
-
requirement: *id001
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
31
|
type: :runtime
|
32
|
+
name: amqp
|
37
33
|
prerelease: false
|
38
|
-
|
39
|
-
|
34
|
+
version_requirements: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
40
37
|
none: false
|
41
38
|
requirements:
|
42
39
|
- - ">="
|
@@ -45,12 +42,12 @@ dependencies:
|
|
45
42
|
segments:
|
46
43
|
- 0
|
47
44
|
version: "0"
|
48
|
-
requirement: *id002
|
49
|
-
- !ruby/object:Gem::Dependency
|
50
45
|
type: :runtime
|
46
|
+
name: json
|
51
47
|
prerelease: false
|
52
|
-
|
53
|
-
|
48
|
+
version_requirements: *id002
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
54
51
|
none: false
|
55
52
|
requirements:
|
56
53
|
- - ">="
|
@@ -59,12 +56,12 @@ dependencies:
|
|
59
56
|
segments:
|
60
57
|
- 0
|
61
58
|
version: "0"
|
62
|
-
|
63
|
-
|
64
|
-
type: :development
|
59
|
+
type: :runtime
|
60
|
+
name: activesupport
|
65
61
|
prerelease: false
|
66
|
-
|
67
|
-
|
62
|
+
version_requirements: *id003
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
68
65
|
none: false
|
69
66
|
requirements:
|
70
67
|
- - ~>
|
@@ -75,12 +72,12 @@ dependencies:
|
|
75
72
|
- 3
|
76
73
|
- 0
|
77
74
|
version: 2.3.0
|
78
|
-
requirement: *id004
|
79
|
-
- !ruby/object:Gem::Dependency
|
80
75
|
type: :development
|
76
|
+
name: rspec
|
81
77
|
prerelease: false
|
82
|
-
|
83
|
-
|
78
|
+
version_requirements: *id004
|
79
|
+
- !ruby/object:Gem::Dependency
|
80
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
84
81
|
none: false
|
85
82
|
requirements:
|
86
83
|
- - ">="
|
@@ -89,12 +86,12 @@ dependencies:
|
|
89
86
|
segments:
|
90
87
|
- 0
|
91
88
|
version: "0"
|
92
|
-
requirement: *id005
|
93
|
-
- !ruby/object:Gem::Dependency
|
94
89
|
type: :development
|
90
|
+
name: moqueue
|
95
91
|
prerelease: false
|
96
|
-
|
97
|
-
|
92
|
+
version_requirements: *id005
|
93
|
+
- !ruby/object:Gem::Dependency
|
94
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
98
95
|
none: false
|
99
96
|
requirements:
|
100
97
|
- - ">="
|
@@ -103,12 +100,12 @@ dependencies:
|
|
103
100
|
segments:
|
104
101
|
- 0
|
105
102
|
version: "0"
|
106
|
-
requirement: *id006
|
107
|
-
- !ruby/object:Gem::Dependency
|
108
103
|
type: :development
|
104
|
+
name: mocha
|
109
105
|
prerelease: false
|
110
|
-
|
111
|
-
|
106
|
+
version_requirements: *id006
|
107
|
+
- !ruby/object:Gem::Dependency
|
108
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
112
109
|
none: false
|
113
110
|
requirements:
|
114
111
|
- - ~>
|
@@ -119,12 +116,12 @@ dependencies:
|
|
119
116
|
- 0
|
120
117
|
- 0
|
121
118
|
version: 1.0.0
|
122
|
-
requirement: *id007
|
123
|
-
- !ruby/object:Gem::Dependency
|
124
119
|
type: :development
|
120
|
+
name: bundler
|
125
121
|
prerelease: false
|
126
|
-
|
127
|
-
|
122
|
+
version_requirements: *id007
|
123
|
+
- !ruby/object:Gem::Dependency
|
124
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
128
125
|
none: false
|
129
126
|
requirements:
|
130
127
|
- - ~>
|
@@ -135,12 +132,12 @@ dependencies:
|
|
135
132
|
- 5
|
136
133
|
- 2
|
137
134
|
version: 1.5.2
|
138
|
-
requirement: *id008
|
139
|
-
- !ruby/object:Gem::Dependency
|
140
135
|
type: :development
|
136
|
+
name: jeweler
|
141
137
|
prerelease: false
|
142
|
-
|
143
|
-
|
138
|
+
version_requirements: *id008
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
144
141
|
none: false
|
145
142
|
requirements:
|
146
143
|
- - ">="
|
@@ -149,12 +146,12 @@ dependencies:
|
|
149
146
|
segments:
|
150
147
|
- 0
|
151
148
|
version: "0"
|
152
|
-
requirement: *id009
|
153
|
-
- !ruby/object:Gem::Dependency
|
154
149
|
type: :development
|
150
|
+
name: rcov
|
155
151
|
prerelease: false
|
156
|
-
|
157
|
-
|
152
|
+
version_requirements: *id009
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
158
155
|
none: false
|
159
156
|
requirements:
|
160
157
|
- - ~>
|
@@ -165,12 +162,12 @@ dependencies:
|
|
165
162
|
- 2
|
166
163
|
- 8
|
167
164
|
version: 1.2.8
|
168
|
-
requirement: *id010
|
169
|
-
- !ruby/object:Gem::Dependency
|
170
165
|
type: :development
|
166
|
+
name: reek
|
171
167
|
prerelease: false
|
172
|
-
|
173
|
-
|
168
|
+
version_requirements: *id010
|
169
|
+
- !ruby/object:Gem::Dependency
|
170
|
+
requirement: &id011 !ruby/object:Gem::Requirement
|
174
171
|
none: false
|
175
172
|
requirements:
|
176
173
|
- - ~>
|
@@ -181,7 +178,10 @@ dependencies:
|
|
181
178
|
- 1
|
182
179
|
- 0
|
183
180
|
version: 2.1.0
|
184
|
-
|
181
|
+
type: :development
|
182
|
+
name: roodi
|
183
|
+
prerelease: false
|
184
|
+
version_requirements: *id011
|
185
185
|
description: Cloudist is a simple, highly scalable job queue for Ruby applications, it can run within Rails, or on EC2, and does not load your entire Rails stack like delayed job does.
|
186
186
|
email: ivanvanderbyl@me.com
|
187
187
|
executables: []
|
@@ -200,6 +200,7 @@ files:
|
|
200
200
|
- README.md
|
201
201
|
- Rakefile
|
202
202
|
- VERSION
|
203
|
+
- cloudist.gemspec
|
203
204
|
- examples/queue_message.rb
|
204
205
|
- examples/sandwich_client.rb
|
205
206
|
- examples/sandwich_worker.rb
|