multiple_man 0.5.6 → 0.5.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/multiple_man.rb +1 -1
- data/lib/multiple_man/connection.rb +4 -7
- data/lib/multiple_man/listener.rb +10 -11
- data/lib/multiple_man/tasks/worker.rake +1 -5
- data/lib/multiple_man/version.rb +1 -1
- data/multiple_man.gemspec +1 -1
- data/spec/connection_spec.rb +4 -4
- data/spec/listener_spec.rb +6 -4
- data/spec/seeder_listener_spec.rb +2 -1
- metadata +21 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 91862d63ba5ac6bd05ea7724c6e3b85130596c24
|
4
|
+
data.tar.gz: eda76e877da86d653c274aaa50a7671d951a9411
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0d202cbbfed76fd925469f740818ae2b3b5f9db5665fa7191ef61ad7a1289760729a28ba27545a022fee80a32171593ccac2b0c3ffd570ddd86190af50c602d8
|
7
|
+
data.tar.gz: ad2c2de8477150928208923a824f8c278edb872f32bdf3b6d28eb9da4a6d6d23c555a0a11de7053a19ed3be00f2884c1f6d8925dc83a8a41aaf7505a767f87c7
|
data/lib/multiple_man.rb
CHANGED
@@ -13,14 +13,11 @@ module MultipleMan
|
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
|
-
def self.channel_pool
|
17
|
-
@channel_pool ||= ConnectionPool.new(size: 25, timeout: 5) { connection.create_channel }
|
18
|
-
end
|
19
|
-
|
20
16
|
def self.connect
|
21
|
-
|
22
|
-
|
23
|
-
|
17
|
+
channel = connection.create_channel
|
18
|
+
yield new(channel) if block_given?
|
19
|
+
ensure
|
20
|
+
channel.close
|
24
21
|
end
|
25
22
|
|
26
23
|
def initialize(channel)
|
@@ -5,28 +5,33 @@ module MultipleMan
|
|
5
5
|
class Listener
|
6
6
|
|
7
7
|
class << self
|
8
|
-
def start
|
8
|
+
def start
|
9
9
|
MultipleMan.logger.debug "Starting listeners."
|
10
|
-
self.connection = connection
|
11
10
|
MultipleMan.logger.debug Subscribers::Registry.subscriptions.to_json
|
12
11
|
|
13
12
|
Subscribers::Registry.subscriptions.each do |subscription|
|
14
13
|
new(subscription).listen
|
15
14
|
end
|
16
15
|
end
|
17
|
-
|
18
|
-
attr_accessor :connection
|
19
16
|
end
|
20
17
|
|
21
18
|
delegate :queue_name, to: :subscription
|
22
19
|
|
23
20
|
def initialize(subscription)
|
24
21
|
self.subscription = subscription
|
22
|
+
self.init_connection
|
23
|
+
end
|
24
|
+
|
25
|
+
def init_connection
|
26
|
+
channel = MultipleMan::Connection.connection.create_channel(nil, MultipleMan.configuration.worker_concurrency)
|
27
|
+
channel.prefetch(100)
|
28
|
+
self.connection = MultipleMan::Connection.new(channel)
|
25
29
|
end
|
26
30
|
|
27
|
-
attr_accessor :subscription
|
31
|
+
attr_accessor :subscription, :connection
|
28
32
|
|
29
33
|
def listen
|
34
|
+
|
30
35
|
MultipleMan.logger.info "Listening for #{subscription.klass} with routing key #{routing_key}."
|
31
36
|
queue.bind(connection.topic, routing_key: routing_key).subscribe(ack: true) do |delivery_info, meta_data, payload|
|
32
37
|
process_message(delivery_info, payload)
|
@@ -65,11 +70,5 @@ module MultipleMan
|
|
65
70
|
subscription.routing_key
|
66
71
|
end
|
67
72
|
|
68
|
-
private
|
69
|
-
|
70
|
-
def connection
|
71
|
-
self.class.connection
|
72
|
-
end
|
73
|
-
|
74
73
|
end
|
75
74
|
end
|
@@ -12,11 +12,7 @@ namespace :multiple_man do
|
|
12
12
|
def run_listener(listener)
|
13
13
|
Rails.application.eager_load!
|
14
14
|
|
15
|
-
|
16
|
-
channel.prefetch(100)
|
17
|
-
connection = MultipleMan::Connection.new(channel)
|
18
|
-
|
19
|
-
listener.start(connection)
|
15
|
+
listener.start
|
20
16
|
|
21
17
|
while(true)
|
22
18
|
sleep 10
|
data/lib/multiple_man/version.rb
CHANGED
data/multiple_man.gemspec
CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_development_dependency "bundler", "~> 1.3"
|
22
22
|
spec.add_development_dependency "rake", '~> 10.1.0'
|
23
23
|
spec.add_development_dependency "rspec", '~> 2.14.1'
|
24
|
-
spec.add_runtime_dependency "bunny", '>= 1.
|
24
|
+
spec.add_runtime_dependency "bunny", '>= 1.2'
|
25
25
|
spec.add_runtime_dependency "activesupport", '>= 3.0'
|
26
26
|
spec.add_runtime_dependency "connection_pool", ">= 1.2"
|
27
27
|
end
|
data/spec/connection_spec.rb
CHANGED
@@ -3,19 +3,19 @@ require 'spec_helper'
|
|
3
3
|
describe MultipleMan::Connection do
|
4
4
|
|
5
5
|
let(:mock_bunny) { double(Bunny) }
|
6
|
-
let(:mock_channel) { double(Bunny::Channel) }
|
6
|
+
let(:mock_channel) { double(Bunny::Channel, close: nil) }
|
7
7
|
|
8
8
|
describe "connect" do
|
9
9
|
it "should open a connection and a channel" do
|
10
10
|
mock_bunny.should_receive(:start)
|
11
11
|
Bunny.should_receive(:new).and_return(mock_bunny)
|
12
|
-
mock_bunny.should_receive(:create_channel).
|
12
|
+
mock_bunny.should_receive(:create_channel).once.and_return(mock_channel)
|
13
13
|
|
14
|
-
described_class.connect
|
14
|
+
described_class.connect { }
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
-
subject { described_class.new(
|
18
|
+
subject { described_class.new(mock_channel) }
|
19
19
|
|
20
20
|
its(:topic_name) { should == MultipleMan.configuration.topic_name }
|
21
21
|
|
data/spec/listener_spec.rb
CHANGED
@@ -4,6 +4,8 @@ describe MultipleMan::Listener do
|
|
4
4
|
class MockClass1; end
|
5
5
|
class MockClass2; end
|
6
6
|
|
7
|
+
before { MultipleMan::Connection.stub(:connection).and_return(double(Bunny).as_null_object)}
|
8
|
+
|
7
9
|
describe "start" do
|
8
10
|
it "should listen to each subscription" do
|
9
11
|
MultipleMan::Subscribers::Registry.stub(:subscriptions).and_return([
|
@@ -18,7 +20,7 @@ describe MultipleMan::Listener do
|
|
18
20
|
# ease of stubbing.
|
19
21
|
mock_listener.should_receive(:listen).twice
|
20
22
|
|
21
|
-
MultipleMan::Listener.start
|
23
|
+
MultipleMan::Listener.start
|
22
24
|
end
|
23
25
|
end
|
24
26
|
|
@@ -27,7 +29,7 @@ describe MultipleMan::Listener do
|
|
27
29
|
let(:queue_stub) { double(Bunny::Queue, bind: bind_stub) }
|
28
30
|
let(:bind_stub) { double(:bind, subscribe: nil)}
|
29
31
|
|
30
|
-
before { MultipleMan::
|
32
|
+
before { MultipleMan::Connection.stub(:new).and_return(connection_stub) }
|
31
33
|
|
32
34
|
it "should listen to the right topic, and for all updates to a model" do
|
33
35
|
listener = MultipleMan::Listener.new(double(MultipleMan::Subscribers::ModelSubscriber, klass: MockClass1, routing_key: "MockClass1.#", queue_name: "MockClass1"))
|
@@ -38,7 +40,7 @@ describe MultipleMan::Listener do
|
|
38
40
|
|
39
41
|
specify "process_message should send the correct data" do
|
40
42
|
connection_stub = double(MultipleMan::Connection).as_null_object
|
41
|
-
MultipleMan::
|
43
|
+
MultipleMan::Connection.stub(:new).and_return(connection_stub)
|
42
44
|
subscriber = double(MultipleMan::Subscribers::ModelSubscriber, klass: MockClass1, routing_key: "MockClass1.#").as_null_object
|
43
45
|
listener = MultipleMan::Listener.new(subscriber)
|
44
46
|
|
@@ -49,7 +51,7 @@ describe MultipleMan::Listener do
|
|
49
51
|
|
50
52
|
it "should nack on failure" do
|
51
53
|
connection_stub = double(MultipleMan::Connection).as_null_object
|
52
|
-
MultipleMan::
|
54
|
+
MultipleMan::Connection.stub(:new).and_return(connection_stub)
|
53
55
|
subscriber = double(MultipleMan::Subscribers::ModelSubscriber, klass: MockClass1, routing_key: "MockClass1.#").as_null_object
|
54
56
|
listener = MultipleMan::Listener.new(subscriber)
|
55
57
|
|
@@ -3,11 +3,12 @@ require 'spec_helper'
|
|
3
3
|
describe MultipleMan::SeederListener do
|
4
4
|
class MockClass1; end
|
5
5
|
|
6
|
+
before { MultipleMan::Connection.stub(:connection).and_return(double(Bunny).as_null_object)}
|
6
7
|
let(:connection_stub) { double(MultipleMan::Connection, queue: queue_stub, topic: 'app') }
|
7
8
|
let(:queue_stub) { double(Bunny::Queue, bind: bind_stub) }
|
8
9
|
let(:bind_stub) { double(:bind, subscribe: nil)}
|
9
10
|
|
10
|
-
before { MultipleMan::
|
11
|
+
before { MultipleMan::Connection.stub(:new).and_return(connection_stub) }
|
11
12
|
|
12
13
|
it 'listens to seed events' do
|
13
14
|
listener = described_class.new(double(MultipleMan::Subscribers::ModelSubscriber,
|
metadata
CHANGED
@@ -1,97 +1,97 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: multiple_man
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Brunner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-09-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.3'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.3'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 10.1.0
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 10.1.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - ~>
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: 2.14.1
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - ~>
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 2.14.1
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: bunny
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '1.
|
61
|
+
version: '1.2'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '1.
|
68
|
+
version: '1.2'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: activesupport
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '3.0'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '3.0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: connection_pool
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '1.2'
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '1.2'
|
97
97
|
description: MultipleMan syncs changes to ActiveRecord models via AMQP
|
@@ -101,8 +101,8 @@ executables: []
|
|
101
101
|
extensions: []
|
102
102
|
extra_rdoc_files: []
|
103
103
|
files:
|
104
|
-
- .gitignore
|
105
|
-
- .rspec
|
104
|
+
- ".gitignore"
|
105
|
+
- ".rspec"
|
106
106
|
- Gemfile
|
107
107
|
- LICENSE.txt
|
108
108
|
- README.md
|
@@ -152,17 +152,17 @@ require_paths:
|
|
152
152
|
- lib
|
153
153
|
required_ruby_version: !ruby/object:Gem::Requirement
|
154
154
|
requirements:
|
155
|
-
- -
|
155
|
+
- - ">="
|
156
156
|
- !ruby/object:Gem::Version
|
157
157
|
version: '0'
|
158
158
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
159
159
|
requirements:
|
160
|
-
- -
|
160
|
+
- - ">="
|
161
161
|
- !ruby/object:Gem::Version
|
162
162
|
version: '0'
|
163
163
|
requirements: []
|
164
164
|
rubyforge_project:
|
165
|
-
rubygems_version: 2.
|
165
|
+
rubygems_version: 2.2.2
|
166
166
|
signing_key:
|
167
167
|
specification_version: 4
|
168
168
|
summary: MultipleMan syncs changes to ActiveRecord models via AMQP
|