msgr 0.3.0 → 0.4.0
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.
- 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
|