background_queue 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. data/.document +5 -0
  2. data/.rspec +1 -0
  3. data/.rvmrc +48 -0
  4. data/Gemfile +19 -0
  5. data/LICENSE.txt +20 -0
  6. data/README.md +69 -0
  7. data/Rakefile +42 -0
  8. data/TODO +2 -0
  9. data/VERSION +1 -0
  10. data/background_queue.gemspec +158 -0
  11. data/bin/bg_queue +26 -0
  12. data/lib/background_queue.rb +8 -0
  13. data/lib/background_queue/client.rb +96 -0
  14. data/lib/background_queue/client_lib/command.rb +36 -0
  15. data/lib/background_queue/client_lib/config.rb +109 -0
  16. data/lib/background_queue/client_lib/connection.rb +105 -0
  17. data/lib/background_queue/client_lib/job_handle.rb +19 -0
  18. data/lib/background_queue/command.rb +49 -0
  19. data/lib/background_queue/config.rb +118 -0
  20. data/lib/background_queue/server_lib/balanced_queue.rb +108 -0
  21. data/lib/background_queue/server_lib/config.rb +339 -0
  22. data/lib/background_queue/server_lib/event_connection.rb +133 -0
  23. data/lib/background_queue/server_lib/event_server.rb +35 -0
  24. data/lib/background_queue/server_lib/job.rb +252 -0
  25. data/lib/background_queue/server_lib/job_registry.rb +30 -0
  26. data/lib/background_queue/server_lib/lru.rb +193 -0
  27. data/lib/background_queue/server_lib/owner.rb +54 -0
  28. data/lib/background_queue/server_lib/priority_queue.rb +156 -0
  29. data/lib/background_queue/server_lib/queue_registry.rb +123 -0
  30. data/lib/background_queue/server_lib/server.rb +314 -0
  31. data/lib/background_queue/server_lib/sorted_workers.rb +52 -0
  32. data/lib/background_queue/server_lib/task.rb +79 -0
  33. data/lib/background_queue/server_lib/task_registry.rb +51 -0
  34. data/lib/background_queue/server_lib/thread_manager.rb +121 -0
  35. data/lib/background_queue/server_lib/worker.rb +18 -0
  36. data/lib/background_queue/server_lib/worker_balancer.rb +97 -0
  37. data/lib/background_queue/server_lib/worker_client.rb +94 -0
  38. data/lib/background_queue/server_lib/worker_thread.rb +70 -0
  39. data/lib/background_queue/utils.rb +40 -0
  40. data/lib/background_queue/worker/base.rb +46 -0
  41. data/lib/background_queue/worker/calling.rb +59 -0
  42. data/lib/background_queue/worker/config.rb +35 -0
  43. data/lib/background_queue/worker/environment.rb +70 -0
  44. data/lib/background_queue/worker/worker_loader.rb +94 -0
  45. data/lib/background_queue_server.rb +21 -0
  46. data/lib/background_queue_worker.rb +5 -0
  47. data/spec/background_queue/client_lib/command_spec.rb +75 -0
  48. data/spec/background_queue/client_lib/config_spec.rb +156 -0
  49. data/spec/background_queue/client_lib/connection_spec.rb +170 -0
  50. data/spec/background_queue/client_spec.rb +95 -0
  51. data/spec/background_queue/command_spec.rb +34 -0
  52. data/spec/background_queue/config_spec.rb +134 -0
  53. data/spec/background_queue/server_lib/balanced_queue_spec.rb +122 -0
  54. data/spec/background_queue/server_lib/config_spec.rb +443 -0
  55. data/spec/background_queue/server_lib/event_connection_spec.rb +190 -0
  56. data/spec/background_queue/server_lib/event_server_spec.rb +48 -0
  57. data/spec/background_queue/server_lib/integration/full_test_spec.rb +247 -0
  58. data/spec/background_queue/server_lib/integration/queue_integration_spec.rb +98 -0
  59. data/spec/background_queue/server_lib/integration/serialize_spec.rb +127 -0
  60. data/spec/background_queue/server_lib/job_registry_spec.rb +65 -0
  61. data/spec/background_queue/server_lib/job_spec.rb +525 -0
  62. data/spec/background_queue/server_lib/owner_spec.rb +33 -0
  63. data/spec/background_queue/server_lib/priority_queue_spec.rb +182 -0
  64. data/spec/background_queue/server_lib/server_spec.rb +353 -0
  65. data/spec/background_queue/server_lib/sorted_workers_spec.rb +122 -0
  66. data/spec/background_queue/server_lib/task_registry_spec.rb +69 -0
  67. data/spec/background_queue/server_lib/task_spec.rb +20 -0
  68. data/spec/background_queue/server_lib/thread_manager_spec.rb +106 -0
  69. data/spec/background_queue/server_lib/worker_balancer_spec.rb +127 -0
  70. data/spec/background_queue/server_lib/worker_client_spec.rb +196 -0
  71. data/spec/background_queue/server_lib/worker_thread_spec.rb +125 -0
  72. data/spec/background_queue/utils_spec.rb +27 -0
  73. data/spec/background_queue/worker/base_spec.rb +35 -0
  74. data/spec/background_queue/worker/calling_spec.rb +103 -0
  75. data/spec/background_queue/worker/environment_spec.rb +67 -0
  76. data/spec/background_queue/worker/worker_loader_spec.rb +103 -0
  77. data/spec/background_queue_spec.rb +7 -0
  78. data/spec/resources/config-client.yml +7 -0
  79. data/spec/resources/config-serialize.yml +12 -0
  80. data/spec/resources/config.yml +12 -0
  81. data/spec/resources/example_worker.rb +4 -0
  82. data/spec/resources/example_worker_with_error.rb +4 -0
  83. data/spec/resources/test_worker.rb +8 -0
  84. data/spec/shared/queue_registry_shared.rb +216 -0
  85. data/spec/spec_helper.rb +15 -0
  86. data/spec/support/default_task.rb +9 -0
  87. data/spec/support/private.rb +23 -0
  88. data/spec/support/simple_server.rb +28 -0
  89. data/spec/support/simple_task.rb +58 -0
  90. data/spec/support/test_worker_server.rb +205 -0
  91. metadata +254 -0
@@ -0,0 +1,15 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+ require 'rspec'
4
+
5
+
6
+ # Requires supporting files with custom matchers and macros, etc,
7
+ # in ./support/ and its subdirectories.
8
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
9
+ Dir["#{File.dirname(__FILE__)}/shared/**/*.rb"].each {|f| require f}
10
+
11
+ RSpec.configure do |config|
12
+
13
+ end
14
+
15
+
@@ -0,0 +1,9 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/simple_task')
2
+ class DefaultTask < SimpleTask
3
+
4
+ def initialize
5
+ super(:owner_id, :job_id, :id, :priority)
6
+ end
7
+
8
+
9
+ end
@@ -0,0 +1,23 @@
1
+ #i want to be able to test private methods
2
+ #this will let me prefix the call with __prv__ and it will then use send to route to the private call
3
+ #this assumes the class getting tested does not use method_missing
4
+ class Object
5
+
6
+ alias_method :_original_method_missing, :method_missing
7
+
8
+ def method_missing(sym, *args, &block)
9
+ if sym.to_s[0, 7] == "__prv__"
10
+ #we are explicily saying this should be a private method.. lets make sure...
11
+
12
+ private_method = sym.to_s[7, sym.to_s.length - 7].intern
13
+
14
+ raise "Method #{private_method} is public when it was expected to be private" if respond_to?(private_method)
15
+
16
+ send private_method, *args, &block
17
+ else
18
+ _original_method_missing(sym, *args, &block)
19
+ end
20
+ end
21
+
22
+
23
+ end
@@ -0,0 +1,28 @@
1
+ class SimpleServer
2
+ attr_accessor :config
3
+ attr_accessor :thread_manager
4
+ attr_accessor :task_queue
5
+ attr_accessor :event_server
6
+ attr_accessor :workers
7
+ attr_accessor :jobs
8
+ attr_accessor :logger
9
+
10
+ def initialize(options={})
11
+ @logger = Logger.new("/dev/null")
12
+ @config = options[:config]
13
+ @thread_manager = options[:thread_manager]
14
+ @task_queue = options[:task_queue]
15
+ @event_server = options[:event_server]
16
+ @workers = options[:workers]
17
+ @jobs = options[:jobs]
18
+ end
19
+
20
+ def running?
21
+ true
22
+ end
23
+
24
+ def change_stat(stat, delta)
25
+
26
+ end
27
+
28
+ end
@@ -0,0 +1,58 @@
1
+ class SimpleTask
2
+ attr_accessor :id
3
+ attr_accessor :priority
4
+
5
+ attr_accessor :owner_id
6
+ attr_accessor :job_id
7
+ attr_accessor :worker
8
+
9
+ attr_accessor :running
10
+
11
+ attr_accessor :options
12
+
13
+ def initialize(owner_id, job_id, id, priority, options={})
14
+ @owner_id = owner_id
15
+ @job_id = job_id
16
+ @id = id
17
+ @priority = priority
18
+ @worker = :worker
19
+ @running = false
20
+ @options = options
21
+ end
22
+
23
+ def running?
24
+ @running
25
+ end
26
+
27
+ def synchronous?
28
+ @options[:synchronous] == true
29
+ end
30
+
31
+ def domain
32
+ @options[:domain]
33
+ end
34
+
35
+ def set_job(job)
36
+ @job = job
37
+ end
38
+
39
+ def get_job
40
+ @job
41
+ end
42
+
43
+ def is_excluded_from_count?
44
+ @options[:exclude] == true
45
+ end
46
+
47
+ def weighted?
48
+ @options[:percent] && @options[:percent] > 0
49
+ end
50
+
51
+ def weighted_percent
52
+ @options[:percent]
53
+ end
54
+
55
+ def initial_progress_caption
56
+ @options[:initial_progress_caption]
57
+ end
58
+ end
@@ -0,0 +1,205 @@
1
+ require 'webrick'
2
+
3
+ class TestWorkerServer
4
+
5
+
6
+ attr_reader :control_calling
7
+
8
+ def initialize(port, control_calling = false)
9
+ @port = port
10
+ @control_calling = control_calling
11
+ end
12
+
13
+ def start(proc)
14
+ @server = WEBrick::HTTPServer.new(:BindAddress=>"127.0.0.1", :Port => @port, :Logger=>WEBrick::BasicLog.new([], -1000), :AccessLog=>[])
15
+ @server.mount "/background_queue", TestWorkerServer::ProcServlet, proc, self
16
+ @mutex = Mutex.new
17
+ @condvar = ConditionVariable.new
18
+ @called = false
19
+ if @control_calling
20
+ @cmutex = Mutex.new
21
+ @ccondvar = ConditionVariable.new
22
+ @ccalled = false
23
+ end
24
+
25
+ @thread = Thread.new {
26
+ @server.start
27
+ }
28
+ end
29
+
30
+
31
+
32
+ def stop
33
+ @server.shutdown
34
+ Thread.kill(@thread) #brutal.... but quick...
35
+ #@thread.join
36
+ end
37
+
38
+ def wait_to_be_called
39
+ was_called = false
40
+ @mutex.synchronize {
41
+ unless @called
42
+ @condvar.wait(@mutex, 5)
43
+ end
44
+ was_called = @called
45
+ @called = false
46
+ #puts "called=#{was_called}"
47
+ was_called
48
+ }
49
+ end
50
+
51
+ def mark_as_called
52
+ @mutex.synchronize {
53
+ @called = true
54
+ @condvar.signal
55
+ }
56
+ end
57
+
58
+ def can_to_be_called?
59
+ was_called = false
60
+ @cmutex.synchronize {
61
+ unless @ccalled
62
+ @ccondvar.wait(@cmutex, 5)
63
+ end
64
+ was_called = @ccalled
65
+ @ccalled = false
66
+ was_called
67
+ }
68
+ end
69
+
70
+ def allow_to_be_called
71
+ @cmutex.synchronize {
72
+ @ccalled = true
73
+ @ccondvar.signal
74
+ }
75
+ end
76
+
77
+
78
+
79
+ class ProcServlet < WEBrick::HTTPServlet::AbstractServlet
80
+
81
+ def initialize(server, proc, test_server)
82
+ super(server)
83
+ @proc = proc
84
+ @test_server = test_server
85
+ end
86
+
87
+
88
+ def do_POST(request, response)
89
+ begin
90
+ response.test_server = @test_server
91
+ @test_server.can_to_be_called? if @test_server.control_calling
92
+ @proc.call(TestWorkerServer::Contoller.new(request, response))
93
+ rescue Exception=>e
94
+ puts e.message
95
+ puts e.backtrace.join("\n")
96
+ end
97
+ end
98
+
99
+ end
100
+
101
+ class Contoller
102
+
103
+ attr_accessor :request
104
+ attr_accessor :response
105
+ attr_accessor :params
106
+
107
+ def initialize(request, response)
108
+ @request = request
109
+ @response = response
110
+ @logger = WEBrick::BasicLog.new("/tmp/bq-controller.log", 5)
111
+ @params = BackgroundQueue::Utils::AnyKeyHash.new(@request.query)
112
+ end
113
+
114
+ def headers
115
+ @response.header
116
+ end
117
+
118
+ def logger
119
+ @logger
120
+ end
121
+
122
+ def render(opts)
123
+ @response.status = opts[:status] if opts[:status]
124
+ @response.content_type = opts[:type] if opts[:type]
125
+
126
+
127
+ if opts[:text].instance_of?(String)
128
+ @response.body = opts[:text]
129
+ elsif opts[:text].instance_of?(Proc)
130
+ @response.chunked = true
131
+ @response.body = opts[:text]
132
+ end
133
+ end
134
+
135
+ end
136
+
137
+ end
138
+
139
+ module WEBrick
140
+ class HTTPResponse
141
+
142
+ attr_accessor :test_server
143
+
144
+ alias_method :old_send_response, :send_response
145
+
146
+ def send_response(socket)
147
+ old_send_response(socket)
148
+ socket.extend SocketExtension
149
+ socket.set_test_server(@test_server)
150
+ end
151
+
152
+ alias_method :old_send_body, :send_body
153
+
154
+ def send_body(socket)
155
+ if @body.instance_of?(Proc)
156
+ begin
157
+ @body.call(self, ChunkedOutput.new(socket, self))
158
+ _write_data(socket, "0#{CRLF}#{CRLF}")
159
+ rescue Exception=>e
160
+ puts e.message
161
+ puts e.backtrace.join("\n")
162
+ end
163
+ else
164
+ old_send_body(socket)
165
+ end
166
+ end
167
+
168
+ def send_chunked_data(socket, buf)
169
+ data = ""
170
+ data << format("%x", buf.size) << CRLF
171
+ data << buf << CRLF
172
+ _write_data(socket, data)
173
+ @sent_size += buf.size
174
+ end
175
+ end
176
+ end
177
+
178
+ class ChunkedOutput
179
+
180
+ def initialize(socket, response)
181
+ @socket = socket
182
+ @response = response
183
+ end
184
+
185
+ def write(buf)
186
+ @response.send_chunked_data(@socket, buf)
187
+ end
188
+
189
+ def flush
190
+ @socket.flush
191
+ end
192
+ end
193
+
194
+ module SocketExtension
195
+
196
+ def set_test_server(ts)
197
+ @test_server = ts
198
+ end
199
+
200
+ def close
201
+ super
202
+ @test_server.mark_as_called unless @test_server.nil?
203
+ end
204
+ end
205
+
metadata ADDED
@@ -0,0 +1,254 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: background_queue
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - MarkPent
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-10-09 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: json
16
+ requirement: &21144380 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *21144380
25
+ - !ruby/object:Gem::Dependency
26
+ name: rufus-scheduler
27
+ requirement: &21156100 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *21156100
36
+ - !ruby/object:Gem::Dependency
37
+ name: eventmachine
38
+ requirement: &21161240 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: 0.12.10
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *21161240
47
+ - !ruby/object:Gem::Dependency
48
+ name: ipaddress
49
+ requirement: &21156960 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 0.8.0
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *21156960
58
+ - !ruby/object:Gem::Dependency
59
+ name: rspec
60
+ requirement: &21170000 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: 2.9.0
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *21170000
69
+ - !ruby/object:Gem::Dependency
70
+ name: jeweler
71
+ requirement: &21166880 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ~>
75
+ - !ruby/object:Gem::Version
76
+ version: 1.8.3
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *21166880
80
+ - !ruby/object:Gem::Dependency
81
+ name: yard
82
+ requirement: &21166160 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ~>
86
+ - !ruby/object:Gem::Version
87
+ version: '0.7'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: *21166160
91
+ - !ruby/object:Gem::Dependency
92
+ name: rdoc
93
+ requirement: &21164920 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ~>
97
+ - !ruby/object:Gem::Version
98
+ version: '3.12'
99
+ type: :development
100
+ prerelease: false
101
+ version_requirements: *21164920
102
+ - !ruby/object:Gem::Dependency
103
+ name: bundler
104
+ requirement: &21180500 !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: 1.0.0
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: *21180500
113
+ - !ruby/object:Gem::Dependency
114
+ name: redcarpet
115
+ requirement: &21179640 !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - ~>
119
+ - !ruby/object:Gem::Version
120
+ version: 2.1.1
121
+ type: :development
122
+ prerelease: false
123
+ version_requirements: *21179640
124
+ description: Organise background tasks so they will not overload the machine(s) running
125
+ the tasks, while still giving a fair, balanced allocation of running time to members
126
+ in the queue
127
+ email: mark.pent@gmail.com
128
+ executables:
129
+ - bg_queue
130
+ extensions: []
131
+ extra_rdoc_files:
132
+ - LICENSE.txt
133
+ - README.md
134
+ - TODO
135
+ files:
136
+ - .document
137
+ - .rspec
138
+ - .rvmrc
139
+ - Gemfile
140
+ - LICENSE.txt
141
+ - README.md
142
+ - Rakefile
143
+ - TODO
144
+ - VERSION
145
+ - background_queue.gemspec
146
+ - bin/bg_queue
147
+ - lib/background_queue.rb
148
+ - lib/background_queue/client.rb
149
+ - lib/background_queue/client_lib/command.rb
150
+ - lib/background_queue/client_lib/config.rb
151
+ - lib/background_queue/client_lib/connection.rb
152
+ - lib/background_queue/client_lib/job_handle.rb
153
+ - lib/background_queue/command.rb
154
+ - lib/background_queue/config.rb
155
+ - lib/background_queue/server_lib/balanced_queue.rb
156
+ - lib/background_queue/server_lib/config.rb
157
+ - lib/background_queue/server_lib/event_connection.rb
158
+ - lib/background_queue/server_lib/event_server.rb
159
+ - lib/background_queue/server_lib/job.rb
160
+ - lib/background_queue/server_lib/job_registry.rb
161
+ - lib/background_queue/server_lib/lru.rb
162
+ - lib/background_queue/server_lib/owner.rb
163
+ - lib/background_queue/server_lib/priority_queue.rb
164
+ - lib/background_queue/server_lib/queue_registry.rb
165
+ - lib/background_queue/server_lib/server.rb
166
+ - lib/background_queue/server_lib/sorted_workers.rb
167
+ - lib/background_queue/server_lib/task.rb
168
+ - lib/background_queue/server_lib/task_registry.rb
169
+ - lib/background_queue/server_lib/thread_manager.rb
170
+ - lib/background_queue/server_lib/worker.rb
171
+ - lib/background_queue/server_lib/worker_balancer.rb
172
+ - lib/background_queue/server_lib/worker_client.rb
173
+ - lib/background_queue/server_lib/worker_thread.rb
174
+ - lib/background_queue/utils.rb
175
+ - lib/background_queue/worker/base.rb
176
+ - lib/background_queue/worker/calling.rb
177
+ - lib/background_queue/worker/config.rb
178
+ - lib/background_queue/worker/environment.rb
179
+ - lib/background_queue/worker/worker_loader.rb
180
+ - lib/background_queue_server.rb
181
+ - lib/background_queue_worker.rb
182
+ - spec/background_queue/client_lib/command_spec.rb
183
+ - spec/background_queue/client_lib/config_spec.rb
184
+ - spec/background_queue/client_lib/connection_spec.rb
185
+ - spec/background_queue/client_spec.rb
186
+ - spec/background_queue/command_spec.rb
187
+ - spec/background_queue/config_spec.rb
188
+ - spec/background_queue/server_lib/balanced_queue_spec.rb
189
+ - spec/background_queue/server_lib/config_spec.rb
190
+ - spec/background_queue/server_lib/event_connection_spec.rb
191
+ - spec/background_queue/server_lib/event_server_spec.rb
192
+ - spec/background_queue/server_lib/integration/full_test_spec.rb
193
+ - spec/background_queue/server_lib/integration/queue_integration_spec.rb
194
+ - spec/background_queue/server_lib/integration/serialize_spec.rb
195
+ - spec/background_queue/server_lib/job_registry_spec.rb
196
+ - spec/background_queue/server_lib/job_spec.rb
197
+ - spec/background_queue/server_lib/owner_spec.rb
198
+ - spec/background_queue/server_lib/priority_queue_spec.rb
199
+ - spec/background_queue/server_lib/server_spec.rb
200
+ - spec/background_queue/server_lib/sorted_workers_spec.rb
201
+ - spec/background_queue/server_lib/task_registry_spec.rb
202
+ - spec/background_queue/server_lib/task_spec.rb
203
+ - spec/background_queue/server_lib/thread_manager_spec.rb
204
+ - spec/background_queue/server_lib/worker_balancer_spec.rb
205
+ - spec/background_queue/server_lib/worker_client_spec.rb
206
+ - spec/background_queue/server_lib/worker_thread_spec.rb
207
+ - spec/background_queue/utils_spec.rb
208
+ - spec/background_queue/worker/base_spec.rb
209
+ - spec/background_queue/worker/calling_spec.rb
210
+ - spec/background_queue/worker/environment_spec.rb
211
+ - spec/background_queue/worker/worker_loader_spec.rb
212
+ - spec/background_queue_spec.rb
213
+ - spec/resources/config-client.yml
214
+ - spec/resources/config-serialize.yml
215
+ - spec/resources/config.yml
216
+ - spec/resources/example_worker.rb
217
+ - spec/resources/example_worker_with_error.rb
218
+ - spec/resources/test_worker.rb
219
+ - spec/shared/queue_registry_shared.rb
220
+ - spec/spec_helper.rb
221
+ - spec/support/default_task.rb
222
+ - spec/support/private.rb
223
+ - spec/support/simple_server.rb
224
+ - spec/support/simple_task.rb
225
+ - spec/support/test_worker_server.rb
226
+ homepage: http://github.com/markpent/background_queue
227
+ licenses:
228
+ - MIT
229
+ post_install_message:
230
+ rdoc_options: []
231
+ require_paths:
232
+ - lib
233
+ required_ruby_version: !ruby/object:Gem::Requirement
234
+ none: false
235
+ requirements:
236
+ - - ! '>='
237
+ - !ruby/object:Gem::Version
238
+ version: '0'
239
+ segments:
240
+ - 0
241
+ hash: 2926344861987835839
242
+ required_rubygems_version: !ruby/object:Gem::Requirement
243
+ none: false
244
+ requirements:
245
+ - - ! '>='
246
+ - !ruby/object:Gem::Version
247
+ version: '0'
248
+ requirements: []
249
+ rubyforge_project:
250
+ rubygems_version: 1.8.17
251
+ signing_key:
252
+ specification_version: 3
253
+ summary: Background processing
254
+ test_files: []