resque-serializer 0.1.2 → 0.2.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
  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