em-amazon-sqs 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md ADDED
@@ -0,0 +1,23 @@
1
+ ## 0.2.1
2
+
3
+ Bugfixes:
4
+
5
+ - Add missing InvalidClientTokenId error [#1]
6
+
7
+ ## 0.2
8
+
9
+ Features:
10
+
11
+ - Add new SQS endpoints
12
+ - Add new support for MaximumMessageSize, MessageRetentionPeriod attributes for queue
13
+
14
+ ## 0.1.2
15
+
16
+ Features:
17
+
18
+ - Add exists? class method to SimpleQS::Queue
19
+ - Add delete class method to SimpleQS::Queue
20
+
21
+ Bugfixes:
22
+
23
+ - Fix gemspec, gem now works as it should :)
data/Gemfile ADDED
@@ -0,0 +1,10 @@
1
+ source :gemcutter
2
+
3
+ gem 'ruby-hmac', :require => false
4
+ gem 'xml-simple'
5
+ gem 'em-http-request',:git => 'git://github.com/igrigorik/em-http-request.git', :require => 'em-http'
6
+ gem 'addressable', :require => 'addressable/uri'
7
+
8
+ group :test do
9
+ gem 'rspec'
10
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,18 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ rcov (0.9.8)
5
+ rr (0.10.11)
6
+ rspec (1.3.0)
7
+ ruby-hmac (0.4.0)
8
+ xml-simple (1.0.12)
9
+
10
+ PLATFORMS
11
+ ruby
12
+
13
+ DEPENDENCIES
14
+ rcov
15
+ rr
16
+ rspec
17
+ ruby-hmac
18
+ xml-simple
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010 Marjan Krekoten'
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOa AND
17
+ NONINFRINGEMENT. IN NO EVENT SaALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,284 @@
1
+ # English #
2
+
3
+ ## Installation ##
4
+
5
+ [sudo] gem install simple_qs
6
+
7
+ ## Usage ##
8
+
9
+ require 'simple_qs'
10
+ SimpleQS.account_id = 'your-account-id'
11
+ SimpleQS.access_key_id = 'YOUR_ACCESS_KEY'
12
+ SimpleQS.secret_access_key = 'YOUR_SECRET_ACCESS_KEY'
13
+
14
+ ### Region ###
15
+
16
+ You can select region for queue:
17
+
18
+ # :us_east_1 => 'sqs.us-east-1.amazonaws.com',
19
+ # :us_west_1 => 'sqs.us-west-1.amazonaws.com',
20
+ # :eu_west_1 => 'sqs.eu-west-1.amazonaws.com',
21
+ # :ap_southeast_1 => 'sqs.ap-southeast-1.amazonaws.com'
22
+ SimpleQS.host # => 'sqs.us-east-1.amazonaws.com'
23
+
24
+ SimpleQS.host = :eu_west_1
25
+ SimpleQS.host # => 'sqs.eu-west-1.amazonaws.com'
26
+
27
+ ### Queues ###
28
+
29
+ Create a queue:
30
+
31
+ queue = SimpleQS::Queue.create('queue_name')
32
+
33
+ Or:
34
+
35
+ SimpleQS::Queue.create('queue_name') do |queue|
36
+ # ...
37
+ end
38
+
39
+ Create a queue with specific default visibility timeout for received messages:
40
+
41
+ SimpleQS::Queue.create('queue_name', 60) # Visibility timeout set to 60 secinds instead of default 30
42
+
43
+ List all account's queues:
44
+
45
+ SimpleQS::Queue.list # returns list of SimpleQS::Queue objects
46
+
47
+ List all account's queues starting with 'test':
48
+
49
+ SimpleQS::Queue.list('test')
50
+
51
+ Check if queue exists:
52
+
53
+ SimpleQS::Queue.exists?('queue_name')
54
+
55
+ Change default visibility timeout for queue:
56
+
57
+ SimpleQS::Queue.new('queue_name').set_visibility_timeout(120)
58
+
59
+ Change maximum message size for queue:
60
+
61
+ SimpleQS::Queue.new('queue_name').set_maximum_message_size(65536)
62
+
63
+ Change message retention period:
64
+
65
+ SimpleQS::Queue.new('queue_name').set_message_retention_period(1209600)
66
+
67
+ Set queue attributes:
68
+
69
+ SimpleQS::Queue.new('queue_name').set_attributes({:VisibilityTimeout => 120, :Policy => "policy JSON here"})
70
+
71
+ Get queue attributes:
72
+
73
+ SimpleQS::Queue.new('queue_name').get_attributes(:All)
74
+
75
+ Add permissions:
76
+
77
+ SimpleQS::Queue.new('queue_name').add_permissions('testPerms', [
78
+ {:account_id => '098166147350', :action => 'SendMessage'},
79
+ {:account_id => '098166147350', :action => 'ReceiveMessage'}
80
+ ])
81
+
82
+ Remove permissions:
83
+
84
+ SimpleQS::Queue.new('queue_name').remove_permissions('testPerms')
85
+
86
+ Delete queue:
87
+
88
+ SimpleQS::Queue.new('queue_name').delete
89
+
90
+ Or:
91
+
92
+ SimpleQS::Queue.delete('queue_name')
93
+
94
+ ### Messages ###
95
+
96
+ Send message:
97
+
98
+ queue = SimpleQS::Queue.new('queue_name')
99
+ queue.send_message('message 1')
100
+ queue.send_message('message 2')
101
+
102
+ Or:
103
+
104
+ SimpleQS::Message.send(queue, 'message 1')
105
+ SimpleQS::Message.send(queue, 'message 2')
106
+
107
+ Receive message(s):
108
+
109
+ queue.receive_messages # always returns array of messages
110
+ queue.receive_messages(:All, 10, 70) # receive maximum 10 messages with all attributes (:All)
111
+ # and set for them visibility timeout to 70 seconds
112
+
113
+ Or:
114
+
115
+ SimpleQS::Message.receive(queue)
116
+ SimpleQS::Message.receive(queue, :All, 10, 70)
117
+
118
+ Resend received message:
119
+
120
+ messages = queue.receive_messages
121
+ messages.first.resend
122
+
123
+ Change visibility timeout for this message:
124
+
125
+ messages.first.change_visibility(120) # Change to 120 seconds
126
+
127
+ Delete received message:
128
+
129
+ messages.first.delete
130
+
131
+ ## TODO ##
132
+
133
+ See [TODO](http://github.com/krekoten/SimpleQS/blob/master/TODO.md) file
134
+
135
+ ## Issues ##
136
+
137
+ [ISSUES](http://github.com/krekoten/SimpleQS/issues)
138
+
139
+ ## Authors ##
140
+
141
+ Marjan Krekoten' (krekoten@gmail.com)
142
+
143
+ # Українською #
144
+
145
+ ## Встановлення ##
146
+
147
+ [sudo] gem install simple_qs
148
+
149
+ ## Користування ##
150
+
151
+ require 'simple_qs'
152
+ SimpleQS.account_id = 'your-account-id'
153
+ SimpleQS.access_key_id = 'YOUR_ACCESS_KEY'
154
+
155
+ SimpleQS.secret_access_key = 'YOUR_SECRET_ACCESS_KEY'
156
+
157
+ ### Регіон ###
158
+
159
+ Можна обрати регіон, в якому буде створена черга:
160
+
161
+ # :us_east_1 => 'sqs.us-east-1.amazonaws.com',
162
+ # :us_west_1 => 'sqs.us-west-1.amazonaws.com',
163
+ # :eu_west_1 => 'sqs.eu-west-1.amazonaws.com',
164
+ # :ap_southeast_1 => 'sqs.ap-southeast-1.amazonaws.com'
165
+ SimpleQS.host # => 'sqs.us-east-1.amazonaws.com'
166
+
167
+ SimpleQS.host = :eu_west_1
168
+ SimpleQS.host # => 'sqs.eu-west-1.amazonaws.com'
169
+
170
+ ### Черги ###
171
+
172
+ Створити чергу:
173
+
174
+ queue = SimpleQS::Queue.create('queue_name')
175
+
176
+ Або:
177
+
178
+ SimpleQS::Queue.create('queue_name') do |queue|
179
+ # ...
180
+ end
181
+
182
+ Створити чергу із специфічним обмеженням часу невидимості для отриманих повідомлень:
183
+
184
+ SimpleQS::Queue.create('queue_name', 60) # Час невидимості встановленно на 60 секунд, натомість типових 30-ти
185
+
186
+ Перелічити всі черги даного рахунку:
187
+
188
+ SimpleQS::Queue.list # returns list of SimpleQS::Queue objects
189
+
190
+ Перелічити всі черги даного рахунку, що починаються на 'test':
191
+
192
+ SimpleQS::Queue.list('test')
193
+
194
+ Перевірити чи черга існує:
195
+
196
+ SimpleQS::Queue.exists?('queue_name')
197
+
198
+ Змінити типовий час невидимості для даної черги:
199
+
200
+ SimpleQS::Queue.new('queue_name').set_visibility_timeout(120)
201
+
202
+ Змінити максимальний розмір повідомлення:
203
+
204
+ SimpleQS::Queue.new('queue_name').set_maximum_message_size(65536)
205
+
206
+ Змінити період зберігання повідомлень для черги:
207
+
208
+ SimpleQS::Queue.new('queue_name').set_message_retention_period(1209600)
209
+
210
+ Встановити атрибути черги:
211
+
212
+ SimpleQS::Queue.new('queue_name').set_attributes({:VisibilityTimeout => 120, :Policy => "policy JSON here"})
213
+
214
+ Отримати поточні атрибути черги:
215
+
216
+ SimpleQS::Queue.new('queue_name').get_attributes(:All)
217
+
218
+ Надати дозволи:
219
+
220
+ SimpleQS::Queue.new('queue_name').add_permissions('testPerms', [
221
+ {:account_id => '098166147350', :action => 'SendMessage'},
222
+ {:account_id => '098166147350', :action => 'ReceiveMessage'}
223
+ ])
224
+
225
+ Скасувати дозволи:
226
+
227
+ SimpleQS::Queue.new('queue_name').remove_permissions('testPerms')
228
+
229
+ Видалити чергу:
230
+
231
+ SimpleQS::Queue.new('queue_name').delete
232
+
233
+ Або:
234
+
235
+ SimpleQS::Queue.delete('queue_name')
236
+
237
+ ### Повідомлення ###
238
+
239
+ Відправити повідомлення:
240
+
241
+ queue = SimpleQS::Queue.new('queue_name')
242
+ queue.send_message('message 1')
243
+ queue.send_message('message 2')
244
+
245
+ Або:
246
+
247
+ SimpleQS::Message.send(queue, 'message 1')
248
+ SimpleQS::Message.send(queue, 'message 2')
249
+
250
+ Отримати повідомлення:
251
+
252
+ queue.receive_messages # завжди повертає масив
253
+ queue.receive_messages(:All, 10, 70) # отримати максимум 10 повідомлень зі всіма атрибутами (:All)
254
+ # та встановленим часом невидимості у 70 секунд
255
+
256
+ Або:
257
+
258
+ SimpleQS::Message.receive(queue)
259
+ SimpleQS::Message.receive(queue, :All, 10, 70)
260
+
261
+ Надіслати отримані повідомлення ще раз:
262
+
263
+ messages = queue.receive_messages
264
+ messages.first.resend
265
+
266
+ Змінити час невидимості для даного повідомлення:
267
+
268
+ messages.first.change_visibility(120) # Встановити у 120 секунд
269
+
270
+ Видалити отримане повідомлення з черги:
271
+
272
+ messages.first.delete
273
+
274
+ ## Що потрібно зробити ##
275
+
276
+ Дивіться [TODO](http://github.com/krekoten/SimpleQS/blob/master/TODO.md)
277
+
278
+ ## Помилки, побажання і т.і. ##
279
+
280
+ [ISSUES](http://github.com/krekoten/SimpleQS/issues)
281
+
282
+ ## Автори ##
283
+
284
+ Мар'ян Крекотень (krekoten@gmail.com)
data/Rakefile ADDED
@@ -0,0 +1,57 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "em-amazon-sqs"
8
+ gem.summary = %Q{Asyncronous amazon simple queue service}
9
+ gem.description = %Q{Async amazon simple queue service }
10
+ gem.email = "jeff.durand@gmail.com"
11
+ gem.homepage = "https://github.com/johnnyiller/SimpleQS"
12
+ gem.authors = ["jeff durand"]
13
+ gem.add_dependency "xml-simple"
14
+ gem.add_dependency "em-http-request"
15
+ gem.add_dependency "addressable"
16
+ gem.add_dependency "ruby-hmac"
17
+ #gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
18
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
19
+ end
20
+ Jeweler::GemcutterTasks.new
21
+ rescue LoadError
22
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
23
+ end
24
+
25
+ require 'rake/testtask'
26
+ Rake::TestTask.new(:test) do |test|
27
+ test.libs << 'lib' << 'test'
28
+ test.pattern = 'test/**/test_*.rb'
29
+ test.verbose = true
30
+ end
31
+
32
+ begin
33
+ require 'rcov/rcovtask'
34
+ Rcov::RcovTask.new do |test|
35
+ test.libs << 'test'
36
+ test.pattern = 'test/**/test_*.rb'
37
+ test.verbose = true
38
+ end
39
+ rescue LoadError
40
+ task :rcov do
41
+ abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
42
+ end
43
+ end
44
+
45
+ task :test => :check_dependencies
46
+
47
+ task :default => :test
48
+
49
+ require 'rake/rdoctask'
50
+ Rake::RDocTask.new do |rdoc|
51
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
52
+
53
+ rdoc.rdoc_dir = 'rdoc'
54
+ rdoc.title = "em-amazon-sqs #{version}"
55
+ rdoc.rdoc_files.include('README*')
56
+ rdoc.rdoc_files.include('lib/**/*.rb')
57
+ end
data/TODO.md ADDED
@@ -0,0 +1,2 @@
1
+ * RDoc
2
+ * Add interface for policy
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
data/example/client.rb ADDED
@@ -0,0 +1,22 @@
1
+ $: << File.expand_path(File.join(File.dirname(__FILE__), '..'))
2
+ require 'rubygems'
3
+ require 'lib/simple_qs'
4
+
5
+ unless ENV['AWS_ACCESS_KEY_ID'] && ENV['AWS_SECRET_ACCESS_KEY'] && ENV['AWS_ACCOUNT_ID']
6
+ abort "Please set AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_ACCOUNT_ID environment variables"
7
+ end
8
+
9
+ SimpleQS.access_key_id = ENV['AWS_ACCESS_KEY_ID']
10
+ SimpleQS.secret_access_key = ENV['AWS_SECRET_ACCESS_KEY']
11
+ SimpleQS.account_id = ENV['AWS_ACCOUNT_ID']
12
+
13
+ @queue = SimpleQS::Queue.create('testMessageBus')
14
+
15
+ while true do
16
+ message = STDIN.gets.chomp
17
+ @queue.send_message(message)
18
+ if message == 'quit'
19
+ puts "Quitting..."
20
+ break
21
+ end
22
+ end