shoryuken 0.0.5 → 1.0.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.
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ describe Shoryuken::Topic do
4
+ let(:sns) { Aws::SNS::Client.new stub_responses: true }
5
+ let(:topic_arn) { 'arn:aws:sns:us-east-1:0987654321:shoryuken' }
6
+ let(:topic_name) { 'shoryuken' }
7
+
8
+ before do
9
+ Shoryuken::Client.account_id = '0987654321'
10
+ Aws.config = { region: 'us-east-1' }
11
+ end
12
+
13
+ subject { described_class.new(topic_name, sns) }
14
+
15
+ describe '#send_message' do
16
+ it 'enqueues a message' do
17
+ sns.stub_responses(:publish, { message_id: 'msg1' })
18
+ expect(sns).to receive(:publish).with(topic_arn: topic_arn, message: 'test')
19
+
20
+ subject.send_message('test')
21
+ end
22
+
23
+ it 'parses as JSON by default' do
24
+ msg = { field: 'test', other_field: 'other' }
25
+
26
+ sns.stub_responses(:publish, { message_id: 'msg2' })
27
+ expect(sns).to receive(:publish).with(topic_arn: topic_arn, message: JSON.dump(msg))
28
+
29
+ subject.send_message(msg)
30
+ end
31
+ end
32
+ end
@@ -16,7 +16,9 @@ describe 'Shoryuken::Util' do
16
16
  end
17
17
 
18
18
  describe '#worker_name' do
19
- let(:sqs_msg) { double AWS::SQS::ReceivedMessage, id: 'fc754df7-9cc2-4c41-96ca-5996a44b771e', message_attributes: {} }
19
+ let(:sqs_msg) do
20
+ double Aws::SQS::Message, message_id: 'fc754df7-9cc2-4c41-96ca-5996a44b771e', message_attributes: {}
21
+ end
20
22
 
21
23
  it 'returns Shoryuken worker name' do
22
24
  expect(subject.worker_name(TestWorker, sqs_msg)).to eq 'TestWorker'
@@ -10,15 +10,15 @@ describe 'Shoryuken::Worker' do
10
10
 
11
11
  describe '.perform_in' do
12
12
  it 'delays a message' do
13
- expect(sqs_queue).to receive(:send_message).with('message', {
13
+ expect(sqs_queue).to receive(:send_message).with(
14
14
  message_attributes: {
15
15
  'shoryuken_class' => {
16
16
  string_value: TestWorker.to_s,
17
17
  data_type: 'String'
18
18
  }
19
19
  },
20
- delay_seconds: 60
21
- })
20
+ message_body: 'message',
21
+ delay_seconds: 60)
22
22
 
23
23
  TestWorker.perform_in(60, 'message')
24
24
  end
@@ -32,15 +32,15 @@ describe 'Shoryuken::Worker' do
32
32
 
33
33
  describe '.perform_at' do
34
34
  it 'delays a message' do
35
- expect(sqs_queue).to receive(:send_message).with('message', {
35
+ expect(sqs_queue).to receive(:send_message).with(
36
36
  message_attributes: {
37
37
  'shoryuken_class' => {
38
38
  string_value: TestWorker.to_s,
39
39
  data_type: 'String'
40
40
  }
41
41
  },
42
- delay_seconds: 60
43
- })
42
+ message_body: 'message',
43
+ delay_seconds: 60)
44
44
 
45
45
  TestWorker.perform_in(Time.now + 60, 'message')
46
46
  end
@@ -54,28 +54,41 @@ describe 'Shoryuken::Worker' do
54
54
 
55
55
  describe '.perform_async' do
56
56
  it 'enqueues a message' do
57
- expect(sqs_queue).to receive(:send_message).with('message', {
57
+ expect(sqs_queue).to receive(:send_message).with(
58
58
  message_attributes: {
59
59
  'shoryuken_class' => {
60
60
  string_value: TestWorker.to_s,
61
61
  data_type: 'String'
62
62
  }
63
- }
64
- })
63
+ },
64
+ message_body: 'message')
65
65
 
66
66
  TestWorker.perform_async('message')
67
67
  end
68
68
 
69
+ it 'enqueues a message given as hash' do
70
+ expect(sqs_queue).to receive(:send_message).with(
71
+ message_attributes: {
72
+ 'shoryuken_class' => {
73
+ string_value: TestWorker.to_s,
74
+ data_type: 'String'
75
+ }
76
+ },
77
+ message_body: '{"field":"part1","other_field":"part2"}')
78
+
79
+ TestWorker.perform_async(field: 'part1', other_field: 'part2')
80
+ end
81
+
69
82
  it 'enqueues a message with options' do
70
- expect(sqs_queue).to receive(:send_message).with('delayed message', {
83
+ expect(sqs_queue).to receive(:send_message).with(
71
84
  delay_seconds: 60,
72
85
  message_attributes: {
73
86
  'shoryuken_class' => {
74
87
  string_value: TestWorker.to_s,
75
88
  data_type: 'String'
76
89
  }
77
- }
78
- })
90
+ },
91
+ message_body: 'delayed message')
79
92
 
80
93
  TestWorker.perform_async('delayed message', delay_seconds: 60)
81
94
  end
data/spec/spec_helper.rb CHANGED
@@ -5,20 +5,31 @@ require 'pry-byebug'
5
5
  require 'celluloid'
6
6
  require 'shoryuken'
7
7
  require 'json'
8
+ require 'multi_xml'
9
+ require 'dotenv'
10
+ Dotenv.load
8
11
 
9
- options_file = File.join(File.expand_path('../..', __FILE__), 'shoryuken.yml')
10
-
11
- $options = {}
12
+ if ENV['CODECLIMATE_REPO_TOKEN']
13
+ require 'codeclimate-test-reporter'
14
+ CodeClimate::TestReporter.start
15
+ end
12
16
 
13
- if File.exists? options_file
14
- $options = YAML.load(File.read(options_file)).deep_symbolize_keys
17
+ config_file = File.join(File.expand_path('../..', __FILE__), 'spec', 'shoryuken.yml')
15
18
 
16
- AWS.config $options[:aws]
17
- end
19
+ Shoryuken::EnvironmentLoader.load(config_file: config_file)
18
20
 
19
21
  Shoryuken.logger.level = Logger::UNKNOWN
20
22
  Celluloid.logger.level = Logger::UNKNOWN
21
23
 
24
+ # I'm not sure whether this is an issue specific to running Shoryuken against github.com/comcast/cmb
25
+ # as opposed to AWS itself, but sometimes the receive_messages call returns XML that looks like this:
26
+ #
27
+ # <ReceiveMessageResponse>\n\t<ReceiveMessageResult>\n\t</ReceiveMessageResult> ... </ReceiveMessageResponse>
28
+ #
29
+ # The default MultiXML parser is ReXML, which seems to mishandle \n\t chars. Nokogiri seems to be
30
+ # the only one that correctly ignore this whitespace.
31
+ MultiXml.parser = :nokogiri
32
+
22
33
  class TestWorker
23
34
  include Shoryuken::Worker
24
35
 
@@ -37,16 +48,16 @@ RSpec.configure do |config|
37
48
  Shoryuken::Client.class_variable_set :@@queues, {}
38
49
  Shoryuken::Client.class_variable_set :@@visibility_timeouts, {}
39
50
 
40
- Shoryuken.options.clear
41
- Shoryuken.options.merge!($options)
51
+ Shoryuken::Client.sqs = nil
52
+ Shoryuken::Client.sqs_resource = nil
53
+ Shoryuken::Client.sns = nil
42
54
 
43
55
  Shoryuken.queues.clear
44
56
 
45
57
  Shoryuken.options[:concurrency] = 1
46
58
  Shoryuken.options[:delay] = 1
47
59
  Shoryuken.options[:timeout] = 1
48
-
49
- Shoryuken.options[:aws] = {}
60
+ Shoryuken.options[:aws].delete(:receive_message)
50
61
 
51
62
  TestWorker.get_shoryuken_options.clear
52
63
  TestWorker.get_shoryuken_options['queue'] = 'default'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shoryuken
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pablo Cantero
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-29 00:00:00.000000000 Z
11
+ date: 2015-03-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -67,19 +67,61 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: aws-sdk-v1
70
+ name: nokogiri
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - '>='
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
- type: :runtime
76
+ type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - '>='
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: dotenv
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: aws-sdk-core
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '='
102
+ - !ruby/object:Gem::Version
103
+ version: 2.0.21
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '='
109
+ - !ruby/object:Gem::Version
110
+ version: 2.0.21
111
+ - !ruby/object:Gem::Dependency
112
+ name: aws-sdk-resources
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '='
116
+ - !ruby/object:Gem::Version
117
+ version: 2.0.21.pre
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '='
123
+ - !ruby/object:Gem::Version
124
+ version: 2.0.21.pre
83
125
  - !ruby/object:Gem::Dependency
84
126
  name: celluloid
85
127
  requirement: !ruby/object:Gem::Requirement
@@ -103,6 +145,7 @@ extensions: []
103
145
  extra_rdoc_files: []
104
146
  files:
105
147
  - .gitignore
148
+ - .hound.yml
106
149
  - .rspec
107
150
  - .travis.yml
108
151
  - Gemfile
@@ -117,6 +160,7 @@ files:
117
160
  - lib/shoryuken/client.rb
118
161
  - lib/shoryuken/core_ext.rb
119
162
  - lib/shoryuken/default_worker_registry.rb
163
+ - lib/shoryuken/environment_loader.rb
120
164
  - lib/shoryuken/extensions/active_job_adapter.rb
121
165
  - lib/shoryuken/fetcher.rb
122
166
  - lib/shoryuken/launcher.rb
@@ -127,6 +171,8 @@ files:
127
171
  - lib/shoryuken/middleware/server/auto_delete.rb
128
172
  - lib/shoryuken/middleware/server/timing.rb
129
173
  - lib/shoryuken/processor.rb
174
+ - lib/shoryuken/sns_arn.rb
175
+ - lib/shoryuken/topic.rb
130
176
  - lib/shoryuken/util.rb
131
177
  - lib/shoryuken/version.rb
132
178
  - lib/shoryuken/worker.rb
@@ -134,6 +180,7 @@ files:
134
180
  - shoryuken.gemspec
135
181
  - shoryuken.jpg
136
182
  - spec/integration/launcher_spec.rb
183
+ - spec/shoryuken.yml
137
184
  - spec/shoryuken/client_spec.rb
138
185
  - spec/shoryuken/core_ext_spec.rb
139
186
  - spec/shoryuken/default_worker_registry_spec.rb
@@ -143,6 +190,8 @@ files:
143
190
  - spec/shoryuken/middleware/server/auto_delete_spec.rb
144
191
  - spec/shoryuken/middleware/server/timing_spec.rb
145
192
  - spec/shoryuken/processor_spec.rb
193
+ - spec/shoryuken/sns_arn_spec.rb
194
+ - spec/shoryuken/topic_spec.rb
146
195
  - spec/shoryuken/util_spec.rb
147
196
  - spec/shoryuken/worker_spec.rb
148
197
  - spec/shoryuken_spec.rb
@@ -167,12 +216,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
167
216
  version: '0'
168
217
  requirements: []
169
218
  rubyforge_project:
170
- rubygems_version: 2.0.14
219
+ rubygems_version: 2.4.5
171
220
  signing_key:
172
221
  specification_version: 4
173
222
  summary: Shoryuken is a super efficient AWS SQS thread based message processor
174
223
  test_files:
175
224
  - spec/integration/launcher_spec.rb
225
+ - spec/shoryuken.yml
176
226
  - spec/shoryuken/client_spec.rb
177
227
  - spec/shoryuken/core_ext_spec.rb
178
228
  - spec/shoryuken/default_worker_registry_spec.rb
@@ -182,6 +232,8 @@ test_files:
182
232
  - spec/shoryuken/middleware/server/auto_delete_spec.rb
183
233
  - spec/shoryuken/middleware/server/timing_spec.rb
184
234
  - spec/shoryuken/processor_spec.rb
235
+ - spec/shoryuken/sns_arn_spec.rb
236
+ - spec/shoryuken/topic_spec.rb
185
237
  - spec/shoryuken/util_spec.rb
186
238
  - spec/shoryuken/worker_spec.rb
187
239
  - spec/shoryuken_spec.rb