resque-serializer 0.1.2 → 0.2.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: df7981e4e3465956ef681be0515e3b132f467c92
4
- data.tar.gz: beb3c0112e30f2a4d87a7e4a00cbf2b3b83a2c48
3
+ metadata.gz: e19f511e3d84751b8359d10bc720553f12913441
4
+ data.tar.gz: 61f90b030888dc87b9d48f80fbbb055d8a146d8a
5
5
  SHA512:
6
- metadata.gz: 9d611f691cfd8fa954a57bdcdb07ba636259fc96e407b5ec4add1baafbfbf50a89ad673d0742d7a95543bc16a0baf583a36e345b97b4484e20771572b9a75f7d
7
- data.tar.gz: fe4ca85898ed891dd318101cd6be87635ab141cd48eafb2261cc86702b07f168dce205f998947934905f932bb7e5207000bf9756bb970b14c6c92b6392a8d6f2
6
+ metadata.gz: 69f66ddd96c466cbd26003cebe46fcb5d8b4fd01a74699c420f24b5a5ca45b792a346a76f150c6ca3c3f4e337d67cef8e83a3c13c909f4faea0b2e4acbae11dd
7
+ data.tar.gz: 2dee6c43493e437631f57d5e19f709463c34bca7412f0ce53d6964cf71a92e907686d1c9e66ab0626e897b7e2a5e4b36d4e0dd62d0ca3a16502c463a84f1010f
@@ -1,5 +1,11 @@
1
1
  sudo: false
2
+
2
3
  language: ruby
4
+
3
5
  rvm:
4
6
  - 2.3.3
5
- before_install: gem install bundler -v 1.14.6
7
+
8
+ branches:
9
+ only: master
10
+
11
+ before_install: gem install bundler --no-document
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Resque::Serializer
2
2
 
3
+ [![Build Status](https://travis-ci.org/rringler/resque-serializer.svg?branch=master)](https://travis-ci.org/rringler/resque-serializer)
4
+
3
5
  A Resque plugin which ensures for a given queue, that only one worker is executing a job at any given time.
4
6
 
5
7
  It is slightly more flexible than [Resque::LonelyJob](https://github.com/wallace/resque-lonely_job).
@@ -1,3 +1,5 @@
1
+ require 'resque'
2
+ require 'resque-serializer/configuration'
1
3
  require 'resque-serializer/version'
2
4
  require 'resque-serializer/monkey_patches/resque'
3
5
  require 'resque-serializer/mutex'
@@ -9,6 +11,16 @@ require 'resque-serializer/serializers/queue'
9
11
  module Resque
10
12
  module Plugins
11
13
  module Serializer
14
+ class << self
15
+ attr_accessor :configuration
16
+
17
+ def configure(&block)
18
+ self.configuration ||= Configuration.instance
19
+
20
+ yield(configuration)
21
+ end
22
+ end
23
+
12
24
  def serialize(resource)
13
25
  case resource
14
26
  when :job then extend(Serializers::Job)
@@ -31,3 +43,6 @@ module Resque
31
43
  end
32
44
  end
33
45
  end
46
+
47
+ # Use default configuration
48
+ Resque::Plugins::Serializer.configure {}
@@ -0,0 +1,17 @@
1
+ module Resque
2
+ module Plugins
3
+ module Serializer
4
+ class Configuration
5
+ include Singleton
6
+
7
+ attr_accessor :mutex_generator
8
+
9
+ DEFAULT_MUTEX_GENERATOR = ->(key) { Serializer::Mutex.new(key) }
10
+
11
+ def initialize
12
+ @mutex_generator = DEFAULT_MUTEX_GENERATOR
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -32,16 +32,22 @@ module Resque
32
32
  job_mutex(args).unlock
33
33
  end
34
34
 
35
+ private
36
+
37
+ delegate :configuration,
38
+ to: Resque::Plugins::Serializer
39
+
40
+ delegate :mutex_generator,
41
+ to: :configuration
42
+
35
43
  def queue_mutex(args)
36
- Serializer::Mutex.new(queue_key(args))
44
+ mutex_generator.call(queue_key(args))
37
45
  end
38
46
 
39
47
  def job_mutex(args)
40
- Serializer::Mutex.new(job_key(args))
48
+ mutex_generator.call(job_key(args))
41
49
  end
42
50
 
43
- private
44
-
45
51
  def queue_key(args)
46
52
  klass = self.name.tableize.singularize
47
53
  args = args.map(&:to_s).join(',')
@@ -24,12 +24,18 @@ module Resque
24
24
  mutex(args).unlock
25
25
  end
26
26
 
27
+ private
28
+
29
+ delegate :configuration,
30
+ to: Resque::Plugins::Serializer
31
+
32
+ delegate :mutex_generator,
33
+ to: :configuration
34
+
27
35
  def mutex(args)
28
- Serializer::Mutex.new(key(args))
36
+ mutex_generator.call(key(args))
29
37
  end
30
38
 
31
- private
32
-
33
39
  def key(args)
34
40
  klass = self.name.tableize.singularize
35
41
  args = args.map(&:to_s).join(',')
@@ -24,12 +24,18 @@ module Resque
24
24
  mutex(args).unlock
25
25
  end
26
26
 
27
+ private
28
+
29
+ delegate :configuration,
30
+ to: Resque::Plugins::Serializer
31
+
32
+ delegate :mutex_generator,
33
+ to: :configuration
34
+
27
35
  def mutex(args)
28
- Serializer::Mutex.new(key(args))
36
+ mutex_generator.call(key(args))
29
37
  end
30
38
 
31
- private
32
-
33
39
  def key(args)
34
40
  klass = self.name.tableize.singularize
35
41
  args = args.map(&:to_s).join(',')
@@ -22,12 +22,18 @@ module Resque
22
22
  mutex(args).unlock
23
23
  end
24
24
 
25
+ private
26
+
27
+ delegate :configuration,
28
+ to: Resque::Plugins::Serializer
29
+
30
+ delegate :mutex_generator,
31
+ to: :configuration
32
+
25
33
  def mutex(args)
26
- Serializer::Mutex.new(key(args))
34
+ mutex_generator.call(key(args))
27
35
  end
28
36
 
29
- private
30
-
31
37
  def key(args)
32
38
  klass = self.name.tableize.singularize
33
39
  args = args.map(&:to_s).join(',')
@@ -1,7 +1,7 @@
1
1
  module Resque
2
2
  module Plugins
3
3
  module Serializer
4
- VERSION = '0.1.2'
4
+ VERSION = '0.2.0'
5
5
  end
6
6
  end
7
7
  end
@@ -20,7 +20,7 @@ Gem::Specification.new do |gem|
20
20
  gem.add_dependency 'activesupport'
21
21
  gem.add_dependency 'resque'
22
22
 
23
- gem.add_development_dependency 'bundler', '~> 1.14'
23
+ gem.add_development_dependency 'bundler', '~> 2.0'
24
24
  gem.add_development_dependency 'bump', '~> 0.7'
25
25
  gem.add_development_dependency 'mock_redis'
26
26
  gem.add_development_dependency 'pry-byebug'
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ describe Resque::Plugins::Serializer::Configuration do
4
+ describe 'instance methods' do
5
+ describe '#mutex_generator' do
6
+ let(:instance) { described_class.instance }
7
+ let(:key) { 'key' }
8
+
9
+ context 'when called' do
10
+ subject { instance.mutex_generator.call(key) }
11
+
12
+ it 'returns an instance of the mutex' do
13
+ expect(subject).to be_a(Resque::Plugins::Serializer::Mutex)
14
+
15
+ expect(subject).to have_attributes(key: key)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -10,25 +10,31 @@ class ResqueDequeueHookJob
10
10
  def self.perform(*args); end
11
11
  end
12
12
 
13
- RSpec.describe ResqueDequeueHookJob do
14
- let(:args) { %w[arg1 arg2] }
15
- let(:queue_name) { :default }
16
- let(:dequeue_hooks) { [] }
17
-
18
- before do
19
- allow(Resque::Plugin)
20
- .to receive(:before_dequeue_hooks)
21
- .and_return(dequeue_hooks)
22
- allow(Resque::Plugin)
23
- .to receive(:after_dequeue_hooks)
24
- .and_return(dequeue_hooks)
25
- enqueue_job
26
- end
27
-
28
- it 'executes the dequeue hooks' do
29
- expect(::Resque::Plugin).to receive(:before_dequeue_hooks).ordered
30
- expect(::Resque::Plugin).to receive(:after_dequeue_hooks).ordered
31
-
32
- execute_job
13
+ RSpec.describe ResqueSerializer::MonkeyPatches::Resque do
14
+ describe 'when prepended' do
15
+ let(:args) { %w[arg1 arg2] }
16
+ let(:queue_name) { :default }
17
+ let(:dequeue_hooks) { [] }
18
+ let(:worker) { Resque::Worker.new(queue_name) }
19
+
20
+ before do
21
+ allow(Resque::Plugin)
22
+ .to receive(:before_dequeue_hooks)
23
+ .and_return(dequeue_hooks)
24
+ allow(Resque::Plugin)
25
+ .to receive(:after_dequeue_hooks)
26
+ .and_return(dequeue_hooks)
27
+
28
+ Resque.enqueue(ResqueDequeueHookJob)
29
+ end
30
+
31
+ subject(:execute_job) { worker.reserve }
32
+
33
+ it 'executes the dequeue hooks' do
34
+ expect(::Resque::Plugin).to receive(:before_dequeue_hooks).ordered
35
+ expect(::Resque::Plugin).to receive(:after_dequeue_hooks).ordered
36
+
37
+ execute_job
38
+ end
33
39
  end
34
40
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: resque-serializer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Ringler
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-12-14 00:00:00.000000000 Z
11
+ date: 2019-05-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '1.14'
47
+ version: '2.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '1.14'
54
+ version: '2.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: bump
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -158,6 +158,7 @@ files:
158
158
  - bin/console
159
159
  - bin/setup
160
160
  - lib/resque-serializer.rb
161
+ - lib/resque-serializer/configuration.rb
161
162
  - lib/resque-serializer/monkey_patches/resque.rb
162
163
  - lib/resque-serializer/mutex.rb
163
164
  - lib/resque-serializer/serializers/both.rb
@@ -166,6 +167,7 @@ files:
166
167
  - lib/resque-serializer/serializers/queue.rb
167
168
  - lib/resque-serializer/version.rb
168
169
  - resque-serializer.gemspec
170
+ - spec/lib/resque-serializer/configuration_spec.rb
169
171
  - spec/lib/resque-serializer/monkey_patches/resque_spec.rb
170
172
  - spec/lib/resque-serializer/mutex_spec.rb
171
173
  - spec/lib/resque-serializer/serializers/both_spec.rb
@@ -194,11 +196,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
194
196
  version: '0'
195
197
  requirements: []
196
198
  rubyforge_project:
197
- rubygems_version: 2.6.14.1
199
+ rubygems_version: 2.6.14.3
198
200
  signing_key:
199
201
  specification_version: 4
200
202
  summary: Serializes Resque jobs
201
203
  test_files:
204
+ - spec/lib/resque-serializer/configuration_spec.rb
202
205
  - spec/lib/resque-serializer/monkey_patches/resque_spec.rb
203
206
  - spec/lib/resque-serializer/mutex_spec.rb
204
207
  - spec/lib/resque-serializer/serializers/both_spec.rb