active_waiter 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c34c63c0bd1531f81f881957386f35e8e2b08f3f
4
- data.tar.gz: d88400a7785719d0fff8588bf57eb8a5dc418a7d
3
+ metadata.gz: 2208fadf74c295220f10cac3714b6f8fa64d8c04
4
+ data.tar.gz: 1cd270203efe90bc7d94083a608f6933b29bb769
5
5
  SHA512:
6
- metadata.gz: ee6ac59397ebc6126fff1703e4221f9a14d7b7573b1fa6ee35faa6eeeeec0143d9fb1576c602b04e086e3c28146267d196feba7b73ee444a0c58389fe8a44ae3
7
- data.tar.gz: cf414b2c9b6962895e74e2dbb7cf8892b39f13c60a7e3acc0248a15e2d5b29103a75b0bfeaf5a292e6f9ca9e5fe156a6dc757e2484b194e0c80f2007016fa5a3
6
+ metadata.gz: d783491504ea06ddddb4229dbb322c053f1a3c6d4753bbb1e6f01040f2e34d417e97102ae3e5b1c85cc8222fe446e9653898873c95b4e939fcdd3f9d788b8e91
7
+ data.tar.gz: aaac2b8016a772a4074b6ef5a2d028ad28ed88e8c267dc6f86fe6c38dc4ca894026750db4f4c54e8197cb37ad28f4e61d441c93d16f8f9d56863d198e63996ee
data/README.md CHANGED
@@ -29,7 +29,7 @@ But how do you get that PDF into the hands of your users now? Email? Push notifi
29
29
 
30
30
  ## Solution
31
31
 
32
- Let `ActiveWaiter` enqueue that job instead and redirect to it's progress tracking page.
32
+ Let `ActiveWaiter` enqueue that job instead and redirect to its progress tracking page.
33
33
 
34
34
  ``` ruby
35
35
  def index
@@ -103,7 +103,51 @@ ActiveWaiter.configure do |config|
103
103
  end
104
104
  ```
105
105
 
106
- Next, prefix any routes used in your application's layout with `main_app.`, e.g. `main_app.sign_in_path`.
106
+ Next, prefix any routes used in your application's layout with `main_app.`, e.g. `main_app.sign_in_path`.
107
107
 
108
- This is required because `ActiveWaiter` is a Rails Engine mounted into your application,
108
+ This is required because `ActiveWaiter` is a Rails Engine mounted into your application,
109
109
  and it doesn't know about the routes declared within your application.
110
+
111
+ #### Exceptions
112
+
113
+ When your job gets an exception, the error message will be written in the error message and passed along
114
+ to the user. If your job has a method `suppress_exceptions` that returns a truthy value (default false),
115
+ `ActiveWaiter::Job` will swallow the exception and not raise it - this means there will be no retry by
116
+ `ActiveJob`.
117
+
118
+ ### Common Jobs
119
+
120
+ #### ActiveWaiter::EnumerableJob
121
+
122
+ If you need to wait, you're likely doing one thing slowly or many things. For the latter case, you can just
123
+ `include ActiveWaiter::EnumerableJob` and add a few interface methods
124
+
125
+ ``` ruby
126
+ def before(*args); end # called once with arguments of `perform`
127
+ def enumerable; [] end # an Enumerable interface
128
+ def items_count; 1 end # called 0-n times, depending on enumerable
129
+ def foreach(item); end # called 0-n times, depending on enumerable
130
+ def after; end # called once
131
+ def result; end # called once
132
+ ```
133
+
134
+ Here's an example from our test code, that will generate an array of range `0...count` and return the sum
135
+ of all the numbers
136
+
137
+ ``` ruby
138
+ class LoopJob < ActiveJob::Base
139
+ include ActiveWaiter::EnumerableJob
140
+
141
+ attr_accessor :items_count, :enumerable, :result
142
+
143
+ def before(count)
144
+ @items_count = count
145
+ @enumerable = count.times
146
+ @result = 0
147
+ end
148
+
149
+ def foreach(item)
150
+ @result += item
151
+ end
152
+ end
153
+ ```
@@ -13,7 +13,7 @@ module ActiveWaiter
13
13
 
14
14
  protected
15
15
 
16
- def on_not_found(data)
16
+ def on_not_found(_data)
17
17
  raise ActionController::RoutingError.new('Not Found')
18
18
  end
19
19
 
@@ -0,0 +1,29 @@
1
+ module ActiveWaiter::EnumerableJob
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ include ActiveWaiter::Job
6
+ end
7
+
8
+ def perform(*args)
9
+ before(*args)
10
+ enumerable.each_with_index do |item, index|
11
+ foreach(item)
12
+ update_active_waiter(percentage: (100 * (index+1.to_f) / items_count))
13
+ end
14
+ after
15
+ result
16
+ end
17
+
18
+ def before(*_args); end # called once with arguments of `perform`
19
+
20
+ def enumerable; [] end # an Enumerable interface
21
+
22
+ def items_count; 1 end # called 0-n times, depending on enumerable
23
+
24
+ def foreach(_item); end # called 0-n times, depending on enumerable
25
+
26
+ def after; end # called once
27
+
28
+ def result; end # called once
29
+ end
@@ -13,7 +13,7 @@ module ActiveWaiter::Job
13
13
  ::ActiveWaiter.write(@active_waiter_options[:uid], {
14
14
  error: $!.to_s,
15
15
  })
16
- raise
16
+ raise unless suppress_exceptions
17
17
  end
18
18
  end
19
19
  end
@@ -24,4 +24,6 @@ module ActiveWaiter::Job
24
24
  error: error,
25
25
  }) if @active_waiter_options.try(:[], :uid)
26
26
  end
27
+
28
+ def suppress_exceptions; false; end
27
29
  end
@@ -1,3 +1,3 @@
1
1
  module ActiveWaiter
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
data/lib/active_waiter.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require "active_waiter/engine"
2
2
  require "active_waiter/configuration"
3
3
  require "active_waiter/job"
4
+ require "active_waiter/enumerable_job"
4
5
 
5
6
  module ActiveWaiter
6
7
  class << self
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_waiter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - choonkeat
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-26 00:00:00.000000000 Z
11
+ date: 2015-05-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubocop
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  description: A simple mechanism allowing your users to wait for the completion of
56
70
  your `ActiveJob`
57
71
  email:
@@ -78,6 +92,7 @@ files:
78
92
  - lib/active_waiter.rb
79
93
  - lib/active_waiter/configuration.rb
80
94
  - lib/active_waiter/engine.rb
95
+ - lib/active_waiter/enumerable_job.rb
81
96
  - lib/active_waiter/job.rb
82
97
  - lib/active_waiter/version.rb
83
98
  - lib/tasks/waiter_tasks.rake