inst-jobs 0.12.3 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,22 +1,48 @@
1
1
  require 'spec_helper'
2
+ require 'fileutils'
2
3
 
3
4
  RSpec.describe Delayed::WorkQueue::ParentProcess do
4
5
  before :all do
6
+ FileUtils.mkdir_p(Delayed::Settings.expand_rails_path('tmp'))
5
7
  Delayed.select_backend(Delayed::Backend::ActiveRecord::Job)
8
+ Delayed::Settings.parent_process = {
9
+ 'server_address' => '/tmp/inst-jobs-test.sock'
10
+ }
6
11
  end
7
12
 
8
13
  after :all do
9
14
  Delayed.send(:remove_const, :Job)
15
+ Delayed::Settings.parent_process = {}
10
16
  end
11
17
 
12
18
  after :each do
19
+ File.unlink('/tmp/inst-jobs-test.sock') if File.exist?('/tmp/inst-jobs-test.sock')
13
20
  Delayed::Worker.lifecycle.reset!
14
21
  end
15
22
 
16
23
  let(:subject) { described_class.new }
17
- let(:worker_config) { { queue: "queue_name", min_priority: 1, max_priority: 2 } }
18
- let(:args) { ["worker_name", worker_config] }
19
- let(:job_args) { [["worker_name"], "queue_name", 1, 2] }
24
+
25
+ describe '#initalize(config = Settings.parent_process)' do
26
+ it 'must expand a relative path to be within the Rails root' do
27
+ queue = described_class.new('server_address' => 'tmp/foo.sock')
28
+ expect(queue.server_address).to eq Delayed::Settings.expand_rails_path('tmp/foo.sock')
29
+ end
30
+
31
+ it 'must add a file name when a relative path to a directory is supplied' do
32
+ queue = described_class.new('server_address' => 'tmp')
33
+ expect(queue.server_address).to eq Delayed::Settings.expand_rails_path('tmp/inst-jobs.sock')
34
+ end
35
+
36
+ it 'must capture a full absolute path' do
37
+ queue = described_class.new('server_address' => '/tmp/foo.sock')
38
+ expect(queue.server_address).to eq '/tmp/foo.sock'
39
+ end
40
+
41
+ it 'must add a file name when an absolute path to a directory is supplied' do
42
+ queue = described_class.new('server_address' => '/tmp')
43
+ expect(queue.server_address).to eq '/tmp/inst-jobs.sock'
44
+ end
45
+ end
20
46
 
21
47
  it 'generates a server listening on a valid unix socket' do
22
48
  server = subject.server
@@ -32,165 +58,4 @@ RSpec.describe Delayed::WorkQueue::ParentProcess do
32
58
  expect(client.addrinfo.unix?).to be(true)
33
59
  expect(client.addrinfo.unix_path).to eq(server.listen_socket.local_address.unix_path)
34
60
  end
35
-
36
- describe Delayed::WorkQueue::ParentProcess::Client do
37
- let(:subject) { described_class.new(addrinfo) }
38
- let(:addrinfo) { double('Addrinfo') }
39
- let(:connection) { double('Socket') }
40
- let(:job) { Delayed::Job.new(locked_by: "worker_name") }
41
-
42
- it 'marshals the given arguments to the server and returns the response' do
43
- expect(addrinfo).to receive(:connect).once.and_return(connection)
44
- expect(Marshal).to receive(:dump).with(args, connection).ordered
45
- expect(Marshal).to receive(:load).with(connection).and_return(job).ordered
46
- response = subject.get_and_lock_next_available(*args)
47
- expect(response).to eq(job)
48
- end
49
-
50
- it 'returns nil and then reconnects on socket error' do
51
- expect(addrinfo).to receive(:connect).once.and_return(connection)
52
- expect(Marshal).to receive(:dump).and_raise(SystemCallError.new("failure"))
53
- response = subject.get_and_lock_next_available(*args)
54
- expect(response).to be_nil
55
-
56
- expect(addrinfo).to receive(:connect).once.and_return(connection)
57
- expect(Marshal).to receive(:dump).with(args, connection)
58
- expect(Marshal).to receive(:load).with(connection).and_return(job)
59
- response = subject.get_and_lock_next_available(*args)
60
- expect(response).to eq(job)
61
- end
62
-
63
- it 'errors if the response is not a locked job' do
64
- expect(addrinfo).to receive(:connect).once.and_return(connection)
65
- expect(Marshal).to receive(:dump).with(args, connection)
66
- expect(Marshal).to receive(:load).with(connection).and_return(:not_a_job)
67
- expect { subject.get_and_lock_next_available(*args) }.to raise_error(Delayed::WorkQueue::ParentProcess::ProtocolError)
68
- end
69
-
70
- it 'errors if the response is a job not locked by this worker' do
71
- expect(addrinfo).to receive(:connect).once.and_return(connection)
72
- expect(Marshal).to receive(:dump).with(args, connection)
73
- job.locked_by = "somebody_else"
74
- expect(Marshal).to receive(:load).with(connection).and_return(job)
75
- expect { subject.get_and_lock_next_available(*args) }.to raise_error(Delayed::WorkQueue::ParentProcess::ProtocolError)
76
- end
77
- end
78
-
79
- describe Delayed::WorkQueue::ParentProcess::Server do
80
- let(:subject) { described_class.new(listen_socket) }
81
- let(:listen_socket) { Socket.unix_server_socket(Delayed::WorkQueue::ParentProcess.generate_socket_path) }
82
- let(:job) { :a_job }
83
-
84
- it 'accepts new clients' do
85
- client = Socket.unix(subject.listen_socket.local_address.unix_path)
86
- expect { subject.run_once }.to change(subject, :connected_clients).by(1)
87
- end
88
-
89
- it 'queries the queue on client request' do
90
- client = Socket.unix(subject.listen_socket.local_address.unix_path)
91
- subject.run_once
92
-
93
- expect(Delayed::Job).to receive(:get_and_lock_next_available).with(*job_args).and_return('worker_name' => job)
94
- Marshal.dump(args, client)
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
132
- expect(Marshal.load(client)).to eq(job)
133
- end
134
-
135
- it 'drops the client on i/o error' do
136
- client = Socket.unix(subject.listen_socket.local_address.unix_path)
137
- subject.run_once
138
-
139
- Marshal.dump(args, client)
140
-
141
- expect(Marshal).to receive(:load).and_raise(IOError.new("socket went away"))
142
- expect { subject.run_once }.to change(subject, :connected_clients).by(-1)
143
- end
144
-
145
- it 'drops the client on timeout' do
146
- client = Socket.unix(subject.listen_socket.local_address.unix_path)
147
- subject.run_once
148
-
149
- Marshal.dump(args, client)
150
-
151
- expect(Marshal).to receive(:load).and_raise(Timeout::Error.new("socket timed out"))
152
- expect(Timeout).to receive(:timeout).with(Delayed::Settings.parent_process_client_timeout).and_yield
153
- expect { subject.run_once }.to change(subject, :connected_clients).by(-1)
154
- end
155
-
156
- it 'tracks when clients are idle' do
157
- expect(subject.all_workers_idle?).to be(true)
158
-
159
- client = Socket.unix(subject.listen_socket.local_address.unix_path)
160
- subject.run_once
161
- expect(subject.all_workers_idle?).to be(true)
162
-
163
- expect(Delayed::Job).to receive(:get_and_lock_next_available).with(*job_args).and_return('worker_name' => job)
164
- Marshal.dump(args, client)
165
- subject.run_once
166
- expect(subject.all_workers_idle?).to be(false)
167
-
168
- expect(Delayed::Job).to receive(:get_and_lock_next_available).with(*job_args).and_return({})
169
- Marshal.dump(args, client)
170
- subject.run_once
171
- expect(subject.all_workers_idle?).to be(true)
172
- end
173
-
174
- it 'triggers the lifecycle event around the pop' do
175
- called = false
176
- client = Socket.unix(subject.listen_socket.local_address.unix_path)
177
- subject.run_once
178
-
179
- Delayed::Worker.lifecycle.around(:work_queue_pop) do |queue, &cb|
180
- expect(subject.all_workers_idle?).to be(true)
181
- expect(queue).to eq(subject)
182
- expect(Delayed::Job).to receive(:get_and_lock_next_available).with(*job_args).and_return('worker_name' => job)
183
- called = true
184
- res = cb.call(queue)
185
- expect(subject.all_workers_idle?).to be(false)
186
- res
187
- end
188
-
189
- Marshal.dump(args, client)
190
- subject.run_once
191
-
192
- expect(Marshal.load(client)).to eq(job)
193
- expect(called).to eq(true)
194
- end
195
- end
196
61
  end
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ../..
3
3
  specs:
4
- inst-jobs (0.12.2)
4
+ inst-jobs (0.12.3)
5
5
  after_transaction_commit (~> 1.0)
6
6
  rails (>= 4.2)
7
7
  redis (> 3.0)
@@ -11,57 +11,55 @@ PATH
11
11
  GEM
12
12
  remote: https://rubygems.org/
13
13
  specs:
14
- actionmailer (4.2.7.1)
15
- actionpack (= 4.2.7.1)
16
- actionview (= 4.2.7.1)
17
- activejob (= 4.2.7.1)
14
+ actionmailer (4.2.8)
15
+ actionpack (= 4.2.8)
16
+ actionview (= 4.2.8)
17
+ activejob (= 4.2.8)
18
18
  mail (~> 2.5, >= 2.5.4)
19
19
  rails-dom-testing (~> 1.0, >= 1.0.5)
20
- actionpack (4.2.7.1)
21
- actionview (= 4.2.7.1)
22
- activesupport (= 4.2.7.1)
20
+ actionpack (4.2.8)
21
+ actionview (= 4.2.8)
22
+ activesupport (= 4.2.8)
23
23
  rack (~> 1.6)
24
24
  rack-test (~> 0.6.2)
25
25
  rails-dom-testing (~> 1.0, >= 1.0.5)
26
26
  rails-html-sanitizer (~> 1.0, >= 1.0.2)
27
- actionview (4.2.7.1)
28
- activesupport (= 4.2.7.1)
27
+ actionview (4.2.8)
28
+ activesupport (= 4.2.8)
29
29
  builder (~> 3.1)
30
30
  erubis (~> 2.7.0)
31
31
  rails-dom-testing (~> 1.0, >= 1.0.5)
32
- rails-html-sanitizer (~> 1.0, >= 1.0.2)
33
- activejob (4.2.7.1)
34
- activesupport (= 4.2.7.1)
32
+ rails-html-sanitizer (~> 1.0, >= 1.0.3)
33
+ activejob (4.2.8)
34
+ activesupport (= 4.2.8)
35
35
  globalid (>= 0.3.0)
36
- activemodel (4.2.7.1)
37
- activesupport (= 4.2.7.1)
36
+ activemodel (4.2.8)
37
+ activesupport (= 4.2.8)
38
38
  builder (~> 3.1)
39
- activerecord (4.2.7.1)
40
- activemodel (= 4.2.7.1)
41
- activesupport (= 4.2.7.1)
39
+ activerecord (4.2.8)
40
+ activemodel (= 4.2.8)
41
+ activesupport (= 4.2.8)
42
42
  arel (~> 6.0)
43
- activesupport (4.2.7.1)
43
+ activesupport (4.2.8)
44
44
  i18n (~> 0.7)
45
- json (~> 1.7, >= 1.7.7)
46
45
  minitest (~> 5.1)
47
46
  thread_safe (~> 0.3, >= 0.3.4)
48
47
  tzinfo (~> 1.1)
49
48
  after_transaction_commit (1.1.1)
50
49
  activerecord (>= 4.0)
51
50
  arel (6.0.4)
52
- backports (3.6.8)
51
+ backports (3.7.0)
53
52
  builder (3.2.3)
54
53
  bump (0.5.3)
55
54
  byebug (9.0.6)
56
55
  coderay (1.1.1)
57
- concurrent-ruby (1.0.4)
56
+ concurrent-ruby (1.0.5)
58
57
  database_cleaner (1.3.0)
59
58
  diff-lcs (1.3)
60
59
  erubis (2.7.0)
61
- globalid (0.3.7)
62
- activesupport (>= 4.1.0)
63
- i18n (0.7.0)
64
- json (1.8.6)
60
+ globalid (0.4.0)
61
+ activesupport (>= 4.2.0)
62
+ i18n (0.8.1)
65
63
  loofah (2.0.3)
66
64
  nokogiri (>= 1.5.9)
67
65
  mail (2.6.4)
@@ -73,9 +71,9 @@ GEM
73
71
  mini_portile2 (2.1.0)
74
72
  minitest (5.10.1)
75
73
  multi_json (1.12.1)
76
- nokogiri (1.7.0.1)
74
+ nokogiri (1.7.1)
77
75
  mini_portile2 (~> 2.1.0)
78
- pg (0.19.0)
76
+ pg (0.20.0)
79
77
  pry (0.10.4)
80
78
  coderay (~> 1.1.0)
81
79
  method_source (~> 0.8.1)
@@ -85,16 +83,16 @@ GEM
85
83
  rack
86
84
  rack-test (0.6.3)
87
85
  rack (>= 1.0)
88
- rails (4.2.7.1)
89
- actionmailer (= 4.2.7.1)
90
- actionpack (= 4.2.7.1)
91
- actionview (= 4.2.7.1)
92
- activejob (= 4.2.7.1)
93
- activemodel (= 4.2.7.1)
94
- activerecord (= 4.2.7.1)
95
- activesupport (= 4.2.7.1)
86
+ rails (4.2.8)
87
+ actionmailer (= 4.2.8)
88
+ actionpack (= 4.2.8)
89
+ actionview (= 4.2.8)
90
+ activejob (= 4.2.8)
91
+ activemodel (= 4.2.8)
92
+ activerecord (= 4.2.8)
93
+ activesupport (= 4.2.8)
96
94
  bundler (>= 1.3.0, < 2.0)
97
- railties (= 4.2.7.1)
95
+ railties (= 4.2.8)
98
96
  sprockets-rails
99
97
  rails-deprecated_sanitizer (1.0.3)
100
98
  activesupport (>= 4.2.0.alpha)
@@ -104,9 +102,9 @@ GEM
104
102
  rails-deprecated_sanitizer (>= 1.0.1)
105
103
  rails-html-sanitizer (1.0.3)
106
104
  loofah (~> 2.0)
107
- railties (4.2.7.1)
108
- actionpack (= 4.2.7.1)
109
- activesupport (= 4.2.7.1)
105
+ railties (4.2.8)
106
+ actionpack (= 4.2.8)
107
+ activesupport (= 4.2.8)
110
108
  rake (>= 0.8.7)
111
109
  thor (>= 0.18.1, < 2.0)
112
110
  rake (12.0.0)
@@ -126,9 +124,9 @@ GEM
126
124
  diff-lcs (>= 1.2.0, < 2.0)
127
125
  rspec-support (~> 3.4.0)
128
126
  rspec-support (3.4.1)
129
- rufus-scheduler (3.3.3)
127
+ rufus-scheduler (3.3.4)
130
128
  tzinfo
131
- sinatra (1.4.7)
129
+ sinatra (1.4.8)
132
130
  rack (~> 1.5)
133
131
  rack-protection (~> 1.4)
134
132
  tilt (>= 1.3, < 3)
@@ -150,10 +148,10 @@ GEM
150
148
  test_after_commit (0.4.1)
151
149
  activerecord (>= 3.2)
152
150
  thor (0.19.4)
153
- thread_safe (0.3.5)
154
- tilt (2.0.5)
151
+ thread_safe (0.3.6)
152
+ tilt (2.0.7)
155
153
  timecop (0.7.1)
156
- tzinfo (1.2.2)
154
+ tzinfo (1.2.3)
157
155
  thread_safe (~> 0.1)
158
156
  wwtd (1.3.0)
159
157
 
@@ -178,4 +176,4 @@ DEPENDENCIES
178
176
  wwtd (~> 1.3.0)
179
177
 
180
178
  BUNDLED WITH
181
- 1.14.3
179
+ 1.14.6
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ../..
3
3
  specs:
4
- inst-jobs (0.12.2)
4
+ inst-jobs (0.12.3)
5
5
  after_transaction_commit (~> 1.0)
6
6
  rails (>= 4.2)
7
7
  redis (> 3.0)
@@ -11,39 +11,39 @@ PATH
11
11
  GEM
12
12
  remote: https://rubygems.org/
13
13
  specs:
14
- actioncable (5.0.1)
15
- actionpack (= 5.0.1)
16
- nio4r (~> 1.2)
14
+ actioncable (5.0.2)
15
+ actionpack (= 5.0.2)
16
+ nio4r (>= 1.2, < 3.0)
17
17
  websocket-driver (~> 0.6.1)
18
- actionmailer (5.0.1)
19
- actionpack (= 5.0.1)
20
- actionview (= 5.0.1)
21
- activejob (= 5.0.1)
18
+ actionmailer (5.0.2)
19
+ actionpack (= 5.0.2)
20
+ actionview (= 5.0.2)
21
+ activejob (= 5.0.2)
22
22
  mail (~> 2.5, >= 2.5.4)
23
23
  rails-dom-testing (~> 2.0)
24
- actionpack (5.0.1)
25
- actionview (= 5.0.1)
26
- activesupport (= 5.0.1)
24
+ actionpack (5.0.2)
25
+ actionview (= 5.0.2)
26
+ activesupport (= 5.0.2)
27
27
  rack (~> 2.0)
28
28
  rack-test (~> 0.6.3)
29
29
  rails-dom-testing (~> 2.0)
30
30
  rails-html-sanitizer (~> 1.0, >= 1.0.2)
31
- actionview (5.0.1)
32
- activesupport (= 5.0.1)
31
+ actionview (5.0.2)
32
+ activesupport (= 5.0.2)
33
33
  builder (~> 3.1)
34
34
  erubis (~> 2.7.0)
35
35
  rails-dom-testing (~> 2.0)
36
- rails-html-sanitizer (~> 1.0, >= 1.0.2)
37
- activejob (5.0.1)
38
- activesupport (= 5.0.1)
36
+ rails-html-sanitizer (~> 1.0, >= 1.0.3)
37
+ activejob (5.0.2)
38
+ activesupport (= 5.0.2)
39
39
  globalid (>= 0.3.6)
40
- activemodel (5.0.1)
41
- activesupport (= 5.0.1)
42
- activerecord (5.0.1)
43
- activemodel (= 5.0.1)
44
- activesupport (= 5.0.1)
40
+ activemodel (5.0.2)
41
+ activesupport (= 5.0.2)
42
+ activerecord (5.0.2)
43
+ activemodel (= 5.0.2)
44
+ activesupport (= 5.0.2)
45
45
  arel (~> 7.0)
46
- activesupport (5.0.1)
46
+ activesupport (5.0.2)
47
47
  concurrent-ruby (~> 1.0, >= 1.0.2)
48
48
  i18n (~> 0.7)
49
49
  minitest (~> 5.1)
@@ -51,18 +51,18 @@ GEM
51
51
  after_transaction_commit (1.1.1)
52
52
  activerecord (>= 4.0)
53
53
  arel (7.1.4)
54
- backports (3.6.8)
54
+ backports (3.7.0)
55
55
  builder (3.2.3)
56
56
  bump (0.5.3)
57
57
  byebug (9.0.6)
58
58
  coderay (1.1.1)
59
- concurrent-ruby (1.0.4)
59
+ concurrent-ruby (1.0.5)
60
60
  database_cleaner (1.3.0)
61
61
  diff-lcs (1.3)
62
62
  erubis (2.7.0)
63
- globalid (0.3.7)
64
- activesupport (>= 4.1.0)
65
- i18n (0.7.0)
63
+ globalid (0.4.0)
64
+ activesupport (>= 4.2.0)
65
+ i18n (0.8.1)
66
66
  loofah (2.0.3)
67
67
  nokogiri (>= 1.5.9)
68
68
  mail (2.6.4)
@@ -75,10 +75,10 @@ GEM
75
75
  minitest (5.10.1)
76
76
  multi_json (1.12.1)
77
77
  mustermann (1.0.0.beta2)
78
- nio4r (1.2.1)
79
- nokogiri (1.7.0.1)
78
+ nio4r (2.0.0)
79
+ nokogiri (1.7.1)
80
80
  mini_portile2 (~> 2.1.0)
81
- pg (0.19.0)
81
+ pg (0.20.0)
82
82
  pry (0.10.4)
83
83
  coderay (~> 1.1.0)
84
84
  method_source (~> 0.8.1)
@@ -88,26 +88,26 @@ GEM
88
88
  rack
89
89
  rack-test (0.6.3)
90
90
  rack (>= 1.0)
91
- rails (5.0.1)
92
- actioncable (= 5.0.1)
93
- actionmailer (= 5.0.1)
94
- actionpack (= 5.0.1)
95
- actionview (= 5.0.1)
96
- activejob (= 5.0.1)
97
- activemodel (= 5.0.1)
98
- activerecord (= 5.0.1)
99
- activesupport (= 5.0.1)
91
+ rails (5.0.2)
92
+ actioncable (= 5.0.2)
93
+ actionmailer (= 5.0.2)
94
+ actionpack (= 5.0.2)
95
+ actionview (= 5.0.2)
96
+ activejob (= 5.0.2)
97
+ activemodel (= 5.0.2)
98
+ activerecord (= 5.0.2)
99
+ activesupport (= 5.0.2)
100
100
  bundler (>= 1.3.0, < 2.0)
101
- railties (= 5.0.1)
101
+ railties (= 5.0.2)
102
102
  sprockets-rails (>= 2.0.0)
103
103
  rails-dom-testing (2.0.2)
104
104
  activesupport (>= 4.2.0, < 6.0)
105
105
  nokogiri (~> 1.6)
106
106
  rails-html-sanitizer (1.0.3)
107
107
  loofah (~> 2.0)
108
- railties (5.0.1)
109
- actionpack (= 5.0.1)
110
- activesupport (= 5.0.1)
108
+ railties (5.0.2)
109
+ actionpack (= 5.0.2)
110
+ activesupport (= 5.0.2)
111
111
  method_source
112
112
  rake (>= 0.8.7)
113
113
  thor (>= 0.18.1, < 2.0)
@@ -128,7 +128,7 @@ GEM
128
128
  diff-lcs (>= 1.2.0, < 2.0)
129
129
  rspec-support (~> 3.4.0)
130
130
  rspec-support (3.4.1)
131
- rufus-scheduler (3.3.3)
131
+ rufus-scheduler (3.3.4)
132
132
  tzinfo
133
133
  sinatra (2.0.0.beta2)
134
134
  mustermann (= 1.0.0.beta2)
@@ -154,10 +154,10 @@ GEM
154
154
  test_after_commit (0.4.1)
155
155
  activerecord (>= 3.2)
156
156
  thor (0.19.4)
157
- thread_safe (0.3.5)
158
- tilt (2.0.5)
157
+ thread_safe (0.3.6)
158
+ tilt (2.0.7)
159
159
  timecop (0.7.1)
160
- tzinfo (1.2.2)
160
+ tzinfo (1.2.3)
161
161
  thread_safe (~> 0.1)
162
162
  websocket-driver (0.6.5)
163
163
  websocket-extensions (>= 0.1.0)
@@ -185,4 +185,4 @@ DEPENDENCIES
185
185
  wwtd (~> 1.3.0)
186
186
 
187
187
  BUNDLED WITH
188
- 1.14.3
188
+ 1.14.6