my_queues 0.0.3
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.
- data/lib/my_queues.rb +2 -0
- data/lib/my_queues/mock_sqs.rb +33 -0
- data/lib/my_queues/my_sqs.rb +90 -0
- metadata +55 -0
data/lib/my_queues.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
|
2
|
+
class MockSQS
|
3
|
+
def initialize
|
4
|
+
@queues={}
|
5
|
+
end
|
6
|
+
def safe_ruby_string text
|
7
|
+
return "'"+text.to_s.gsub(/[']/, '\\\\\'')+"'"
|
8
|
+
end
|
9
|
+
def send_message(queue_name,message)
|
10
|
+
queue = @queues[queue_name]
|
11
|
+
if !queue
|
12
|
+
queue=[]
|
13
|
+
@queues[queue_name]=queue
|
14
|
+
end
|
15
|
+
|
16
|
+
queue<<message
|
17
|
+
|
18
|
+
end
|
19
|
+
def recieve_message(queue_name)
|
20
|
+
queue = @queues[queue_name]
|
21
|
+
return nil if !queue
|
22
|
+
return nil if queue.length==0
|
23
|
+
queue.shift
|
24
|
+
end
|
25
|
+
|
26
|
+
def drain(queue_name)
|
27
|
+
queue = @queues[queue_name]
|
28
|
+
return [] if !queue
|
29
|
+
@queues[queue_name]=[]
|
30
|
+
return queue
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
|
2
|
+
require 'rubygems'
|
3
|
+
require 'sqs'
|
4
|
+
require 'cgi'
|
5
|
+
|
6
|
+
|
7
|
+
class MySQS
|
8
|
+
def initialize(access_key_id,secret_access_key)
|
9
|
+
SQS.access_key_id = access_key_id
|
10
|
+
SQS.secret_access_key = secret_access_key
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
def safe_ruby_string text
|
15
|
+
return "'"+text.to_s.gsub(/[']/, '\\\\\'')+"'"
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
def send_message(queue_name,message)
|
20
|
+
queue = SQS.create_queue queue_name
|
21
|
+
message=CGI.escape(message)
|
22
|
+
16.times do |i|
|
23
|
+
begin
|
24
|
+
queue.send_message(message)
|
25
|
+
return
|
26
|
+
rescue => e
|
27
|
+
s= "#{e.message}\n#{e.backtrace}"
|
28
|
+
puts(s)#TODO log WARN to file
|
29
|
+
sleep(i*i)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
# #TODO log ERROR to file
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
def recieve_message(queue_name)
|
37
|
+
queue = SQS.get_queue queue_name
|
38
|
+
message=nil
|
39
|
+
|
40
|
+
4.times do |i|
|
41
|
+
begin
|
42
|
+
message=queue.receive_message
|
43
|
+
|
44
|
+
rescue => e
|
45
|
+
s= "#{e.message}\n#{e.backtrace}"
|
46
|
+
puts(s)#TODO log WARN to file
|
47
|
+
|
48
|
+
sleep(i*i)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
if block_given?
|
52
|
+
|
53
|
+
begin
|
54
|
+
yield message
|
55
|
+
ensure
|
56
|
+
message.delete if message
|
57
|
+
end
|
58
|
+
return message
|
59
|
+
else
|
60
|
+
if message
|
61
|
+
message.delete
|
62
|
+
|
63
|
+
if message.body and message.body.length>0 and !message.body.index("undefined")
|
64
|
+
return CGI.unescape( message.body)
|
65
|
+
end
|
66
|
+
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
return nil
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def drain(queue_name)
|
76
|
+
result=[]
|
77
|
+
SQS.create_queue queue_name
|
78
|
+
while true
|
79
|
+
message=recieve_message(queue_name)
|
80
|
+
if message
|
81
|
+
result<<message
|
82
|
+
else
|
83
|
+
return result
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
89
|
+
|
90
|
+
|
metadata
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: my_queues
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.3
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- David Knight
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-10-07 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: my queues.
|
17
|
+
email: knight@example.com
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files: []
|
23
|
+
|
24
|
+
files:
|
25
|
+
- lib/my_queues.rb
|
26
|
+
- lib/my_queues/my_sqs.rb
|
27
|
+
- lib/my_queues/mock_sqs.rb
|
28
|
+
has_rdoc: false
|
29
|
+
homepage: http://www.yahoo.com/
|
30
|
+
post_install_message:
|
31
|
+
rdoc_options: []
|
32
|
+
|
33
|
+
require_paths:
|
34
|
+
- lib
|
35
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: "0"
|
40
|
+
version:
|
41
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: "0"
|
46
|
+
version:
|
47
|
+
requirements: []
|
48
|
+
|
49
|
+
rubyforge_project:
|
50
|
+
rubygems_version: 1.3.1
|
51
|
+
signing_key:
|
52
|
+
specification_version: 2
|
53
|
+
summary: my queues.
|
54
|
+
test_files: []
|
55
|
+
|