promiscuous 0.7.6 → 0.8
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
CHANGED
@@ -45,8 +45,9 @@ Promiscuous::AMQP.configure(:app => 'sniper',
|
|
45
45
|
# subscriber
|
46
46
|
class ModelSubscriber < Promiscuous::Subscriber::Mongoid
|
47
47
|
subscribe :from => 'crowdtap/model',
|
48
|
-
:
|
49
|
-
:
|
48
|
+
:attributes => [:field_1, :field_2, :field_3],
|
49
|
+
:class => Model, # optional
|
50
|
+
:foreign_key => :publisher_id # optional
|
50
51
|
end
|
51
52
|
```
|
52
53
|
|
@@ -83,7 +84,6 @@ WARNING/TODO
|
|
83
84
|
Promiscuous does **not** handle:
|
84
85
|
- ActiveRecord polymorphism.
|
85
86
|
- Any of the Mongoid atomic operatiors, such as inc, or add_to_set.
|
86
|
-
- Mixing databases (ActiveRecord <=> Mongoid) because of the id format mismatch.
|
87
87
|
- Association magic. Example:
|
88
88
|
```ruby
|
89
89
|
# This will NOT replicate particiation_ids:
|
@@ -2,10 +2,12 @@ module Promiscuous::Common::Options
|
|
2
2
|
extend ActiveSupport::Concern
|
3
3
|
|
4
4
|
included do
|
5
|
-
class_attribute :options, :options_mappings,
|
5
|
+
class_attribute :raw_options, :options, :options_mappings,
|
6
6
|
:instance_reader => false,
|
7
7
|
:instance_writer => false
|
8
|
-
self.
|
8
|
+
self.raw_options = {}
|
9
|
+
self.options = {}
|
10
|
+
self.options_mappings = {}
|
9
11
|
end
|
10
12
|
|
11
13
|
module ClassMethods
|
@@ -32,9 +34,14 @@ module Promiscuous::Common::Options
|
|
32
34
|
if instance_reader
|
33
35
|
define_method("#{attr_alias}") { self.class.__send__("#{attr_alias}") }
|
34
36
|
end
|
37
|
+
|
38
|
+
self.__send__("#{attr_alias}=", raw_options[attr]) if raw_options[attr]
|
35
39
|
end
|
36
40
|
|
37
41
|
def load_options(options)
|
42
|
+
self.raw_options = self.raw_options.dup
|
43
|
+
self.raw_options.merge!(options)
|
44
|
+
|
38
45
|
options.each do |attr, value|
|
39
46
|
attr_alias = self.options_mappings[attr]
|
40
47
|
self.__send__("#{attr_alias}=", value) if attr_alias
|
@@ -5,9 +5,10 @@ module Promiscuous::Subscriber::Lint::Attributes
|
|
5
5
|
super
|
6
6
|
|
7
7
|
instance = subscriber.klass.new
|
8
|
-
subscriber.attributes
|
9
|
-
|
10
|
-
|
8
|
+
attributes = subscriber.attributes
|
9
|
+
attributes += [subscriber.foreign_key] if subscriber.foreign_key
|
10
|
+
|
11
|
+
attributes.each { |attr| instance.respond_to?("#{attr}=") or instance.__send__("#{attr}=") }
|
11
12
|
|
12
13
|
if check_publisher
|
13
14
|
missing_attributes = subscriber.attributes - publisher.attributes
|
@@ -2,17 +2,38 @@ module Promiscuous::Subscriber::Model
|
|
2
2
|
extend ActiveSupport::Concern
|
3
3
|
include Promiscuous::Subscriber::Envelope
|
4
4
|
|
5
|
-
def
|
6
|
-
|
7
|
-
|
5
|
+
def fetch_new
|
6
|
+
if foreign_key
|
7
|
+
klass.new(foreign_key => id)
|
8
|
+
else
|
8
9
|
klass.new.tap { |o| o.id = id }
|
9
|
-
|
10
|
-
|
11
|
-
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def fetch_existing
|
14
|
+
if foreign_key
|
15
|
+
if klass.respond_to?("find_by_#{foreign_key}!")
|
16
|
+
klass.__send__("find_by_#{foreign_key}!", id)
|
17
|
+
elsif klass.respond_to?("find_by")
|
18
|
+
klass.find_by(foreign_key => id)
|
19
|
+
else
|
20
|
+
record = klass.where(foreign_key => id).first
|
21
|
+
raise self.class.missing_record_exception.new(klass, id) if record.nil?
|
22
|
+
record
|
23
|
+
end
|
24
|
+
else
|
12
25
|
klass.find(id)
|
13
26
|
end
|
14
27
|
end
|
15
28
|
|
29
|
+
def fetch
|
30
|
+
case operation
|
31
|
+
when :create then fetch_new
|
32
|
+
when :update then fetch_existing
|
33
|
+
when :destroy then fetch_existing
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
16
37
|
def process_attributes?
|
17
38
|
operation != :destroy
|
18
39
|
end
|
@@ -20,16 +41,15 @@ module Promiscuous::Subscriber::Model
|
|
20
41
|
def process
|
21
42
|
super
|
22
43
|
case operation
|
23
|
-
when :create
|
24
|
-
|
25
|
-
when :
|
26
|
-
instance.save!
|
27
|
-
when :destroy
|
28
|
-
instance.destroy
|
44
|
+
when :create then instance.save!
|
45
|
+
when :update then instance.save!
|
46
|
+
when :destroy then instance.destroy
|
29
47
|
end
|
30
48
|
end
|
31
49
|
|
32
50
|
included do
|
51
|
+
use_option :foreign_key
|
52
|
+
|
33
53
|
use_payload_attribute :id
|
34
54
|
use_payload_attribute :operation, :symbolize => true
|
35
55
|
end
|
data/lib/promiscuous/version.rb
CHANGED
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.8'
|
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-28 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: mongoid
|
@@ -116,57 +116,57 @@ executables: []
|
|
116
116
|
extensions: []
|
117
117
|
extra_rdoc_files: []
|
118
118
|
files:
|
119
|
-
- lib/promiscuous/
|
120
|
-
- lib/promiscuous/
|
121
|
-
- lib/promiscuous/
|
119
|
+
- lib/promiscuous/amqp/bunny.rb
|
120
|
+
- lib/promiscuous/amqp/null.rb
|
121
|
+
- lib/promiscuous/amqp/rubyamqp.rb
|
122
|
+
- lib/promiscuous/publisher/envelope.rb
|
123
|
+
- lib/promiscuous/publisher/mongoid/embedded.rb
|
124
|
+
- lib/promiscuous/publisher/active_record.rb
|
125
|
+
- lib/promiscuous/publisher/amqp.rb
|
122
126
|
- lib/promiscuous/publisher/attributes.rb
|
127
|
+
- lib/promiscuous/publisher/base.rb
|
123
128
|
- lib/promiscuous/publisher/class.rb
|
124
|
-
- lib/promiscuous/publisher/
|
125
|
-
- lib/promiscuous/publisher/lint/attributes.rb
|
126
|
-
- lib/promiscuous/publisher/lint/class.rb
|
129
|
+
- lib/promiscuous/publisher/lint.rb
|
127
130
|
- lib/promiscuous/publisher/lint/amqp.rb
|
131
|
+
- lib/promiscuous/publisher/lint/attributes.rb
|
128
132
|
- lib/promiscuous/publisher/lint/base.rb
|
133
|
+
- lib/promiscuous/publisher/lint/class.rb
|
129
134
|
- lib/promiscuous/publisher/lint/polymorphic.rb
|
130
|
-
- lib/promiscuous/publisher/mongoid/embedded.rb
|
131
|
-
- lib/promiscuous/publisher/active_record.rb
|
132
|
-
- lib/promiscuous/publisher/model.rb
|
133
|
-
- lib/promiscuous/publisher/envelope.rb
|
134
135
|
- lib/promiscuous/publisher/mock.rb
|
135
|
-
- lib/promiscuous/publisher/
|
136
|
-
- lib/promiscuous/publisher/
|
136
|
+
- lib/promiscuous/publisher/model.rb
|
137
|
+
- lib/promiscuous/publisher/mongoid.rb
|
137
138
|
- lib/promiscuous/publisher/polymorphic.rb
|
138
|
-
- lib/promiscuous/
|
139
|
-
- lib/promiscuous/
|
140
|
-
- lib/promiscuous/
|
141
|
-
- lib/promiscuous/
|
142
|
-
- lib/promiscuous/subscriber/
|
139
|
+
- lib/promiscuous/railtie/replicate.rake
|
140
|
+
- lib/promiscuous/subscriber/envelope.rb
|
141
|
+
- lib/promiscuous/subscriber/error.rb
|
142
|
+
- lib/promiscuous/subscriber/mongoid/embedded.rb
|
143
|
+
- lib/promiscuous/subscriber/active_record.rb
|
144
|
+
- lib/promiscuous/subscriber/amqp.rb
|
143
145
|
- lib/promiscuous/subscriber/attributes.rb
|
144
146
|
- lib/promiscuous/subscriber/class.rb
|
145
|
-
- lib/promiscuous/subscriber/
|
146
|
-
- lib/promiscuous/subscriber/error.rb
|
147
|
-
- lib/promiscuous/subscriber/lint/attributes.rb
|
148
|
-
- lib/promiscuous/subscriber/lint/class.rb
|
147
|
+
- lib/promiscuous/subscriber/lint.rb
|
149
148
|
- lib/promiscuous/subscriber/lint/amqp.rb
|
150
149
|
- lib/promiscuous/subscriber/lint/base.rb
|
150
|
+
- lib/promiscuous/subscriber/lint/class.rb
|
151
151
|
- lib/promiscuous/subscriber/lint/polymorphic.rb
|
152
|
-
- lib/promiscuous/subscriber/
|
153
|
-
- lib/promiscuous/subscriber/active_record.rb
|
154
|
-
- lib/promiscuous/subscriber/upsert.rb
|
155
|
-
- lib/promiscuous/subscriber/model.rb
|
156
|
-
- lib/promiscuous/subscriber/envelope.rb
|
157
|
-
- lib/promiscuous/subscriber/amqp.rb
|
158
|
-
- lib/promiscuous/subscriber/base.rb
|
152
|
+
- lib/promiscuous/subscriber/lint/attributes.rb
|
159
153
|
- lib/promiscuous/subscriber/polymorphic.rb
|
154
|
+
- lib/promiscuous/subscriber/base.rb
|
155
|
+
- lib/promiscuous/subscriber/mongoid.rb
|
156
|
+
- lib/promiscuous/subscriber/model.rb
|
157
|
+
- lib/promiscuous/subscriber/upsert.rb
|
158
|
+
- lib/promiscuous/config.rb
|
159
|
+
- lib/promiscuous/amqp.rb
|
160
|
+
- lib/promiscuous/common.rb
|
160
161
|
- lib/promiscuous/common/lint.rb
|
161
|
-
- lib/promiscuous/common/options.rb
|
162
162
|
- lib/promiscuous/common/lint/base.rb
|
163
|
-
- lib/promiscuous/
|
164
|
-
- lib/promiscuous/railtie/replicate.rake
|
165
|
-
- lib/promiscuous/railtie.rb
|
163
|
+
- lib/promiscuous/common/options.rb
|
166
164
|
- lib/promiscuous/loader.rb
|
167
|
-
- lib/promiscuous/
|
168
|
-
- lib/promiscuous/
|
165
|
+
- lib/promiscuous/publisher.rb
|
166
|
+
- lib/promiscuous/railtie.rb
|
169
167
|
- lib/promiscuous/subscriber.rb
|
168
|
+
- lib/promiscuous/worker.rb
|
169
|
+
- lib/promiscuous/version.rb
|
170
170
|
- lib/promiscuous.rb
|
171
171
|
- README.md
|
172
172
|
homepage: http://github.com/crowdtap/promiscuous
|