fastly_nsq 0.13.2 → 1.0.2

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 (68) hide show
  1. checksums.yaml +5 -5
  2. data/.env +4 -0
  3. data/.overcommit.yml +3 -3
  4. data/.rubocop.yml +11 -1
  5. data/.travis.yml +8 -1
  6. data/Gemfile +9 -0
  7. data/README.md +52 -82
  8. data/Rakefile +2 -0
  9. data/bin/fastly_nsq +1 -0
  10. data/docker-compose.yml +23 -0
  11. data/examples/.sample.env +0 -3
  12. data/fastly_nsq.gemspec +7 -8
  13. data/lib/fastly_nsq.rb +44 -50
  14. data/lib/fastly_nsq/cli.rb +20 -14
  15. data/lib/fastly_nsq/consumer.rb +26 -30
  16. data/lib/fastly_nsq/feeder.rb +16 -0
  17. data/lib/fastly_nsq/http/nsqd.rb +7 -1
  18. data/lib/fastly_nsq/http/nsqlookupd.rb +1 -1
  19. data/lib/fastly_nsq/launcher.rb +31 -23
  20. data/lib/fastly_nsq/listener.rb +34 -103
  21. data/lib/fastly_nsq/manager.rb +48 -72
  22. data/lib/fastly_nsq/message.rb +2 -0
  23. data/lib/fastly_nsq/messenger.rb +5 -5
  24. data/lib/fastly_nsq/priority_queue.rb +12 -0
  25. data/lib/fastly_nsq/priority_thread_pool.rb +32 -0
  26. data/lib/fastly_nsq/producer.rb +52 -32
  27. data/lib/fastly_nsq/testing.rb +239 -0
  28. data/lib/fastly_nsq/tls_options.rb +2 -0
  29. data/lib/fastly_nsq/version.rb +3 -1
  30. data/spec/{lib/fastly_nsq/cli_spec.rb → cli_spec.rb} +2 -0
  31. data/spec/consumer_spec.rb +59 -0
  32. data/spec/fastly_nsq_spec.rb +72 -0
  33. data/spec/feeder_spec.rb +22 -0
  34. data/spec/{lib/fastly_nsq/http → http}/nsqd_spec.rb +1 -1
  35. data/spec/{lib/fastly_nsq/http → http}/nsqlookupd_spec.rb +1 -1
  36. data/spec/{lib/fastly_nsq/http_spec.rb → http_spec.rb} +3 -1
  37. data/spec/integration_spec.rb +48 -0
  38. data/spec/launcher_spec.rb +50 -0
  39. data/spec/listener_spec.rb +184 -0
  40. data/spec/manager_spec.rb +111 -0
  41. data/spec/matchers/delegate.rb +32 -0
  42. data/spec/{lib/fastly_nsq/message_spec.rb → message_spec.rb} +2 -0
  43. data/spec/{lib/fastly_nsq/messenger_spec.rb → messenger_spec.rb} +7 -5
  44. data/spec/priority_thread_pool_spec.rb +19 -0
  45. data/spec/producer_spec.rb +94 -0
  46. data/spec/spec_helper.rb +32 -28
  47. data/spec/support/http.rb +37 -0
  48. data/spec/support/webmock.rb +22 -0
  49. data/spec/{lib/fastly_nsq/tls_options_spec.rb → tls_options_spec.rb} +2 -0
  50. metadata +54 -96
  51. data/env_configuration_for_local_gem_tests.yml +0 -5
  52. data/example_config_class.rb +0 -20
  53. data/examples/Rakefile +0 -41
  54. data/lib/fastly_nsq/fake_backend.rb +0 -114
  55. data/lib/fastly_nsq/listener/config.rb +0 -35
  56. data/lib/fastly_nsq/rake_task.rb +0 -78
  57. data/lib/fastly_nsq/strategy.rb +0 -36
  58. data/spec/lib/fastly_nsq/consumer_spec.rb +0 -72
  59. data/spec/lib/fastly_nsq/fake_backend_spec.rb +0 -135
  60. data/spec/lib/fastly_nsq/fastly_nsq_spec.rb +0 -10
  61. data/spec/lib/fastly_nsq/launcher_spec.rb +0 -56
  62. data/spec/lib/fastly_nsq/listener_spec.rb +0 -213
  63. data/spec/lib/fastly_nsq/manager_spec.rb +0 -127
  64. data/spec/lib/fastly_nsq/producer_spec.rb +0 -60
  65. data/spec/lib/fastly_nsq/rake_task_spec.rb +0 -142
  66. data/spec/lib/fastly_nsq/strategy_spec.rb +0 -36
  67. data/spec/lib/fastly_nsq_spec.rb +0 -18
  68. data/spec/support/env_helpers.rb +0 -15
@@ -1,142 +0,0 @@
1
- require 'spec_helper'
2
- require 'fastly_nsq/rake_task'
3
-
4
- RSpec.describe FastlyNsq::RakeTask do
5
- before(:each) do
6
- Rake::Task.clear
7
- @original_logger = FastlyNsq.logger
8
- FastlyNsq.logger = Logger.new(nil)
9
- end
10
-
11
- after do
12
- FastlyNsq.logger = @original_logger
13
- end
14
-
15
- describe 'when defining tasks' do
16
- context 'when no task name is provided' do
17
- it 'creates a task with the default name' do
18
- default_task_name = 'begin_listening'
19
-
20
- FastlyNsq::RakeTask.new
21
- defined_tasks = Rake::Task.tasks
22
- first_task_name = defined_tasks.first.name
23
-
24
- expect(first_task_name).to eq default_task_name
25
- end
26
- end
27
-
28
- context 'when a task name is passed in' do
29
- it 'creates a task with the provided name' do
30
- task_name = 'test_name'
31
-
32
- FastlyNsq::RakeTask.new(task_name.to_sym)
33
- defined_tasks = Rake::Task.tasks
34
- first_task_name = defined_tasks.first.name
35
-
36
- expect(first_task_name).to eq task_name
37
- end
38
- end
39
- end
40
-
41
- describe 'when running tasks' do
42
- context 'when no channel is provided' do
43
- it 'raises an error' do
44
- expect do
45
- FastlyNsq::RakeTask.new(:begin_listening, [:channel])
46
- Rake::Task['begin_listening'].execute
47
- end.to raise_error(ArgumentError, /required.+channel/)
48
- end
49
- end
50
-
51
- context 'when no topics are provided' do
52
- it 'raises an error' do
53
- channel = 'best_server_number_1'
54
-
55
- expect do
56
- FastlyNsq::RakeTask.new(:begin_listening, [:channel])
57
- Rake::Task['begin_listening'].execute(channel: channel)
58
- end.to raise_error(ArgumentError, /required.+topics/)
59
- end
60
- end
61
-
62
- context 'when a channel and topics are defined' do
63
- let(:channel) { 'clown_generating_service' }
64
- let(:topics) { { customer_created: :fake_processor } }
65
- let(:listener) { class_double FastlyNsq::Listener, listen_to: nil }
66
-
67
- it 'configures via a block if one is given' do
68
- FastlyNsq::RakeTask.new(:begin_listening, %i[channel topics]) do |task|
69
- task.channel = channel
70
- task.topics = topics
71
- task.listener = listener
72
- end
73
-
74
- Rake::Task['begin_listening'].execute
75
-
76
- expect(listener).to have_received(:listen_to).
77
- with(hash_including(topic: :customer_created, channel: channel))
78
- end
79
-
80
- it 'prefers inline channel definition over block assignments' do
81
- new_channel = 'send_balloons_to_customer_service'
82
-
83
- FastlyNsq::RakeTask.new(:begin_listening, %i[channel topics]) do |task|
84
- task.channel = channel
85
- task.topics = topics
86
- task.listener = listener
87
- end
88
-
89
- Rake::Task['begin_listening'].execute(channel: new_channel, topics: topics, listener: listener)
90
-
91
- expect(listener).to have_received(:listen_to).
92
- with(hash_including(topic: :customer_created, channel: channel))
93
- end
94
-
95
- it 'configures a listener for each topic if there are multiple' do
96
- topics = %w[foo bar baz quuz etc]
97
-
98
- FastlyNsq::RakeTask.new(:begin_listening, %i[channel topics listener])
99
- Rake::Task['begin_listening'].execute(channel: channel, topics: topics, listener: listener)
100
-
101
- topics.each do |(topic, processor)|
102
- expect(listener).to have_received(:listen_to).
103
- with(hash_including(topic: topic, channel: channel, processor: processor))
104
- end
105
- end
106
-
107
- context 'and preprocessor is defined' do
108
- it 'passes preprocessor to the listener' do
109
- FastlyNsq::RakeTask.new(:begin_listening) do |task|
110
- task.channel = channel
111
- task.topics = topics
112
- task.listener = listener
113
- task.preprocessor = :noop
114
- end
115
-
116
- Rake::Task['begin_listening'].execute
117
-
118
- expect(listener).to have_received(:listen_to).
119
- with(hash_including(preprocessor: :noop))
120
- end
121
- end
122
-
123
- context 'and logger is defined' do
124
- let(:logger) { double 'Logger', info: nil }
125
-
126
- it 'passes logger to the listener' do
127
- FastlyNsq::RakeTask.new(:begin_listening) do |task|
128
- task.channel = channel
129
- task.topics = topics
130
- task.listener = listener
131
- task.logger = logger
132
- end
133
-
134
- Rake::Task['begin_listening'].execute
135
-
136
- expect(listener).to have_received(:listen_to).
137
- with(hash_including(logger: logger))
138
- end
139
- end
140
- end
141
- end
142
- end
@@ -1,36 +0,0 @@
1
- require 'spec_helper'
2
-
3
- RSpec.describe FastlyNsq::Strategy do
4
- describe 'when FAKE_QUEUE is falsy' do
5
- it 'returns the strategy based on the ENV variable' do
6
- [false, 0, '0', 'false', 'FALSE', 'off', 'OFF', nil].each do |no|
7
- allow(ENV).to receive(:[]).with('FAKE_QUEUE').and_return(no)
8
-
9
- strategy = FastlyNsq::Strategy.for_queue
10
-
11
- expect(strategy).to eq Nsq
12
- end
13
- end
14
- end
15
-
16
- describe 'when FAKE_QUEUE is truthy' do
17
- it 'returns the strategy based on the ENV variable' do
18
- [true, 1, '1', 'true', 'TRUE', 'on', 'ON'].each do |yes|
19
- allow(ENV).to receive(:[]).with('FAKE_QUEUE').and_return(yes)
20
-
21
- strategy = FastlyNsq::Strategy.for_queue
22
-
23
- expect(strategy).to eq FastlyNsq::FakeBackend
24
- end
25
- end
26
- end
27
-
28
- describe 'when the ENV is set incorrectly' do
29
- it 'raises with a helpful error' do
30
- allow(ENV).to receive(:[]).with('FAKE_QUEUE').and_return('taco')
31
-
32
- expect { FastlyNsq::Strategy.for_queue }.to \
33
- raise_error(FastlyNsq::Strategy::InvalidParameterError)
34
- end
35
- end
36
- end
@@ -1,18 +0,0 @@
1
- require 'spec_helper'
2
-
3
- RSpec.describe FastlyNsq do
4
- module TestStrategy; end
5
-
6
- it 'allows the logger to be set and retrieved' do
7
- logger = Logger.new(STDOUT)
8
- FastlyNsq.logger = logger
9
-
10
- expect(FastlyNsq.logger).to eq logger
11
- end
12
-
13
- it 'returns the current Strategy' do
14
- allow(FastlyNsq::Strategy).to receive(:for_queue).and_return(TestStrategy)
15
-
16
- expect(FastlyNsq.strategy).to eql(TestStrategy)
17
- end
18
- end
@@ -1,15 +0,0 @@
1
- module EnvHelpers
2
- def use_fake_connection
3
- allow(ENV).to receive(:[]).with('FAKE_QUEUE').and_return(true)
4
- yield
5
- end
6
-
7
- def use_real_connection
8
- allow(ENV).to receive(:[]).with('FAKE_QUEUE').and_return(false)
9
- yield
10
- end
11
- end
12
-
13
- RSpec.configure do |config|
14
- config.include EnvHelpers
15
- end