promiscuous 0.5.1 → 0.6
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/README.md +4 -8
- data/lib/promiscuous.rb +8 -1
- data/lib/promiscuous/publisher.rb +2 -1
- data/lib/promiscuous/publisher/{generic.rb → active_record.rb} +4 -4
- data/lib/promiscuous/publisher/{mongoid/root.rb → model.rb} +5 -1
- data/lib/promiscuous/publisher/mongoid.rb +15 -4
- data/lib/promiscuous/subscriber.rb +2 -1
- data/lib/promiscuous/subscriber/active_record.rb +23 -0
- data/lib/promiscuous/subscriber/active_record/upsert.rb +12 -0
- data/lib/promiscuous/subscriber/model.rb +38 -0
- data/lib/promiscuous/subscriber/mongoid.rb +15 -4
- data/lib/promiscuous/subscriber/mongoid/root.rb +3 -32
- data/lib/promiscuous/version.rb +1 -1
- data/lib/promiscuous/worker.rb +7 -5
- metadata +8 -5
data/README.md
CHANGED
@@ -4,7 +4,7 @@ Promiscuous
|
|
4
4
|
[](https://secure.travis-ci.org/crowdtap/promiscuous)
|
5
5
|
|
6
6
|
Promiscuous offers an automatic way of propagating your model data across one or
|
7
|
-
more applications.
|
7
|
+
more applications. It supports Mongoid2, Mongoid3 and ActiveRecord.
|
8
8
|
It uses [RabbitMQ](http://www.rabbitmq.com/).
|
9
9
|
|
10
10
|
Usage
|
@@ -73,7 +73,8 @@ WARNING/TODO
|
|
73
73
|
------------
|
74
74
|
|
75
75
|
Promiscuous does **not** handle:
|
76
|
-
-
|
76
|
+
- ActiveRecord polymorphism.
|
77
|
+
- Any of the Mongoid atomic operatiors, such as inc, or add_to_set.
|
77
78
|
- Association magic. Example:
|
78
79
|
```ruby
|
79
80
|
# This will NOT replicate particiation_ids:
|
@@ -118,12 +119,7 @@ Compatibility
|
|
118
119
|
|
119
120
|
Promiscuous is tested against MRI 1.9.2 and 1.9.3.
|
120
121
|
|
121
|
-
|
122
|
-
|
123
|
-
Acknowledgments
|
124
|
-
----------------
|
125
|
-
|
126
|
-
Inspired by [Service-Oriented Design with Ruby and Rails](http://www.amazon.com/Service-Oriented-Design-Addison-Wesley-Professional-Series/dp/0321659368)
|
122
|
+
ActiveRecord, Mongoid 2.4.x and Mongoid 3.0.x are supported.
|
127
123
|
|
128
124
|
License
|
129
125
|
-------
|
data/lib/promiscuous.rb
CHANGED
@@ -2,9 +2,16 @@ require 'active_support/core_ext'
|
|
2
2
|
require 'promiscuous/config'
|
3
3
|
require 'promiscuous/amqp'
|
4
4
|
require 'promiscuous/loader'
|
5
|
+
require 'promiscuous/railtie' if defined?(Rails)
|
6
|
+
|
7
|
+
begin
|
8
|
+
require 'mongoid'
|
9
|
+
require 'active_record'
|
10
|
+
rescue LoadError
|
11
|
+
end
|
12
|
+
|
5
13
|
require 'promiscuous/publisher'
|
6
14
|
require 'promiscuous/subscriber'
|
7
|
-
require 'promiscuous/railtie' if defined?(Rails)
|
8
15
|
|
9
16
|
module Promiscuous
|
10
17
|
class << self
|
@@ -1,14 +1,14 @@
|
|
1
|
-
require 'promiscuous/publisher/class_bind'
|
2
1
|
require 'promiscuous/publisher/base'
|
2
|
+
require 'promiscuous/publisher/class_bind'
|
3
3
|
require 'promiscuous/publisher/attributes'
|
4
|
-
require 'promiscuous/publisher/polymorphic'
|
5
4
|
require 'promiscuous/publisher/amqp'
|
6
5
|
require 'promiscuous/publisher/envelope'
|
6
|
+
require 'promiscuous/publisher/model'
|
7
7
|
|
8
|
-
class Promiscuous::Publisher::
|
8
|
+
class Promiscuous::Publisher::ActiveRecord < Promiscuous::Publisher::Base
|
9
9
|
include Promiscuous::Publisher::ClassBind
|
10
10
|
include Promiscuous::Publisher::Attributes
|
11
|
-
include Promiscuous::Publisher::Polymorphic
|
12
11
|
include Promiscuous::Publisher::AMQP
|
13
12
|
include Promiscuous::Publisher::Envelope
|
13
|
+
include Promiscuous::Publisher::Model
|
14
14
|
end
|
@@ -1,5 +1,8 @@
|
|
1
|
-
|
1
|
+
require 'promiscuous/publisher/envelope'
|
2
|
+
|
3
|
+
module Promiscuous::Publisher::Model
|
2
4
|
extend ActiveSupport::Concern
|
5
|
+
include Promiscuous::Publisher::Envelope
|
3
6
|
|
4
7
|
def operation
|
5
8
|
options[:operation]
|
@@ -29,3 +32,4 @@ module Promiscuous::Publisher::Mongoid::Root
|
|
29
32
|
end
|
30
33
|
end
|
31
34
|
end
|
35
|
+
|
@@ -1,6 +1,17 @@
|
|
1
|
-
require 'promiscuous/publisher/
|
1
|
+
require 'promiscuous/publisher/base'
|
2
|
+
require 'promiscuous/publisher/class_bind'
|
3
|
+
require 'promiscuous/publisher/attributes'
|
4
|
+
require 'promiscuous/publisher/polymorphic'
|
5
|
+
require 'promiscuous/publisher/amqp'
|
6
|
+
require 'promiscuous/publisher/envelope'
|
7
|
+
|
8
|
+
class Promiscuous::Publisher::Mongoid < Promiscuous::Publisher::Base
|
9
|
+
include Promiscuous::Publisher::ClassBind
|
10
|
+
include Promiscuous::Publisher::Attributes
|
11
|
+
include Promiscuous::Publisher::Polymorphic
|
12
|
+
include Promiscuous::Publisher::AMQP
|
13
|
+
include Promiscuous::Publisher::Envelope
|
2
14
|
|
3
|
-
class Promiscuous::Publisher::Mongoid < Promiscuous::Publisher::Generic
|
4
15
|
def self.publish(options)
|
5
16
|
return super if options[:mongoid_loaded]
|
6
17
|
|
@@ -8,8 +19,8 @@ class Promiscuous::Publisher::Mongoid < Promiscuous::Publisher::Generic
|
|
8
19
|
require 'promiscuous/publisher/mongoid/embedded'
|
9
20
|
include Promiscuous::Publisher::Mongoid::Embedded
|
10
21
|
else
|
11
|
-
require 'promiscuous/publisher/
|
12
|
-
include Promiscuous::Publisher::
|
22
|
+
require 'promiscuous/publisher/model'
|
23
|
+
include Promiscuous::Publisher::Model
|
13
24
|
end
|
14
25
|
|
15
26
|
self.publish(options.merge(:mongoid_loaded => true))
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module Promiscuous::Subscriber
|
2
|
+
require 'promiscuous/subscriber/active_record' if defined?(ActiveRecord)
|
3
|
+
require 'promiscuous/subscriber/mongoid' if defined?(Mongoid)
|
2
4
|
require 'promiscuous/subscriber/error'
|
3
|
-
require 'promiscuous/subscriber/mongoid'
|
4
5
|
require 'promiscuous/subscriber/amqp'
|
5
6
|
|
6
7
|
mattr_accessor :subscribers
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'promiscuous/subscriber/base'
|
2
|
+
require 'promiscuous/subscriber/custom_class'
|
3
|
+
require 'promiscuous/subscriber/attributes'
|
4
|
+
require 'promiscuous/subscriber/amqp'
|
5
|
+
require 'promiscuous/subscriber/model'
|
6
|
+
|
7
|
+
class Promiscuous::Subscriber::ActiveRecord < Promiscuous::Subscriber::Base
|
8
|
+
include Promiscuous::Subscriber::CustomClass
|
9
|
+
include Promiscuous::Subscriber::Attributes
|
10
|
+
include Promiscuous::Subscriber::AMQP
|
11
|
+
include Promiscuous::Subscriber::Model
|
12
|
+
|
13
|
+
def self.subscribe(options)
|
14
|
+
return super if options[:active_record_loaded]
|
15
|
+
|
16
|
+
if options[:upsert]
|
17
|
+
require 'promiscuous/subscriber/active_record/upsert'
|
18
|
+
include Promiscuous::Subscriber::ActiveRecord::Upsert
|
19
|
+
end
|
20
|
+
|
21
|
+
self.subscribe(options.merge(:active_record_loaded => true))
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Promiscuous::Subscriber::ActiveRecord::Upsert
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
def fetch
|
5
|
+
begin
|
6
|
+
super
|
7
|
+
rescue ActiveRecord::RecordNotFound
|
8
|
+
Promiscuous.warn "[receive] upserting #{payload}"
|
9
|
+
klass.new.tap { |o| o.id = id }
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'promiscuous/subscriber/envelope'
|
2
|
+
|
3
|
+
module Promiscuous::Subscriber::Model
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
include Promiscuous::Subscriber::Envelope
|
6
|
+
|
7
|
+
def fetch
|
8
|
+
case operation
|
9
|
+
when :create
|
10
|
+
klass.new.tap { |o| o.id = id }
|
11
|
+
when :update
|
12
|
+
klass.find(id)
|
13
|
+
when :destroy
|
14
|
+
klass.find(id)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def process_attributes?
|
19
|
+
operation != :destroy
|
20
|
+
end
|
21
|
+
|
22
|
+
def process
|
23
|
+
super
|
24
|
+
case operation
|
25
|
+
when :create
|
26
|
+
instance.save!
|
27
|
+
when :update
|
28
|
+
instance.save!
|
29
|
+
when :destroy
|
30
|
+
instance.destroy
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
included do
|
35
|
+
use_payload_attribute :id
|
36
|
+
use_payload_attribute :operation, :symbolize => true
|
37
|
+
end
|
38
|
+
end
|
@@ -1,6 +1,17 @@
|
|
1
|
-
require 'promiscuous/subscriber/
|
1
|
+
require 'promiscuous/subscriber/base'
|
2
|
+
require 'promiscuous/subscriber/custom_class'
|
3
|
+
require 'promiscuous/subscriber/attributes'
|
4
|
+
require 'promiscuous/subscriber/polymorphic'
|
5
|
+
require 'promiscuous/subscriber/amqp'
|
6
|
+
require 'promiscuous/subscriber/envelope'
|
7
|
+
|
8
|
+
class Promiscuous::Subscriber::Mongoid < Promiscuous::Subscriber::Base
|
9
|
+
include Promiscuous::Subscriber::CustomClass
|
10
|
+
include Promiscuous::Subscriber::Attributes
|
11
|
+
include Promiscuous::Subscriber::Polymorphic
|
12
|
+
include Promiscuous::Subscriber::AMQP
|
13
|
+
include Promiscuous::Subscriber::Envelope
|
2
14
|
|
3
|
-
class Promiscuous::Subscriber::Mongoid < Promiscuous::Subscriber::Generic
|
4
15
|
def self.subscribe(options)
|
5
16
|
return super if options[:mongoid_loaded]
|
6
17
|
|
@@ -11,8 +22,8 @@ class Promiscuous::Subscriber::Mongoid < Promiscuous::Subscriber::Generic
|
|
11
22
|
require 'promiscuous/subscriber/mongoid/embedded'
|
12
23
|
include Promiscuous::Subscriber::Mongoid::Embedded
|
13
24
|
else
|
14
|
-
require 'promiscuous/subscriber/
|
15
|
-
include Promiscuous::Subscriber::
|
25
|
+
require 'promiscuous/subscriber/model'
|
26
|
+
include Promiscuous::Subscriber::Model
|
16
27
|
|
17
28
|
if options[:upsert]
|
18
29
|
require 'promiscuous/subscriber/mongoid/upsert'
|
@@ -1,35 +1,6 @@
|
|
1
|
+
require 'promiscuous/publisher/model'
|
2
|
+
|
1
3
|
module Promiscuous::Subscriber::Mongoid::Root
|
2
4
|
extend ActiveSupport::Concern
|
3
|
-
|
4
|
-
def fetch
|
5
|
-
case operation
|
6
|
-
when :create
|
7
|
-
klass.new.tap { |o| o.id = id }
|
8
|
-
when :update
|
9
|
-
klass.find(id)
|
10
|
-
when :destroy
|
11
|
-
klass.find(id)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
def process_attributes?
|
16
|
-
operation != :destroy
|
17
|
-
end
|
18
|
-
|
19
|
-
def process
|
20
|
-
super
|
21
|
-
case operation
|
22
|
-
when :create
|
23
|
-
instance.save!
|
24
|
-
when :update
|
25
|
-
instance.save!
|
26
|
-
when :destroy
|
27
|
-
instance.destroy
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
included do
|
32
|
-
use_payload_attribute :id
|
33
|
-
use_payload_attribute :operation, :symbolize => true
|
34
|
-
end
|
5
|
+
include Promiscuous::Subscriber::Model
|
35
6
|
end
|
data/lib/promiscuous/version.rb
CHANGED
data/lib/promiscuous/worker.rb
CHANGED
@@ -4,11 +4,13 @@ module Promiscuous
|
|
4
4
|
stop = false
|
5
5
|
lock = Mutex.new
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
7
|
+
unless ENV['TEST_ENV']
|
8
|
+
%w(SIGTERM SIGINT).each do |signal|
|
9
|
+
Signal.trap(signal) do
|
10
|
+
lock.synchronize do
|
11
|
+
stop = true
|
12
|
+
EM.stop
|
13
|
+
end
|
12
14
|
end
|
13
15
|
end
|
14
16
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: promiscuous
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: '0.6'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-08-
|
13
|
+
date: 2012-08-13 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: mongoid
|
@@ -92,7 +92,7 @@ dependencies:
|
|
92
92
|
- - ! '>='
|
93
93
|
- !ruby/object:Gem::Version
|
94
94
|
version: '0'
|
95
|
-
description: Replicate
|
95
|
+
description: Replicate your Mongoid/ActiveRecord models across your applications
|
96
96
|
email:
|
97
97
|
- nicolas@viennot.biz
|
98
98
|
- kareem@doubleonemedia.com
|
@@ -104,9 +104,9 @@ files:
|
|
104
104
|
- lib/promiscuous/publisher/class_bind.rb
|
105
105
|
- lib/promiscuous/publisher/attributes.rb
|
106
106
|
- lib/promiscuous/publisher/mongoid.rb
|
107
|
-
- lib/promiscuous/publisher/generic.rb
|
108
|
-
- lib/promiscuous/publisher/mongoid/root.rb
|
109
107
|
- lib/promiscuous/publisher/mongoid/embedded.rb
|
108
|
+
- lib/promiscuous/publisher/active_record.rb
|
109
|
+
- lib/promiscuous/publisher/model.rb
|
110
110
|
- lib/promiscuous/publisher/envelope.rb
|
111
111
|
- lib/promiscuous/publisher/amqp.rb
|
112
112
|
- lib/promiscuous/publisher/base.rb
|
@@ -116,12 +116,15 @@ files:
|
|
116
116
|
- lib/promiscuous/amqp/bunny.rb
|
117
117
|
- lib/promiscuous/publisher.rb
|
118
118
|
- lib/promiscuous/subscriber/attributes.rb
|
119
|
+
- lib/promiscuous/subscriber/active_record/upsert.rb
|
119
120
|
- lib/promiscuous/subscriber/mongoid.rb
|
120
121
|
- lib/promiscuous/subscriber/error.rb
|
121
122
|
- lib/promiscuous/subscriber/generic.rb
|
122
123
|
- lib/promiscuous/subscriber/mongoid/root.rb
|
123
124
|
- lib/promiscuous/subscriber/mongoid/embedded.rb
|
124
125
|
- lib/promiscuous/subscriber/mongoid/upsert.rb
|
126
|
+
- lib/promiscuous/subscriber/active_record.rb
|
127
|
+
- lib/promiscuous/subscriber/model.rb
|
125
128
|
- lib/promiscuous/subscriber/envelope.rb
|
126
129
|
- lib/promiscuous/subscriber/amqp.rb
|
127
130
|
- lib/promiscuous/subscriber/custom_class.rb
|