promiscuous 0.90.0 → 0.91.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 (65) hide show
  1. checksums.yaml +7 -0
  2. data/lib/promiscuous/amqp/bunny.rb +63 -36
  3. data/lib/promiscuous/amqp/fake.rb +3 -1
  4. data/lib/promiscuous/amqp/hot_bunnies.rb +26 -16
  5. data/lib/promiscuous/amqp/null.rb +1 -0
  6. data/lib/promiscuous/amqp.rb +12 -12
  7. data/lib/promiscuous/cli.rb +70 -29
  8. data/lib/promiscuous/config.rb +54 -29
  9. data/lib/promiscuous/convenience.rb +1 -1
  10. data/lib/promiscuous/dependency.rb +25 -6
  11. data/lib/promiscuous/error/connection.rb +11 -9
  12. data/lib/promiscuous/error/dependency.rb +8 -1
  13. data/lib/promiscuous/loader.rb +4 -2
  14. data/lib/promiscuous/publisher/bootstrap/connection.rb +25 -0
  15. data/lib/promiscuous/publisher/bootstrap/data.rb +127 -0
  16. data/lib/promiscuous/publisher/bootstrap/mode.rb +19 -0
  17. data/lib/promiscuous/publisher/bootstrap/status.rb +40 -0
  18. data/lib/promiscuous/publisher/bootstrap/version.rb +46 -0
  19. data/lib/promiscuous/publisher/bootstrap.rb +27 -0
  20. data/lib/promiscuous/publisher/context/base.rb +67 -0
  21. data/lib/promiscuous/{middleware.rb → publisher/context/middleware.rb} +16 -13
  22. data/lib/promiscuous/publisher/context/transaction.rb +36 -0
  23. data/lib/promiscuous/publisher/context.rb +4 -88
  24. data/lib/promiscuous/publisher/mock_generator.rb +9 -9
  25. data/lib/promiscuous/publisher/model/active_record.rb +7 -7
  26. data/lib/promiscuous/publisher/model/base.rb +29 -29
  27. data/lib/promiscuous/publisher/model/ephemeral.rb +5 -3
  28. data/lib/promiscuous/publisher/model/mock.rb +9 -5
  29. data/lib/promiscuous/publisher/model/mongoid.rb +5 -22
  30. data/lib/promiscuous/publisher/operation/active_record.rb +360 -0
  31. data/lib/promiscuous/publisher/operation/atomic.rb +167 -0
  32. data/lib/promiscuous/publisher/operation/base.rb +279 -474
  33. data/lib/promiscuous/publisher/operation/mongoid.rb +153 -145
  34. data/lib/promiscuous/publisher/operation/non_persistent.rb +28 -0
  35. data/lib/promiscuous/publisher/operation/proxy_for_query.rb +42 -0
  36. data/lib/promiscuous/publisher/operation/transaction.rb +85 -0
  37. data/lib/promiscuous/publisher/operation.rb +1 -1
  38. data/lib/promiscuous/publisher/worker.rb +7 -7
  39. data/lib/promiscuous/publisher.rb +1 -1
  40. data/lib/promiscuous/railtie.rb +20 -5
  41. data/lib/promiscuous/redis.rb +104 -56
  42. data/lib/promiscuous/subscriber/message_processor/base.rb +38 -0
  43. data/lib/promiscuous/subscriber/message_processor/bootstrap.rb +17 -0
  44. data/lib/promiscuous/subscriber/message_processor/regular.rb +192 -0
  45. data/lib/promiscuous/subscriber/message_processor.rb +4 -0
  46. data/lib/promiscuous/subscriber/model/base.rb +20 -15
  47. data/lib/promiscuous/subscriber/model/mongoid.rb +4 -4
  48. data/lib/promiscuous/subscriber/model/observer.rb +16 -2
  49. data/lib/promiscuous/subscriber/operation/base.rb +68 -0
  50. data/lib/promiscuous/subscriber/operation/bootstrap.rb +54 -0
  51. data/lib/promiscuous/subscriber/operation/regular.rb +13 -0
  52. data/lib/promiscuous/subscriber/operation.rb +3 -166
  53. data/lib/promiscuous/subscriber/worker/message.rb +61 -35
  54. data/lib/promiscuous/subscriber/worker/message_synchronizer.rb +90 -59
  55. data/lib/promiscuous/subscriber/worker/pump.rb +17 -5
  56. data/lib/promiscuous/subscriber/worker/recorder.rb +4 -1
  57. data/lib/promiscuous/subscriber/worker/runner.rb +49 -9
  58. data/lib/promiscuous/subscriber/worker/stats.rb +2 -2
  59. data/lib/promiscuous/subscriber/worker.rb +6 -0
  60. data/lib/promiscuous/subscriber.rb +1 -1
  61. data/lib/promiscuous/timer.rb +31 -18
  62. data/lib/promiscuous/version.rb +1 -1
  63. data/lib/promiscuous.rb +23 -3
  64. metadata +104 -89
  65. data/lib/promiscuous/subscriber/payload.rb +0 -34
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: promiscuous
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.90.0
5
- prerelease:
4
+ version: 0.91.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Nicolas Viennot
@@ -10,136 +9,134 @@ authors:
10
9
  autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2013-04-02 00:00:00.000000000 Z
12
+ date: 2013-11-10 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
- type: :runtime
15
+ name: activesupport
17
16
  requirement: !ruby/object:Gem::Requirement
18
17
  requirements:
19
- - - ! '>='
18
+ - - '>='
20
19
  - !ruby/object:Gem::Version
21
- version: 3.0.0
22
- none: false
20
+ version: '3'
21
+ type: :runtime
22
+ prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - ! '>='
25
+ - - '>='
26
26
  - !ruby/object:Gem::Version
27
- version: 3.0.0
28
- none: false
29
- prerelease: false
30
- name: activesupport
27
+ version: '3'
31
28
  - !ruby/object:Gem::Dependency
32
- type: :runtime
29
+ name: activemodel
33
30
  requirement: !ruby/object:Gem::Requirement
34
31
  requirements:
35
- - - ! '>='
32
+ - - '>='
36
33
  - !ruby/object:Gem::Version
37
- version: 3.0.0
38
- none: false
34
+ version: '3'
35
+ type: :runtime
36
+ prerelease: false
39
37
  version_requirements: !ruby/object:Gem::Requirement
40
38
  requirements:
41
- - - ! '>='
39
+ - - '>='
42
40
  - !ruby/object:Gem::Version
43
- version: 3.0.0
44
- none: false
45
- prerelease: false
46
- name: activemodel
41
+ version: '3'
47
42
  - !ruby/object:Gem::Dependency
48
- type: :runtime
43
+ name: bunny
49
44
  requirement: !ruby/object:Gem::Requirement
50
45
  requirements:
51
- - - ! '>='
46
+ - - '>='
52
47
  - !ruby/object:Gem::Version
53
- version: 0.9.0.pre8
54
- none: false
48
+ version: 0.10.7
49
+ type: :runtime
50
+ prerelease: false
55
51
  version_requirements: !ruby/object:Gem::Requirement
56
52
  requirements:
57
- - - ! '>='
53
+ - - '>='
58
54
  - !ruby/object:Gem::Version
59
- version: 0.9.0.pre8
60
- none: false
61
- prerelease: false
62
- name: bunny
55
+ version: 0.10.7
63
56
  - !ruby/object:Gem::Dependency
57
+ name: amq-protocol
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - '>='
61
+ - !ruby/object:Gem::Version
62
+ version: 1.8.0
64
63
  type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - '>='
68
+ - !ruby/object:Gem::Version
69
+ version: 1.8.0
70
+ - !ruby/object:Gem::Dependency
71
+ name: ruby-progressbar
65
72
  requirement: !ruby/object:Gem::Requirement
66
73
  requirements:
67
74
  - - ~>
68
75
  - !ruby/object:Gem::Version
69
- version: 1.0.2
70
- none: false
76
+ version: 1.2.0
77
+ type: :runtime
78
+ prerelease: false
71
79
  version_requirements: !ruby/object:Gem::Requirement
72
80
  requirements:
73
81
  - - ~>
74
82
  - !ruby/object:Gem::Version
75
- version: 1.0.2
76
- none: false
77
- prerelease: false
78
- name: ruby-progressbar
83
+ version: 1.2.0
79
84
  - !ruby/object:Gem::Dependency
80
- type: :runtime
85
+ name: redis
81
86
  requirement: !ruby/object:Gem::Requirement
82
87
  requirements:
83
88
  - - ~>
84
89
  - !ruby/object:Gem::Version
85
90
  version: 3.0.2
86
- none: false
91
+ type: :runtime
92
+ prerelease: false
87
93
  version_requirements: !ruby/object:Gem::Requirement
88
94
  requirements:
89
95
  - - ~>
90
96
  - !ruby/object:Gem::Version
91
97
  version: 3.0.2
92
- none: false
93
- prerelease: false
94
- name: redis
95
98
  - !ruby/object:Gem::Dependency
96
- type: :runtime
99
+ name: algorithms
97
100
  requirement: !ruby/object:Gem::Requirement
98
101
  requirements:
99
102
  - - ~>
100
103
  - !ruby/object:Gem::Version
101
104
  version: 0.6.1
102
- none: false
105
+ type: :runtime
106
+ prerelease: false
103
107
  version_requirements: !ruby/object:Gem::Requirement
104
108
  requirements:
105
109
  - - ~>
106
110
  - !ruby/object:Gem::Version
107
111
  version: 0.6.1
108
- none: false
109
- prerelease: false
110
- name: algorithms
111
112
  - !ruby/object:Gem::Dependency
112
- type: :runtime
113
+ name: fnv
113
114
  requirement: !ruby/object:Gem::Requirement
114
115
  requirements:
115
116
  - - '='
116
117
  - !ruby/object:Gem::Version
117
118
  version: 0.2.0
118
- none: false
119
+ type: :runtime
120
+ prerelease: false
119
121
  version_requirements: !ruby/object:Gem::Requirement
120
122
  requirements:
121
123
  - - '='
122
124
  - !ruby/object:Gem::Version
123
125
  version: 0.2.0
124
- none: false
125
- prerelease: false
126
- name: fnv
127
126
  - !ruby/object:Gem::Dependency
128
- type: :runtime
127
+ name: multi_json
129
128
  requirement: !ruby/object:Gem::Requirement
130
129
  requirements:
131
130
  - - ~>
132
131
  - !ruby/object:Gem::Version
133
- version: 1.7.2
134
- none: false
132
+ version: 1.8.0
133
+ type: :runtime
134
+ prerelease: false
135
135
  version_requirements: !ruby/object:Gem::Requirement
136
136
  requirements:
137
137
  - - ~>
138
138
  - !ruby/object:Gem::Version
139
- version: 1.7.2
140
- none: false
141
- prerelease: false
142
- name: multi_json
139
+ version: 1.8.0
143
140
  description: Replicate your Mongoid/ActiveRecord models across your applications
144
141
  email:
145
142
  - nicolas@viennot.biz
@@ -149,90 +146,108 @@ executables:
149
146
  extensions: []
150
147
  extra_rdoc_files: []
151
148
  files:
149
+ - lib/promiscuous/amqp/hot_bunnies.rb
152
150
  - lib/promiscuous/amqp/null.rb
153
151
  - lib/promiscuous/amqp/bunny.rb
154
152
  - lib/promiscuous/amqp/fake.rb
155
- - lib/promiscuous/amqp/hot_bunnies.rb
156
153
  - lib/promiscuous/publisher/model/active_record.rb
157
- - lib/promiscuous/publisher/model/mongoid.rb
158
154
  - lib/promiscuous/publisher/model/ephemeral.rb
159
- - lib/promiscuous/publisher/model/base.rb
160
155
  - lib/promiscuous/publisher/model/mock.rb
161
- - lib/promiscuous/publisher/operation.rb
162
- - lib/promiscuous/publisher/operation/mongoid.rb
163
- - lib/promiscuous/publisher/operation/base.rb
156
+ - lib/promiscuous/publisher/model/mongoid.rb
157
+ - lib/promiscuous/publisher/model/base.rb
164
158
  - lib/promiscuous/publisher/model.rb
165
- - lib/promiscuous/publisher/mock_generator.rb
159
+ - lib/promiscuous/publisher/operation/atomic.rb
160
+ - lib/promiscuous/publisher/operation/base.rb
161
+ - lib/promiscuous/publisher/operation/non_persistent.rb
162
+ - lib/promiscuous/publisher/operation/proxy_for_query.rb
163
+ - lib/promiscuous/publisher/operation/transaction.rb
164
+ - lib/promiscuous/publisher/operation/active_record.rb
165
+ - lib/promiscuous/publisher/operation/mongoid.rb
166
+ - lib/promiscuous/publisher/bootstrap/mode.rb
167
+ - lib/promiscuous/publisher/bootstrap/status.rb
168
+ - lib/promiscuous/publisher/bootstrap/data.rb
169
+ - lib/promiscuous/publisher/bootstrap/version.rb
170
+ - lib/promiscuous/publisher/bootstrap/connection.rb
171
+ - lib/promiscuous/publisher/bootstrap.rb
166
172
  - lib/promiscuous/publisher/context.rb
173
+ - lib/promiscuous/publisher/context/middleware.rb
174
+ - lib/promiscuous/publisher/context/transaction.rb
175
+ - lib/promiscuous/publisher/context/base.rb
176
+ - lib/promiscuous/publisher/mock_generator.rb
177
+ - lib/promiscuous/publisher/operation.rb
167
178
  - lib/promiscuous/publisher/worker.rb
168
- - lib/promiscuous/subscriber/worker/recorder.rb
169
- - lib/promiscuous/subscriber/worker/pump.rb
170
179
  - lib/promiscuous/subscriber/worker/stats.rb
171
180
  - lib/promiscuous/subscriber/worker/message_synchronizer.rb
172
181
  - lib/promiscuous/subscriber/worker/message.rb
182
+ - lib/promiscuous/subscriber/worker/recorder.rb
173
183
  - lib/promiscuous/subscriber/worker/runner.rb
184
+ - lib/promiscuous/subscriber/worker/pump.rb
174
185
  - lib/promiscuous/subscriber/model/active_record.rb
186
+ - lib/promiscuous/subscriber/model/observer.rb
175
187
  - lib/promiscuous/subscriber/model/mongoid.rb
176
188
  - lib/promiscuous/subscriber/model/base.rb
177
- - lib/promiscuous/subscriber/model/observer.rb
178
189
  - lib/promiscuous/subscriber/model.rb
179
- - lib/promiscuous/subscriber/payload.rb
180
- - lib/promiscuous/subscriber/operation.rb
181
190
  - lib/promiscuous/subscriber/worker.rb
191
+ - lib/promiscuous/subscriber/message_processor.rb
192
+ - lib/promiscuous/subscriber/message_processor/base.rb
193
+ - lib/promiscuous/subscriber/message_processor/bootstrap.rb
194
+ - lib/promiscuous/subscriber/message_processor/regular.rb
195
+ - lib/promiscuous/subscriber/operation.rb
196
+ - lib/promiscuous/subscriber/operation/regular.rb
197
+ - lib/promiscuous/subscriber/operation/bootstrap.rb
198
+ - lib/promiscuous/subscriber/operation/base.rb
182
199
  - lib/promiscuous/error/already_processed.rb
183
200
  - lib/promiscuous/error/base.rb
184
- - lib/promiscuous/error/connection.rb
185
201
  - lib/promiscuous/error/lock_unavailable.rb
202
+ - lib/promiscuous/error/lost_lock.rb
203
+ - lib/promiscuous/error/missing_context.rb
186
204
  - lib/promiscuous/error/publisher.rb
187
205
  - lib/promiscuous/error/recovery.rb
188
206
  - lib/promiscuous/error/subscriber.rb
189
- - lib/promiscuous/error/lost_lock.rb
190
- - lib/promiscuous/error/missing_context.rb
207
+ - lib/promiscuous/error/connection.rb
191
208
  - lib/promiscuous/error/dependency.rb
192
209
  - lib/promiscuous/autoload.rb
193
- - lib/promiscuous/subscriber.rb
194
210
  - lib/promiscuous/dsl.rb
195
- - lib/promiscuous/convenience.rb
196
- - lib/promiscuous/key.rb
197
- - lib/promiscuous/publisher.rb
198
211
  - lib/promiscuous/error.rb
212
+ - lib/promiscuous/key.rb
199
213
  - lib/promiscuous/sidekiq.rb
200
214
  - lib/promiscuous/resque.rb
201
- - lib/promiscuous/middleware.rb
202
- - lib/promiscuous/dependency.rb
203
- - lib/promiscuous/cli.rb
204
- - lib/promiscuous/redis.rb
215
+ - lib/promiscuous/publisher.rb
205
216
  - lib/promiscuous/timer.rb
217
+ - lib/promiscuous/convenience.rb
218
+ - lib/promiscuous/dependency.rb
219
+ - lib/promiscuous/loader.rb
220
+ - lib/promiscuous/railtie.rb
221
+ - lib/promiscuous/subscriber.rb
206
222
  - lib/promiscuous/amqp.rb
223
+ - lib/promiscuous/cli.rb
207
224
  - lib/promiscuous/config.rb
208
- - lib/promiscuous/railtie.rb
209
- - lib/promiscuous/loader.rb
225
+ - lib/promiscuous/redis.rb
210
226
  - lib/promiscuous/version.rb
211
227
  - lib/promiscuous.rb
212
228
  - bin/promiscuous
213
229
  homepage: http://github.com/crowdtap/promiscuous
214
230
  licenses: []
231
+ metadata: {}
215
232
  post_install_message:
216
233
  rdoc_options: []
217
234
  require_paths:
218
235
  - lib
219
236
  required_ruby_version: !ruby/object:Gem::Requirement
220
237
  requirements:
221
- - - ! '>='
238
+ - - '>='
222
239
  - !ruby/object:Gem::Version
223
240
  version: '0'
224
- none: false
225
241
  required_rubygems_version: !ruby/object:Gem::Requirement
226
242
  requirements:
227
- - - ! '>='
243
+ - - '>='
228
244
  - !ruby/object:Gem::Version
229
245
  version: '0'
230
- none: false
231
246
  requirements: []
232
247
  rubyforge_project:
233
- rubygems_version: 1.8.25
248
+ rubygems_version: 2.1.5
234
249
  signing_key:
235
- specification_version: 3
250
+ specification_version: 4
236
251
  summary: Model replication over RabbitMQ
237
252
  test_files: []
238
253
  has_rdoc: false
@@ -1,34 +0,0 @@
1
- class Promiscuous::Subscriber::Payload
2
- attr_accessor :message, :id, :operation, :attributes, :model
3
-
4
- def initialize(payload, message=nil)
5
- self.message = message
6
-
7
- if payload.is_a?(Hash) && payload['__amqp__']
8
- self.id = payload['id']
9
- self.operation = payload['operation'].try(:to_sym)
10
- self.attributes = payload['payload'] # TODO payload payload... not great.
11
- self.model = self.class.get_subscribed_model(payload)
12
- end
13
- end
14
-
15
- def self.get_subscribed_model(payload)
16
- # TODO test the regexp source
17
- mapping = Promiscuous::Subscriber::Model.mapping
18
- model = mapping.select { |from| payload['__amqp__'] =~ from }.values.first
19
- model = get_subscribed_subclass(model, payload) if model
20
- model
21
- end
22
-
23
- def self.get_subscribed_subclass(root_model, payload)
24
- # TODO remove 'type' (backward compatibility)
25
- received_ancestors = [payload['ancestors'] || payload['type']].flatten.compact
26
- # TODO test the ancestor chain
27
- subscriber_subclasses = [root_model] + root_model.descendants
28
- received_ancestors.each do |ancestor|
29
- model = subscriber_subclasses.select { |klass| klass.subscribe_as == ancestor }.first
30
- return model if model
31
- end
32
- root_model
33
- end
34
- end