async_request 0.0.7 → 1.0.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 +4 -4
- data/app/controllers/async_request/jobs_controller.rb +36 -6
- data/app/models/async_request/job.rb +49 -2
- data/app/poros/async_request/json_web_token.rb +26 -0
- data/app/workers/async_request/job_processor.rb +6 -6
- data/config/routes.rb +1 -1
- data/lib/async_request.rb +28 -0
- data/lib/async_request/engine.rb +2 -1
- data/lib/async_request/version.rb +1 -1
- data/lib/generators/async_request_generator.rb +6 -3
- data/lib/templates/async_request.rb +5 -0
- data/lib/templates/create_async_request_jobs.rb +1 -1
- data/spec/controllers/async_request/jobs_controller_spec.rb +80 -41
- data/spec/controllers/dummy_controller_spec.rb +49 -0
- data/spec/dummy/app/controllers/application_controller.rb +0 -5
- data/spec/dummy/app/controllers/dummy_controller.rb +11 -0
- data/spec/dummy/app/workers/worker_returning_nil.rb +5 -0
- data/spec/dummy/app/workers/worker_with_errors.rb +8 -0
- data/spec/dummy/app/workers/worker_with_symbol.rb +5 -0
- data/spec/dummy/app/workers/worker_without_errors.rb +5 -0
- data/spec/dummy/bin/bundle +1 -0
- data/spec/dummy/bin/rails +1 -0
- data/spec/dummy/bin/rake +1 -0
- data/spec/dummy/bin/setup +9 -8
- data/spec/dummy/config/application.rb +1 -2
- data/spec/dummy/config/initializers/async_request.rb +5 -0
- data/spec/dummy/config/routes.rb +2 -2
- data/spec/dummy/db/migrate/20170815023204_create_async_request_jobs.rb +16 -0
- data/spec/dummy/db/schema.rb +1 -1
- data/spec/dummy/log/test.log +0 -5472
- data/spec/factories/async_request_job.rb +6 -0
- data/spec/models/async_request/job_spec.rb +40 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/support/helpers.rb +5 -0
- data/spec/workers/async_request/job_processor_spec.rb +47 -17
- metadata +85 -54
- data/app/assets/javascripts/async_request/application.js +0 -13
- data/app/assets/stylesheets/async_request/application.css +0 -15
- data/app/helpers/async_request/application_helper.rb +0 -15
- data/lib/tasks/async_request_tasks.rake +0 -4
- data/spec/dummy/app/workers/test.rb +0 -7
- data/spec/dummy/log/development.log +0 -827
- data/spec/helpers/async_request/application_helper_spec.rb +0 -39
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe AsyncRequest::Job do
|
4
|
+
describe '.create_and_enqueue' do
|
5
|
+
let(:worker) { WorkerWithoutErrors }
|
6
|
+
|
7
|
+
context 'when no worker class is passed' do
|
8
|
+
it 'fails with ArgumentError' do
|
9
|
+
expect { described_class.create_and_enqueue(nil, []) }.to raise_error(ArgumentError)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'when called with valid params' do
|
14
|
+
it 'creates a new job object' do
|
15
|
+
expect { described_class.create_and_enqueue(worker, 'a') }
|
16
|
+
.to change { described_class.count }.by(1)
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'creates a new job object with WorkerWithoutErrors as worker' do
|
20
|
+
job = described_class.create_and_enqueue(worker, 'a')
|
21
|
+
expect(job.worker).to eq worker.to_s
|
22
|
+
end
|
23
|
+
|
24
|
+
it "creates a new job object with ['a'] as params" do
|
25
|
+
job = described_class.create_and_enqueue(worker, 'a')
|
26
|
+
expect(job.params).to eq ['a']
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'creates a new job object with waiting status' do
|
30
|
+
job = described_class.create_and_enqueue(worker, 'a')
|
31
|
+
expect(job.waiting?).to be_truthy
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'serializes complex params' do
|
35
|
+
job = described_class.create_and_enqueue(worker, { a: 'a' }, 3, 'a')
|
36
|
+
expect(job.params).to eq [{ a: 'a' }, 3, 'a']
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -2,29 +2,59 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
module AsyncRequest
|
4
4
|
describe JobProcessor do
|
5
|
-
|
6
|
-
|
7
|
-
let(:uid) { execute_async(Test, { a: 'a' }, 3, 'a') }
|
5
|
+
describe '#perform' do
|
6
|
+
let(:job) { AsyncRequest::Job.create_and_enqueue(worker, { a: 'a' }, 3, 'a') }
|
8
7
|
|
9
|
-
|
10
|
-
|
11
|
-
|
8
|
+
context 'when executing the worker' do
|
9
|
+
context 'when it finishes without errors' do
|
10
|
+
let(:worker) { WorkerWithoutErrors }
|
11
|
+
|
12
|
+
it 'calls Test class' do
|
13
|
+
expect_any_instance_of(worker).to receive(:execute).with({ a: 'a' }, 3, 'a')
|
14
|
+
described_class.new.perform(job.id)
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'saves the worker status code' do
|
18
|
+
described_class.new.perform(job.id)
|
19
|
+
expect(job.reload.status_code).to eq 200
|
20
|
+
end
|
12
21
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
22
|
+
it 'saves the worker response' do
|
23
|
+
described_class.new.perform(job.id)
|
24
|
+
expect(job.reload.response).to eq({ 'message' => 'success' }.to_json)
|
25
|
+
end
|
17
26
|
end
|
18
27
|
|
19
|
-
|
20
|
-
|
21
|
-
|
28
|
+
context 'when the worker returns a symbol as status code' do
|
29
|
+
let(:worker) { WorkerWithSymbol }
|
30
|
+
|
31
|
+
it 'saves the worker status code' do
|
32
|
+
described_class.new.perform(job.id)
|
33
|
+
expect(job.reload.status_code).to eq 200
|
34
|
+
end
|
22
35
|
end
|
23
36
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
37
|
+
context 'when the worker returns nil as the response' do
|
38
|
+
let(:worker) { WorkerReturningNil }
|
39
|
+
|
40
|
+
it 'saves the worker status code' do
|
41
|
+
described_class.new.perform(job.id)
|
42
|
+
expect(job.reload.response).to eq ''
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
context 'when it raises an error' do
|
47
|
+
let(:worker) { WorkerWithErrors }
|
48
|
+
|
49
|
+
it 'updates the job with the right status' do
|
50
|
+
described_class.new.perform(job.id)
|
51
|
+
expect(job.reload.failed?).to be_truthy
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'saves the job with a 500 as status code' do
|
55
|
+
described_class.new.perform(job.id)
|
56
|
+
expect(job.reload.status_code).to eq 500
|
57
|
+
end
|
28
58
|
end
|
29
59
|
end
|
30
60
|
end
|
metadata
CHANGED
@@ -1,14 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: async_request
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matias De Santi
|
8
|
+
- Alejandro Bezdjian
|
9
|
+
- Alan Halatian
|
8
10
|
autorequire:
|
9
11
|
bindir: bin
|
10
12
|
cert_chain: []
|
11
|
-
date: 2018-
|
13
|
+
date: 2018-04-16 00:00:00.000000000 Z
|
12
14
|
dependencies:
|
13
15
|
- !ruby/object:Gem::Dependency
|
14
16
|
name: rails
|
@@ -28,16 +30,36 @@ dependencies:
|
|
28
30
|
name: sidekiq
|
29
31
|
requirement: !ruby/object:Gem::Requirement
|
30
32
|
requirements:
|
31
|
-
- - "
|
33
|
+
- - ">="
|
32
34
|
- !ruby/object:Gem::Version
|
33
35
|
version: '4.0'
|
36
|
+
- - "<"
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '6'
|
34
39
|
type: :runtime
|
35
40
|
prerelease: false
|
36
41
|
version_requirements: !ruby/object:Gem::Requirement
|
37
42
|
requirements:
|
38
|
-
- - "
|
43
|
+
- - ">="
|
39
44
|
- !ruby/object:Gem::Version
|
40
45
|
version: '4.0'
|
46
|
+
- - "<"
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '6'
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: jwt
|
51
|
+
requirement: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - "~>"
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '2.1'
|
56
|
+
type: :runtime
|
57
|
+
prerelease: false
|
58
|
+
version_requirements: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - "~>"
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '2.1'
|
41
63
|
- !ruby/object:Gem::Dependency
|
42
64
|
name: pg
|
43
65
|
requirement: !ruby/object:Gem::Requirement
|
@@ -140,34 +162,30 @@ dependencies:
|
|
140
162
|
name: rubocop
|
141
163
|
requirement: !ruby/object:Gem::Requirement
|
142
164
|
requirements:
|
143
|
-
- - "
|
165
|
+
- - "~>"
|
144
166
|
- !ruby/object:Gem::Version
|
145
|
-
version: '0'
|
167
|
+
version: '0.52'
|
146
168
|
type: :development
|
147
169
|
prerelease: false
|
148
170
|
version_requirements: !ruby/object:Gem::Requirement
|
149
171
|
requirements:
|
150
|
-
- - "
|
172
|
+
- - "~>"
|
151
173
|
- !ruby/object:Gem::Version
|
152
|
-
version: '0'
|
153
|
-
description:
|
154
|
-
need heavy computing when a request is received. In order to make the App scalable,
|
155
|
-
we perform those heavy actions in background. We return a job-id and the client
|
156
|
-
asks for it's state a few seconds after. `async_request` gives us the possibility
|
157
|
-
of handling these type of requests in a simple way.
|
174
|
+
version: '0.52'
|
175
|
+
description: Perform background jobs and ask for the result in a simple way.
|
158
176
|
email:
|
159
177
|
- matias.desanti@wolox.com.ar
|
178
|
+
- alejandro.bezdjian@wolox.com.ar
|
179
|
+
- alan.halatian@wolox.com.ar
|
160
180
|
executables: []
|
161
181
|
extensions: []
|
162
182
|
extra_rdoc_files: []
|
163
183
|
files:
|
164
184
|
- Rakefile
|
165
|
-
- app/assets/javascripts/async_request/application.js
|
166
|
-
- app/assets/stylesheets/async_request/application.css
|
167
185
|
- app/controllers/async_request/application_controller.rb
|
168
186
|
- app/controllers/async_request/jobs_controller.rb
|
169
|
-
- app/helpers/async_request/application_helper.rb
|
170
187
|
- app/models/async_request/job.rb
|
188
|
+
- app/poros/async_request/json_web_token.rb
|
171
189
|
- app/views/layouts/async_request/application.html.erb
|
172
190
|
- app/workers/async_request/job_processor.rb
|
173
191
|
- config/routes.rb
|
@@ -175,17 +193,22 @@ files:
|
|
175
193
|
- lib/async_request/engine.rb
|
176
194
|
- lib/async_request/version.rb
|
177
195
|
- lib/generators/async_request_generator.rb
|
178
|
-
- lib/
|
196
|
+
- lib/templates/async_request.rb
|
179
197
|
- lib/templates/create_async_request_jobs.rb
|
180
198
|
- spec/controllers/async_request/jobs_controller_spec.rb
|
199
|
+
- spec/controllers/dummy_controller_spec.rb
|
181
200
|
- spec/dummy/README.rdoc
|
182
201
|
- spec/dummy/Rakefile
|
183
202
|
- spec/dummy/app/assets/javascripts/application.js
|
184
203
|
- spec/dummy/app/assets/stylesheets/application.css
|
185
204
|
- spec/dummy/app/controllers/application_controller.rb
|
205
|
+
- spec/dummy/app/controllers/dummy_controller.rb
|
186
206
|
- spec/dummy/app/helpers/application_helper.rb
|
187
207
|
- spec/dummy/app/views/layouts/application.html.erb
|
188
|
-
- spec/dummy/app/workers/
|
208
|
+
- spec/dummy/app/workers/worker_returning_nil.rb
|
209
|
+
- spec/dummy/app/workers/worker_with_errors.rb
|
210
|
+
- spec/dummy/app/workers/worker_with_symbol.rb
|
211
|
+
- spec/dummy/app/workers/worker_without_errors.rb
|
189
212
|
- spec/dummy/bin/bundle
|
190
213
|
- spec/dummy/bin/rails
|
191
214
|
- spec/dummy/bin/rake
|
@@ -199,6 +222,7 @@ files:
|
|
199
222
|
- spec/dummy/config/environments/production.rb
|
200
223
|
- spec/dummy/config/environments/test.rb
|
201
224
|
- spec/dummy/config/initializers/assets.rb
|
225
|
+
- spec/dummy/config/initializers/async_request.rb
|
202
226
|
- spec/dummy/config/initializers/backtrace_silencers.rb
|
203
227
|
- spec/dummy/config/initializers/cookies_serializer.rb
|
204
228
|
- spec/dummy/config/initializers/filter_parameter_logging.rb
|
@@ -209,16 +233,17 @@ files:
|
|
209
233
|
- spec/dummy/config/locales/en.yml
|
210
234
|
- spec/dummy/config/routes.rb
|
211
235
|
- spec/dummy/config/secrets.yml
|
236
|
+
- spec/dummy/db/migrate/20170815023204_create_async_request_jobs.rb
|
212
237
|
- spec/dummy/db/schema.rb
|
213
|
-
- spec/dummy/log/development.log
|
214
238
|
- spec/dummy/log/test.log
|
215
239
|
- spec/dummy/public/404.html
|
216
240
|
- spec/dummy/public/422.html
|
217
241
|
- spec/dummy/public/500.html
|
218
242
|
- spec/dummy/public/favicon.ico
|
219
243
|
- spec/factories/async_request_job.rb
|
220
|
-
- spec/
|
244
|
+
- spec/models/async_request/job_spec.rb
|
221
245
|
- spec/spec_helper.rb
|
246
|
+
- spec/support/helpers.rb
|
222
247
|
- spec/support/parsed_response_helper.rb
|
223
248
|
- spec/workers/async_request/job_processor_spec.rb
|
224
249
|
homepage: https://github.com/Wolox/async-requests
|
@@ -244,50 +269,56 @@ rubyforge_project:
|
|
244
269
|
rubygems_version: 2.5.1
|
245
270
|
signing_key:
|
246
271
|
specification_version: 4
|
247
|
-
summary:
|
248
|
-
in a simple way.
|
272
|
+
summary: Perform background jobs and ask for the result in a simple way.
|
249
273
|
test_files:
|
250
|
-
- spec/
|
251
|
-
- spec/dummy/
|
252
|
-
- spec/dummy/
|
253
|
-
- spec/dummy/
|
254
|
-
- spec/dummy/
|
255
|
-
- spec/dummy/
|
256
|
-
- spec/dummy/
|
257
|
-
- spec/dummy/
|
274
|
+
- spec/spec_helper.rb
|
275
|
+
- spec/dummy/app/workers/worker_without_errors.rb
|
276
|
+
- spec/dummy/app/workers/worker_with_symbol.rb
|
277
|
+
- spec/dummy/app/workers/worker_returning_nil.rb
|
278
|
+
- spec/dummy/app/workers/worker_with_errors.rb
|
279
|
+
- spec/dummy/app/controllers/application_controller.rb
|
280
|
+
- spec/dummy/app/controllers/dummy_controller.rb
|
281
|
+
- spec/dummy/app/views/layouts/application.html.erb
|
282
|
+
- spec/dummy/app/assets/javascripts/application.js
|
283
|
+
- spec/dummy/app/assets/stylesheets/application.css
|
284
|
+
- spec/dummy/app/helpers/application_helper.rb
|
285
|
+
- spec/dummy/bin/rake
|
286
|
+
- spec/dummy/bin/setup
|
287
|
+
- spec/dummy/bin/bundle
|
288
|
+
- spec/dummy/bin/rails
|
289
|
+
- spec/dummy/config/secrets.yml
|
258
290
|
- spec/dummy/config/routes.rb
|
291
|
+
- spec/dummy/config/locales/en.yml
|
292
|
+
- spec/dummy/config/environments/production.rb
|
293
|
+
- spec/dummy/config/environments/development.rb
|
294
|
+
- spec/dummy/config/environments/test.rb
|
295
|
+
- spec/dummy/config/environment.rb
|
296
|
+
- spec/dummy/config/application.rb
|
259
297
|
- spec/dummy/config/database.yml
|
260
298
|
- spec/dummy/config/boot.rb
|
261
|
-
- spec/dummy/config/secrets.yml
|
262
299
|
- spec/dummy/config/initializers/backtrace_silencers.rb
|
300
|
+
- spec/dummy/config/initializers/mime_types.rb
|
301
|
+
- spec/dummy/config/initializers/filter_parameter_logging.rb
|
263
302
|
- spec/dummy/config/initializers/session_store.rb
|
264
303
|
- spec/dummy/config/initializers/wrap_parameters.rb
|
265
|
-
- spec/dummy/config/initializers/inflections.rb
|
266
|
-
- spec/dummy/config/initializers/filter_parameter_logging.rb
|
267
|
-
- spec/dummy/config/initializers/mime_types.rb
|
268
|
-
- spec/dummy/config/initializers/cookies_serializer.rb
|
269
304
|
- spec/dummy/config/initializers/assets.rb
|
270
|
-
- spec/dummy/
|
305
|
+
- spec/dummy/config/initializers/async_request.rb
|
306
|
+
- spec/dummy/config/initializers/cookies_serializer.rb
|
307
|
+
- spec/dummy/config/initializers/inflections.rb
|
271
308
|
- spec/dummy/config.ru
|
272
|
-
- spec/dummy/
|
273
|
-
- spec/dummy/
|
274
|
-
- spec/dummy/app/views/layouts/application.html.erb
|
275
|
-
- spec/dummy/app/assets/stylesheets/application.css
|
276
|
-
- spec/dummy/app/assets/javascripts/application.js
|
277
|
-
- spec/dummy/app/workers/test.rb
|
278
|
-
- spec/dummy/app/controllers/application_controller.rb
|
279
|
-
- spec/dummy/app/helpers/application_helper.rb
|
280
|
-
- spec/dummy/public/500.html
|
309
|
+
- spec/dummy/Rakefile
|
310
|
+
- spec/dummy/public/favicon.ico
|
281
311
|
- spec/dummy/public/422.html
|
312
|
+
- spec/dummy/public/500.html
|
282
313
|
- spec/dummy/public/404.html
|
283
|
-
- spec/dummy/
|
284
|
-
- spec/dummy/
|
285
|
-
- spec/dummy/
|
286
|
-
- spec/dummy/
|
287
|
-
- spec/
|
288
|
-
- spec/
|
289
|
-
- spec/workers/async_request/job_processor_spec.rb
|
290
|
-
- spec/factories/async_request_job.rb
|
314
|
+
- spec/dummy/db/schema.rb
|
315
|
+
- spec/dummy/db/migrate/20170815023204_create_async_request_jobs.rb
|
316
|
+
- spec/dummy/log/test.log
|
317
|
+
- spec/dummy/README.rdoc
|
318
|
+
- spec/models/async_request/job_spec.rb
|
319
|
+
- spec/support/helpers.rb
|
291
320
|
- spec/support/parsed_response_helper.rb
|
321
|
+
- spec/factories/async_request_job.rb
|
322
|
+
- spec/workers/async_request/job_processor_spec.rb
|
292
323
|
- spec/controllers/async_request/jobs_controller_spec.rb
|
293
|
-
- spec/
|
324
|
+
- spec/controllers/dummy_controller_spec.rb
|
@@ -1,13 +0,0 @@
|
|
1
|
-
// This is a manifest file that'll be compiled into application.js, which will include all the files
|
2
|
-
// listed below.
|
3
|
-
//
|
4
|
-
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
|
5
|
-
// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
|
6
|
-
//
|
7
|
-
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
8
|
-
// compiled file.
|
9
|
-
//
|
10
|
-
// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
|
11
|
-
// about supported directives.
|
12
|
-
//
|
13
|
-
//= require_tree .
|
@@ -1,15 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
* This is a manifest file that'll be compiled into application.css, which will include all the files
|
3
|
-
* listed below.
|
4
|
-
*
|
5
|
-
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
|
6
|
-
* or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
|
7
|
-
*
|
8
|
-
* You're free to add application-wide styles to this file and they'll appear at the bottom of the
|
9
|
-
* compiled file so the styles you add here take precedence over styles defined in any styles
|
10
|
-
* defined in the other CSS/SCSS files in this directory. It is generally better to create a new
|
11
|
-
* file per style scope.
|
12
|
-
*
|
13
|
-
*= require_tree .
|
14
|
-
*= require_self
|
15
|
-
*/
|
@@ -1,15 +0,0 @@
|
|
1
|
-
module AsyncRequest
|
2
|
-
module ApplicationHelper
|
3
|
-
def execute_async(worker_class, *params)
|
4
|
-
raise ArgumentError if worker_class.nil?
|
5
|
-
job = Job.create(
|
6
|
-
worker: worker_class,
|
7
|
-
params: params,
|
8
|
-
status: Job.statuses[:waiting],
|
9
|
-
uid: SecureRandom.uuid
|
10
|
-
)
|
11
|
-
JobProcessor.perform_async(job.id)
|
12
|
-
job.uid
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|