fleiss 0.4.3 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cb419b5311dcda76bb9c1743b08ea56cfee270fbe6f90721347e492b2dfec292
4
- data.tar.gz: 995152a6f0482b04f272ed70ab1426be7fd225eed7c30c80de638e2b56f7e119
3
+ metadata.gz: 595c3a8342470029088f398a77d8ca94cbaf78ff78a26bdda6ba31e204dc776f
4
+ data.tar.gz: '084f59a371721136d41294463fdd5cb41f0bdf99f958ca30cbf991863c1d35c1'
5
5
  SHA512:
6
- metadata.gz: 9d12678587c252a310e7fac2cc80a420076b229a3cf93458016b572b749d002b652d53ce08cf74b28e75b92f50be6c8aac948d146261a1b113db1fa844827a99
7
- data.tar.gz: '0107013391774abea71a113ac3dc3849c3a08e340ff534d68468629b2e4832798763320e11251ee57ee927c5f4210ed64bf945eedbc57f08086f7415c2fd0a2c'
6
+ metadata.gz: 336dcf65cd04c2e3dd005aef1e5c59d11dc6c25ab01b7cfe2b627f101c992d43e554f4a97a21a7d8886e1c0c7e19e400008d746c0d1fec302fa942dcdcd04171
7
+ data.tar.gz: 500004b1f9825d10dce9ae1b1178e27f71898e45ab7df6376b19f542afd24444dd8913286f9b46d4a71d2eecf1ba6c843f9a286216f9a8221b9a00891f2da5c9
@@ -11,9 +11,9 @@ jobs:
11
11
  runs-on: ubuntu-latest
12
12
  strategy:
13
13
  matrix:
14
- ruby-version: ["2.6", "2.7", "3.0"]
14
+ ruby-version: ["2.7", "3.0", "3.1"]
15
15
  steps:
16
- - uses: actions/checkout@v2
16
+ - uses: actions/checkout@v3
17
17
  - uses: ruby/setup-ruby@v1
18
18
  with:
19
19
  ruby-version: ${{ matrix.ruby-version }}
data/.rubocop.yml CHANGED
@@ -5,7 +5,7 @@ inherit_mode:
5
5
  merge:
6
6
  - Exclude
7
7
  AllCops:
8
- TargetRubyVersion: "2.6"
8
+ TargetRubyVersion: "2.7"
9
9
 
10
10
  Security/Open:
11
11
  Exclude:
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fleiss (0.4.3)
4
+ fleiss (0.5.0)
5
5
  activejob (>= 6.0)
6
6
  activerecord (>= 6.0)
7
7
  concurrent-ruby
@@ -9,80 +9,79 @@ PATH
9
9
  GEM
10
10
  remote: https://rubygems.org/
11
11
  specs:
12
- activejob (6.1.4)
13
- activesupport (= 6.1.4)
12
+ activejob (7.0.3.1)
13
+ activesupport (= 7.0.3.1)
14
14
  globalid (>= 0.3.6)
15
- activemodel (6.1.4)
16
- activesupport (= 6.1.4)
17
- activerecord (6.1.4)
18
- activemodel (= 6.1.4)
19
- activesupport (= 6.1.4)
20
- activesupport (6.1.4)
15
+ activemodel (7.0.3.1)
16
+ activesupport (= 7.0.3.1)
17
+ activerecord (7.0.3.1)
18
+ activemodel (= 7.0.3.1)
19
+ activesupport (= 7.0.3.1)
20
+ activesupport (7.0.3.1)
21
21
  concurrent-ruby (~> 1.0, >= 1.0.2)
22
22
  i18n (>= 1.6, < 2)
23
23
  minitest (>= 5.1)
24
24
  tzinfo (~> 2.0)
25
- zeitwerk (~> 2.3)
26
25
  ast (2.4.2)
27
- concurrent-ruby (1.1.9)
28
- diff-lcs (1.4.4)
29
- globalid (0.5.1)
26
+ concurrent-ruby (1.1.10)
27
+ diff-lcs (1.5.0)
28
+ globalid (1.0.0)
30
29
  activesupport (>= 5.0)
31
- i18n (1.8.10)
30
+ i18n (1.11.0)
32
31
  concurrent-ruby (~> 1.0)
33
- minitest (5.14.4)
34
- mysql2 (0.5.3)
35
- parallel (1.20.1)
36
- parser (3.0.2.0)
32
+ json (2.6.2)
33
+ minitest (5.16.2)
34
+ mysql2 (0.5.4)
35
+ parallel (1.22.1)
36
+ parser (3.1.2.0)
37
37
  ast (~> 2.4.1)
38
- pg (1.2.3)
39
- rainbow (3.0.0)
38
+ pg (1.4.1)
39
+ rainbow (3.1.1)
40
40
  rake (13.0.6)
41
- regexp_parser (2.1.1)
41
+ regexp_parser (2.5.0)
42
42
  rexml (3.2.5)
43
- rspec (3.10.0)
44
- rspec-core (~> 3.10.0)
45
- rspec-expectations (~> 3.10.0)
46
- rspec-mocks (~> 3.10.0)
47
- rspec-core (3.10.1)
48
- rspec-support (~> 3.10.0)
49
- rspec-expectations (3.10.1)
43
+ rspec (3.11.0)
44
+ rspec-core (~> 3.11.0)
45
+ rspec-expectations (~> 3.11.0)
46
+ rspec-mocks (~> 3.11.0)
47
+ rspec-core (3.11.0)
48
+ rspec-support (~> 3.11.0)
49
+ rspec-expectations (3.11.0)
50
50
  diff-lcs (>= 1.2.0, < 2.0)
51
- rspec-support (~> 3.10.0)
52
- rspec-mocks (3.10.2)
51
+ rspec-support (~> 3.11.0)
52
+ rspec-mocks (3.11.1)
53
53
  diff-lcs (>= 1.2.0, < 2.0)
54
- rspec-support (~> 3.10.0)
55
- rspec-support (3.10.2)
56
- rubocop (1.18.3)
54
+ rspec-support (~> 3.11.0)
55
+ rspec-support (3.11.0)
56
+ rubocop (1.31.2)
57
+ json (~> 2.3)
57
58
  parallel (~> 1.10)
58
- parser (>= 3.0.0.0)
59
+ parser (>= 3.1.0.0)
59
60
  rainbow (>= 2.2.2, < 4.0)
60
61
  regexp_parser (>= 1.8, < 3.0)
61
- rexml
62
- rubocop-ast (>= 1.7.0, < 2.0)
62
+ rexml (>= 3.2.5, < 4.0)
63
+ rubocop-ast (>= 1.18.0, < 2.0)
63
64
  ruby-progressbar (~> 1.7)
64
65
  unicode-display_width (>= 1.4.0, < 3.0)
65
- rubocop-ast (1.8.0)
66
- parser (>= 3.0.1.1)
66
+ rubocop-ast (1.19.1)
67
+ parser (>= 3.1.1.0)
67
68
  rubocop-bsm (0.6.0)
68
69
  rubocop (~> 1.0)
69
70
  rubocop-performance
70
71
  rubocop-rake
71
72
  rubocop-rspec
72
- rubocop-performance (1.11.4)
73
+ rubocop-performance (1.14.2)
73
74
  rubocop (>= 1.7.0, < 2.0)
74
75
  rubocop-ast (>= 0.4.0)
75
76
  rubocop-rake (0.6.0)
76
77
  rubocop (~> 1.0)
77
- rubocop-rspec (2.4.0)
78
- rubocop (~> 1.0)
79
- rubocop-ast (>= 1.1.0)
78
+ rubocop-rspec (2.12.1)
79
+ rubocop (~> 1.31)
80
80
  ruby-progressbar (1.11.0)
81
- sqlite3 (1.4.2)
81
+ sqlite3 (1.4.4)
82
82
  tzinfo (2.0.4)
83
83
  concurrent-ruby (~> 1.0)
84
- unicode-display_width (2.0.0)
85
- zeitwerk (2.4.2)
84
+ unicode-display_width (2.2.0)
86
85
 
87
86
  PLATFORMS
88
87
  ruby
@@ -98,4 +97,4 @@ DEPENDENCIES
98
97
  sqlite3
99
98
 
100
99
  BUNDLED WITH
101
- 2.2.16
100
+ 2.3.16
data/README.md CHANGED
@@ -38,6 +38,16 @@ class ExpringJob < ActiveJob::Base
38
38
  end
39
39
  ```
40
40
 
41
+ Allow to subscribe on worker perform method and detect errors
42
+
43
+ ```ruby
44
+ ActiveSupport::Notifications.subscribe('worker_perform.fleiss') do |event|
45
+ break unless event.payload.key?(:exception_object)
46
+
47
+ Raven.capture_exception(event.payload[:exception_object])
48
+ end
49
+ ```
50
+
41
51
  Include the data migration:
42
52
 
43
53
  ```ruby
data/fleiss.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'fleiss'
3
- s.version = '0.4.3'
3
+ s.version = '0.5.0'
4
4
  s.authors = ['Black Square Media Ltd']
5
5
  s.email = ['info@blacksquaremedia.com']
6
6
  s.summary = %(Minimialist background jobs backed by ActiveJob and ActiveRecord.)
@@ -10,9 +10,8 @@ Gem::Specification.new do |s|
10
10
 
11
11
  s.executables = ['fleiss']
12
12
  s.files = `git ls-files -z`.split("\x0").reject {|f| f.match(%r{^spec/}) }
13
- s.test_files = `git ls-files -z -- spec/*`.split("\x0")
14
13
  s.require_paths = ['lib']
15
- s.required_ruby_version = '>= 2.6'
14
+ s.required_ruby_version = '>= 2.7'
16
15
 
17
16
  s.add_dependency 'activejob', '>= 6.0'
18
17
  s.add_dependency 'activerecord', '>= 6.0'
@@ -25,4 +24,5 @@ Gem::Specification.new do |s|
25
24
  s.add_development_dependency 'rspec'
26
25
  s.add_development_dependency 'rubocop-bsm'
27
26
  s.add_development_dependency 'sqlite3'
27
+ s.metadata['rubygems_mfa_required'] = 'true'
28
28
  end
@@ -3,11 +3,11 @@ require 'fleiss'
3
3
  module ActiveJob
4
4
  module QueueAdapters
5
5
  class FleissAdapter
6
- def enqueue(job) #:nodoc:
6
+ def enqueue(job) # :nodoc:
7
7
  enqueue_at(job, nil)
8
8
  end
9
9
 
10
- def enqueue_at(job, scheduled_at) #:nodoc:
10
+ def enqueue_at(job, scheduled_at) # :nodoc:
11
11
  job_id = Fleiss.backend.enqueue(job, scheduled_at: scheduled_at)
12
12
  job.provider_job_id = job_id
13
13
  job_id
@@ -20,7 +20,7 @@ module Fleiss
20
20
  def wrap_perform(&block)
21
21
  connection_pool.with_connection(&block)
22
22
  rescue ::ActiveRecord::StatementInvalid
23
- ::ActiveRecord::Base.clear_active_connections!
23
+ ::ActiveRecord::Base.clear_all_connections!
24
24
  raise
25
25
  end
26
26
 
data/lib/fleiss/cli.rb CHANGED
@@ -31,7 +31,7 @@ module Fleiss
31
31
  return unless opts[:config]
32
32
 
33
33
  # Load config file
34
- conf = YAML.safe_load(ERB.new(IO.read(opts[:config])).result)
34
+ conf = YAML.safe_load(ERB.new(File.read(opts[:config])).result)
35
35
  raise ArgumentError, "File in #{opts[:config]} does not contain a valid configuration" unless conf.is_a?(Hash)
36
36
 
37
37
  conf.each do |key, value|
data/lib/fleiss/worker.rb CHANGED
@@ -11,8 +11,6 @@ class Fleiss::Worker
11
11
  end
12
12
 
13
13
  # Init a new worker instance
14
- # @param [ConnectionPool] disque client connection pool
15
- # @param [Hash] options
16
14
  # @option [Array<String>] :queues queues to watch. Default: ["default"]
17
15
  # @option [Integer] :concurrency the number of concurrent pool. Default: 10
18
16
  # @option [Numeric] :wait_time maximum time (in seconds) to wait for jobs when retrieving next batch. Default: 1s.
@@ -62,21 +60,24 @@ class Fleiss::Worker
62
60
 
63
61
  batch.each do |job|
64
62
  @pool.post do
65
- Fleiss.backend.wrap_perform { perform(job) }
63
+ thread_id = Thread.current.object_id.to_s(16).reverse
64
+ Fleiss.backend.wrap_perform { perform(job, thread_id) }
65
+ rescue StandardError => e
66
+ log_exception e, "processing job ##{job.id} (by thread #{thread_id})"
66
67
  end
67
68
  end
68
69
  rescue StandardError => e
69
- handle_exception e, 'running cycle'
70
+ log_exception e, 'running cycle'
70
71
  end
71
72
 
72
- def perform(job)
73
- thread_id = Thread.current.object_id.to_s(16).reverse
74
- owner = "#{uuid}/#{thread_id}"
73
+ def perform(job, thread_id)
74
+ owner = "#{uuid}/#{thread_id}"
75
75
  return unless job.start(owner)
76
76
 
77
77
  log(:info) { "Worker #{uuid} execute job ##{job.id} (by thread #{thread_id})" }
78
78
  finished = false
79
- begin
79
+
80
+ ActiveSupport::Notifications.instrument('worker_perform.fleiss', id: job.id, uuid: uuid, thread_id: thread_id) do |payload|
80
81
  ActiveJob::Base.execute job.job_data
81
82
  finished = true
82
83
  rescue StandardError
@@ -84,12 +85,11 @@ class Fleiss::Worker
84
85
  raise
85
86
  ensure
86
87
  finished ? job.finish(owner) : job.reschedule(owner)
88
+ payload[:finished] = finished
87
89
  end
88
- rescue StandardError => e
89
- handle_exception e, "processing job ##{job.id} (by thread #{thread_id})"
90
90
  end
91
91
 
92
- def handle_exception(err, intro)
92
+ def log_exception(err, intro)
93
93
  log(:error) do
94
94
  [
95
95
  "Worker #{uuid} error on #{intro}:",
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fleiss
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Black Square Media Ltd
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-07-29 00:00:00.000000000 Z
11
+ date: 2022-07-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activejob
@@ -178,15 +178,11 @@ files:
178
178
  - lib/fleiss/cli.rb
179
179
  - lib/fleiss/executor.rb
180
180
  - lib/fleiss/worker.rb
181
- - spec/fleiss/backend/active_record_spec.rb
182
- - spec/fleiss/executor_spec.rb
183
- - spec/fleiss/worker_spec.rb
184
- - spec/fleiss_spec.rb
185
- - spec/spec_helper.rb
186
181
  homepage: https://github.com/bsm/fleiss
187
182
  licenses:
188
183
  - Apache-2.0
189
- metadata: {}
184
+ metadata:
185
+ rubygems_mfa_required: 'true'
190
186
  post_install_message:
191
187
  rdoc_options: []
192
188
  require_paths:
@@ -195,20 +191,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
195
191
  requirements:
196
192
  - - ">="
197
193
  - !ruby/object:Gem::Version
198
- version: '2.6'
194
+ version: '2.7'
199
195
  required_rubygems_version: !ruby/object:Gem::Requirement
200
196
  requirements:
201
197
  - - ">="
202
198
  - !ruby/object:Gem::Version
203
199
  version: '0'
204
200
  requirements: []
205
- rubygems_version: 3.2.15
201
+ rubygems_version: 3.3.7
206
202
  signing_key:
207
203
  specification_version: 4
208
204
  summary: Minimialist background jobs backed by ActiveJob and ActiveRecord.
209
- test_files:
210
- - spec/fleiss/backend/active_record_spec.rb
211
- - spec/fleiss/executor_spec.rb
212
- - spec/fleiss/worker_spec.rb
213
- - spec/fleiss_spec.rb
214
- - spec/spec_helper.rb
205
+ test_files: []
@@ -1,135 +0,0 @@
1
- require 'spec_helper'
2
-
3
- RSpec.describe Fleiss::Backend::ActiveRecord do
4
- def retrieve(job)
5
- described_class.find(job.provider_job_id)
6
- end
7
-
8
- it 'persists jobs' do
9
- job = TestJob.perform_later
10
- rec = retrieve(job)
11
-
12
- expect(rec.attributes).to include(
13
- 'queue_name' => 'test-queue',
14
- 'owner' => nil,
15
- 'started_at' => nil,
16
- 'finished_at' => nil,
17
- )
18
- expect(rec.scheduled_at).to be_within(2.seconds).of(Time.zone.now)
19
- expect(rec.expires_at).to be_within(2.seconds).of(3.days.from_now)
20
- expect(rec.job_data).to include(
21
- 'job_class' => 'TestJob',
22
- 'arguments' => [],
23
- 'executions' => 0,
24
- 'locale' => 'en',
25
- 'priority' => nil,
26
- 'provider_job_id' => nil,
27
- 'queue_name' => 'test-queue',
28
- )
29
- end
30
-
31
- it 'enqueues with delay' do
32
- job = TestJob.set(wait: 1.day).perform_later
33
- rec = retrieve(job)
34
- expect(rec.scheduled_at).to be_within(2.seconds).of(1.day.from_now)
35
- end
36
-
37
- it 'enqueues with priority' do
38
- job = TestJob.set(priority: 8).perform_later
39
- rec = retrieve(job)
40
- expect(rec.priority).to eq(8)
41
- end
42
-
43
- it 'exposes active job ID' do
44
- job = TestJob.perform_later
45
- rec = retrieve(job)
46
- expect(rec.job_id.size).to eq(36)
47
- end
48
-
49
- it 'scopes pending' do
50
- j1 = TestJob.perform_later
51
- expect(retrieve(j1).start('owner')).to be_truthy
52
- expect(retrieve(j1).finish('owner')).to be_truthy
53
-
54
- j2 = TestJob.perform_later
55
- _j3 = TestJob.set(wait: 1.hour).perform_later
56
- j4 = TestJob.set(priority: 2).perform_later
57
-
58
- expect(described_class.pending.ids).to eq [j4.provider_job_id, j2.provider_job_id]
59
- end
60
-
61
- it 'scopes in_progress' do
62
- _j1 = TestJob.perform_later
63
- j2 = TestJob.perform_later
64
- expect(retrieve(j2).start('owner')).to be_truthy
65
-
66
- j3 = TestJob.perform_later
67
- expect(retrieve(j3).start('owner')).to be_truthy
68
- expect(described_class.in_progress('owner').ids).to match_array [j2.provider_job_id, j3.provider_job_id]
69
- expect(described_class.in_progress('other').ids).to be_empty
70
-
71
- expect(retrieve(j3).finish('owner')).to be_truthy
72
- expect(described_class.in_progress('owner').ids).to eq [j2.provider_job_id]
73
- end
74
-
75
- it 'scopes by queue' do
76
- j1 = TestJob.perform_later
77
- j2 = TestJob.set(queue: 'other').perform_later
78
- expect(described_class.in_queue('test-queue').ids).to eq [j1.provider_job_id]
79
- expect(described_class.in_queue('other').ids).to eq [j2.provider_job_id]
80
- end
81
-
82
- it 'starts' do
83
- job = TestJob.perform_later
84
- rec = retrieve(job)
85
- expect(rec.start('owner')).to be_truthy
86
- expect(rec.start('other')).to be_falsey
87
- expect(rec.reload.owner).to eq('owner')
88
- expect(rec.started_at).to be_within(2.seconds).of(Time.zone.now)
89
- end
90
-
91
- it 'locks atomically' do
92
- 24.times do
93
- TestJob.perform_later
94
- end
95
- counts = (1..4).map do |n|
96
- Thread.new do
97
- described_class.pending.to_a.count {|j| j.start "owner-#{n}" }
98
- end
99
- end.map(&:value)
100
- expect(counts.sum).to eq(24)
101
- end
102
-
103
- it 'finishes' do
104
- job = TestJob.perform_later
105
- rec = retrieve(job)
106
- expect(rec.finish('owner')).to be_falsey
107
- expect(rec.start('owner')).to be_truthy
108
- expect(rec.finish('other')).to be_falsey
109
- expect(rec.finish('owner')).to be_truthy
110
- expect(rec.reload.owner).to eq('owner')
111
- expect(rec.started_at).to be_within(2.seconds).of(Time.zone.now)
112
- expect(rec.finished_at).to be_within(2.seconds).of(Time.zone.now)
113
- end
114
-
115
- it 'reschedules' do
116
- job = TestJob.perform_later
117
- rec = retrieve(job)
118
- expect(rec.reschedule('owner')).to be_falsey
119
- expect(rec.start('owner')).to be_truthy
120
- expect(rec.reschedule('other')).to be_falsey
121
- expect(rec.reschedule('owner')).to be_truthy
122
- expect(rec.reload.owner).to be_nil
123
- expect(rec.started_at).to be_nil
124
- expect(rec.scheduled_at).to be_within(2.seconds).of(Time.zone.now)
125
- end
126
-
127
- it 'reconnects' do
128
- expect(::ActiveRecord::Base).to receive(:clear_active_connections!).once.and_return(nil)
129
-
130
- expect do
131
- described_class.wrap_perform { raise ::ActiveRecord::StatementInvalid }
132
- end
133
- .to raise_error(::ActiveRecord::StatementInvalid) # re-raised anyway
134
- end
135
- end
@@ -1,29 +0,0 @@
1
- require 'spec_helper'
2
- require 'fleiss/executor'
3
-
4
- RSpec.describe Fleiss::Executor do
5
- subject { described_class.new max_size: 2 }
6
-
7
- after { subject.kill }
8
-
9
- it 'checks capacity' do
10
- expect(described_class.new.capacity).to eq(1)
11
-
12
- expect(subject.capacity).to eq(2)
13
- subject.post { sleep(1) }
14
- expect(subject.capacity).to eq(1)
15
- subject.post { sleep(1) }
16
- expect(subject.capacity).to eq(0)
17
- end
18
-
19
- it 'discards execution when capacity is reached' do
20
- n = Concurrent::AtomicFixnum.new(0)
21
- 10.times do
22
- 10.times { subject.post { n.increment } }
23
- sleep(0.001)
24
- end
25
- subject.shutdown
26
- subject.wait_for_termination(1)
27
- expect(n.value).to be_within(10).of(20)
28
- end
29
- end
@@ -1,47 +0,0 @@
1
- require 'spec_helper'
2
- require 'fleiss/worker'
3
-
4
- RSpec.describe Fleiss::Worker do
5
- subject do
6
- described_class.new queues: TestJob.queue_name, wait_time: 0.01
7
- end
8
-
9
- let! :runner do
10
- t = Thread.new { subject.run }
11
- t.abort_on_exception = true
12
- t
13
- end
14
-
15
- after do
16
- runner.kill
17
- end
18
-
19
- def wait_for
20
- 100.times do
21
- break if yield
22
-
23
- sleep(0.1)
24
- end
25
- expect(yield).to be_truthy
26
- end
27
-
28
- it 'runs' do
29
- # seed 24 jobs
30
- 24.times {|n| TestJob.perform_later(n) }
31
- wait_for { Fleiss.backend.not_finished.count.positive? }
32
-
33
- # ensure runner processes them all
34
- wait_for { Fleiss.backend.not_finished.count.zero? }
35
-
36
- # check what's been performed
37
- expect(TestJob.performed.size).to eq(24)
38
- expect(Fleiss.backend.finished.count).to eq(24)
39
- expect(TestJob.performed).to match_array(0..23)
40
- end
41
-
42
- it 'handles failing jobs' do
43
- TestJob.perform_later('raise')
44
- wait_for { Fleiss.backend.not_finished.count.zero? }
45
- expect(Fleiss.backend.finished.count).to eq(1)
46
- end
47
- end
data/spec/fleiss_spec.rb DELETED
@@ -1,13 +0,0 @@
1
- require 'spec_helper'
2
-
3
- RSpec.describe Fleiss do
4
- it 'has a backend' do
5
- expect(described_class.backend).to eq(Fleiss::Backend::ActiveRecord)
6
- end
7
-
8
- it 'enqueues' do
9
- expect do
10
- TestJob.set(wait: 1.week).perform_later
11
- end.to change { described_class.backend.count }.by(1)
12
- end
13
- end
data/spec/spec_helper.rb DELETED
@@ -1,51 +0,0 @@
1
- ENV['RACK_ENV'] ||= 'test'
2
-
3
- require 'rspec'
4
- require 'fleiss'
5
- require 'fleiss/backend/active_record/migration'
6
- require 'active_job'
7
- require 'active_job/queue_adapters/fleiss_adapter'
8
- require 'fileutils'
9
-
10
- ActiveJob::Base.queue_adapter = :fleiss
11
- ActiveJob::Base.logger = Logger.new(nil)
12
-
13
- Time.zone_default = Time.find_zone!('UTC')
14
-
15
- tmpdir = File.expand_path('./tmp', __dir__)
16
- FileUtils.rm_rf tmpdir
17
- FileUtils.mkdir_p tmpdir
18
-
19
- database_url = ENV['DATABASE_URL'] || "sqlite3://#{tmpdir}/fleiss-test.sqlite3"
20
- ActiveRecord::Base.configurations = { 'test' => { 'url' => database_url, 'pool' => 20 } }
21
-
22
- ActiveRecord::Base.establish_connection :test
23
- ActiveRecord::Base.connection.drop_table('fleiss_jobs', if_exists: true)
24
- ActiveRecord::Migration.suppress_messages do
25
- Fleiss::Backend::ActiveRecord::Migration.migrate(:up)
26
- end
27
-
28
- class TestJob < ActiveJob::Base
29
- queue_as 'test-queue'
30
-
31
- def self.performed
32
- @performed ||= []
33
- end
34
-
35
- def ttl
36
- 72.hours
37
- end
38
-
39
- def perform(msg = nil)
40
- raise 'Failing' if msg == 'raise'
41
-
42
- self.class.performed.push(msg)
43
- end
44
- end
45
-
46
- RSpec.configure do |c|
47
- c.after do
48
- TestJob.performed.clear
49
- Fleiss.backend.delete_all
50
- end
51
- end