promiscuous 0.90.0 → 0.91.0

Sign up to get free protection for your applications and to get access to all the features.
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