fastly_nsq 0.10.1 → 0.12.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/lib/fastly_nsq.rb +4 -2
- data/lib/fastly_nsq/cli.rb +9 -0
- data/lib/fastly_nsq/listener.rb +3 -2
- data/lib/fastly_nsq/message.rb +22 -3
- data/lib/fastly_nsq/messenger.rb +13 -10
- data/lib/fastly_nsq/strategy.rb +0 -2
- data/lib/fastly_nsq/version.rb +1 -1
- data/spec/lib/fastly_nsq/message_spec.rb +33 -3
- 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: ec5180b8b65ede93fdbb509c673c8bb539f9010e
|
4
|
+
data.tar.gz: 58705d4fe6bd3fb791803f393db63fb53b57c3ae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 787a47a30094daac20acc0db56e9a257716be62f2a212df288fa2c488646508bc49fd8589d034b661bbdf38183ddba1ad627c10967796a63cbeb29f8fc3c66de
|
7
|
+
data.tar.gz: c0cfe65d8a15bca78def1d826f98ce4d632f6b09a581298e37ebfa8e4a3fca94d2e2b5b12473015291c881886e3ffa8cab442d1276d8620c755e7b1d06d59b8a
|
data/lib/fastly_nsq.rb
CHANGED
@@ -12,6 +12,8 @@ require 'fastly_nsq/version'
|
|
12
12
|
module FastlyNsq
|
13
13
|
module_function
|
14
14
|
|
15
|
+
@preprocessor = nil
|
16
|
+
|
15
17
|
def channel=(channel)
|
16
18
|
@channel ||= channel
|
17
19
|
end
|
@@ -20,7 +22,7 @@ module FastlyNsq
|
|
20
22
|
strategy.logger = logger
|
21
23
|
end
|
22
24
|
|
23
|
-
def
|
25
|
+
def preprocessor=(preprocessor)
|
24
26
|
@preprocessor ||= preprocessor
|
25
27
|
end
|
26
28
|
|
@@ -32,7 +34,7 @@ module FastlyNsq
|
|
32
34
|
strategy.logger
|
33
35
|
end
|
34
36
|
|
35
|
-
def
|
37
|
+
def preprocessor
|
36
38
|
@preprocessor
|
37
39
|
end
|
38
40
|
|
data/lib/fastly_nsq/cli.rb
CHANGED
@@ -55,11 +55,20 @@ class FastlyNsq::CLI
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def startup
|
58
|
+
boot_rails
|
58
59
|
require options[:require] if options[:require]
|
59
60
|
FastlyNsq.logger.info "Running in #{RUBY_DESCRIPTION}"
|
60
61
|
FastlyNsq.logger.info 'Starting processing, hit Ctrl-C to stop' unless options[:daemon]
|
61
62
|
end
|
62
63
|
|
64
|
+
def boot_rails
|
65
|
+
return unless ENV['RAILS_ENV']
|
66
|
+
|
67
|
+
require 'rails'
|
68
|
+
require File.expand_path('./config/application.rb')
|
69
|
+
require File.expand_path('./config/environment.rb')
|
70
|
+
end
|
71
|
+
|
63
72
|
def parse(args)
|
64
73
|
opts = {}
|
65
74
|
|
data/lib/fastly_nsq/listener.rb
CHANGED
@@ -94,8 +94,9 @@ module FastlyNsq
|
|
94
94
|
end
|
95
95
|
|
96
96
|
def next_message
|
97
|
-
|
98
|
-
|
97
|
+
nsq_message = @consumer.pop # TODO: consumer.pop do |message|
|
98
|
+
message = FastlyNsq::Message.new(nsq_message)
|
99
|
+
result = yield message
|
99
100
|
message.finish if result
|
100
101
|
end
|
101
102
|
|
data/lib/fastly_nsq/message.rb
CHANGED
@@ -1,11 +1,16 @@
|
|
1
1
|
require 'json'
|
2
2
|
|
3
3
|
class FastlyNsq::Message
|
4
|
-
|
4
|
+
extend Forwardable
|
5
|
+
|
6
|
+
def_delegators :@nsq_message, :attempts, :touch, :timestamp
|
7
|
+
|
8
|
+
attr_reader :managed, :nsq_message, :raw_body
|
5
9
|
alias to_s raw_body
|
6
10
|
|
7
|
-
def initialize(
|
8
|
-
@
|
11
|
+
def initialize(nsq_message)
|
12
|
+
@nsq_message = nsq_message
|
13
|
+
@raw_body = nsq_message.body
|
9
14
|
end
|
10
15
|
|
11
16
|
def data
|
@@ -15,4 +20,18 @@ class FastlyNsq::Message
|
|
15
20
|
def body
|
16
21
|
@body ||= JSON.parse(raw_body)
|
17
22
|
end
|
23
|
+
|
24
|
+
def finish
|
25
|
+
return managed if managed
|
26
|
+
|
27
|
+
@managed = :finished
|
28
|
+
nsq_message.finish
|
29
|
+
end
|
30
|
+
|
31
|
+
def requeue(*args)
|
32
|
+
return managed if managed
|
33
|
+
|
34
|
+
@managed = :requeued
|
35
|
+
nsq_message.requeue(*args)
|
36
|
+
end
|
18
37
|
end
|
data/lib/fastly_nsq/messenger.rb
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
module FastlyNsq::Messenger
|
2
|
-
|
2
|
+
DEFAULT_ORIGIN = 'Unknown'.freeze
|
3
|
+
@originating_service = DEFAULT_ORIGIN
|
4
|
+
|
5
|
+
module_function
|
6
|
+
|
7
|
+
def deliver(message:, on_topic:, originating_service: nil)
|
3
8
|
payload = {
|
4
9
|
data: message,
|
5
10
|
meta: {
|
@@ -12,11 +17,11 @@ module FastlyNsq::Messenger
|
|
12
17
|
end
|
13
18
|
end
|
14
19
|
|
15
|
-
def
|
20
|
+
def originating_service=(service)
|
16
21
|
@originating_service = service
|
17
22
|
end
|
18
23
|
|
19
|
-
def
|
24
|
+
def producer_for(topic:)
|
20
25
|
producer = producers[topic]
|
21
26
|
|
22
27
|
yield producer if block_given?
|
@@ -24,25 +29,23 @@ module FastlyNsq::Messenger
|
|
24
29
|
producer
|
25
30
|
end
|
26
31
|
|
27
|
-
def
|
32
|
+
def producers
|
28
33
|
@producers ||= Hash.new { |hash, topic| hash[topic] = FastlyNsq::Producer.new(topic: topic) }
|
29
34
|
end
|
30
35
|
|
31
|
-
def
|
36
|
+
def terminate_producer(topic:)
|
32
37
|
producer_for(topic: topic).terminate
|
33
38
|
producers.delete(topic)
|
34
39
|
end
|
35
40
|
|
36
|
-
def
|
41
|
+
def terminate_all_producers
|
37
42
|
producers.each do |topic, producer|
|
38
43
|
producer.terminate
|
39
44
|
producers.delete(topic)
|
40
45
|
end
|
41
46
|
end
|
42
47
|
|
43
|
-
|
44
|
-
|
45
|
-
def self.originating_service
|
46
|
-
@originating_service || 'Unknown'.freeze
|
48
|
+
def originating_service
|
49
|
+
@originating_service || DEFAULT_ORIGIN
|
47
50
|
end
|
48
51
|
end
|
data/lib/fastly_nsq/strategy.rb
CHANGED
data/lib/fastly_nsq/version.rb
CHANGED
@@ -2,9 +2,10 @@ require 'spec_helper'
|
|
2
2
|
require 'json'
|
3
3
|
|
4
4
|
RSpec.describe FastlyNsq::Message do
|
5
|
-
let(:
|
6
|
-
let(:
|
7
|
-
|
5
|
+
let(:nsq_message) { double 'Nsq::Message', body: json_body, attempts: nil, finish: nil, requeue: nil, touch: nil, timestamp: nil }
|
6
|
+
let(:body) { { 'data' => 'goes here', 'other_field' => 'is over here' } }
|
7
|
+
let(:json_body) { body.to_json }
|
8
|
+
subject { FastlyNsq::Message.new nsq_message }
|
8
9
|
|
9
10
|
it 'preserves original message body as raw_body' do
|
10
11
|
expect(subject.raw_body).to eq(json_body)
|
@@ -21,4 +22,33 @@ RSpec.describe FastlyNsq::Message do
|
|
21
22
|
it 'aliases raw_body to to_s' do
|
22
23
|
expect(subject.to_s).to eq(json_body)
|
23
24
|
end
|
25
|
+
|
26
|
+
it 'delegates methods to the nsq_message object' do
|
27
|
+
%w(attempts finish requeue touch timestamp).each do |method|
|
28
|
+
subject = FastlyNsq::Message.new nsq_message
|
29
|
+
expect(nsq_message).to receive(method)
|
30
|
+
|
31
|
+
subject.send(method)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'does not finish if the message was requeued' do
|
36
|
+
expect(nsq_message).to receive(:requeue).with(1000)
|
37
|
+
expect(nsq_message).not_to receive(:finish)
|
38
|
+
|
39
|
+
subject.requeue(1000)
|
40
|
+
subject.finish
|
41
|
+
|
42
|
+
expect(subject.managed).to eq(:requeued)
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'does not requeue if the message was finished' do
|
46
|
+
expect(nsq_message).to receive(:finish)
|
47
|
+
expect(nsq_message).not_to receive(:requeue)
|
48
|
+
|
49
|
+
subject.finish
|
50
|
+
subject.requeue
|
51
|
+
|
52
|
+
expect(subject.managed).to eq(:finished)
|
53
|
+
end
|
24
54
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastly_nsq
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.12.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tommy O'Neil
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2017-08-
|
14
|
+
date: 2017-08-22 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: awesome_print
|