ironmq 1.2.5 → 1.2.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -10,7 +10,7 @@ Install the gem:
10
10
 
11
11
  Create an IronMQ client object:
12
12
 
13
- @client = IronMQ::Client.new('token'=>'MYTOKEN', 'project_id'=>'MYPROJECTID')
13
+ @ironmq = IronMQ::Client.new('token'=>'MYTOKEN', 'project_id'=>'MYPROJECTID')
14
14
 
15
15
  You can get your `token` and `project_id` at http://www.iron.io .
16
16
 
@@ -20,12 +20,12 @@ The Basics
20
20
 
21
21
  **Push** a message on the queue:
22
22
 
23
- res = @client.messages.post("hello world!")
24
- p res
23
+ msg = @ironmq.messages.post("hello world!")
24
+ p msg
25
25
 
26
26
  **Pop** a message off the queue:
27
27
 
28
- res = @client.messages.get()
28
+ msg = @ironmq.messages.get()
29
29
  p res
30
30
 
31
31
  When you pop/get a message from the queue, it will NOT be deleted. It will eventually go back onto the queue after
@@ -33,7 +33,7 @@ a timeout if you don't delete it (default timeout is 10 minutes).
33
33
 
34
34
  **Delete** a message from the queue:
35
35
 
36
- res = @client.messages.delete(res["id"])
36
+ res = msg.delete # or @ironmq.messages.delete(msg["id"])
37
37
  p res
38
38
 
39
39
  Delete a message from the queue when you're done with it.
data/Rakefile CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
  require 'rake'
3
3
 
4
4
  begin
5
- require 'jeweler'
5
+ require 'jeweler2'
6
6
  Jeweler::Tasks.new do |gem|
7
7
  gem.name = "ironmq"
8
8
  gem.summary = "Ruby client for IronMQ"
@@ -15,7 +15,7 @@ begin
15
15
  end
16
16
  Jeweler::GemcutterTasks.new
17
17
  rescue LoadError
18
- puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
18
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler2"
19
19
  end
20
20
 
21
21
  require 'rake/testtask'
@@ -1,5 +1,5 @@
1
- ---
1
+ ---
2
2
  :major: 1
3
3
  :minor: 2
4
- :patch: 5
4
+ :patch: 6
5
5
  :build:
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{ironmq}
8
- s.version = "1.2.5"
8
+ s.version = "1.2.6"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = [%q{Travis Reeder}]
12
- s.date = %q{2011-11-01}
12
+ s.date = %q{2011-11-10}
13
13
  s.description = %q{Ruby client for IronMQ}
14
14
  s.email = %q{travis@iron.io}
15
15
  s.extra_rdoc_files = [
@@ -22,6 +22,7 @@ Gem::Specification.new do |s|
22
22
  "ironmq.gemspec",
23
23
  "lib/ironmq.rb",
24
24
  "lib/ironmq/client.rb",
25
+ "lib/ironmq/messages.rb",
25
26
  "test/ironmq_tests.rb",
26
27
  "test/long_run.rb"
27
28
  ]
@@ -36,11 +37,14 @@ Gem::Specification.new do |s|
36
37
 
37
38
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
38
39
  s.add_runtime_dependency(%q<typhoeus>, [">= 0"])
40
+ s.add_runtime_dependency(%q<typhoeus>, [">= 0"])
39
41
  else
40
42
  s.add_dependency(%q<typhoeus>, [">= 0"])
43
+ s.add_dependency(%q<typhoeus>, [">= 0"])
41
44
  end
42
45
  else
43
46
  s.add_dependency(%q<typhoeus>, [">= 0"])
47
+ s.add_dependency(%q<typhoeus>, [">= 0"])
44
48
  end
45
49
  end
46
50
 
@@ -1 +1,2 @@
1
+ require_relative 'ironmq/messages'
1
2
  require_relative 'ironmq/client'
@@ -40,7 +40,8 @@ module IronMQ
40
40
  def common_req_hash
41
41
  {
42
42
  :headers=>{"Content-Type" => 'application/json',
43
- "Authorization"=>"OAuth #{@token}"}
43
+ "Authorization"=>"OAuth #{@token}",
44
+ "User-Agent"=>"IronMQ Ruby Client"}
44
45
  }
45
46
  end
46
47
 
@@ -51,10 +52,11 @@ module IronMQ
51
52
  req_hash = common_req_hash
52
53
  req_hash[:body] = params.to_json
53
54
  response = Typhoeus::Request.post(url, req_hash)
54
- check_response(response)
55
- @logger.debug 'response: ' + response.inspect
56
- body = response.body
57
- res = JSON.parse(body)
55
+ @logger.debug 'typhoeus response=' + response.inspect
56
+ res = check_response(response)
57
+ #@logger.debug 'response: ' + res.inspect
58
+ #body = response.body
59
+ #res = JSON.parse(body)
58
60
  return res, response.code
59
61
  end
60
62
 
@@ -74,10 +76,10 @@ module IronMQ
74
76
  req_hash = common_req_hash
75
77
  req_hash[:params] = params
76
78
  response = Typhoeus::Request.delete(url, req_hash)
77
- check_response(response)
78
- body = response.body
79
- res = JSON.parse(body)
80
- @logger.debug 'response: ' + res.inspect
79
+ res = check_response(response)
80
+ #body = response.body
81
+ #res = JSON.parse(body)
82
+ #@logger.debug 'response: ' + res.inspect
81
83
  return res, response.code
82
84
  end
83
85
 
@@ -114,76 +116,6 @@ module IronMQ
114
116
  end
115
117
  end
116
118
 
117
- class Messages
118
-
119
- attr_accessor :client
120
-
121
- def initialize(client)
122
- @client = client
123
- end
124
-
125
- def path(options={})
126
- path = "/projects/#{@client.project_id}/queues/#{options[:queue_name] || @client.queue_name}/messages"
127
- end
128
-
129
- # options:
130
- # :queue_name => can specify an alternative queue name
131
- def get(options={})
132
- begin
133
- res, status = @client.get(path(options))
134
- return Message.new(self, res)
135
- rescue IronMQ::Error => ex
136
- if ex.status == 404
137
- return nil
138
- end
139
- raise ex
140
- end
141
-
142
-
143
- end
144
-
145
- # options:
146
- # :queue_name => can specify an alternative queue name
147
- def post(payload, options={})
148
- res, status = @client.post(path(options), :body=>payload)
149
- return Message.new(self, res)
150
- end
151
-
152
- def delete(message_id, options={})
153
- path2 = "#{self.path(options)}/#{message_id}"
154
- res, status = @client.delete(path2)
155
- res
156
- end
157
-
158
- end
159
-
160
- class Message
161
-
162
- def initialize(messages, res)
163
- @messages = messages
164
- @data = res
165
- end
166
-
167
- def raw
168
- @data
169
- end
170
-
171
- def [](key)
172
- raw[key]
173
- end
174
-
175
- def id
176
- raw["id"]
177
- end
178
-
179
- def body
180
- raw["body"]
181
- end
182
-
183
- def delete
184
- @messages.delete(self.id)
185
- end
186
- end
187
119
 
188
120
  end
189
121
 
@@ -0,0 +1,78 @@
1
+ module IronMQ
2
+ class Messages
3
+
4
+ attr_accessor :client
5
+
6
+ def initialize(client)
7
+ @client = client
8
+ end
9
+
10
+ def path(options={})
11
+ path = "/projects/#{@client.project_id}/queues/#{options[:queue_name] || @client.queue_name}/messages"
12
+ end
13
+
14
+ # options:
15
+ # :queue_name => can specify an alternative queue name
16
+ # :timeout => amount of time before message goes back on the queue
17
+ def get(options={})
18
+ begin
19
+ params = nil
20
+ if options[:timeout]
21
+ params = {:timeout => options[:timeout]}
22
+ end
23
+ res, status = @client.get(path(options), params)
24
+ return Message.new(self, res)
25
+ rescue IronMQ::Error => ex
26
+ if ex.status == 404
27
+ return nil
28
+ end
29
+ raise ex
30
+ end
31
+
32
+
33
+ end
34
+
35
+ # options:
36
+ # :queue_name => can specify an alternative queue name
37
+ def post(payload, options={})
38
+ res, status = @client.post(path(options), :body=>payload)
39
+ return Message.new(self, res)
40
+ end
41
+
42
+ def delete(message_id, options={})
43
+ path2 = "#{self.path(options)}/#{message_id}"
44
+ res, status = @client.delete(path2)
45
+ res
46
+ end
47
+
48
+ end
49
+
50
+ class Message
51
+
52
+ def initialize(messages, res)
53
+ @messages = messages
54
+ @data = res
55
+ end
56
+
57
+ def raw
58
+ @data
59
+ end
60
+
61
+ def [](key)
62
+ raw[key]
63
+ end
64
+
65
+ def id
66
+ raw["id"]
67
+ end
68
+
69
+ def body
70
+ raw["body"]
71
+ end
72
+
73
+ def delete
74
+ @messages.delete(self.id)
75
+ end
76
+ end
77
+
78
+ end
@@ -15,8 +15,17 @@ class IronMQTests < Test::Unit::TestCase
15
15
  puts 'setup'
16
16
  @config = YAML::load_file(File.expand_path(File.join("~", "Dropbox", "configs", "ironmq_gem", "test", "config.yml")))
17
17
  @client = IronMQ::Client.new(@config['ironmq'])
18
- @client.logger.level = Logger::DEBUG
18
+ #@client.logger.level = Logger::DEBUG
19
19
  @client.queue_name = 'ironmq-gem-tests'
20
+
21
+ puts 'clearing queue'
22
+ while res = @client.messages.get()
23
+ p res
24
+ puts res.body.to_s
25
+ res.delete
26
+ end
27
+ puts 'cleared.'
28
+
20
29
  end
21
30
 
22
31
  def test_basics
@@ -25,9 +34,55 @@ class IronMQTests < Test::Unit::TestCase
25
34
 
26
35
  res = @client.messages.get()
27
36
  p res
28
-
37
+
29
38
  res = @client.messages.delete(res["id"])
30
39
  p res
40
+ puts "shouldn't be any more"
41
+ res = @client.messages.get()
42
+ p res
43
+ assert res.nil?
44
+
45
+ res = @client.messages.post("hello world 2!")
46
+ p res
47
+
48
+ msg = @client.messages.get()
49
+ p msg
50
+
51
+ res = msg.delete
52
+ p res
53
+
54
+ puts "shouldn't be any more"
55
+ res = @client.messages.get()
56
+ p res
57
+ assert res.nil?
58
+ end
59
+
60
+ def test_timeout
61
+ res = @client.messages.post("hello world timeout!")
62
+ p res
63
+
64
+ msg = @client.messages.get()
65
+ p msg
66
+
67
+ msg4 = @client.messages.get()
68
+ p msg4
69
+ assert msg4.nil?
70
+
71
+ puts 'sleeping 45 seconds...'
72
+ sleep 45
73
+
74
+ msg3 = @client.messages.get()
75
+ p msg3
76
+ assert msg3.nil?
77
+
78
+ puts 'sleeping another 45 seconds...'
79
+ sleep 45
80
+
81
+ msg2 = @client.messages.get()
82
+ assert msg.id == msg2.id
83
+
84
+ msg2.delete
85
+
31
86
  end
32
87
  end
33
88
 
@@ -1,4 +1,5 @@
1
1
  require 'yaml'
2
+ require 'concur'
2
3
  begin
3
4
  require File.join(File.dirname(__FILE__), '../lib/ironmq')
4
5
  rescue Exception => ex
@@ -8,30 +9,49 @@ end
8
9
 
9
10
  @config = YAML::load_file(File.expand_path(File.join("~", "Dropbox", "configs", "ironmq_gem", "test", "config.yml")))
10
11
  @client = IronMQ::Client.new(@config['ironmq'])
11
- @client.queue_name = 'ironmq-gem-tests'
12
+ @client.queue_name = 'ironmq-gem-long'
12
13
  @num_to_add = @config['count']
13
14
 
14
15
  start = Time.now
15
16
  puts "Queuing #{@num_to_add} items at #{start}..."
17
+ executor = Concur::Executor.new_thread_pool_executor(50)
16
18
  @num_to_add.times do |i|
17
- puts "POST #{i}..."
18
- res = @client.messages.post("hello world! #{i}")
19
- p res
19
+ task = executor.execute do
20
+ begin
21
+ puts "POST #{i}..."
22
+ res = @client.messages.post("hello world! #{i}")
23
+ rescue => ex
24
+ puts "ERROR! #{ex.class.name}: #{ex.message} -- #{ex.backtrace.inspect}"
25
+ raise ex
26
+ end
27
+ end
20
28
  end
29
+
30
+ i = 0
31
+ while executor.queue_size > 0 do
32
+ i += 1
33
+ puts "waiting #{i}, queue size=#{executor.queue_size}"
34
+ sleep 0.5
35
+ end
36
+
37
+
21
38
  put_time = (Time.now.to_f - start.to_f)
22
39
  puts "Finished pushing in #{put_time} seconds"
23
40
 
41
+ exit if true
42
+
24
43
  start = Time.now
25
44
  puts "Getting and deleting #{@num_to_add} items at #{start}..."
26
45
  @num_to_add.times do |i|
27
- puts "GET #{i}..."
28
- res = @client.messages.get()
29
- p res
30
- puts "DELETE #{i}..."
31
- res = @client.messages.delete(res["id"])
32
- p res
46
+ puts "GET #{i}..."
47
+ res = @client.messages.get()
48
+ p res
49
+ puts "DELETE #{i}..."
50
+ res = @client.messages.delete(res["id"])
51
+ p res
33
52
  end
34
53
 
35
54
  puts "Finished pushing #{@num_to_add} items in #{put_time} seconds."
36
55
  puts "Finished getting and deleting #{@num_to_add} items in #{(Time.now.to_f - start.to_f)} seconds."
37
56
 
57
+ executor.shutdown
metadata CHANGED
@@ -1,71 +1,76 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: ironmq
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.2.6
4
5
  prerelease:
5
- version: 1.2.5
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Travis Reeder
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2011-11-01 00:00:00 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
12
+ date: 2011-11-10 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
16
15
  name: typhoeus
16
+ requirement: &17190840 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
17
23
  prerelease: false
18
- requirement: &id001 !ruby/object:Gem::Requirement
24
+ version_requirements: *17190840
25
+ - !ruby/object:Gem::Dependency
26
+ name: typhoeus
27
+ requirement: &17190320 !ruby/object:Gem::Requirement
19
28
  none: false
20
- requirements:
21
- - - ">="
22
- - !ruby/object:Gem::Version
23
- version: "0"
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
24
33
  type: :runtime
25
- version_requirements: *id001
34
+ prerelease: false
35
+ version_requirements: *17190320
26
36
  description: Ruby client for IronMQ
27
37
  email: travis@iron.io
28
38
  executables: []
29
-
30
39
  extensions: []
31
-
32
- extra_rdoc_files:
40
+ extra_rdoc_files:
33
41
  - README.markdown
34
- files:
42
+ files:
35
43
  - README.markdown
36
44
  - Rakefile
37
45
  - VERSION.yml
38
46
  - ironmq.gemspec
39
47
  - lib/ironmq.rb
40
48
  - lib/ironmq/client.rb
49
+ - lib/ironmq/messages.rb
41
50
  - test/ironmq_tests.rb
42
51
  - test/long_run.rb
43
52
  homepage: http://www.iron.io
44
53
  licenses: []
45
-
46
54
  post_install_message:
47
55
  rdoc_options: []
48
-
49
- require_paths:
56
+ require_paths:
50
57
  - lib
51
- required_ruby_version: !ruby/object:Gem::Requirement
58
+ required_ruby_version: !ruby/object:Gem::Requirement
52
59
  none: false
53
- requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- version: "1.9"
57
- required_rubygems_version: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ! '>='
62
+ - !ruby/object:Gem::Version
63
+ version: '1.9'
64
+ required_rubygems_version: !ruby/object:Gem::Requirement
58
65
  none: false
59
- requirements:
60
- - - ">="
61
- - !ruby/object:Gem::Version
62
- version: "0"
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
63
70
  requirements: []
64
-
65
71
  rubyforge_project:
66
72
  rubygems_version: 1.8.8
67
73
  signing_key:
68
74
  specification_version: 3
69
75
  summary: Ruby client for IronMQ
70
76
  test_files: []
71
-