asyncapi-client 0.2.0 → 0.3.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/README.md +5 -1
- data/app/models/asyncapi/client/callback_runner.rb +1 -0
- data/app/models/asyncapi/client/job.rb +21 -3
- data/app/workers/asyncapi/client/job_post_worker.rb +3 -2
- data/app/workers/asyncapi/client/job_status_worker.rb +1 -0
- data/app/workers/asyncapi/client/job_time_out_worker.rb +1 -3
- data/db/migrate/20150630004215_add_response_code_to_asyncapi_client_jobs.rb +5 -0
- data/db/migrate/20150703001225_add_on_queue_error_to_asyncapi_client_jobs.rb +5 -0
- data/lib/asyncapi/client/version.rb +1 -1
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cab20cbbe30a21d0b85d178847743113ec9396f0
|
4
|
+
data.tar.gz: f7a5d27f8b8c1389a238d70a749da18e11f6dc3c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4ba00f9669e29ca8286eb426bcf1614258a37bcf851669f63896f5347dd9f3a374dee330bc04277fc4cb079655ae45964118a67d7e76c8106c30269c2310b784
|
7
|
+
data.tar.gz: 03005f2e7dd1d16d512dd9bb3e5990329a5bebcaace342a33919c0ecf47abe44627e681936eeac821ee6e0877557d9bcfd2220371e60824696a6a5f2d8495ae4
|
data/README.md
CHANGED
@@ -17,6 +17,7 @@ Asyncapi::Client::Job.post(
|
|
17
17
|
on_success: DoOnSuccess,
|
18
18
|
on_error: DoOnError,
|
19
19
|
on_queue: DoOnQueue,
|
20
|
+
on_queue_error: DoOnQueueError,
|
20
21
|
on_time_out: DoOnTimeOut,
|
21
22
|
time_out: 2.minutes # Defaults to nil (never time out)
|
22
23
|
)
|
@@ -42,7 +43,7 @@ end
|
|
42
43
|
|
43
44
|
class DoOnError < Asyncapi::Client::CallbackRunner
|
44
45
|
def call
|
45
|
-
# you have access to: job and
|
46
|
+
# you have access to: job and its fields: callback_params, :body, :headers, :message, :response_code
|
46
47
|
Rails.logger.info "Job##{job.id} failed. The server's response: #{job.message}"
|
47
48
|
end
|
48
49
|
end
|
@@ -54,6 +55,7 @@ In the callback classes, you have access to the `job` and its fields (directly):
|
|
54
55
|
- `body`
|
55
56
|
- `headers`
|
56
57
|
- `message`
|
58
|
+
- `response_code`
|
57
59
|
|
58
60
|
Currently, this Engine only works with [Sidekiq](http://sidekiq.org), [typhoeus](https://github.com/typhoeus/typhoeus), and [kaminari](https://github.com/amatsuda/kaminari). Customizing these can be introduced as needed.
|
59
61
|
|
@@ -119,9 +121,11 @@ Asyncapi::Client::Job.attr_accessible(
|
|
119
121
|
:on_queue,
|
120
122
|
:on_success,
|
121
123
|
:on_error,
|
124
|
+
:on_queue_error,
|
122
125
|
:headers,
|
123
126
|
:body,
|
124
127
|
:status,
|
128
|
+
:response_code,
|
125
129
|
)
|
126
130
|
```
|
127
131
|
|
@@ -4,7 +4,7 @@ module Asyncapi::Client
|
|
4
4
|
after_initialize :generate_secret
|
5
5
|
before_create :set_expired_at
|
6
6
|
|
7
|
-
enum status: %i[queued success error timed_out fresh]
|
7
|
+
enum status: %i[queued success error timed_out fresh queue_error]
|
8
8
|
serialize :headers, Hash
|
9
9
|
serialize :callback_params, Hash
|
10
10
|
|
@@ -15,6 +15,7 @@ module Asyncapi::Client
|
|
15
15
|
state :success
|
16
16
|
state :error
|
17
17
|
state :timed_out
|
18
|
+
state :queue_error
|
18
19
|
|
19
20
|
event :enqueue do
|
20
21
|
transitions from: :fresh, to: :queued
|
@@ -31,12 +32,17 @@ module Asyncapi::Client
|
|
31
32
|
event :time_out do
|
32
33
|
transitions from: [:fresh, :queued], to: :timed_out
|
33
34
|
end
|
35
|
+
|
36
|
+
event :fail_queue do
|
37
|
+
transitions from: :fresh, to: :queue_error
|
38
|
+
end
|
34
39
|
end
|
35
40
|
|
36
41
|
scope :expired, -> { where(arel_table[:expired_at].lt(Time.now)) }
|
37
42
|
scope :with_time_out, -> { where(arel_table[:time_out_at].not_eq(nil)) }
|
38
43
|
scope :for_time_out, -> do
|
39
|
-
|
44
|
+
where(arel_table[:time_out_at].lt(Time.now)).
|
45
|
+
where(status: [statuses[:queued], statuses[:fresh]])
|
40
46
|
end
|
41
47
|
|
42
48
|
def self.post(url,
|
@@ -46,6 +52,7 @@ module Asyncapi::Client
|
|
46
52
|
on_success: nil,
|
47
53
|
on_error: nil,
|
48
54
|
on_time_out: nil,
|
55
|
+
on_queue_error: nil,
|
49
56
|
callback_params: {},
|
50
57
|
follow_up: 5.minutes,
|
51
58
|
time_out: nil)
|
@@ -55,6 +62,7 @@ module Asyncapi::Client
|
|
55
62
|
on_queue: on_queue,
|
56
63
|
on_success: on_success,
|
57
64
|
on_error: on_error,
|
65
|
+
on_queue_error: on_queue_error,
|
58
66
|
on_time_out: on_time_out,
|
59
67
|
callback_params: callback_params,
|
60
68
|
headers: headers,
|
@@ -75,7 +83,7 @@ module Asyncapi::Client
|
|
75
83
|
write_attribute :body, json
|
76
84
|
end
|
77
85
|
|
78
|
-
[:on_success, :on_error, :on_queue, :on_time_out].each do |attr|
|
86
|
+
[:on_success, :on_error, :on_queue, :on_time_out, :on_queue_error].each do |attr|
|
79
87
|
define_method("#{attr}=") do |klass|
|
80
88
|
write_attribute attr, klass.to_s
|
81
89
|
end
|
@@ -91,5 +99,15 @@ module Asyncapi::Client
|
|
91
99
|
self.secret ||= SecureRandom.uuid
|
92
100
|
end
|
93
101
|
|
102
|
+
def self.initial_state
|
103
|
+
self.aasm.state_machine.initial_state
|
104
|
+
end
|
105
|
+
|
106
|
+
def self.non_initial_states
|
107
|
+
self.aasm.states.reject do |state|
|
108
|
+
state == initial_state
|
109
|
+
end.map(&:name)
|
110
|
+
end
|
111
|
+
|
94
112
|
end
|
95
113
|
end
|
@@ -24,7 +24,8 @@ module Asyncapi::Client
|
|
24
24
|
JobStatusWorker.perform_async(job.id)
|
25
25
|
end
|
26
26
|
else
|
27
|
-
|
27
|
+
job.fail_queue
|
28
|
+
if job.update_attributes!(message: response.body, response_code: response.response_code)
|
28
29
|
JobStatusWorker.perform_async(job.id)
|
29
30
|
end
|
30
31
|
end
|
@@ -33,7 +34,7 @@ module Asyncapi::Client
|
|
33
34
|
def job_params_from(response)
|
34
35
|
response_body = JSON.parse(response.body).with_indifferent_access
|
35
36
|
server_job_params = response_body[:job]
|
36
|
-
{server_job_url: server_job_params[:url]}
|
37
|
+
{server_job_url: server_job_params[:url], response_code: response.response_code}
|
37
38
|
end
|
38
39
|
|
39
40
|
def server_params_from(job, params)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: asyncapi-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- G5
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2015-
|
13
|
+
date: 2015-09-24 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rails
|
@@ -251,6 +251,8 @@ files:
|
|
251
251
|
- db/migrate/20150202062320_populate_asyncapi_client_job_expired_at.rb
|
252
252
|
- db/migrate/20150610053320_add_on_time_out_to_asyncapi_client_job.rb
|
253
253
|
- db/migrate/20150612082965_add_time_out_index_to_asyncapi_client_job.rb
|
254
|
+
- db/migrate/20150630004215_add_response_code_to_asyncapi_client_jobs.rb
|
255
|
+
- db/migrate/20150703001225_add_on_queue_error_to_asyncapi_client_jobs.rb
|
254
256
|
- lib/asyncapi-client.rb
|
255
257
|
- lib/asyncapi/client.rb
|
256
258
|
- lib/asyncapi/client/engine.rb
|
@@ -278,7 +280,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
278
280
|
version: '0'
|
279
281
|
requirements: []
|
280
282
|
rubyforge_project:
|
281
|
-
rubygems_version: 2.4.
|
283
|
+
rubygems_version: 2.4.8
|
282
284
|
signing_key:
|
283
285
|
specification_version: 4
|
284
286
|
summary: Asynchronous API communication
|