liebre 0.1.21 → 0.2.1

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.
Files changed (94) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +2 -0
  3. data/Gemfile.lock +9 -7
  4. data/{LICENSE → LICENSE.txt} +1 -1
  5. data/README.md +492 -195
  6. data/Rakefile +2 -0
  7. data/lib/liebre.rb +27 -16
  8. data/lib/liebre/actor.rb +11 -0
  9. data/lib/liebre/actor/consumer.rb +80 -0
  10. data/lib/liebre/actor/consumer/callback.rb +34 -0
  11. data/lib/liebre/actor/consumer/core.rb +80 -0
  12. data/lib/liebre/actor/consumer/reporter.rb +84 -0
  13. data/lib/liebre/actor/consumer/resources.rb +47 -0
  14. data/lib/liebre/actor/consumer/resources/config.rb +65 -0
  15. data/lib/liebre/actor/context.rb +40 -0
  16. data/lib/liebre/actor/context/declare.rb +44 -0
  17. data/lib/liebre/actor/context/handler.rb +44 -0
  18. data/lib/liebre/actor/publisher.rb +58 -0
  19. data/lib/liebre/actor/publisher/core.rb +42 -0
  20. data/lib/liebre/actor/publisher/reporter.rb +55 -0
  21. data/lib/liebre/actor/publisher/resources.rb +33 -0
  22. data/lib/liebre/actor/rpc/client.rb +88 -0
  23. data/lib/liebre/actor/rpc/client/core.rb +75 -0
  24. data/lib/liebre/actor/rpc/client/pending.rb +65 -0
  25. data/lib/liebre/actor/rpc/client/reporter.rb +71 -0
  26. data/lib/liebre/actor/rpc/client/resources.rb +62 -0
  27. data/lib/liebre/actor/rpc/client/task.rb +33 -0
  28. data/lib/liebre/actor/rpc/server.rb +74 -0
  29. data/lib/liebre/actor/rpc/server/callback.rb +28 -0
  30. data/lib/liebre/actor/rpc/server/core.rb +75 -0
  31. data/lib/liebre/actor/rpc/server/reporter.rb +72 -0
  32. data/lib/liebre/actor/rpc/server/resources.rb +53 -0
  33. data/lib/liebre/adapter.rb +8 -0
  34. data/lib/liebre/adapter/bunny.rb +23 -0
  35. data/lib/liebre/adapter/bunny/chan.rb +38 -0
  36. data/lib/liebre/adapter/bunny/conn.rb +32 -0
  37. data/lib/liebre/adapter/bunny/exchange.rb +20 -0
  38. data/lib/liebre/adapter/bunny/queue.rb +59 -0
  39. data/lib/liebre/adapter/interface.rb +26 -0
  40. data/lib/liebre/adapter/interface/chan.rb +29 -0
  41. data/lib/liebre/adapter/interface/conn.rb +21 -0
  42. data/lib/liebre/adapter/interface/exchange.rb +13 -0
  43. data/lib/liebre/adapter/interface/queue.rb +37 -0
  44. data/lib/liebre/bridge.rb +72 -0
  45. data/lib/liebre/bridge/channel_builder.rb +36 -0
  46. data/lib/liebre/config.rb +8 -38
  47. data/lib/liebre/engine.rb +61 -0
  48. data/lib/liebre/engine/builder.rb +48 -0
  49. data/lib/liebre/engine/repository.rb +56 -0
  50. data/lib/liebre/engine/state.rb +49 -0
  51. data/lib/liebre/runner.rb +15 -47
  52. data/lib/liebre/version.rb +1 -1
  53. data/liebre.gemspec +9 -7
  54. data/spec/integration/publish_and_consume_spec.rb +71 -0
  55. data/spec/integration/rpc_communication_spec.rb +81 -0
  56. data/spec/integration/start_twice_spec.rb +63 -0
  57. data/spec/liebre/actor/consumer_spec.rb +169 -0
  58. data/spec/liebre/actor/context/declare_spec.rb +69 -0
  59. data/spec/liebre/actor/context/handler_spec.rb +65 -0
  60. data/spec/liebre/actor/publisher_spec.rb +58 -0
  61. data/spec/liebre/actor/rpc/client_spec.rb +126 -0
  62. data/spec/liebre/actor/rpc/server_spec.rb +141 -0
  63. data/spec/liebre/adapter/bunny_spec.rb +66 -0
  64. data/spec/liebre/bridge_spec.rb +54 -0
  65. data/spec/liebre/engine/builder_spec.rb +42 -0
  66. data/spec/liebre/engine_spec.rb +90 -0
  67. data/spec/liebre/version_spec.rb +10 -0
  68. data/spec/spec_helper.rb +2 -9
  69. metadata +97 -58
  70. data/lib/liebre/common.rb +0 -7
  71. data/lib/liebre/common/utils.rb +0 -37
  72. data/lib/liebre/connection_manager.rb +0 -85
  73. data/lib/liebre/publisher.rb +0 -113
  74. data/lib/liebre/runner/consumers.rb +0 -46
  75. data/lib/liebre/runner/starter.rb +0 -44
  76. data/lib/liebre/runner/starter/consumer.rb +0 -129
  77. data/lib/liebre/runner/starter/consumer/handler.rb +0 -35
  78. data/lib/liebre/runner/starter/resources.rb +0 -45
  79. data/lib/liebre/runner/starter/resources/queue_builder.rb +0 -63
  80. data/lib/liebre/runner/starter/rpc.rb +0 -59
  81. data/lib/liebre/tasks.rb +0 -12
  82. data/spec/config/liebre.yml +0 -48
  83. data/spec/config/rabbitmq.yml +0 -35
  84. data/spec/integration_spec.rb +0 -76
  85. data/spec/liebre/config_spec.rb +0 -63
  86. data/spec/liebre/connection_manager_spec.rb +0 -44
  87. data/spec/liebre/publisher_spec.rb +0 -92
  88. data/spec/liebre/runner/consumers_spec.rb +0 -59
  89. data/spec/liebre/runner/starter/consumer_spec.rb +0 -145
  90. data/spec/liebre/runner/starter/resources/queue_builder_spec.rb +0 -69
  91. data/spec/liebre/runner/starter/resources_spec.rb +0 -38
  92. data/spec/liebre/runner/starter/rpc_spec.rb +0 -100
  93. data/spec/liebre/runner/starter_spec.rb +0 -70
  94. data/spec/liebre/runner_spec.rb +0 -54
@@ -1,145 +0,0 @@
1
- require 'spec_helper'
2
-
3
- RSpec.describe Liebre::Runner::Starter::Consumer do
4
-
5
- let(:connection) { double 'connection' }
6
-
7
- let(:class_name) { "MyConsumer" }
8
- let(:pool_size) { 4 }
9
-
10
- let :config do
11
- {
12
- "class_name" => class_name,
13
- "pool_size" => pool_size,
14
- "rpc" => false,
15
- "exchange" => {
16
- "name" => "test_exchange",
17
- "type" => "direct",
18
- "opts" => {
19
- "durable" => true
20
- }
21
- },
22
- "queue" => {
23
- "name" => "test_queue",
24
- "opts" => {
25
- "durable" => true
26
- }
27
- }
28
- }
29
- end
30
-
31
- let :error_config do
32
- {
33
- "class_name" => class_name,
34
- "pool_size" => pool_size,
35
- "rpc" => false,
36
- "exchange" => {
37
- "name" => "test_exchange-error",
38
- "type" => "direct",
39
- "opts" => {
40
- "durable" => true
41
- }
42
- },
43
- "queue" => {
44
- "name" => "test_queue-error",
45
- "opts" => {
46
- "durable" => true
47
- }
48
- }
49
- }
50
- end
51
-
52
- let :parsed_config do
53
- {
54
- "class_name" => class_name,
55
- "pool_size" => pool_size,
56
- "rpc" => false,
57
- "exchange" => {
58
- "name" => "test_exchange",
59
- "type" => "direct",
60
- "opts" => {
61
- "durable" => true
62
- }
63
- },
64
- "queue" => {
65
- "name" => "test_queue",
66
- "opts" => {
67
- "durable" => true,
68
- "arguments" => {
69
- 'x-dead-letter-exchange' => "test_exchange-error"
70
- }
71
- }
72
- }
73
- }
74
- end
75
-
76
- let(:exchange) { double 'exchange' }
77
- let(:queue) { double 'queue', :name => "queue" }
78
- let(:error_queue) { double 'error_queue' }
79
- let(:channel) { double 'channel' }
80
- let(:consumer) { double 'consumer' }
81
- let(:payload) { "the_payload" }
82
-
83
- subject { described_class.new(connection, config) }
84
-
85
- let :resources do
86
- double 'resources', :exchange => exchange, :queue => queue, :channel => channel
87
- end
88
-
89
- let :error_resources do
90
- double 'resources', :queue => error_queue
91
- end
92
-
93
- let(:class_name) { "MyConsumer" }
94
-
95
- let(:consumer_class) { double 'consumer_class', :name => 'consumer_class' }
96
- let(:consumer_instance) { double 'consumer_instance' }
97
-
98
- let :meta do
99
- double 'meta'
100
- end
101
-
102
- let(:handler) { double 'handler' }
103
-
104
- let(:deliver_info) { double 'deliver_info' }
105
- let(:ack) { :ack }
106
-
107
- before do
108
- expect(Liebre::Runner::Starter::Resources).to receive(:new).
109
- with(connection, error_config).and_return(error_resources)
110
-
111
- expect(Liebre::Runner::Starter::Resources).to receive(:new).
112
- with(connection, parsed_config).and_return(resources)
113
-
114
- stub_const(class_name, consumer_class)
115
-
116
- expect(described_class::Handler).to receive(:new).
117
- with(channel).and_return handler
118
- end
119
-
120
- it 'creates error queue and creates and subscribes to standard queue' do
121
-
122
- expect(queue).to receive :subscribe do |&block|
123
- block.call(deliver_info, meta, payload)
124
- consumer
125
- end
126
-
127
- expect(consumer_class).to receive :new do |given_payload, given_meta|
128
- expect(given_payload).to eq payload
129
- expect(given_meta ).to eq meta
130
-
131
- consumer_instance
132
- end
133
-
134
- expect(consumer_instance).to receive(:call).and_return ack
135
-
136
- expect(handler).to receive(:respond).with ack, deliver_info
137
-
138
- subject.start
139
-
140
- expect(consumer).to receive(:cancel)
141
- expect(channel).to receive(:close)
142
- subject.stop
143
- end
144
-
145
- end
@@ -1,69 +0,0 @@
1
- require 'spec_helper'
2
-
3
- RSpec.describe Liebre::Runner::Starter::Resources::QueueBuilder do
4
-
5
- let(:channel) { double 'channel' }
6
- let(:routing_key) { "foo" }
7
-
8
- let :config do
9
- {
10
- "queue" => {
11
- "name" => "my_queue",
12
- "opts" => {"some" => "option"}
13
- },
14
- "exchange" => {
15
- "name" => "my_exchange",
16
- "type" => "direct",
17
- "opts" => {"an" => "option"}
18
- },
19
- "bind" => {"routing_key" => routing_key}
20
- }
21
- end
22
-
23
- let(:exchange) { double 'exchange' }
24
- let(:queue) { double 'queue' }
25
-
26
- subject { described_class.new(channel, config) }
27
-
28
- describe '#call' do
29
-
30
- it 'builds and binds the queue properly' do
31
- expect(channel).to receive(:exchange).
32
- with("my_exchange", :type => "direct", :an => "option").
33
- and_return(exchange)
34
-
35
- expect(channel).to receive(:queue).
36
- with("my_queue", :some => "option").
37
- and_return(queue)
38
-
39
- expect(queue).to receive(:bind).
40
- with(exchange, :routing_key => "foo")
41
-
42
- expect(subject.queue).to eq queue
43
- end
44
- end
45
-
46
- describe "with multiple routing_keys" do
47
- let(:routing_key) { %W{a b c} }
48
-
49
- it 'builds and binds the queue properly' do
50
- allow(channel).to receive(:exchange).
51
- with("my_exchange", :type => "direct", :an => "option").
52
- and_return(exchange)
53
-
54
- expect(channel).to receive(:queue).
55
- with("my_queue", :some => "option").
56
- and_return(queue)
57
-
58
- expect(queue).to receive(:bind).
59
- with(exchange, :routing_key => "a")
60
- expect(queue).to receive(:bind).
61
- with(exchange, :routing_key => "b")
62
- expect(queue).to receive(:bind).
63
- with(exchange, :routing_key => "c")
64
-
65
- expect(subject.queue).to eq queue
66
- end
67
- end
68
-
69
- end
@@ -1,38 +0,0 @@
1
- require 'spec_helper'
2
-
3
- RSpec.describe Liebre::Runner::Starter::Resources do
4
-
5
- let(:connection) { double 'connection' }
6
-
7
- let(:pool_size) { 4 }
8
- let(:config) { {"pool_size" => pool_size} }
9
-
10
- subject { described_class.new(connection, config) }
11
-
12
- describe '#exchange and #queue' do
13
- let(:channel) { double 'channel' }
14
- let(:exchange) { double 'exchange' }
15
-
16
- let(:queue) { double 'queue' }
17
- let(:queue_builder) { double 'queue_builder', :queue => queue, :exchange => exchange }
18
-
19
- before do
20
- allow(connection).to receive(:create_channel).
21
- with(nil, pool_size).and_return(channel)
22
-
23
- allow(channel).to receive(:prefetch).with(10)
24
-
25
- allow(channel).to receive(:default_exchange).
26
- and_return(exchange)
27
-
28
- allow(described_class::QueueBuilder).to receive(:new).
29
- with(channel, config).and_return(queue_builder)
30
- end
31
-
32
- it 'builds exchange and queue properly' do
33
- expect(subject.exchange).to eq exchange
34
- expect(subject.queue ).to eq queue
35
- end
36
- end
37
-
38
- end
@@ -1,100 +0,0 @@
1
- require 'spec_helper'
2
-
3
- RSpec.describe Liebre::Runner::Starter::RPC do
4
-
5
- let(:connection) { double 'connection' }
6
-
7
- let(:class_name) { "MyRPC" }
8
- let(:pool_size) { 4 }
9
-
10
- let :config do
11
- {
12
- "class_name" => class_name,
13
- "pool_size" => pool_size,
14
- "rpc" => true,
15
- "exchange" => {
16
- "name" => "test_exchange",
17
- "type" => "direct",
18
- "opts" => {
19
- "durable" => false
20
- }
21
- },
22
- "queue" => {
23
- "name" => "test_queue",
24
- "opts" => {
25
- "durable" => false
26
- }
27
- }
28
- }
29
- end
30
-
31
- let(:exchange) { double 'exchange' }
32
- let(:queue) { double 'queue', :name => "queue" }
33
- let(:channel) { double 'channel', :default_exchange => exchange }
34
- let(:consumer) { double 'consumer' }
35
- let(:payload) { "the_payload" }
36
- let(:response) { "the_response" }
37
-
38
- subject { described_class.new(connection, config) }
39
-
40
- let :resources do
41
- double 'resources', :exchange => exchange, :queue => queue, :channel => channel
42
- end
43
-
44
- let(:class_name) { "MyConsumer" }
45
-
46
- let(:rpc_class) { double 'rpc_class', :name => 'rpc_class' }
47
- let(:rpc_instance) { double 'rpc_instance' }
48
-
49
- let(:reply_to) { "queue_to_reply_to" }
50
- let(:correlation_id) { 123 }
51
- let(:headers) { {} }
52
- let :meta do
53
- double 'meta',
54
- :reply_to => reply_to,
55
- :correlation_id => correlation_id,
56
- :headers => headers
57
- end
58
-
59
- let :opts do
60
- {:routing_key => reply_to, :correlation_id => correlation_id, :headers => headers}
61
- end
62
-
63
- let(:handler) { double 'handler' }
64
-
65
- let(:deliver_info) { double 'deliver_info' }
66
-
67
- before do
68
- allow(Liebre::Runner::Starter::Resources).to receive(:new).
69
- with(connection, config).and_return(resources)
70
-
71
- stub_const(class_name, rpc_class)
72
- end
73
-
74
- it 'creates error queue and creates and subscribes to standard queue' do
75
-
76
- expect(exchange).to receive(:publish).with(response, opts)
77
-
78
- expect(queue).to receive :subscribe do |&block|
79
- block.call(deliver_info, meta, payload)
80
- consumer
81
- end
82
-
83
- expect(rpc_class).to receive :new do |given_payload, given_meta, callback|
84
- expect(given_payload).to eq payload
85
- expect(given_meta ).to eq meta
86
- callback.call(response)
87
-
88
- rpc_instance
89
- end
90
-
91
- expect(rpc_instance).to receive(:call)
92
-
93
- subject.start
94
-
95
- expect(consumer).to receive(:cancel)
96
- expect(channel).to receive(:close)
97
- subject.stop
98
- end
99
-
100
- end
@@ -1,70 +0,0 @@
1
- require 'spec_helper'
2
-
3
- RSpec.describe Liebre::Runner::Starter do
4
-
5
- let(:connection_manager) { double 'connection_manager' }
6
- let(:connection) { double 'connection' }
7
- let(:consumer) { double 'consumer' }
8
-
9
- let(:rpc) { true }
10
-
11
- let :config do
12
- {
13
- "rpc" => rpc,
14
- "connection_name" => "rpc"
15
- }
16
- end
17
-
18
- subject { described_class.new(connection_manager, config) }
19
-
20
- context "RPC" do
21
-
22
- let(:rpc_instance) { double 'rpc_instance' }
23
-
24
- describe '#start and #stop' do
25
-
26
- it 'calls the rpc_class with a callback' do
27
- expect(connection_manager).to receive(:get).with(:rpc).and_return connection
28
- expect(described_class::RPC).to receive(:new).with(connection, config).and_return rpc_instance
29
- expect(rpc_instance).to receive(:start).and_return consumer
30
-
31
- subject.start
32
-
33
- expect(consumer).to receive(:stop)
34
-
35
- subject.stop
36
-
37
- end
38
- end
39
- end
40
-
41
- context "Standard Consumer" do
42
-
43
- let(:rpc) { false }
44
-
45
- let(:consumer) { double 'consumer' }
46
-
47
- let :config do
48
- {
49
- "rpc" => rpc
50
- }
51
- end
52
-
53
- describe '#start and #stop' do
54
-
55
- it 'calls the rpc_class with a callback' do
56
- expect(connection_manager).to receive(:get).with(:default).and_return connection
57
- expect(described_class::Consumer).to receive(:new).with(connection, config).and_return consumer
58
- expect(consumer).to receive(:start).and_return consumer
59
-
60
- subject.start
61
-
62
- expect(consumer).to receive(:stop)
63
-
64
- subject.stop
65
-
66
- end
67
- end
68
-
69
- end
70
- end
@@ -1,54 +0,0 @@
1
- require 'spec_helper'
2
-
3
- RSpec.describe Liebre::Runner do
4
-
5
- let :connection_path do
6
- File.expand_path("../../config/rabbitmq.yml" ,__FILE__)
7
- end
8
-
9
- let(:interval) { 1234 }
10
-
11
- subject { described_class.new(interval) }
12
- let(:logger) { double 'logger' }
13
-
14
- let(:connection_manager) { double 'connection_manager'}
15
-
16
- let(:consumers) { double 'consumers' }
17
-
18
- before do
19
- Liebre::Config.connection_path = connection_path
20
-
21
- allow(subject).to receive(:logger).
22
- and_return(logger)
23
-
24
- allow(Liebre::ConnectionManager).to receive(:instance).
25
- and_return(connection_manager)
26
-
27
- allow(described_class::Consumers).to receive(:new).
28
- with(connection_manager).and_return(consumers)
29
- end
30
-
31
- describe '#run' do
32
- it 'logs and retries after fail' do
33
- expect(connection_manager).to receive(:restart) do
34
- raise "some error"
35
- end
36
-
37
- expect(logger).to receive(:warn) do |error|
38
- expect(error.message).to match /some error/
39
- end
40
- expect(subject).to receive(:sleep).with(interval)
41
- expect(logger).to receive(:warn) do |message|
42
- expect(message).to match /Retrying/
43
- end
44
-
45
- expect(connection_manager).to receive(:restart)
46
- expect(consumers ).to receive(:start_all)
47
-
48
- expect(subject).to receive(:sleep)
49
-
50
- subject.start
51
- end
52
- end
53
-
54
- end