promiscuous 0.90.0 → 0.91.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/promiscuous/amqp/bunny.rb +63 -36
- data/lib/promiscuous/amqp/fake.rb +3 -1
- data/lib/promiscuous/amqp/hot_bunnies.rb +26 -16
- data/lib/promiscuous/amqp/null.rb +1 -0
- data/lib/promiscuous/amqp.rb +12 -12
- data/lib/promiscuous/cli.rb +70 -29
- data/lib/promiscuous/config.rb +54 -29
- data/lib/promiscuous/convenience.rb +1 -1
- data/lib/promiscuous/dependency.rb +25 -6
- data/lib/promiscuous/error/connection.rb +11 -9
- data/lib/promiscuous/error/dependency.rb +8 -1
- data/lib/promiscuous/loader.rb +4 -2
- data/lib/promiscuous/publisher/bootstrap/connection.rb +25 -0
- data/lib/promiscuous/publisher/bootstrap/data.rb +127 -0
- data/lib/promiscuous/publisher/bootstrap/mode.rb +19 -0
- data/lib/promiscuous/publisher/bootstrap/status.rb +40 -0
- data/lib/promiscuous/publisher/bootstrap/version.rb +46 -0
- data/lib/promiscuous/publisher/bootstrap.rb +27 -0
- data/lib/promiscuous/publisher/context/base.rb +67 -0
- data/lib/promiscuous/{middleware.rb → publisher/context/middleware.rb} +16 -13
- data/lib/promiscuous/publisher/context/transaction.rb +36 -0
- data/lib/promiscuous/publisher/context.rb +4 -88
- data/lib/promiscuous/publisher/mock_generator.rb +9 -9
- data/lib/promiscuous/publisher/model/active_record.rb +7 -7
- data/lib/promiscuous/publisher/model/base.rb +29 -29
- data/lib/promiscuous/publisher/model/ephemeral.rb +5 -3
- data/lib/promiscuous/publisher/model/mock.rb +9 -5
- data/lib/promiscuous/publisher/model/mongoid.rb +5 -22
- data/lib/promiscuous/publisher/operation/active_record.rb +360 -0
- data/lib/promiscuous/publisher/operation/atomic.rb +167 -0
- data/lib/promiscuous/publisher/operation/base.rb +279 -474
- data/lib/promiscuous/publisher/operation/mongoid.rb +153 -145
- data/lib/promiscuous/publisher/operation/non_persistent.rb +28 -0
- data/lib/promiscuous/publisher/operation/proxy_for_query.rb +42 -0
- data/lib/promiscuous/publisher/operation/transaction.rb +85 -0
- data/lib/promiscuous/publisher/operation.rb +1 -1
- data/lib/promiscuous/publisher/worker.rb +7 -7
- data/lib/promiscuous/publisher.rb +1 -1
- data/lib/promiscuous/railtie.rb +20 -5
- data/lib/promiscuous/redis.rb +104 -56
- data/lib/promiscuous/subscriber/message_processor/base.rb +38 -0
- data/lib/promiscuous/subscriber/message_processor/bootstrap.rb +17 -0
- data/lib/promiscuous/subscriber/message_processor/regular.rb +192 -0
- data/lib/promiscuous/subscriber/message_processor.rb +4 -0
- data/lib/promiscuous/subscriber/model/base.rb +20 -15
- data/lib/promiscuous/subscriber/model/mongoid.rb +4 -4
- data/lib/promiscuous/subscriber/model/observer.rb +16 -2
- data/lib/promiscuous/subscriber/operation/base.rb +68 -0
- data/lib/promiscuous/subscriber/operation/bootstrap.rb +54 -0
- data/lib/promiscuous/subscriber/operation/regular.rb +13 -0
- data/lib/promiscuous/subscriber/operation.rb +3 -166
- data/lib/promiscuous/subscriber/worker/message.rb +61 -35
- data/lib/promiscuous/subscriber/worker/message_synchronizer.rb +90 -59
- data/lib/promiscuous/subscriber/worker/pump.rb +17 -5
- data/lib/promiscuous/subscriber/worker/recorder.rb +4 -1
- data/lib/promiscuous/subscriber/worker/runner.rb +49 -9
- data/lib/promiscuous/subscriber/worker/stats.rb +2 -2
- data/lib/promiscuous/subscriber/worker.rb +6 -0
- data/lib/promiscuous/subscriber.rb +1 -1
- data/lib/promiscuous/timer.rb +31 -18
- data/lib/promiscuous/version.rb +1 -1
- data/lib/promiscuous.rb +23 -3
- metadata +104 -89
- 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.
|
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-
|
12
|
+
date: 2013-11-10 00:00:00.000000000 Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
|
-
|
15
|
+
name: activesupport
|
17
16
|
requirement: !ruby/object:Gem::Requirement
|
18
17
|
requirements:
|
19
|
-
- -
|
18
|
+
- - '>='
|
20
19
|
- !ruby/object:Gem::Version
|
21
|
-
version: 3
|
22
|
-
|
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
|
28
|
-
none: false
|
29
|
-
prerelease: false
|
30
|
-
name: activesupport
|
27
|
+
version: '3'
|
31
28
|
- !ruby/object:Gem::Dependency
|
32
|
-
|
29
|
+
name: activemodel
|
33
30
|
requirement: !ruby/object:Gem::Requirement
|
34
31
|
requirements:
|
35
|
-
- -
|
32
|
+
- - '>='
|
36
33
|
- !ruby/object:Gem::Version
|
37
|
-
version: 3
|
38
|
-
|
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
|
44
|
-
none: false
|
45
|
-
prerelease: false
|
46
|
-
name: activemodel
|
41
|
+
version: '3'
|
47
42
|
- !ruby/object:Gem::Dependency
|
48
|
-
|
43
|
+
name: bunny
|
49
44
|
requirement: !ruby/object:Gem::Requirement
|
50
45
|
requirements:
|
51
|
-
- -
|
46
|
+
- - '>='
|
52
47
|
- !ruby/object:Gem::Version
|
53
|
-
version: 0.
|
54
|
-
|
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.
|
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
|
70
|
-
|
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
|
76
|
-
none: false
|
77
|
-
prerelease: false
|
78
|
-
name: ruby-progressbar
|
83
|
+
version: 1.2.0
|
79
84
|
- !ruby/object:Gem::Dependency
|
80
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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.
|
134
|
-
|
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.
|
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/
|
162
|
-
- lib/promiscuous/publisher/
|
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/
|
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/
|
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/
|
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/
|
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.
|
248
|
+
rubygems_version: 2.1.5
|
234
249
|
signing_key:
|
235
|
-
specification_version:
|
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
|