promiscuous 0.1 → 0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +6 -7
- data/lib/promiscuous/amqp/bunny.rb +9 -5
- data/lib/promiscuous/amqp/null.rb +4 -7
- data/lib/promiscuous/amqp/{ruby-amqp.rb → rubyamqp.rb} +13 -14
- data/lib/promiscuous/amqp.rb +4 -23
- data/lib/promiscuous/config.rb +20 -0
- data/lib/promiscuous/loader.rb +22 -0
- data/lib/promiscuous/railtie/replicate.rake +11 -5
- data/lib/promiscuous/railtie.rb +2 -16
- data/lib/promiscuous/subscriber/amqp.rb +3 -19
- data/lib/promiscuous/subscriber/mongoid/upsert.rb +1 -1
- data/lib/promiscuous/subscriber.rb +24 -4
- data/lib/promiscuous/version.rb +1 -1
- data/lib/promiscuous/worker.rb +29 -12
- data/lib/promiscuous.rb +16 -2
- metadata +26 -25
- data/lib/promiscuous/amqp/fake.rb +0 -27
data/README.md
CHANGED
@@ -23,8 +23,8 @@ Example
|
|
23
23
|
|
24
24
|
```ruby
|
25
25
|
# initializer
|
26
|
-
Promiscuous::AMQP.configure(:
|
27
|
-
|
26
|
+
Promiscuous::AMQP.configure(:app => 'crowdtap',
|
27
|
+
:server_uri => 'amqp://user:password@host:port/vhost')
|
28
28
|
|
29
29
|
# publisher
|
30
30
|
class ModelPublisher < Promiscuous::Publisher::Mongoid
|
@@ -38,10 +38,9 @@ end
|
|
38
38
|
|
39
39
|
```ruby
|
40
40
|
# initializer
|
41
|
-
Promiscuous::AMQP.configure(:
|
42
|
-
|
43
|
-
|
44
|
-
:error_handler => some_proc)
|
41
|
+
Promiscuous::AMQP.configure(:app => 'sniper',
|
42
|
+
:server_uri => 'amqp://user:password@host:port/vhost',
|
43
|
+
:error_handler => some_proc)
|
45
44
|
|
46
45
|
# subscriber
|
47
46
|
class ModelSubscriber < Promiscuous::Subscriber::Mongoid
|
@@ -53,7 +52,7 @@ end
|
|
53
52
|
|
54
53
|
### Starting the subscriber worker
|
55
54
|
|
56
|
-
rake promiscuous:
|
55
|
+
rake promiscuous:replicate
|
57
56
|
|
58
57
|
How does it work ?
|
59
58
|
------------------
|
@@ -3,20 +3,24 @@ module Promiscuous
|
|
3
3
|
module Bunny
|
4
4
|
mattr_accessor :connection
|
5
5
|
|
6
|
-
def self.
|
6
|
+
def self.connect
|
7
7
|
require 'bunny'
|
8
|
-
self.connection = ::Bunny.new(
|
8
|
+
self.connection = ::Bunny.new(Promiscuous::Config.server_uri)
|
9
9
|
self.connection.start
|
10
10
|
end
|
11
11
|
|
12
|
+
def self.disconnect
|
13
|
+
self.connection.stop
|
14
|
+
end
|
15
|
+
|
12
16
|
def self.publish(msg)
|
13
|
-
|
17
|
+
Promiscuous.info "[publish] #{msg[:key]} -> #{msg[:payload]}"
|
14
18
|
exchange = connection.exchange('promiscuous', :type => :topic, :durable => true)
|
15
19
|
exchange.publish(msg[:payload], :key => msg[:key], :persistent => true)
|
16
20
|
end
|
17
21
|
|
18
|
-
def self.
|
19
|
-
|
22
|
+
def self.subscribe(options={}, &block)
|
23
|
+
raise "Cannot subscribe with bunny"
|
20
24
|
end
|
21
25
|
end
|
22
26
|
end
|
@@ -1,19 +1,16 @@
|
|
1
1
|
module Promiscuous
|
2
2
|
module AMQP
|
3
3
|
module Null
|
4
|
-
def self.
|
4
|
+
def self.connect
|
5
5
|
end
|
6
6
|
|
7
|
-
def self.
|
8
|
-
end
|
9
|
-
|
10
|
-
def self.subscribe(options={}, &block)
|
7
|
+
def self.disconnect
|
11
8
|
end
|
12
9
|
|
13
|
-
def self.
|
10
|
+
def self.publish(msg)
|
14
11
|
end
|
15
12
|
|
16
|
-
def self.
|
13
|
+
def self.subscribe(options={}, &block)
|
17
14
|
end
|
18
15
|
end
|
19
16
|
end
|
@@ -3,16 +3,11 @@ module Promiscuous
|
|
3
3
|
module RubyAMQP
|
4
4
|
mattr_accessor :channel, :queue_options
|
5
5
|
|
6
|
-
def self.
|
6
|
+
def self.connect
|
7
7
|
require 'amqp'
|
8
|
-
connection = ::AMQP.connect(build_connection_options(options))
|
9
|
-
self.channel = ::AMQP::Channel.new(connection)
|
10
|
-
self.queue_options = options[:queue_options] || {}
|
11
|
-
end
|
12
8
|
|
13
|
-
|
14
|
-
|
15
|
-
uri = URI.parse(options[:server_uri])
|
9
|
+
amqp_options = if Promiscuous::Config.server_uri
|
10
|
+
uri = URI.parse(Promiscuous::Config.server_uri)
|
16
11
|
raise "Please use amqp://user:password@host:port/vhost" if uri.scheme != 'amqp'
|
17
12
|
|
18
13
|
{
|
@@ -24,6 +19,14 @@ module Promiscuous
|
|
24
19
|
:vhost => uri.path.empty? ? "/" : uri.path,
|
25
20
|
}
|
26
21
|
end
|
22
|
+
|
23
|
+
connection = ::AMQP.connect(amqp_options)
|
24
|
+
self.channel = ::AMQP::Channel.new(connection)
|
25
|
+
self.queue_options = Promiscuous::Config.queue_options
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.disconnect
|
29
|
+
channel.close
|
27
30
|
end
|
28
31
|
|
29
32
|
def self.subscribe(options={}, &block)
|
@@ -34,20 +37,16 @@ module Promiscuous
|
|
34
37
|
exchange = channel.topic('promiscuous', :durable => true)
|
35
38
|
bindings.each do |binding|
|
36
39
|
queue.bind(exchange, :routing_key => binding)
|
37
|
-
|
40
|
+
Promiscuous.info "[bind] #{queue_name} -> #{binding}"
|
38
41
|
end
|
39
42
|
queue.subscribe(:ack => true, &block)
|
40
43
|
end
|
41
44
|
|
42
45
|
def self.publish(msg)
|
43
|
-
|
46
|
+
Promiscuous.info "[publish] #{msg[:key]} -> #{msg[:payload]}"
|
44
47
|
exchange = channel.topic('promiscuous', :durable => true)
|
45
48
|
exchange.publish(msg[:payload], :routing_key => msg[:key], :persistent => true)
|
46
49
|
end
|
47
|
-
|
48
|
-
def self.close
|
49
|
-
channel.close
|
50
|
-
end
|
51
50
|
end
|
52
51
|
end
|
53
52
|
end
|
data/lib/promiscuous/amqp.rb
CHANGED
@@ -1,34 +1,15 @@
|
|
1
1
|
require 'promiscuous/amqp/bunny'
|
2
|
-
require 'promiscuous/amqp/
|
3
|
-
require 'promiscuous/amqp/ruby-amqp'
|
2
|
+
require 'promiscuous/amqp/rubyamqp'
|
4
3
|
require 'promiscuous/amqp/null'
|
5
4
|
|
6
5
|
module Promiscuous
|
7
6
|
module AMQP
|
8
|
-
mattr_accessor :backend, :app, :logger, :error_handler
|
9
|
-
|
10
|
-
def self.configure(options={}, &block)
|
11
|
-
options.symbolize_keys!
|
12
|
-
|
13
|
-
self.backend = "Promiscuous::AMQP::#{options[:backend].to_s.camelize.gsub(/amqp/, 'AMQP')}".constantize
|
14
|
-
self.backend.configure(options, &block)
|
15
|
-
self.app = options[:app]
|
16
|
-
self.logger = options[:logger] || Logger.new(STDOUT).tap { |l| l.level = Logger::WARN }
|
17
|
-
self.error_handler = options[:error_handler]
|
18
|
-
self
|
19
|
-
end
|
20
|
-
|
21
7
|
class << self
|
22
|
-
|
23
|
-
|
24
|
-
self.logger.__send__(level, "[AMQP] #{msg}")
|
25
|
-
end
|
8
|
+
def backend
|
9
|
+
Promiscuous::Config.backend
|
26
10
|
end
|
27
|
-
end
|
28
11
|
|
29
|
-
|
30
|
-
def self.method_missing(method, *args, &block)
|
31
|
-
self.backend.__send__(method, *args, &block)
|
12
|
+
delegate :connect, :disconnect, :publish, :subscribe, :to => :backend
|
32
13
|
end
|
33
14
|
end
|
34
15
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Promiscuous
|
2
|
+
module Config
|
3
|
+
mattr_accessor :app, :logger, :error_handler, :backend, :server_uri, :queue_options
|
4
|
+
|
5
|
+
def self.backend=(value)
|
6
|
+
@@backend = "Promiscuous::AMQP::#{value.to_s.camelize.gsub(/amqp/, 'AMQP')}".constantize
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.configure(&block)
|
10
|
+
class_variables.each { |var| class_variable_set(var, nil) }
|
11
|
+
|
12
|
+
block.call(self)
|
13
|
+
self.backend ||= defined?(EventMachine) && EventMachine.reactor_running? ? :rubyamqp : :bunny
|
14
|
+
self.logger ||= defined?(Rails) ? Rails.logger : Logger.new(STDERR).tap { |l| l.level = Logger::WARN }
|
15
|
+
self.queue_options ||= {:durable => true, :arguments => {'x-ha-policy' => 'all'}}
|
16
|
+
|
17
|
+
Promiscuous::AMQP.connect
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Promiscuous
|
2
|
+
module Loader
|
3
|
+
def self.load_descriptors(descriptors=[:publishers, :subscribers])
|
4
|
+
[descriptors].flatten.each do |descriptor|
|
5
|
+
dir, file_matcher = case descriptor
|
6
|
+
when :publishers
|
7
|
+
require 'promiscuous/publisher'
|
8
|
+
# TODO Cleanup publishers
|
9
|
+
%w(publishers **_publisher.rb)
|
10
|
+
when :subscribers
|
11
|
+
require 'promiscuous/subscriber'
|
12
|
+
Promiscuous::Subscriber.subscribers.clear
|
13
|
+
%w(subscribers **_subscriber.rb)
|
14
|
+
end
|
15
|
+
|
16
|
+
Dir[Rails.root.join('app', dir, file_matcher)].map do |file|
|
17
|
+
File.basename(file, ".rb").camelize.constantize
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -1,12 +1,18 @@
|
|
1
|
-
namespace :
|
1
|
+
namespace :promiscuous do
|
2
2
|
desc 'Run the subscribers worker'
|
3
|
-
task :
|
4
|
-
require '
|
3
|
+
task :replicate => :environment do |t|
|
4
|
+
require 'promiscuous/worker'
|
5
5
|
require 'eventmachine'
|
6
6
|
require 'em-synchrony'
|
7
|
+
|
7
8
|
EM.synchrony do
|
8
|
-
|
9
|
-
|
9
|
+
Promiscuous::Loader.load_descriptors :subscribers
|
10
|
+
Promiscuous::AMQP.disconnect
|
11
|
+
Promiscuous::Config.backend = :rubyamqp
|
12
|
+
Promiscuous::AMQP.connect
|
13
|
+
|
14
|
+
Promiscuous::Worker.replicate
|
15
|
+
puts "Replicating with #{Promiscuous::Subscriber.subscribers.count} subscribers"
|
10
16
|
end
|
11
17
|
end
|
12
18
|
end
|
data/lib/promiscuous/railtie.rb
CHANGED
@@ -3,24 +3,10 @@ module Promiscuous
|
|
3
3
|
rake_tasks { load 'promiscuous/railtie/replicate.rake' }
|
4
4
|
|
5
5
|
initializer 'load promiscuous' do
|
6
|
-
# TODO clean that up
|
7
6
|
config.after_initialize do
|
8
|
-
|
9
|
-
file.split('/')[-1].split('.')[0].camelize.constantize
|
10
|
-
end
|
11
|
-
ActionDispatch::Reloader.to_prepare do
|
12
|
-
Dir[Rails.root.join('app', 'publishers', '**_publisher.rb')].map do |file|
|
13
|
-
file.split('/')[-1].split('.')[0].camelize.constantize
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
Dir[Rails.root.join('app', 'subscribers', '**_subscriber.rb')].map do |file|
|
18
|
-
file.split('/')[-1].split('.')[0].camelize.constantize
|
19
|
-
end
|
7
|
+
Promiscuous::Loader.load_descriptors(:publishers)
|
20
8
|
ActionDispatch::Reloader.to_prepare do
|
21
|
-
|
22
|
-
file.split('/')[-1].split('.')[0].camelize.constantize
|
23
|
-
end
|
9
|
+
Promiscuous::Loader.load_descriptors(:publishers)
|
24
10
|
end
|
25
11
|
end
|
26
12
|
end
|
@@ -3,30 +3,14 @@ require 'promiscuous/subscriber/envelope'
|
|
3
3
|
module Promiscuous::Subscriber::AMQP
|
4
4
|
extend ActiveSupport::Concern
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
def self.subscriber_for(payload)
|
10
|
-
origin = payload.is_a?(Hash) ? payload['__amqp__'] : nil
|
11
|
-
if origin
|
12
|
-
unless subscribers.has_key?(origin)
|
13
|
-
raise "FATAL: Unknown binding: '#{origin}'"
|
14
|
-
end
|
15
|
-
subscribers[origin]
|
16
|
-
end
|
6
|
+
def self.subscriber_key(payload)
|
7
|
+
payload.is_a?(Hash) ? payload['__amqp__'] : nil
|
17
8
|
end
|
18
9
|
|
19
10
|
module ClassMethods
|
20
11
|
def subscribe(options)
|
21
12
|
super
|
22
|
-
|
23
|
-
subscribers = Promiscuous::Subscriber::AMQP.subscribers
|
24
|
-
from = options[:from]
|
25
|
-
|
26
|
-
if subscribers.has_key?(from)
|
27
|
-
raise "The subscriber '#{subscribers[from]}' already listen on '#{from}'"
|
28
|
-
end
|
29
|
-
subscribers[from] = self
|
13
|
+
Promiscuous::Subscriber.bind(options[:from], self)
|
30
14
|
end
|
31
15
|
end
|
32
16
|
end
|
@@ -3,12 +3,32 @@ module Promiscuous::Subscriber
|
|
3
3
|
require 'promiscuous/subscriber/mongoid'
|
4
4
|
require 'promiscuous/subscriber/amqp'
|
5
5
|
|
6
|
+
mattr_accessor :subscribers
|
7
|
+
self.subscribers = {}
|
8
|
+
|
9
|
+
def self.bind(key, subscriber)
|
10
|
+
if self.subscribers.has_key?(key)
|
11
|
+
raise "The subscriber '#{self.subscribers[key]}' already listen on '#{key}'"
|
12
|
+
end
|
13
|
+
self.subscribers[key] = subscriber
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.get_subscriber(payload, options={})
|
17
|
+
key = Promiscuous::Subscriber::AMQP.subscriber_key(payload)
|
18
|
+
|
19
|
+
if key
|
20
|
+
raise "FATAL: Unknown binding: '#{key}'" unless self.subscribers.has_key?(key)
|
21
|
+
self.subscribers[key]
|
22
|
+
else
|
23
|
+
Promiscuous::Subscriber::Base
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
6
27
|
def self.process(payload, options={})
|
7
|
-
|
8
|
-
return payload if subscriber.nil?
|
28
|
+
subscriber_klass = get_subscriber(payload)
|
9
29
|
|
10
|
-
sub =
|
11
|
-
sub.process
|
30
|
+
sub = subscriber_klass.new(options.merge(:payload => payload))
|
31
|
+
sub.process
|
12
32
|
sub.instance
|
13
33
|
end
|
14
34
|
end
|
data/lib/promiscuous/version.rb
CHANGED
data/lib/promiscuous/worker.rb
CHANGED
@@ -1,25 +1,42 @@
|
|
1
1
|
module Promiscuous
|
2
2
|
module Worker
|
3
|
-
def self.
|
4
|
-
queue_name = "#{Promiscuous::AMQP.app}.promiscuous"
|
5
|
-
|
3
|
+
def self.replicate
|
6
4
|
stop = false
|
7
|
-
|
8
|
-
|
5
|
+
lock = Mutex.new
|
6
|
+
|
7
|
+
%w(SIGTERM SIGINT).each do |signal|
|
8
|
+
Signal.trap(signal) do
|
9
|
+
lock.synchronize do
|
10
|
+
stop = true
|
11
|
+
EM.stop
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
Promiscuous::AMQP.subscribe(subscribe_options) do |metadata, payload|
|
9
17
|
begin
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
18
|
+
lock.synchronize do
|
19
|
+
unless stop
|
20
|
+
Promiscuous.info "[receive] #{payload}"
|
21
|
+
Promiscuous::Subscriber.process(JSON.parse(payload))
|
22
|
+
metadata.ack
|
23
|
+
end
|
14
24
|
end
|
15
25
|
rescue Exception => e
|
16
26
|
e = Promiscuous::Subscriber::Error.new(e, payload)
|
27
|
+
|
17
28
|
stop = true
|
18
|
-
Promiscuous::AMQP.
|
19
|
-
Promiscuous
|
20
|
-
Promiscuous::
|
29
|
+
Promiscuous::AMQP.disconnect
|
30
|
+
Promiscuous.error "[receive] FATAL #{e}"
|
31
|
+
Promiscuous::Config.error_handler.call(e) if Promiscuous::Config.error_handler
|
21
32
|
end
|
22
33
|
end
|
23
34
|
end
|
35
|
+
|
36
|
+
def self.subscribe_options
|
37
|
+
queue_name = "#{Promiscuous::Config.app}.promiscuous"
|
38
|
+
bindings = Promiscuous::Subscriber.subscribers.keys
|
39
|
+
{:queue_name => queue_name, :bindings => bindings}
|
40
|
+
end
|
24
41
|
end
|
25
42
|
end
|
data/lib/promiscuous.rb
CHANGED
@@ -1,5 +1,19 @@
|
|
1
1
|
require 'active_support/core_ext'
|
2
|
+
require 'promiscuous/config'
|
2
3
|
require 'promiscuous/amqp'
|
3
|
-
require 'promiscuous/
|
4
|
-
require 'promiscuous/subscriber'
|
4
|
+
require 'promiscuous/loader'
|
5
5
|
require 'promiscuous/railtie' if defined?(Rails)
|
6
|
+
|
7
|
+
module Promiscuous
|
8
|
+
class << self
|
9
|
+
def configure(&block)
|
10
|
+
Config.configure(&block)
|
11
|
+
end
|
12
|
+
|
13
|
+
[:info, :error, :warn, :fatal].each do |level|
|
14
|
+
define_method(level) do |msg|
|
15
|
+
Promiscuous::Config.logger.__send__(level, "[promiscuous] #{msg}")
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
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.5'
|
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-12 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: mongoid
|
@@ -100,39 +100,40 @@ executables: []
|
|
100
100
|
extensions: []
|
101
101
|
extra_rdoc_files: []
|
102
102
|
files:
|
103
|
-
- lib/promiscuous/
|
104
|
-
- lib/promiscuous/amqp/null.rb
|
105
|
-
- lib/promiscuous/amqp/bunny.rb
|
106
|
-
- lib/promiscuous/amqp/ruby-amqp.rb
|
107
|
-
- lib/promiscuous/railtie/replicate.rake
|
108
|
-
- lib/promiscuous/publisher/mongoid/embedded.rb
|
109
|
-
- lib/promiscuous/publisher/mongoid/root.rb
|
110
|
-
- lib/promiscuous/publisher/base.rb
|
103
|
+
- lib/promiscuous/version.rb
|
111
104
|
- lib/promiscuous/publisher/class_bind.rb
|
112
|
-
- lib/promiscuous/publisher/envelope.rb
|
113
|
-
- lib/promiscuous/publisher/mongoid.rb
|
114
|
-
- lib/promiscuous/publisher/polymorphic.rb
|
115
105
|
- lib/promiscuous/publisher/attributes.rb
|
106
|
+
- lib/promiscuous/publisher/mongoid.rb
|
116
107
|
- lib/promiscuous/publisher/generic.rb
|
108
|
+
- lib/promiscuous/publisher/mongoid/root.rb
|
109
|
+
- lib/promiscuous/publisher/mongoid/embedded.rb
|
110
|
+
- lib/promiscuous/publisher/envelope.rb
|
117
111
|
- lib/promiscuous/publisher/amqp.rb
|
112
|
+
- lib/promiscuous/publisher/base.rb
|
113
|
+
- lib/promiscuous/publisher/polymorphic.rb
|
114
|
+
- lib/promiscuous/amqp/null.rb
|
115
|
+
- lib/promiscuous/amqp/rubyamqp.rb
|
116
|
+
- lib/promiscuous/amqp/bunny.rb
|
117
|
+
- lib/promiscuous/publisher.rb
|
118
|
+
- lib/promiscuous/subscriber/attributes.rb
|
119
|
+
- lib/promiscuous/subscriber/mongoid.rb
|
120
|
+
- lib/promiscuous/subscriber/error.rb
|
121
|
+
- lib/promiscuous/subscriber/generic.rb
|
122
|
+
- lib/promiscuous/subscriber/mongoid/root.rb
|
118
123
|
- lib/promiscuous/subscriber/mongoid/embedded.rb
|
119
124
|
- lib/promiscuous/subscriber/mongoid/upsert.rb
|
120
|
-
- lib/promiscuous/subscriber/mongoid/root.rb
|
121
|
-
- lib/promiscuous/subscriber/attributes.rb
|
122
|
-
- lib/promiscuous/subscriber/base.rb
|
123
|
-
- lib/promiscuous/subscriber/custom_class.rb
|
124
125
|
- lib/promiscuous/subscriber/envelope.rb
|
125
|
-
- lib/promiscuous/subscriber/generic.rb
|
126
|
-
- lib/promiscuous/subscriber/polymorphic.rb
|
127
|
-
- lib/promiscuous/subscriber/mongoid.rb
|
128
126
|
- lib/promiscuous/subscriber/amqp.rb
|
129
|
-
- lib/promiscuous/subscriber/
|
130
|
-
- lib/promiscuous/
|
131
|
-
- lib/promiscuous/
|
127
|
+
- lib/promiscuous/subscriber/custom_class.rb
|
128
|
+
- lib/promiscuous/subscriber/base.rb
|
129
|
+
- lib/promiscuous/subscriber/polymorphic.rb
|
130
|
+
- lib/promiscuous/worker.rb
|
131
|
+
- lib/promiscuous/railtie/replicate.rake
|
132
132
|
- lib/promiscuous/railtie.rb
|
133
|
+
- lib/promiscuous/loader.rb
|
133
134
|
- lib/promiscuous/amqp.rb
|
135
|
+
- lib/promiscuous/config.rb
|
134
136
|
- lib/promiscuous/subscriber.rb
|
135
|
-
- lib/promiscuous/worker.rb
|
136
137
|
- lib/promiscuous.rb
|
137
138
|
- README.md
|
138
139
|
homepage: http://github.com/crowdtap/promiscuous
|
@@ -155,7 +156,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
155
156
|
version: '0'
|
156
157
|
requirements: []
|
157
158
|
rubyforge_project:
|
158
|
-
rubygems_version: 1.8.
|
159
|
+
rubygems_version: 1.8.22
|
159
160
|
signing_key:
|
160
161
|
specification_version: 3
|
161
162
|
summary: Model replication over RabbitMQ
|
@@ -1,27 +0,0 @@
|
|
1
|
-
module Promiscuous
|
2
|
-
module AMQP
|
3
|
-
module Fake
|
4
|
-
mattr_accessor :messages, :subscribe_options
|
5
|
-
self.messages = []
|
6
|
-
|
7
|
-
def self.configure(options)
|
8
|
-
end
|
9
|
-
|
10
|
-
def self.publish(msg)
|
11
|
-
self.messages << msg
|
12
|
-
end
|
13
|
-
|
14
|
-
def self.subscribe(options={}, &block)
|
15
|
-
self.subscribe_options = options
|
16
|
-
end
|
17
|
-
|
18
|
-
def self.clear
|
19
|
-
self.messages.clear
|
20
|
-
self.subscribe_options = nil
|
21
|
-
end
|
22
|
-
|
23
|
-
def self.close
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|