resque-concurrent-restriction 0.5.9 → 0.6.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.
data/spec/spec_helper.rb CHANGED
@@ -1,181 +1,182 @@
1
- require 'rspec'
2
- require 'ap'
3
-
4
- require 'resque-concurrent-restriction'
5
-
6
- # No need to start redis when running in Travis
7
- unless ENV['CI']
8
-
9
- begin
10
- Resque.queues
11
- rescue Errno::ECONNREFUSED
12
- spec_dir = File.dirname(File.expand_path(__FILE__))
13
- REDIS_CMD = "redis-server #{spec_dir}/redis-test.conf"
14
-
15
- puts "Starting redis for testing at localhost..."
16
- puts `cd #{spec_dir}; #{REDIS_CMD}`
17
-
18
- # Schedule the redis server for shutdown when tests are all finished.
19
- at_exit do
20
- puts 'Stopping redis'
21
- pid = File.read("#{spec_dir}/redis.pid").to_i rescue nil
22
- system ("kill -9 #{pid}") if pid.to_i != 0
23
- File.delete("#{spec_dir}/redis.pid") rescue nil
24
- File.delete("#{spec_dir}/redis-server.log") rescue nil
25
- File.delete("#{spec_dir}/dump.rdb") rescue nil
26
- end
27
- end
28
-
29
- end
30
-
31
- ##
32
- # Helper to perform job classes
33
- #
34
- module PerformJob
35
-
36
- def run_resque_job(job_class, *job_args)
37
- opts = job_args.last.is_a?(Hash) ? job_args.pop : {}
38
- queue = opts[:queue] || Resque.queue_from_class(job_class)
39
-
40
- Resque::Job.create(queue, job_class, *job_args)
41
-
42
- run_resque_queue(queue, opts)
43
- end
44
-
45
- def run_resque_queue(queue, opts={})
46
- worker = Resque::Worker.new(queue)
47
- worker.very_verbose = true if opts[:verbose]
48
-
49
- # do a single job then shutdown
50
- def worker.done_working
51
- super
52
- shutdown
53
- end
54
-
55
- if opts[:inline]
56
- job = worker.reserve
57
- worker.perform(job)
58
- else
59
- worker.work(0)
60
- end
61
- end
62
-
63
- def dump_redis
64
- result = {}
65
- Resque.redis.keys("*").each do |key|
66
- type = Resque.redis.type(key)
67
- result[key] = case type
68
- when 'string' then Resque.redis.get(key)
69
- when 'list' then Resque.redis.lrange(key, 0, -1)
70
- when 'set' then Resque.redis.smembers(key)
71
- else type
72
- end
73
- end
74
- return result
75
- end
76
-
77
- end
78
-
79
- module RunCountHelper
80
-
81
- def around_perform(*args)
82
- begin
83
- Resque.redis.set("restricted_job_started:#{self}:#{args.to_json}", true)
84
- Resque.redis.incr("restricted_job_run_count:#{self}:#{args.to_json}")
85
- yield
86
- ensure
87
- Resque.redis.set("restricted_job_ended:#{self}:#{args.to_json}", true)
88
- end
89
- end
90
-
91
- def perform(*args)
92
- #puts "Running job #{self}:#{args}"
93
- end
94
-
95
- def run_count(*args)
96
- Resque.redis.get("restricted_job_run_count:#{self}:#{args.to_json}").to_i
97
- end
98
-
99
- def total_run_count
100
- keys = Resque.redis.keys("restricted_job_run_count:#{self}:*")
101
- keys.inject(0) {|sum, k| sum + Resque.redis.get(k).to_i }
102
- end
103
-
104
- def started?(*args)
105
- return Resque.redis.get("restricted_job_started#{self}:#{args.to_json}") == true
106
- end
107
-
108
- def ended?(*args)
109
- return Resque.redis.get("restricted_job_ended#{self}:#{args.to_json}") == true
110
- end
111
- end
112
-
113
- class NoRestrictionJob
114
- extend RunCountHelper
115
- @queue = 'normal'
116
- end
117
-
118
- class RestrictionJob
119
- extend RunCountHelper
120
- extend Resque::Plugins::ConcurrentRestriction
121
- concurrent 1
122
- @queue = 'normal'
123
- end
124
-
125
- module Jobs
126
- class NestedRestrictionJob
127
- extend RunCountHelper
128
- extend Resque::Plugins::ConcurrentRestriction
129
- concurrent 1
130
- @queue = 'normal'
131
- end
132
- end
133
-
134
- class IdentifiedRestrictionJob
135
- extend RunCountHelper
136
- extend Resque::Plugins::ConcurrentRestriction
137
- concurrent 1
138
- @queue = 'normal'
139
-
140
- def self.concurrent_identifier(*args)
141
- args.first.to_s
142
- end
143
-
144
- end
145
-
146
- class ConcurrentRestrictionJob
147
- extend RunCountHelper
148
- extend Resque::Plugins::ConcurrentRestriction
149
- concurrent 1
150
-
151
- @queue = 'normal'
152
-
153
- def self.perform(*args)
154
- raise args.first if args.first
155
- sleep 0.2
156
- end
157
- end
158
-
159
- class MultipleConcurrentRestrictionJob
160
- extend RunCountHelper
161
- extend Resque::Plugins::ConcurrentRestriction
162
- concurrent 4
163
-
164
- @queue = 'normal'
165
-
166
- def self.perform(*args)
167
- sleep 0.5
168
- end
169
- end
170
-
171
- class OneConcurrentRestrictionJob
172
- extend RunCountHelper
173
- extend Resque::Plugins::ConcurrentRestriction
174
- concurrent 1
175
-
176
- @queue = 'normal'
177
-
178
- def self.perform(*args)
179
- sleep 0.5
180
- end
181
- end
1
+ require 'rspec'
2
+ require 'ap'
3
+
4
+ require 'resque-concurrent-restriction'
5
+
6
+ # No need to start redis when running in Travis
7
+ unless ENV['CI']
8
+
9
+ begin
10
+ Resque.queues
11
+ rescue Errno::ECONNREFUSED
12
+ spec_dir = File.dirname(File.expand_path(__FILE__))
13
+ REDIS_CMD = "redis-server #{spec_dir}/redis-test.conf"
14
+
15
+ puts "Starting redis for testing at localhost..."
16
+ puts `cd #{spec_dir}; #{REDIS_CMD}`
17
+
18
+ # Schedule the redis server for shutdown when tests are all finished.
19
+ at_exit do
20
+ puts 'Stopping redis'
21
+ pid = File.read("#{spec_dir}/redis.pid").to_i rescue nil
22
+ system ("kill -9 #{pid}") if pid.to_i != 0
23
+ File.delete("#{spec_dir}/redis.pid") rescue nil
24
+ File.delete("#{spec_dir}/redis-server.log") rescue nil
25
+ File.delete("#{spec_dir}/dump.rdb") rescue nil
26
+ end
27
+ end
28
+
29
+ end
30
+
31
+ ##
32
+ # Helper to perform job classes
33
+ #
34
+ module PerformJob
35
+
36
+ def run_resque_job(job_class, *job_args)
37
+ opts = job_args.last.is_a?(Hash) ? job_args.pop : {}
38
+ queue = opts[:queue] || Resque.queue_from_class(job_class)
39
+
40
+ Resque::Job.create(queue, job_class, *job_args)
41
+
42
+ run_resque_queue(queue, opts)
43
+ end
44
+
45
+ def run_resque_queue(queue, opts={})
46
+ worker = Resque::Worker.new(queue)
47
+ worker.very_verbose = true if opts[:verbose]
48
+ worker.term_child = true
49
+
50
+ # do a single job then shutdown
51
+ def worker.done_working
52
+ super
53
+ shutdown
54
+ end
55
+
56
+ if opts[:inline]
57
+ job = worker.reserve
58
+ worker.perform(job)
59
+ else
60
+ worker.work(0)
61
+ end
62
+ end
63
+
64
+ def dump_redis
65
+ result = {}
66
+ Resque.redis.keys("*").each do |key|
67
+ type = Resque.redis.type(key)
68
+ result[key] = case type
69
+ when 'string' then Resque.redis.get(key)
70
+ when 'list' then Resque.redis.lrange(key, 0, -1)
71
+ when 'set' then Resque.redis.smembers(key)
72
+ else type
73
+ end
74
+ end
75
+ return result
76
+ end
77
+
78
+ end
79
+
80
+ module RunCountHelper
81
+
82
+ def around_perform(*args)
83
+ begin
84
+ Resque.redis.set("restricted_job_started:#{self}:#{args.to_json}", true)
85
+ Resque.redis.incr("restricted_job_run_count:#{self}:#{args.to_json}")
86
+ yield
87
+ ensure
88
+ Resque.redis.set("restricted_job_ended:#{self}:#{args.to_json}", true)
89
+ end
90
+ end
91
+
92
+ def perform(*args)
93
+ #puts "Running job #{self}:#{args}"
94
+ end
95
+
96
+ def run_count(*args)
97
+ Resque.redis.get("restricted_job_run_count:#{self}:#{args.to_json}").to_i
98
+ end
99
+
100
+ def total_run_count
101
+ keys = Resque.redis.keys("restricted_job_run_count:#{self}:*")
102
+ keys.inject(0) {|sum, k| sum + Resque.redis.get(k).to_i }
103
+ end
104
+
105
+ def started?(*args)
106
+ return Resque.redis.get("restricted_job_started#{self}:#{args.to_json}") == true
107
+ end
108
+
109
+ def ended?(*args)
110
+ return Resque.redis.get("restricted_job_ended#{self}:#{args.to_json}") == true
111
+ end
112
+ end
113
+
114
+ class NoRestrictionJob
115
+ extend RunCountHelper
116
+ @queue = 'normal'
117
+ end
118
+
119
+ class RestrictionJob
120
+ extend RunCountHelper
121
+ extend Resque::Plugins::ConcurrentRestriction
122
+ concurrent 1
123
+ @queue = 'normal'
124
+ end
125
+
126
+ module Jobs
127
+ class NestedRestrictionJob
128
+ extend RunCountHelper
129
+ extend Resque::Plugins::ConcurrentRestriction
130
+ concurrent 1
131
+ @queue = 'normal'
132
+ end
133
+ end
134
+
135
+ class IdentifiedRestrictionJob
136
+ extend RunCountHelper
137
+ extend Resque::Plugins::ConcurrentRestriction
138
+ concurrent 1
139
+ @queue = 'normal'
140
+
141
+ def self.concurrent_identifier(*args)
142
+ args.first.to_s
143
+ end
144
+
145
+ end
146
+
147
+ class ConcurrentRestrictionJob
148
+ extend RunCountHelper
149
+ extend Resque::Plugins::ConcurrentRestriction
150
+ concurrent 1
151
+
152
+ @queue = 'normal'
153
+
154
+ def self.perform(*args)
155
+ raise args.first if args.first
156
+ sleep 0.2
157
+ end
158
+ end
159
+
160
+ class MultipleConcurrentRestrictionJob
161
+ extend RunCountHelper
162
+ extend Resque::Plugins::ConcurrentRestriction
163
+ concurrent 4
164
+
165
+ @queue = 'normal'
166
+
167
+ def self.perform(*args)
168
+ sleep 0.5
169
+ end
170
+ end
171
+
172
+ class OneConcurrentRestrictionJob
173
+ extend RunCountHelper
174
+ extend Resque::Plugins::ConcurrentRestriction
175
+ concurrent 1
176
+
177
+ @queue = 'normal'
178
+
179
+ def self.perform(*args)
180
+ sleep 0.5
181
+ end
182
+ end
metadata CHANGED
@@ -1,94 +1,69 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: resque-concurrent-restriction
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.9
5
- prerelease:
4
+ version: 0.6.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Matt Conway
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-06-04 00:00:00.000000000 Z
11
+ date: 2016-02-25 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: resque
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ~>
17
+ - - "~>"
20
18
  - !ruby/object:Gem::Version
21
- version: '1.10'
19
+ version: '1.25'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ~>
24
+ - - "~>"
28
25
  - !ruby/object:Gem::Version
29
- version: '1.10'
30
- - !ruby/object:Gem::Dependency
31
- name: json
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ! '>='
36
- - !ruby/object:Gem::Version
37
- version: '0'
38
- type: :development
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
26
+ version: '1.25'
46
27
  - !ruby/object:Gem::Dependency
47
28
  name: rspec
48
29
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
30
  requirements:
51
- - - ~>
31
+ - - "~>"
52
32
  - !ruby/object:Gem::Version
53
33
  version: '2.5'
54
34
  type: :development
55
35
  prerelease: false
56
36
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
37
  requirements:
59
- - - ~>
38
+ - - "~>"
60
39
  - !ruby/object:Gem::Version
61
40
  version: '2.5'
62
41
  - !ruby/object:Gem::Dependency
63
42
  name: awesome_print
64
43
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
44
  requirements:
67
- - - ! '>='
45
+ - - ">="
68
46
  - !ruby/object:Gem::Version
69
47
  version: '0'
70
48
  type: :development
71
49
  prerelease: false
72
50
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
51
  requirements:
75
- - - ! '>='
52
+ - - ">="
76
53
  - !ruby/object:Gem::Version
77
54
  version: '0'
78
55
  - !ruby/object:Gem::Dependency
79
56
  name: json
80
57
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
58
  requirements:
83
- - - ! '>='
59
+ - - ">="
84
60
  - !ruby/object:Gem::Version
85
61
  version: '0'
86
62
  type: :development
87
63
  prerelease: false
88
64
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
65
  requirements:
91
- - - ! '>='
66
+ - - ">="
92
67
  - !ruby/object:Gem::Version
93
68
  version: '0'
94
69
  description: A resque plugin for limiting how many of a specific job can run concurrently
@@ -98,8 +73,8 @@ executables: []
98
73
  extensions: []
99
74
  extra_rdoc_files: []
100
75
  files:
101
- - .gitignore
102
- - .travis.yml
76
+ - ".gitignore"
77
+ - ".travis.yml"
103
78
  - CHANGELOG
104
79
  - Gemfile
105
80
  - LICENSE
@@ -117,27 +92,26 @@ files:
117
92
  - spec/spec_helper.rb
118
93
  homepage: http://github.com/wr0ngway/resque-concurrent-restriction
119
94
  licenses: []
95
+ metadata: {}
120
96
  post_install_message:
121
97
  rdoc_options: []
122
98
  require_paths:
123
99
  - lib
124
100
  required_ruby_version: !ruby/object:Gem::Requirement
125
- none: false
126
101
  requirements:
127
- - - ! '>='
102
+ - - ">="
128
103
  - !ruby/object:Gem::Version
129
104
  version: '0'
130
105
  required_rubygems_version: !ruby/object:Gem::Requirement
131
- none: false
132
106
  requirements:
133
- - - ! '>='
107
+ - - ">="
134
108
  - !ruby/object:Gem::Version
135
109
  version: '0'
136
110
  requirements: []
137
111
  rubyforge_project: resque-concurrent-restriction
138
- rubygems_version: 1.8.25
112
+ rubygems_version: 2.4.5.1
139
113
  signing_key:
140
- specification_version: 3
114
+ specification_version: 4
141
115
  summary: A resque plugin for limiting how many of a specific job can run concurrently
142
116
  test_files:
143
117
  - spec/concurrent_restriction_job_spec.rb
@@ -145,4 +119,3 @@ test_files:
145
119
  - spec/resque_worker_extensions_spec.rb
146
120
  - spec/spec.opts
147
121
  - spec/spec_helper.rb
148
- has_rdoc: