inst-jobs 0.11.10 → 0.12.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bdf2f15ca59c19c16c8b53114e75e5045bf1d99e
4
- data.tar.gz: 0c4a1922a47c1f8863fee40b07e8d7107cc40c39
3
+ metadata.gz: 6319beb67c1232acefb48870136662c958970b22
4
+ data.tar.gz: 0f4051eda72fa6fe638924b62a35ab6ff7714595
5
5
  SHA512:
6
- metadata.gz: 46668863017e11a8a23c1e4b4b9296544c822018e815bfe108b5fa966e5c517a62290599efff86fae10ce16eed3c84b434c46a35e94886fcaf1b18a44b7c42e6
7
- data.tar.gz: e2f327ea9c7a48258442c4b9c6c0c5907f98e6273e2e7b3c5fe1f1b13c9e58362ede45c62d68c8458a09c13908ff3370671db3ea86fb7c15019d1c7de0bc4fd2
6
+ metadata.gz: 8b69032f63bac4ef84c16812eab90e9ae7cea727545c4cdf3d276bd726715b7f7725f2f22d51e469a3d94815252147bc31263bda9ce9b085344ac63cbd956d06
7
+ data.tar.gz: beda3ba76d7e9314e19464a263ea2a05fdc66866c1672e8049c50e7c7402b38c0ccb1e9272041badf6ea4f7a06d8a789f33b2475037347c05237bdb8932d91fa
@@ -198,7 +198,7 @@ module Delayed
198
198
  end
199
199
  end
200
200
 
201
- def self.get_and_lock_next_available(worker_name,
201
+ def self.get_and_lock_next_available(worker_names,
202
202
  queue = Delayed::Settings.queue,
203
203
  min_priority = nil,
204
204
  max_priority = nil)
@@ -208,16 +208,31 @@ module Delayed
208
208
 
209
209
  loop do
210
210
  jobs = maybe_silence_periodic_log do
211
- find_available(Settings.fetch_batch_size, queue, min_priority, max_priority)
211
+ batch_size = Settings.fetch_batch_size
212
+ batch_size *= worker_names.length if worker_names.is_a?(Array)
213
+ find_available(batch_size, queue, min_priority, max_priority)
212
214
  end
213
215
  return nil if jobs.empty?
214
216
  if Settings.select_random_from_batch
215
217
  jobs = jobs.sort_by { rand }
216
218
  end
217
- job = jobs.detect do |job|
218
- job.send(:lock_exclusively!, worker_name)
219
+ if worker_names.is_a?(Array)
220
+ result = {}
221
+ jobs.each do |job|
222
+ break if worker_names.empty?
223
+ worker_name = worker_names.first
224
+ if job.send(:lock_exclusively!, worker_name)
225
+ result[worker_name] = job
226
+ worker_names.shift
227
+ end
228
+ end
229
+ return result
230
+ else
231
+ job = jobs.detect do |job|
232
+ job.send(:lock_exclusively!, worker_names)
233
+ end
234
+ return job if job
219
235
  end
220
- return job if job
221
236
  end
222
237
  end
223
238
 
@@ -225,11 +225,17 @@ class Job
225
225
 
226
226
  check_queue(queue)
227
227
  check_priorities(min_priority, max_priority)
228
+ if worker_name.is_a?(Array)
229
+ multiple_workers = true
230
+ worker_name = worker_name.first
231
+ end
228
232
 
229
233
  # as an optimization this lua function returns the hash of job attributes,
230
234
  # rather than just a job id, saving a round trip
231
235
  job_attrs = functions.get_and_lock_next_available(worker_name, queue, min_priority, max_priority, db_time_now)
232
- instantiate_from_attrs(job_attrs) # will return nil if the attrs are blank
236
+ job = instantiate_from_attrs(job_attrs) # will return nil if the attrs are blank
237
+ job = { worker_name => job } if multiple_workers
238
+ job
233
239
  end
234
240
 
235
241
  def self.find_available(limit,
@@ -10,7 +10,7 @@ module Delayed
10
10
  :loop => [:worker],
11
11
  :perform => [:worker, :job],
12
12
  :pop => [:worker],
13
- :work_queue_pop => [:work_queue, :worker_name, :worker_config],
13
+ :work_queue_pop => [:work_queue, :worker_config],
14
14
  }
15
15
 
16
16
  def initialize
@@ -1,3 +1,3 @@
1
1
  module Delayed
2
- VERSION = "0.11.10"
2
+ VERSION = "0.12.0"
3
3
  end
@@ -4,7 +4,7 @@ module WorkQueue
4
4
  # queries the queue inline.
5
5
  class InProcess
6
6
  def get_and_lock_next_available(worker_name, worker_config)
7
- Delayed::Worker.lifecycle.run_callbacks(:work_queue_pop, self, worker_name, worker_config) do
7
+ Delayed::Worker.lifecycle.run_callbacks(:work_queue_pop, self, worker_config) do
8
8
  Delayed::Job.get_and_lock_next_available(
9
9
  worker_name,
10
10
  worker_config[:queue],
@@ -81,6 +81,7 @@ class ParentProcess
81
81
  @listen_socket = listen_socket
82
82
  @parent_pid = parent_pid
83
83
  @clients = {}
84
+ @waiting_clients = {}
84
85
  end
85
86
 
86
87
  def connected_clients
@@ -115,10 +116,12 @@ class ParentProcess
115
116
 
116
117
  def run_once
117
118
  handles = @clients.keys + [@listen_socket]
118
- readable, _, _ = IO.select(handles, nil, nil, 1)
119
+ timeout = Settings.sleep_delay + (rand * Settings.sleep_delay_stagger)
120
+ readable, _, _ = IO.select(handles, nil, nil, timeout)
119
121
  if readable
120
122
  readable.each { |s| handle_read(s) }
121
123
  end
124
+ check_for_work
122
125
  end
123
126
 
124
127
  def handle_read(socket)
@@ -132,9 +135,9 @@ class ParentProcess
132
135
  # Any error on the listen socket other than WaitReadable will bubble up
133
136
  # and terminate the work queue process, to be restarted by the parent daemon.
134
137
  def handle_accept
135
- client, _addr = @listen_socket.accept_nonblock
136
- if client
137
- @clients[client] = ClientState.new(false)
138
+ socket, _addr = @listen_socket.accept_nonblock
139
+ if socket
140
+ @clients[socket] = ClientState.new(false, socket)
138
141
  end
139
142
  rescue IO::WaitReadable
140
143
  # ignore and just try accepting again next time through the loop
@@ -146,17 +149,40 @@ class ParentProcess
146
149
  # here forever. This is only a reasonable assumption because we control
147
150
  # the client.
148
151
  worker_name, worker_config = client_timeout { Marshal.load(socket) }
149
- response = nil
150
- Delayed::Worker.lifecycle.run_callbacks(:work_queue_pop, self, worker_name, worker_config) do
151
- response = Delayed::Job.get_and_lock_next_available(
152
- worker_name,
153
- worker_config[:queue],
154
- worker_config[:min_priority],
155
- worker_config[:max_priority])
156
- @clients[socket].working = !response.nil?
157
- end
158
- client_timeout { Marshal.dump(response, socket) }
152
+ client = @clients[socket]
153
+ client.name = worker_name
154
+ client.working = false
155
+ (@waiting_clients[worker_config] ||= []) << client
156
+
159
157
  rescue SystemCallError, IOError, Timeout::Error
158
+ drop_socket(socket)
159
+ end
160
+
161
+ def check_for_work
162
+ @waiting_clients.each do |(worker_config, workers)|
163
+ next if workers.empty?
164
+
165
+ Delayed::Worker.lifecycle.run_callbacks(:work_queue_pop, self, worker_config) do
166
+ response = Delayed::Job.get_and_lock_next_available(
167
+ workers.map(&:name),
168
+ worker_config[:queue],
169
+ worker_config[:min_priority],
170
+ worker_config[:max_priority])
171
+ response.each do |(worker_name, job)|
172
+ client = workers.find { |worker| worker.name == worker_name }
173
+ client.working = true
174
+ @waiting_clients[worker_config].delete(client)
175
+ begin
176
+ client_timeout { Marshal.dump(job, client.socket) }
177
+ rescue SystemCallError, IOError, Timeout::Error
178
+ drop_socket(client.socket)
179
+ end
180
+ end
181
+ end
182
+ end
183
+ end
184
+
185
+ def drop_socket(socket)
160
186
  # this socket went away
161
187
  begin
162
188
  socket.close
@@ -177,7 +203,7 @@ class ParentProcess
177
203
  Timeout.timeout(Settings.parent_process_client_timeout) { yield }
178
204
  end
179
205
 
180
- ClientState = Struct.new(:working)
206
+ ClientState = Struct.new(:working, :socket, :name)
181
207
  end
182
208
  end
183
209
  end
@@ -106,6 +106,7 @@ class Worker
106
106
 
107
107
  def run
108
108
  self.class.lifecycle.run_callbacks(:loop, self) do
109
+ set_process_name("pop:#{Settings.worker_procname_prefix}#{@queue_name}:#{min_priority || 0}:#{max_priority || 'max'}")
109
110
  job = self.class.lifecycle.run_callbacks(:pop, self) do
110
111
  work_queue.get_and_lock_next_available(name, config)
111
112
  end
@@ -243,4 +243,13 @@ describe 'Delayed::Backed::ActiveRecord::Job' do
243
243
  end
244
244
  end
245
245
  end
246
+
247
+ it "allows fetching multiple jobs at once" do
248
+ jobs = 3.times.map { Delayed::Job.create :payload_object => SimpleJob.new }
249
+ locked_jobs = Delayed::Job.get_and_lock_next_available(['worker1', 'worker2'])
250
+ locked_jobs.length.should == 2
251
+ locked_jobs.keys.should == ['worker1', 'worker2']
252
+ locked_jobs.values.should == jobs[0..1]
253
+ jobs.map(&:reload).map(&:locked_by).should == ['worker1', 'worker2', nil]
254
+ end
246
255
  end
@@ -16,7 +16,7 @@ RSpec.describe Delayed::WorkQueue::ParentProcess do
16
16
  let(:subject) { described_class.new }
17
17
  let(:worker_config) { { queue: "queue_name", min_priority: 1, max_priority: 2 } }
18
18
  let(:args) { ["worker_name", worker_config] }
19
- let(:job_args) { ["worker_name", "queue_name", 1, 2] }
19
+ let(:job_args) { [["worker_name"], "queue_name", 1, 2] }
20
20
 
21
21
  it 'generates a server listening on a valid unix socket' do
22
22
  server = subject.server
@@ -90,9 +90,45 @@ RSpec.describe Delayed::WorkQueue::ParentProcess do
90
90
  client = Socket.unix(subject.listen_socket.local_address.unix_path)
91
91
  subject.run_once
92
92
 
93
- expect(Delayed::Job).to receive(:get_and_lock_next_available).with(*job_args).and_return(job)
93
+ expect(Delayed::Job).to receive(:get_and_lock_next_available).with(*job_args).and_return('worker_name' => job)
94
94
  Marshal.dump(args, client)
95
95
  subject.run_once
96
+ expect(client).to be_ready
97
+ expect(Marshal.load(client)).to eq(job)
98
+ end
99
+
100
+ it 'can pop multiple jobs at once' do
101
+ client1 = Socket.unix(subject.listen_socket.local_address.unix_path)
102
+ subject.run_once
103
+ client2 = Socket.unix(subject.listen_socket.local_address.unix_path)
104
+ subject.run_once
105
+
106
+ job_args = [["worker_name1", "worker_name2"], "queue_name", 1, 2]
107
+ jobs = { 'worker_name1' => :job1, 'worker_name2' => :job2 }
108
+
109
+ expect(Delayed::Job).to receive(:get_and_lock_next_available).with(*job_args).and_return(jobs)
110
+ Marshal.dump(["worker_name1", worker_config], client1)
111
+ Marshal.dump(["worker_name2", worker_config], client2)
112
+ subject.run_once
113
+ expect(Marshal.load(client1)).to eq(:job1)
114
+ expect(Marshal.load(client2)).to eq(:job2)
115
+ end
116
+
117
+ it "doesn't respond immediately if there are no jobs available" do
118
+ client = Socket.unix(subject.listen_socket.local_address.unix_path)
119
+ subject.run_once
120
+
121
+ expect(Delayed::Job).to receive(:get_and_lock_next_available).with(*job_args).and_return({}).ordered
122
+ Marshal.dump(args, client)
123
+ subject.run_once
124
+ expect(client).not_to be_ready
125
+
126
+ # next time around, return the result
127
+ expect(Delayed::Job).to receive(:get_and_lock_next_available).with(*job_args).and_return('worker_name' => job).ordered
128
+ allow(Delayed::Settings).to receive(:sleep_delay).and_return(0)
129
+ allow(Delayed::Settings).to receive(:sleep_delay_stagger).and_return(0)
130
+ subject.run_once
131
+ expect(client).to be_ready
96
132
  expect(Marshal.load(client)).to eq(job)
97
133
  end
98
134
 
@@ -124,12 +160,12 @@ RSpec.describe Delayed::WorkQueue::ParentProcess do
124
160
  subject.run_once
125
161
  expect(subject.all_workers_idle?).to be(true)
126
162
 
127
- expect(Delayed::Job).to receive(:get_and_lock_next_available).with(*job_args).and_return(job)
163
+ expect(Delayed::Job).to receive(:get_and_lock_next_available).with(*job_args).and_return('worker_name' => job)
128
164
  Marshal.dump(args, client)
129
165
  subject.run_once
130
166
  expect(subject.all_workers_idle?).to be(false)
131
167
 
132
- expect(Delayed::Job).to receive(:get_and_lock_next_available).with(*job_args).and_return(nil)
168
+ expect(Delayed::Job).to receive(:get_and_lock_next_available).with(*job_args).and_return({})
133
169
  Marshal.dump(args, client)
134
170
  subject.run_once
135
171
  expect(subject.all_workers_idle?).to be(true)
@@ -143,7 +179,7 @@ RSpec.describe Delayed::WorkQueue::ParentProcess do
143
179
  Delayed::Worker.lifecycle.around(:work_queue_pop) do |queue, &cb|
144
180
  expect(subject.all_workers_idle?).to be(true)
145
181
  expect(queue).to eq(subject)
146
- expect(Delayed::Job).to receive(:get_and_lock_next_available).with(*job_args).and_return(job)
182
+ expect(Delayed::Job).to receive(:get_and_lock_next_available).with(*job_args).and_return('worker_name' => job)
147
183
  called = true
148
184
  res = cb.call(queue)
149
185
  expect(subject.all_workers_idle?).to be(false)
@@ -137,4 +137,14 @@ describe 'Delayed::Backend::Redis::Job' do
137
137
  end
138
138
  end
139
139
  end
140
+
141
+ it "allows the API for fetching multiple jobs at once" do
142
+ jobs = 3.times.map { Delayed::Job.create :payload_object => SimpleJob.new }
143
+ locked_jobs = Delayed::Job.get_and_lock_next_available(['worker1', 'worker2'])
144
+ locked_jobs.length.should == 1
145
+ locked_jobs.keys.should == ['worker1']
146
+ jobs.map(&:id).should be_include(locked_jobs.values.first.id)
147
+ jobs.map { |j| Delayed::Job.find(j.id).locked_by }.compact.should == ['worker1']
148
+ end
149
+
140
150
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: inst-jobs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.10
4
+ version: 0.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tobias Luetke
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-01-25 00:00:00.000000000 Z
12
+ date: 2017-02-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: after_transaction_commit
@@ -31,14 +31,14 @@ dependencies:
31
31
  requirements:
32
32
  - - ">="
33
33
  - !ruby/object:Gem::Version
34
- version: '3.2'
34
+ version: '4.2'
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - ">="
40
40
  - !ruby/object:Gem::Version
41
- version: '3.2'
41
+ version: '4.2'
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: rufus-scheduler
44
44
  requirement: !ruby/object:Gem::Requirement
@@ -341,12 +341,6 @@ files:
341
341
  - spec/delayed/work_queue/in_process_spec.rb
342
342
  - spec/delayed/work_queue/parent_process_spec.rb
343
343
  - spec/delayed/worker_spec.rb
344
- - spec/gemfiles/32.gemfile
345
- - spec/gemfiles/32.gemfile.lock
346
- - spec/gemfiles/40.gemfile
347
- - spec/gemfiles/40.gemfile.lock
348
- - spec/gemfiles/41.gemfile
349
- - spec/gemfiles/41.gemfile.lock
350
344
  - spec/gemfiles/42.gemfile
351
345
  - spec/gemfiles/42.gemfile.lock
352
346
  - spec/gemfiles/50.gemfile
@@ -373,7 +367,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
373
367
  requirements:
374
368
  - - ">="
375
369
  - !ruby/object:Gem::Version
376
- version: '2.0'
370
+ version: '2.3'
377
371
  required_rubygems_version: !ruby/object:Gem::Requirement
378
372
  requirements:
379
373
  - - ">="
@@ -394,12 +388,6 @@ test_files:
394
388
  - spec/delayed/work_queue/in_process_spec.rb
395
389
  - spec/delayed/work_queue/parent_process_spec.rb
396
390
  - spec/delayed/worker_spec.rb
397
- - spec/gemfiles/32.gemfile
398
- - spec/gemfiles/32.gemfile.lock
399
- - spec/gemfiles/40.gemfile
400
- - spec/gemfiles/40.gemfile.lock
401
- - spec/gemfiles/41.gemfile
402
- - spec/gemfiles/41.gemfile.lock
403
391
  - spec/gemfiles/42.gemfile
404
392
  - spec/gemfiles/42.gemfile.lock
405
393
  - spec/gemfiles/50.gemfile
@@ -1,6 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- gemspec :path=>"../../"
4
-
5
- gem "rails", "~> 3.2.19"
6
-
@@ -1,160 +0,0 @@
1
- PATH
2
- remote: ../..
3
- specs:
4
- inst-jobs (0.11.9)
5
- after_transaction_commit (~> 1.0)
6
- rails (>= 3.2)
7
- redis (> 3.0)
8
- redis-scripting (~> 1.0.1)
9
- rufus-scheduler (~> 3.3.2)
10
-
11
- GEM
12
- remote: https://rubygems.org/
13
- specs:
14
- actionmailer (3.2.22.5)
15
- actionpack (= 3.2.22.5)
16
- mail (~> 2.5.4)
17
- actionpack (3.2.22.5)
18
- activemodel (= 3.2.22.5)
19
- activesupport (= 3.2.22.5)
20
- builder (~> 3.0.0)
21
- erubis (~> 2.7.0)
22
- journey (~> 1.0.4)
23
- rack (~> 1.4.5)
24
- rack-cache (~> 1.2)
25
- rack-test (~> 0.6.1)
26
- sprockets (~> 2.2.1)
27
- activemodel (3.2.22.5)
28
- activesupport (= 3.2.22.5)
29
- builder (~> 3.0.0)
30
- activerecord (3.2.22.5)
31
- activemodel (= 3.2.22.5)
32
- activesupport (= 3.2.22.5)
33
- arel (~> 3.0.2)
34
- tzinfo (~> 0.3.29)
35
- activeresource (3.2.22.5)
36
- activemodel (= 3.2.22.5)
37
- activesupport (= 3.2.22.5)
38
- activesupport (3.2.22.5)
39
- i18n (~> 0.6, >= 0.6.4)
40
- multi_json (~> 1.0)
41
- after_transaction_commit (1.0.1)
42
- activerecord (>= 3.2)
43
- arel (3.0.3)
44
- backports (3.6.8)
45
- builder (3.0.4)
46
- bump (0.5.3)
47
- coderay (1.1.1)
48
- database_cleaner (1.3.0)
49
- diff-lcs (1.3)
50
- erubis (2.7.0)
51
- hike (1.2.3)
52
- i18n (0.7.0)
53
- journey (1.0.4)
54
- json (1.8.6)
55
- mail (2.5.4)
56
- mime-types (~> 1.16)
57
- treetop (~> 1.4.8)
58
- method_source (0.8.2)
59
- mime-types (1.25.1)
60
- multi_json (1.12.1)
61
- pg (0.19.0)
62
- polyglot (0.3.5)
63
- pry (0.10.4)
64
- coderay (~> 1.1.0)
65
- method_source (~> 0.8.1)
66
- slop (~> 3.4)
67
- rack (1.4.7)
68
- rack-cache (1.7.0)
69
- rack (>= 0.4)
70
- rack-protection (1.5.3)
71
- rack
72
- rack-ssl (1.3.4)
73
- rack
74
- rack-test (0.6.3)
75
- rack (>= 1.0)
76
- rails (3.2.22.5)
77
- actionmailer (= 3.2.22.5)
78
- actionpack (= 3.2.22.5)
79
- activerecord (= 3.2.22.5)
80
- activeresource (= 3.2.22.5)
81
- activesupport (= 3.2.22.5)
82
- bundler (~> 1.0)
83
- railties (= 3.2.22.5)
84
- railties (3.2.22.5)
85
- actionpack (= 3.2.22.5)
86
- activesupport (= 3.2.22.5)
87
- rack-ssl (~> 1.3.2)
88
- rake (>= 0.8.7)
89
- rdoc (~> 3.4)
90
- thor (>= 0.14.6, < 2.0)
91
- rake (12.0.0)
92
- rdoc (3.12.2)
93
- json (~> 1.4)
94
- redis (3.3.3)
95
- redis-scripting (1.0.1)
96
- redis (>= 3.0)
97
- rspec (3.4.0)
98
- rspec-core (~> 3.4.0)
99
- rspec-expectations (~> 3.4.0)
100
- rspec-mocks (~> 3.4.0)
101
- rspec-core (3.4.4)
102
- rspec-support (~> 3.4.0)
103
- rspec-expectations (3.4.0)
104
- diff-lcs (>= 1.2.0, < 2.0)
105
- rspec-support (~> 3.4.0)
106
- rspec-mocks (3.4.1)
107
- diff-lcs (>= 1.2.0, < 2.0)
108
- rspec-support (~> 3.4.0)
109
- rspec-support (3.4.1)
110
- rufus-scheduler (3.3.2)
111
- tzinfo
112
- sinatra (1.4.6)
113
- rack (~> 1.4)
114
- rack-protection (~> 1.4)
115
- tilt (>= 1.3, < 3)
116
- sinatra-contrib (1.4.7)
117
- backports (>= 2.0)
118
- multi_json
119
- rack-protection
120
- rack-test
121
- sinatra (~> 1.4.0)
122
- tilt (>= 1.3, < 3)
123
- slop (3.6.0)
124
- sprockets (2.2.3)
125
- hike (~> 1.2)
126
- multi_json (~> 1.0)
127
- rack (~> 1.0)
128
- tilt (~> 1.1, != 1.3.0)
129
- test_after_commit (0.4.1)
130
- activerecord (>= 3.2)
131
- thor (0.19.4)
132
- tilt (1.4.1)
133
- timecop (0.7.1)
134
- treetop (1.4.15)
135
- polyglot
136
- polyglot (>= 0.3.1)
137
- tzinfo (0.3.52)
138
- wwtd (1.3.0)
139
-
140
- PLATFORMS
141
- ruby
142
-
143
- DEPENDENCIES
144
- bump
145
- database_cleaner (= 1.3.0)
146
- inst-jobs!
147
- pg
148
- pry
149
- rack-test
150
- rails (~> 3.2.19)
151
- rake
152
- rspec (= 3.4.0)
153
- sinatra
154
- sinatra-contrib
155
- test_after_commit (= 0.4.1)
156
- timecop (= 0.7.1)
157
- wwtd (~> 1.3.0)
158
-
159
- BUNDLED WITH
160
- 1.14.3
@@ -1,5 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- gemspec :path=>"../../"
4
-
5
- gem "rails", "~> 4.0.10"
@@ -1,147 +0,0 @@
1
- PATH
2
- remote: ../..
3
- specs:
4
- inst-jobs (0.11.6)
5
- after_transaction_commit (~> 1.0)
6
- rails (>= 3.2)
7
- redis (> 3.0)
8
- redis-scripting (~> 1.0.1)
9
- rufus-scheduler (~> 3.2.0)
10
-
11
- GEM
12
- remote: https://rubygems.org/
13
- specs:
14
- actionmailer (4.0.13)
15
- actionpack (= 4.0.13)
16
- mail (~> 2.5, >= 2.5.4)
17
- actionpack (4.0.13)
18
- activesupport (= 4.0.13)
19
- builder (~> 3.1.0)
20
- erubis (~> 2.7.0)
21
- rack (~> 1.5.2)
22
- rack-test (~> 0.6.2)
23
- activemodel (4.0.13)
24
- activesupport (= 4.0.13)
25
- builder (~> 3.1.0)
26
- activerecord (4.0.13)
27
- activemodel (= 4.0.13)
28
- activerecord-deprecated_finders (~> 1.0.2)
29
- activesupport (= 4.0.13)
30
- arel (~> 4.0.0)
31
- activerecord-deprecated_finders (1.0.4)
32
- activesupport (4.0.13)
33
- i18n (~> 0.6, >= 0.6.9)
34
- minitest (~> 4.2)
35
- multi_json (~> 1.3)
36
- thread_safe (~> 0.1)
37
- tzinfo (~> 0.3.37)
38
- after_transaction_commit (1.1.0)
39
- activerecord (>= 4.0)
40
- arel (4.0.2)
41
- backports (3.6.8)
42
- builder (3.1.4)
43
- bump (0.5.3)
44
- coderay (1.1.1)
45
- concurrent-ruby (1.0.4)
46
- database_cleaner (1.3.0)
47
- diff-lcs (1.3)
48
- erubis (2.7.0)
49
- i18n (0.7.0)
50
- mail (2.6.4)
51
- mime-types (>= 1.16, < 4)
52
- method_source (0.8.2)
53
- mime-types (3.1)
54
- mime-types-data (~> 3.2015)
55
- mime-types-data (3.2016.0521)
56
- minitest (4.7.5)
57
- multi_json (1.12.1)
58
- pg (0.19.0)
59
- pry (0.10.4)
60
- coderay (~> 1.1.0)
61
- method_source (~> 0.8.1)
62
- slop (~> 3.4)
63
- rack (1.5.5)
64
- rack-protection (1.5.3)
65
- rack
66
- rack-test (0.6.3)
67
- rack (>= 1.0)
68
- rails (4.0.13)
69
- actionmailer (= 4.0.13)
70
- actionpack (= 4.0.13)
71
- activerecord (= 4.0.13)
72
- activesupport (= 4.0.13)
73
- bundler (>= 1.3.0, < 2.0)
74
- railties (= 4.0.13)
75
- sprockets-rails (~> 2.0)
76
- railties (4.0.13)
77
- actionpack (= 4.0.13)
78
- activesupport (= 4.0.13)
79
- rake (>= 0.8.7)
80
- thor (>= 0.18.1, < 2.0)
81
- rake (12.0.0)
82
- redis (3.3.3)
83
- redis-scripting (1.0.1)
84
- redis (>= 3.0)
85
- rspec (3.4.0)
86
- rspec-core (~> 3.4.0)
87
- rspec-expectations (~> 3.4.0)
88
- rspec-mocks (~> 3.4.0)
89
- rspec-core (3.4.4)
90
- rspec-support (~> 3.4.0)
91
- rspec-expectations (3.4.0)
92
- diff-lcs (>= 1.2.0, < 2.0)
93
- rspec-support (~> 3.4.0)
94
- rspec-mocks (3.4.1)
95
- diff-lcs (>= 1.2.0, < 2.0)
96
- rspec-support (~> 3.4.0)
97
- rspec-support (3.4.1)
98
- rufus-scheduler (3.2.2)
99
- sinatra (1.4.7)
100
- rack (~> 1.5)
101
- rack-protection (~> 1.4)
102
- tilt (>= 1.3, < 3)
103
- sinatra-contrib (1.4.7)
104
- backports (>= 2.0)
105
- multi_json
106
- rack-protection
107
- rack-test
108
- sinatra (~> 1.4.0)
109
- tilt (>= 1.3, < 3)
110
- slop (3.6.0)
111
- sprockets (3.7.1)
112
- concurrent-ruby (~> 1.0)
113
- rack (> 1, < 3)
114
- sprockets-rails (2.3.3)
115
- actionpack (>= 3.0)
116
- activesupport (>= 3.0)
117
- sprockets (>= 2.8, < 4.0)
118
- test_after_commit (0.4.1)
119
- activerecord (>= 3.2)
120
- thor (0.19.4)
121
- thread_safe (0.3.5)
122
- tilt (2.0.5)
123
- timecop (0.7.1)
124
- tzinfo (0.3.52)
125
- wwtd (1.3.0)
126
-
127
- PLATFORMS
128
- ruby
129
-
130
- DEPENDENCIES
131
- bump
132
- database_cleaner (= 1.3.0)
133
- inst-jobs!
134
- pg
135
- pry
136
- rack-test
137
- rails (~> 4.0.10)
138
- rake
139
- rspec (= 3.4.0)
140
- sinatra
141
- sinatra-contrib
142
- test_after_commit (= 0.4.1)
143
- timecop (= 0.7.1)
144
- wwtd (~> 1.3.0)
145
-
146
- BUNDLED WITH
147
- 1.14.3
@@ -1,5 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- gemspec :path=>"../../"
4
-
5
- gem "rails", "~> 4.1.6"
@@ -1,153 +0,0 @@
1
- PATH
2
- remote: ../..
3
- specs:
4
- inst-jobs (0.11.6)
5
- after_transaction_commit (~> 1.0)
6
- rails (>= 3.2)
7
- redis (> 3.0)
8
- redis-scripting (~> 1.0.1)
9
- rufus-scheduler (~> 3.2.0)
10
-
11
- GEM
12
- remote: https://rubygems.org/
13
- specs:
14
- actionmailer (4.1.16)
15
- actionpack (= 4.1.16)
16
- actionview (= 4.1.16)
17
- mail (~> 2.5, >= 2.5.4)
18
- actionpack (4.1.16)
19
- actionview (= 4.1.16)
20
- activesupport (= 4.1.16)
21
- rack (~> 1.5.2)
22
- rack-test (~> 0.6.2)
23
- actionview (4.1.16)
24
- activesupport (= 4.1.16)
25
- builder (~> 3.1)
26
- erubis (~> 2.7.0)
27
- activemodel (4.1.16)
28
- activesupport (= 4.1.16)
29
- builder (~> 3.1)
30
- activerecord (4.1.16)
31
- activemodel (= 4.1.16)
32
- activesupport (= 4.1.16)
33
- arel (~> 5.0.0)
34
- activesupport (4.1.16)
35
- i18n (~> 0.6, >= 0.6.9)
36
- json (~> 1.7, >= 1.7.7)
37
- minitest (~> 5.1)
38
- thread_safe (~> 0.1)
39
- tzinfo (~> 1.1)
40
- after_transaction_commit (1.1.0)
41
- activerecord (>= 4.0)
42
- arel (5.0.1.20140414130214)
43
- backports (3.6.8)
44
- builder (3.2.3)
45
- bump (0.5.3)
46
- coderay (1.1.1)
47
- concurrent-ruby (1.0.4)
48
- database_cleaner (1.3.0)
49
- diff-lcs (1.3)
50
- erubis (2.7.0)
51
- i18n (0.7.0)
52
- json (1.8.6)
53
- mail (2.6.4)
54
- mime-types (>= 1.16, < 4)
55
- method_source (0.8.2)
56
- mime-types (3.1)
57
- mime-types-data (~> 3.2015)
58
- mime-types-data (3.2016.0521)
59
- minitest (5.10.1)
60
- multi_json (1.12.1)
61
- pg (0.19.0)
62
- pry (0.10.4)
63
- coderay (~> 1.1.0)
64
- method_source (~> 0.8.1)
65
- slop (~> 3.4)
66
- rack (1.5.5)
67
- rack-protection (1.5.3)
68
- rack
69
- rack-test (0.6.3)
70
- rack (>= 1.0)
71
- rails (4.1.16)
72
- actionmailer (= 4.1.16)
73
- actionpack (= 4.1.16)
74
- actionview (= 4.1.16)
75
- activemodel (= 4.1.16)
76
- activerecord (= 4.1.16)
77
- activesupport (= 4.1.16)
78
- bundler (>= 1.3.0, < 2.0)
79
- railties (= 4.1.16)
80
- sprockets-rails (~> 2.0)
81
- railties (4.1.16)
82
- actionpack (= 4.1.16)
83
- activesupport (= 4.1.16)
84
- rake (>= 0.8.7)
85
- thor (>= 0.18.1, < 2.0)
86
- rake (12.0.0)
87
- redis (3.3.3)
88
- redis-scripting (1.0.1)
89
- redis (>= 3.0)
90
- rspec (3.4.0)
91
- rspec-core (~> 3.4.0)
92
- rspec-expectations (~> 3.4.0)
93
- rspec-mocks (~> 3.4.0)
94
- rspec-core (3.4.4)
95
- rspec-support (~> 3.4.0)
96
- rspec-expectations (3.4.0)
97
- diff-lcs (>= 1.2.0, < 2.0)
98
- rspec-support (~> 3.4.0)
99
- rspec-mocks (3.4.1)
100
- diff-lcs (>= 1.2.0, < 2.0)
101
- rspec-support (~> 3.4.0)
102
- rspec-support (3.4.1)
103
- rufus-scheduler (3.2.2)
104
- sinatra (1.4.7)
105
- rack (~> 1.5)
106
- rack-protection (~> 1.4)
107
- tilt (>= 1.3, < 3)
108
- sinatra-contrib (1.4.7)
109
- backports (>= 2.0)
110
- multi_json
111
- rack-protection
112
- rack-test
113
- sinatra (~> 1.4.0)
114
- tilt (>= 1.3, < 3)
115
- slop (3.6.0)
116
- sprockets (3.7.1)
117
- concurrent-ruby (~> 1.0)
118
- rack (> 1, < 3)
119
- sprockets-rails (2.3.3)
120
- actionpack (>= 3.0)
121
- activesupport (>= 3.0)
122
- sprockets (>= 2.8, < 4.0)
123
- test_after_commit (0.4.1)
124
- activerecord (>= 3.2)
125
- thor (0.19.4)
126
- thread_safe (0.3.5)
127
- tilt (2.0.5)
128
- timecop (0.7.1)
129
- tzinfo (1.2.2)
130
- thread_safe (~> 0.1)
131
- wwtd (1.3.0)
132
-
133
- PLATFORMS
134
- ruby
135
-
136
- DEPENDENCIES
137
- bump
138
- database_cleaner (= 1.3.0)
139
- inst-jobs!
140
- pg
141
- pry
142
- rack-test
143
- rails (~> 4.1.6)
144
- rake
145
- rspec (= 3.4.0)
146
- sinatra
147
- sinatra-contrib
148
- test_after_commit (= 0.4.1)
149
- timecop (= 0.7.1)
150
- wwtd (~> 1.3.0)
151
-
152
- BUNDLED WITH
153
- 1.14.3