msgr 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +1 -1
- data/lib/msgr/client.rb +3 -0
- data/lib/msgr/railtie.rb +49 -34
- data/lib/msgr/version.rb +1 -1
- data/lib/msgr.rb +22 -1
- data/spec/integration/msgr/railtie_spec.rb +86 -0
- data/spec/msgr/msgr/client_spec.rb +7 -0
- data/spec/msgr/msgr_spec.rb +8 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c5dac0bc0219f72492a4b9d740e884ed191e4aa5
|
4
|
+
data.tar.gz: 9342839d6f9b78908999952b29cb826dd958b0cb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 10afa11b46160f7b116db6b2ed99e10262789592bc6bf9e2beda5f646bdede1b8802c19ebc19c998e237b20f59e9a999d9a180246aa3aeb0404fbd8fc1ab3ac5
|
7
|
+
data.tar.gz: cb2b8e805a974aab1c94680982ebfe6bd23a073dc2c74acd554cf1a231c83a049c12f1cca7532de5b4f0b7ff680be7ab4bfc464b9ea678096e0774ad13169ae8
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
data/lib/msgr/client.rb
CHANGED
data/lib/msgr/railtie.rb
CHANGED
@@ -12,54 +12,69 @@ module Msgr
|
|
12
12
|
config.msgr.rabbitmq_config ||= Rails.root.join *%w(config rabbitmq.yml)
|
13
13
|
end
|
14
14
|
|
15
|
-
initializer 'msgr.routes_file' do
|
16
|
-
config.msgr.routes_file ||= Rails.root.join *%w(config msgr.rb)
|
17
|
-
end
|
18
|
-
|
19
15
|
# Start msgr
|
20
16
|
initializer 'msgr.start' do
|
21
17
|
config.after_initialize do |app|
|
22
18
|
Msgr.logger = app.config.msgr.logger
|
23
19
|
Celluloid.logger = app.config.msgr.logger
|
24
20
|
|
25
|
-
|
26
|
-
|
21
|
+
self.class.load app.config.msgr
|
22
|
+
end
|
23
|
+
end
|
27
24
|
|
28
|
-
|
25
|
+
class << self
|
26
|
+
def load(rails_config)
|
27
|
+
cfg = parse_config load_config rails_config.rabbitmq_config.to_s
|
28
|
+
return unless cfg # no config given -> does not load Msgr
|
29
29
|
|
30
|
-
|
31
|
-
cfg = HashWithIndifferentAccess.new config[Rails.env]
|
30
|
+
Msgr.config = cfg
|
32
31
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
32
|
+
# later loading for e.g. unicorn
|
33
|
+
if Rails.env.development?
|
34
|
+
Msgr.after_load do |client|
|
35
|
+
setup_autoreload client
|
36
|
+
end
|
37
|
+
end
|
38
38
|
|
39
|
-
|
40
|
-
|
41
|
-
client.routes.reload
|
42
|
-
client.reload
|
43
|
-
end
|
39
|
+
Msgr.start if cfg[:autostart]
|
40
|
+
end
|
44
41
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
42
|
+
def setup_autoreload(client)
|
43
|
+
reloader = ActiveSupport::FileUpdateChecker.new client.routes.files do
|
44
|
+
client.routes.reload
|
45
|
+
client.reload
|
46
|
+
end
|
49
47
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
48
|
+
ActionDispatch::Reloader.to_prepare do
|
49
|
+
reloader.execute_if_updated
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def parse_config(cfg)
|
54
|
+
unless cfg.is_a? Hash
|
55
|
+
raise ArgumentError, 'Could not load rabbitmq config: Config must be a Hash'
|
56
|
+
end
|
57
|
+
unless cfg[Rails.env].is_a?(Hash)
|
58
|
+
raise ArgumentError, "Could not load rabbitmq config for environment \"#{Rails.env}\": is not a Hash"
|
59
|
+
end
|
60
|
+
cfg = HashWithIndifferentAccess.new cfg[Rails.env]
|
61
|
+
unless cfg[:uri]
|
62
|
+
raise ArgumentError, 'Could not load rabbitmq environment config: URI missing.'
|
63
|
+
end
|
64
|
+
case cfg[:autostart]
|
65
|
+
when true, 'true', 'enabled', nil
|
66
|
+
cfg[:autostart] = true
|
67
|
+
when false, 'false', 'disabled'
|
68
|
+
cfg[:autostart] = false
|
56
69
|
else
|
57
|
-
|
58
|
-
raise ArgumentError, 'Could not load rabbitmq environment config: Not a hash.'
|
59
|
-
else
|
60
|
-
Rails.logger.warn 'Could not load rabbitmq environment config: Not a hash.'
|
61
|
-
end
|
70
|
+
raise ArgumentError, "Invalid value for rabbitmq config autostart: \"#{cfg[:autostart]}\""
|
62
71
|
end
|
72
|
+
cfg[:routing_file] ||= Rails.root.join('config/msgr.rb').to_s
|
73
|
+
cfg
|
74
|
+
end
|
75
|
+
|
76
|
+
def load_config(file)
|
77
|
+
YAML.load ERB.new(File.read(file)).result
|
63
78
|
end
|
64
79
|
end
|
65
80
|
end
|
data/lib/msgr/version.rb
CHANGED
data/lib/msgr.rb
CHANGED
@@ -25,9 +25,17 @@ require 'msgr/railtie' if defined? Rails
|
|
25
25
|
module Msgr
|
26
26
|
|
27
27
|
class << self
|
28
|
-
|
28
|
+
attr_writer :client, :config
|
29
29
|
delegate :publish, to: :client
|
30
30
|
|
31
|
+
def config
|
32
|
+
@config ||= {}
|
33
|
+
end
|
34
|
+
|
35
|
+
def client
|
36
|
+
@client ||= Msgr::Client.new config
|
37
|
+
end
|
38
|
+
|
31
39
|
def logger
|
32
40
|
if @logger.nil?
|
33
41
|
@logger = Logger.new $stdout
|
@@ -40,5 +48,18 @@ module Msgr
|
|
40
48
|
def logger=(logger)
|
41
49
|
@logger = logger
|
42
50
|
end
|
51
|
+
|
52
|
+
def after_load(&block)
|
53
|
+
@after_load_callbacks ||= []
|
54
|
+
@after_load_callbacks << block
|
55
|
+
end
|
56
|
+
|
57
|
+
def start
|
58
|
+
client.start
|
59
|
+
(@after_load_callbacks || []).each do |callback|
|
60
|
+
callback.call client
|
61
|
+
end
|
62
|
+
client
|
63
|
+
end
|
43
64
|
end
|
44
65
|
end
|
@@ -9,4 +9,90 @@ describe Msgr::Railtie do
|
|
9
9
|
expect(config).to respond_to :msgr
|
10
10
|
end
|
11
11
|
end
|
12
|
+
|
13
|
+
describe 'msgr should have load config/msgr.rb' do
|
14
|
+
subject { Msgr.client.routes }
|
15
|
+
its(:files) { should eq [Rails.root.join('config/msgr.rb').to_s] }
|
16
|
+
end
|
17
|
+
|
18
|
+
describe '#parse_config' do
|
19
|
+
let(:settings) { {} }
|
20
|
+
let(:action) { described_class.parse_config settings }
|
21
|
+
subject { action }
|
22
|
+
|
23
|
+
context 'with incorrect settings' do
|
24
|
+
subject { -> { action } }
|
25
|
+
context 'without an hash config' do
|
26
|
+
let(:settings) { '' }
|
27
|
+
|
28
|
+
it { should raise_error 'Could not load rabbitmq config: Config must be a Hash' }
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'without an hash for the current environment' do
|
32
|
+
let(:settings) { {} }
|
33
|
+
|
34
|
+
it { should raise_error 'Could not load rabbitmq config for environment "test": is not a Hash' }
|
35
|
+
end
|
36
|
+
|
37
|
+
context 'with config without url' do
|
38
|
+
let(:settings) { {"test" => { hans: 'otto'}} }
|
39
|
+
|
40
|
+
it { should raise_error 'Could not load rabbitmq environment config: URI missing.' }
|
41
|
+
end
|
42
|
+
|
43
|
+
context 'with invalid autostart value' do
|
44
|
+
let(:settings) { {"test" => { uri: 'hans', autostart: 'unvalid'}} }
|
45
|
+
|
46
|
+
it { should raise_error 'Invalid value for rabbitmq config autostart: "unvalid"'}
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context 'without set routes file' do
|
51
|
+
let(:settings) { {"test" => { uri: 'test'}} }
|
52
|
+
|
53
|
+
its([:routing_file]) { should eq Rails.root.join('config/msgr.rb').to_s }
|
54
|
+
end
|
55
|
+
|
56
|
+
context 'with set routes file' do
|
57
|
+
let(:settings) { {"test" => { uri: 'test', 'routing_file' => 'my fancy file' }} }
|
58
|
+
|
59
|
+
its([:routing_file]) { should eq 'my fancy file' }
|
60
|
+
end
|
61
|
+
|
62
|
+
context 'with uri as symbol' do
|
63
|
+
let(:settings) { {"test" => { uri: "hans"}}}
|
64
|
+
|
65
|
+
its([:uri]) { should eq 'hans' }
|
66
|
+
end
|
67
|
+
|
68
|
+
context 'with uri as string' do
|
69
|
+
let(:settings) { {"test" => { 'uri' => "hans"}}}
|
70
|
+
|
71
|
+
its([:uri]) { should eq 'hans' }
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
describe '#load' do
|
76
|
+
let(:config) do
|
77
|
+
cfg = ActiveSupport::OrderedOptions.new
|
78
|
+
cfg.rabbitmq_config = Rails.root.join *%w(config rabbitmq.yml)
|
79
|
+
cfg
|
80
|
+
end
|
81
|
+
|
82
|
+
context 'with autostart = false' do
|
83
|
+
it 'should not start Msgr' do
|
84
|
+
expect(Msgr).not_to receive(:start)
|
85
|
+
expect(Msgr::Railtie).to receive(:load_config).and_return({ "test" => { uri: 'test', autostart: false} })
|
86
|
+
Msgr::Railtie.load config
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
context 'without autostart value' do
|
91
|
+
it 'should not start Msgr' do
|
92
|
+
expect(Msgr).to receive(:start)
|
93
|
+
expect(Msgr::Railtie).to receive(:load_config).and_return({ "test" => { uri: 'test' } })
|
94
|
+
Msgr::Railtie.load config
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
12
98
|
end
|
@@ -47,5 +47,12 @@ describe Msgr::Client do
|
|
47
47
|
Msgr::Client.new(uri: 'ampq://localhost', ssl: true, host: 'a.example.org').start
|
48
48
|
end
|
49
49
|
end
|
50
|
+
|
51
|
+
context 'routes' do
|
52
|
+
let(:params) { [ routing_file: 'config/msgr.rb']}
|
53
|
+
before { client.start }
|
54
|
+
subject { client.routes }
|
55
|
+
its(:files) { should eq ['config/msgr.rb'] }
|
56
|
+
end
|
50
57
|
end
|
51
58
|
end
|
data/spec/msgr/msgr_spec.rb
CHANGED
@@ -33,4 +33,12 @@ describe Msgr do
|
|
33
33
|
|
34
34
|
sleep 10
|
35
35
|
end
|
36
|
+
|
37
|
+
describe '.after_load' do
|
38
|
+
before { allow_any_instance_of(Msgr::Client).to receive(:launch) }
|
39
|
+
|
40
|
+
it 'should yield the given block when Msgr.start is called' do
|
41
|
+
expect { |cb| Msgr.after_load &cb; Msgr.start }.to yield_with_args
|
42
|
+
end
|
43
|
+
end
|
36
44
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: msgr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jan Graichen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-03-
|
11
|
+
date: 2014-03-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|