resque-bus 0.3.2 → 0.7.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.
Files changed (59) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +1 -0
  3. data/.rspec +1 -0
  4. data/CHANGELOG.md +15 -0
  5. data/Gemfile +2 -3
  6. data/README.mdown +50 -64
  7. data/Rakefile +0 -1
  8. data/lib/resque-bus.rb +21 -283
  9. data/lib/resque_bus/adapter.rb +66 -0
  10. data/lib/resque_bus/compatibility/deprecated.rb +38 -0
  11. data/lib/resque_bus/compatibility/driver.rb +10 -0
  12. data/lib/resque_bus/compatibility/heartbeat.rb +10 -0
  13. data/lib/resque_bus/compatibility/publisher.rb +13 -0
  14. data/lib/resque_bus/compatibility/rider.rb +32 -0
  15. data/lib/resque_bus/compatibility/subscriber.rb +8 -0
  16. data/lib/resque_bus/compatibility/task_manager.rb +8 -0
  17. data/lib/resque_bus/server.rb +6 -5
  18. data/lib/resque_bus/server/views/bus.erb +2 -2
  19. data/lib/resque_bus/tasks.rb +46 -46
  20. data/lib/resque_bus/version.rb +2 -4
  21. data/resque-bus.gemspec +5 -12
  22. data/spec/adapter/compatibility_spec.rb +97 -0
  23. data/spec/adapter/integration_spec.rb +111 -0
  24. data/spec/adapter/publish_at_spec.rb +50 -0
  25. data/spec/adapter/retry_spec.rb +47 -0
  26. data/spec/adapter/support.rb +23 -0
  27. data/spec/adapter_spec.rb +14 -0
  28. data/spec/application_spec.rb +62 -62
  29. data/spec/config_spec.rb +83 -0
  30. data/spec/dispatch_spec.rb +6 -6
  31. data/spec/driver_spec.rb +62 -53
  32. data/spec/heartbeat_spec.rb +4 -4
  33. data/spec/integration_spec.rb +2 -2
  34. data/spec/matcher_spec.rb +29 -29
  35. data/spec/publish_spec.rb +62 -38
  36. data/spec/publisher_spec.rb +7 -0
  37. data/spec/rider_spec.rb +14 -66
  38. data/spec/spec_helper.rb +25 -28
  39. data/spec/subscriber_spec.rb +194 -176
  40. data/spec/subscription_list_spec.rb +1 -1
  41. data/spec/subscription_spec.rb +1 -1
  42. data/spec/worker_spec.rb +32 -0
  43. metadata +75 -91
  44. data/lib/resque_bus/application.rb +0 -115
  45. data/lib/resque_bus/dispatch.rb +0 -61
  46. data/lib/resque_bus/driver.rb +0 -30
  47. data/lib/resque_bus/heartbeat.rb +0 -106
  48. data/lib/resque_bus/local.rb +0 -34
  49. data/lib/resque_bus/matcher.rb +0 -81
  50. data/lib/resque_bus/publisher.rb +0 -12
  51. data/lib/resque_bus/rider.rb +0 -54
  52. data/lib/resque_bus/subscriber.rb +0 -63
  53. data/lib/resque_bus/subscription.rb +0 -55
  54. data/lib/resque_bus/subscription_list.rb +0 -53
  55. data/lib/resque_bus/task_manager.rb +0 -52
  56. data/lib/resque_bus/util.rb +0 -42
  57. data/lib/tasks/resquebus.rake +0 -2
  58. data/spec/publish_at_spec.rb +0 -74
  59. data/spec/redis_spec.rb +0 -13
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- module ResqueBus
3
+ module QueueBus
4
4
  describe SubscriptionList do
5
5
  describe ".from_redis" do
6
6
  it "should return from attributes" do
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- module ResqueBus
3
+ module QueueBus
4
4
  describe Subscription do
5
5
  it "should normalize the queue name" do
6
6
  Subscription.new("test", "my_event", "MyClass", {}, nil).queue_name.should == "test"
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ module QueueBus
4
+ describe Worker do
5
+ it "should proxy to given class" do
6
+ hash = {"bus_class_proxy" => "QueueBus::Driver", "ok" => true}
7
+ QueueBus::Driver.should_receive(:perform).with(hash)
8
+ QueueBus::Worker.perform(JSON.generate(hash))
9
+ end
10
+
11
+ it "should use instance" do
12
+ hash = {"bus_class_proxy" => "QueueBus::Rider", "ok" => true}
13
+ QueueBus::Rider.should_receive(:perform).with(hash)
14
+ QueueBus::Worker.new.perform(JSON.generate(hash))
15
+ end
16
+
17
+ it "should not freak out if class not there anymore" do
18
+ hash = {"bus_class_proxy" => "QueueBus::BadClass", "ok" => true}
19
+ lambda {
20
+ QueueBus::Worker.perform(JSON.generate(hash))
21
+ }.should_not raise_error
22
+ end
23
+
24
+ it "should raise error if proxy raises error" do
25
+ hash = {"bus_class_proxy" => "QueueBus::Rider", "ok" => true}
26
+ QueueBus::Rider.should_receive(:perform).with(hash).and_raise("rider crash")
27
+ lambda {
28
+ QueueBus::Worker.perform(JSON.generate(hash))
29
+ }.should raise_error
30
+ end
31
+ end
32
+ end
metadata CHANGED
@@ -1,235 +1,219 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: resque-bus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
5
- prerelease:
4
+ version: 0.7.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Brian Leonard
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-10-28 00:00:00.000000000 Z
11
+ date: 2019-07-29 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- name: resque
14
+ name: queue-bus
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.0
22
- - - <
19
+ version: '0.7'
20
+ - - "<"
23
21
  - !ruby/object:Gem::Version
24
- version: '2.0'
22
+ version: '1'
25
23
  type: :runtime
26
24
  prerelease: false
27
25
  version_requirements: !ruby/object:Gem::Requirement
28
- none: false
29
26
  requirements:
30
- - - ! '>='
27
+ - - ">="
31
28
  - !ruby/object:Gem::Version
32
- version: 1.10.0
33
- - - <
29
+ version: '0.7'
30
+ - - "<"
34
31
  - !ruby/object:Gem::Version
35
- version: '2.0'
32
+ version: '1'
36
33
  - !ruby/object:Gem::Dependency
37
- name: resque-scheduler
34
+ name: resque
38
35
  requirement: !ruby/object:Gem::Requirement
39
- none: false
40
- requirements:
41
- - - ! '>='
42
- - !ruby/object:Gem::Version
43
- version: 2.0.1
44
- type: :runtime
45
- prerelease: false
46
- version_requirements: !ruby/object:Gem::Requirement
47
- none: false
48
36
  requirements:
49
- - - ! '>='
37
+ - - ">="
50
38
  - !ruby/object:Gem::Version
51
- version: 2.0.1
52
- - !ruby/object:Gem::Dependency
53
- name: resque-retry
54
- requirement: !ruby/object:Gem::Requirement
55
- none: false
56
- requirements:
57
- - - ! '>='
39
+ version: 1.10.0
40
+ - - "<"
58
41
  - !ruby/object:Gem::Version
59
- version: '0'
42
+ version: '2.0'
60
43
  type: :runtime
61
44
  prerelease: false
62
45
  version_requirements: !ruby/object:Gem::Requirement
63
- none: false
64
46
  requirements:
65
- - - ! '>='
47
+ - - ">="
66
48
  - !ruby/object:Gem::Version
67
- version: '0'
49
+ version: 1.10.0
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '2.0'
68
53
  - !ruby/object:Gem::Dependency
69
- name: redis-namespace
54
+ name: resque-scheduler
70
55
  requirement: !ruby/object:Gem::Requirement
71
- none: false
72
56
  requirements:
73
- - - ! '>='
57
+ - - ">="
74
58
  - !ruby/object:Gem::Version
75
- version: '0'
59
+ version: 2.0.1
76
60
  type: :runtime
77
61
  prerelease: false
78
62
  version_requirements: !ruby/object:Gem::Requirement
79
- none: false
80
63
  requirements:
81
- - - ! '>='
64
+ - - ">="
82
65
  - !ruby/object:Gem::Version
83
- version: '0'
66
+ version: 2.0.1
84
67
  - !ruby/object:Gem::Dependency
85
- name: redis
68
+ name: resque-retry
86
69
  requirement: !ruby/object:Gem::Requirement
87
- none: false
88
70
  requirements:
89
- - - ! '>='
71
+ - - ">="
90
72
  - !ruby/object:Gem::Version
91
73
  version: '0'
92
74
  type: :runtime
93
75
  prerelease: false
94
76
  version_requirements: !ruby/object:Gem::Requirement
95
- none: false
96
77
  requirements:
97
- - - ! '>='
78
+ - - ">="
98
79
  - !ruby/object:Gem::Version
99
80
  version: '0'
100
81
  - !ruby/object:Gem::Dependency
101
82
  name: rspec
102
83
  requirement: !ruby/object:Gem::Requirement
103
- none: false
104
84
  requirements:
105
- - - ! '>='
85
+ - - ">="
106
86
  - !ruby/object:Gem::Version
107
87
  version: '0'
108
88
  type: :development
109
89
  prerelease: false
110
90
  version_requirements: !ruby/object:Gem::Requirement
111
- none: false
112
91
  requirements:
113
- - - ! '>='
92
+ - - ">="
114
93
  - !ruby/object:Gem::Version
115
94
  version: '0'
116
95
  - !ruby/object:Gem::Dependency
117
96
  name: timecop
118
97
  requirement: !ruby/object:Gem::Requirement
119
- none: false
120
98
  requirements:
121
- - - ! '>='
99
+ - - ">="
122
100
  - !ruby/object:Gem::Version
123
101
  version: '0'
124
102
  type: :development
125
103
  prerelease: false
126
104
  version_requirements: !ruby/object:Gem::Requirement
127
- none: false
128
105
  requirements:
129
- - - ! '>='
106
+ - - ">="
130
107
  - !ruby/object:Gem::Version
131
108
  version: '0'
132
109
  - !ruby/object:Gem::Dependency
133
110
  name: json_pure
134
111
  requirement: !ruby/object:Gem::Requirement
135
- none: false
136
112
  requirements:
137
- - - ! '>='
113
+ - - ">="
138
114
  - !ruby/object:Gem::Version
139
115
  version: '0'
140
116
  type: :development
141
117
  prerelease: false
142
118
  version_requirements: !ruby/object:Gem::Requirement
143
- none: false
144
119
  requirements:
145
- - - ! '>='
120
+ - - ">="
146
121
  - !ruby/object:Gem::Version
147
122
  version: '0'
148
- description: ! "A simple event bus on top of Resque.\n Publish and subscribe to
149
- events as they occur through a queue."
123
+ description: A simple event bus on top of Resque. Publish and subscribe to events
124
+ as they occur through a queue.
150
125
  email:
151
126
  - brian@bleonard.com
152
127
  executables: []
153
128
  extensions: []
154
129
  extra_rdoc_files: []
155
130
  files:
156
- - .gitignore
157
- - .rbenv-version
158
- - .rvmrc
131
+ - ".gitignore"
132
+ - ".rbenv-version"
133
+ - ".rspec"
134
+ - ".rvmrc"
135
+ - CHANGELOG.md
159
136
  - Gemfile
160
137
  - MIT-LICENSE
161
138
  - README.mdown
162
139
  - Rakefile
163
140
  - lib/resque-bus.rb
164
- - lib/resque_bus/application.rb
165
- - lib/resque_bus/dispatch.rb
166
- - lib/resque_bus/driver.rb
167
- - lib/resque_bus/heartbeat.rb
168
- - lib/resque_bus/local.rb
169
- - lib/resque_bus/matcher.rb
170
- - lib/resque_bus/publisher.rb
171
- - lib/resque_bus/rider.rb
141
+ - lib/resque_bus/adapter.rb
142
+ - lib/resque_bus/compatibility/deprecated.rb
143
+ - lib/resque_bus/compatibility/driver.rb
144
+ - lib/resque_bus/compatibility/heartbeat.rb
145
+ - lib/resque_bus/compatibility/publisher.rb
146
+ - lib/resque_bus/compatibility/rider.rb
147
+ - lib/resque_bus/compatibility/subscriber.rb
148
+ - lib/resque_bus/compatibility/task_manager.rb
172
149
  - lib/resque_bus/server.rb
173
150
  - lib/resque_bus/server/views/bus.erb
174
- - lib/resque_bus/subscriber.rb
175
- - lib/resque_bus/subscription.rb
176
- - lib/resque_bus/subscription_list.rb
177
- - lib/resque_bus/task_manager.rb
178
151
  - lib/resque_bus/tasks.rb
179
- - lib/resque_bus/util.rb
180
152
  - lib/resque_bus/version.rb
181
- - lib/tasks/resquebus.rake
182
153
  - resque-bus.gemspec
154
+ - spec/adapter/compatibility_spec.rb
155
+ - spec/adapter/integration_spec.rb
156
+ - spec/adapter/publish_at_spec.rb
157
+ - spec/adapter/retry_spec.rb
158
+ - spec/adapter/support.rb
159
+ - spec/adapter_spec.rb
183
160
  - spec/application_spec.rb
161
+ - spec/config_spec.rb
184
162
  - spec/dispatch_spec.rb
185
163
  - spec/driver_spec.rb
186
164
  - spec/heartbeat_spec.rb
187
165
  - spec/integration_spec.rb
188
166
  - spec/matcher_spec.rb
189
- - spec/publish_at_spec.rb
190
167
  - spec/publish_spec.rb
191
- - spec/redis_spec.rb
168
+ - spec/publisher_spec.rb
192
169
  - spec/rider_spec.rb
193
170
  - spec/spec_helper.rb
194
171
  - spec/subscriber_spec.rb
195
172
  - spec/subscription_list_spec.rb
196
173
  - spec/subscription_spec.rb
197
- homepage: ''
174
+ - spec/worker_spec.rb
175
+ homepage: https://github.com/queue-bus/resque-bus
198
176
  licenses: []
177
+ metadata: {}
199
178
  post_install_message:
200
179
  rdoc_options: []
201
180
  require_paths:
202
181
  - lib
203
182
  required_ruby_version: !ruby/object:Gem::Requirement
204
- none: false
205
183
  requirements:
206
- - - ! '>='
184
+ - - ">="
207
185
  - !ruby/object:Gem::Version
208
186
  version: '0'
209
187
  required_rubygems_version: !ruby/object:Gem::Requirement
210
- none: false
211
188
  requirements:
212
- - - ! '>='
189
+ - - ">="
213
190
  - !ruby/object:Gem::Version
214
191
  version: '0'
215
192
  requirements: []
216
- rubyforge_project: resque-bus
217
- rubygems_version: 1.8.23
193
+ rubyforge_project:
194
+ rubygems_version: 2.7.6
218
195
  signing_key:
219
- specification_version: 3
196
+ specification_version: 4
220
197
  summary: A simple event bus on top of Resque
221
198
  test_files:
199
+ - spec/adapter/compatibility_spec.rb
200
+ - spec/adapter/integration_spec.rb
201
+ - spec/adapter/publish_at_spec.rb
202
+ - spec/adapter/retry_spec.rb
203
+ - spec/adapter/support.rb
204
+ - spec/adapter_spec.rb
222
205
  - spec/application_spec.rb
206
+ - spec/config_spec.rb
223
207
  - spec/dispatch_spec.rb
224
208
  - spec/driver_spec.rb
225
209
  - spec/heartbeat_spec.rb
226
210
  - spec/integration_spec.rb
227
211
  - spec/matcher_spec.rb
228
- - spec/publish_at_spec.rb
229
212
  - spec/publish_spec.rb
230
- - spec/redis_spec.rb
213
+ - spec/publisher_spec.rb
231
214
  - spec/rider_spec.rb
232
215
  - spec/spec_helper.rb
233
216
  - spec/subscriber_spec.rb
234
217
  - spec/subscription_list_spec.rb
235
218
  - spec/subscription_spec.rb
219
+ - spec/worker_spec.rb
@@ -1,115 +0,0 @@
1
- module ResqueBus
2
- class Application
3
-
4
- class << self
5
-
6
- def all
7
- # note the names arent the same as we started with
8
- ResqueBus.redis.smembers(app_list_key).collect{ |val| new(val) }
9
- end
10
- end
11
-
12
- attr_reader :app_key, :redis_key
13
-
14
-
15
- def initialize(app_key)
16
- @app_key = self.class.normalize(app_key)
17
- @redis_key = "#{self.class.app_single_key}:#{@app_key}"
18
- # raise error if only other chars
19
- raise "Invalid application name" if @app_key.gsub("_", "").size == 0
20
- end
21
-
22
- def subscribe(subscription_list, log = false)
23
- @subscriptions = nil
24
-
25
- if subscription_list == nil || subscription_list.size == 0
26
- unsubscribe
27
- return true
28
- end
29
-
30
- temp_key = "temp_#{redis_key}:#{rand(999999999)}"
31
-
32
- redis_hash = subscription_list.to_redis
33
- redis_hash.each do |key, hash|
34
- ResqueBus.redis.hset(temp_key, key, Resque.encode(hash))
35
- end
36
-
37
- # make it the real one
38
- ResqueBus.redis.rename(temp_key, redis_key)
39
- ResqueBus.redis.sadd(self.class.app_list_key, app_key)
40
-
41
- if log
42
- puts ResqueBus.redis.hgetall(redis_key).inspect
43
- end
44
-
45
- true
46
- end
47
-
48
- def unsubscribe
49
- # TODO: clean up known queues?
50
- ResqueBus.redis.srem(self.class.app_list_key, app_key)
51
- ResqueBus.redis.del(redis_key)
52
- end
53
-
54
- def no_connect_queue_names_for(subscriptions)
55
- out = []
56
- subscriptions.all.each do |sub|
57
- queue = "#{app_key}_#{sub.queue_name}"
58
- out << queue
59
- end
60
- out << "#{app_key}_default"
61
- out.uniq
62
- end
63
-
64
- def subscription_matches(attributes)
65
- out = subscriptions.matches(attributes)
66
- out.each do |sub|
67
- sub.app_key = self.app_key
68
- end
69
- out
70
- end
71
-
72
- def event_display_tuples
73
- out = []
74
- subscriptions.all.each do |sub|
75
- out << [sub.class_name, sub.queue_name, sub.matcher.filters]
76
- end
77
- out
78
- end
79
-
80
- protected
81
-
82
- def self.normalize(val)
83
- val.to_s.gsub(/\W/, "_").downcase
84
- end
85
-
86
- def self.app_list_key
87
- "resquebus_apps"
88
- end
89
-
90
- def self.app_single_key
91
- "resquebus_app"
92
- end
93
-
94
- def event_queues
95
- ResqueBus.redis.hgetall(redis_key)
96
- end
97
-
98
- def subscriptions
99
- @subscriptions ||= SubscriptionList.from_redis(read_redis_hash)
100
- end
101
-
102
- def read_redis_hash
103
- out = {}
104
- ResqueBus.redis.hgetall(redis_key).each do |key, val|
105
- begin
106
- out[key] = Resque.decode(val)
107
- rescue Resque::Helpers::DecodeException
108
- out[key] = val
109
- end
110
- end
111
- out
112
- end
113
-
114
- end
115
- end