aeden-jruby-typica 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ rdoc
2
+ pkg
data/README.rdoc ADDED
@@ -0,0 +1,3 @@
1
+ JRuby wrapper around Typica, a Java library for communicating with Amazon's Web Services.
2
+
3
+ Currently only a subset of the available SQSv2 API is available.
data/Rakefile ADDED
@@ -0,0 +1,35 @@
1
+ require 'rake'
2
+ require 'rake/rdoctask'
3
+
4
+ desc 'Default: run tests.'
5
+ task :default => [:test]
6
+
7
+ desc 'Run tests.'
8
+ task :test do
9
+ require File.dirname(__FILE__) + '/test/integration/sqs_test'
10
+ end
11
+
12
+ desc 'Generate documentation.'
13
+ Rake::RDocTask.new(:rdoc) do |rdoc|
14
+ rdoc.rdoc_dir = 'rdoc'
15
+ rdoc.title = 'JRuby Typica'
16
+ rdoc.options << '--line-numbers' << '--inline-source'
17
+ rdoc.rdoc_files.include('README.rdoc')
18
+ rdoc.rdoc_files.include('lib/*.rb')
19
+ rdoc.rdoc_files.include('lib/**/*.rb')
20
+ end
21
+
22
+ begin
23
+ require 'jeweler'
24
+ Jeweler::Tasks.new do |gemspec|
25
+ gemspec.name = "jruby-typica"
26
+ gemspec.summary = "JRuby wrapper for Typica."
27
+ gemspec.email = "anthonyeden@gmail.com"
28
+ gemspec.homepage = "http://github.com/aeden/jruby-typica"
29
+ gemspec.description = "JRuby wrapper for the Typica Java library, which provides interfaces to Amazon Web Services."
30
+ gemspec.authors = ["Anthony Eden"]
31
+ gemspec.files.exclude 'docs/**/*'
32
+ end
33
+ rescue LoadError
34
+ puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
35
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.2
@@ -0,0 +1,51 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{jruby-typica}
5
+ s.version = "0.0.2"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Anthony Eden"]
9
+ s.date = %q{2009-08-12}
10
+ s.description = %q{JRuby wrapper for the Typica Java library, which provides interfaces to Amazon Web Services.}
11
+ s.email = %q{anthonyeden@gmail.com}
12
+ s.extra_rdoc_files = [
13
+ "README.rdoc"
14
+ ]
15
+ s.files = [
16
+ ".gitignore",
17
+ "README.rdoc",
18
+ "Rakefile",
19
+ "VERSION",
20
+ "jruby-typica.gemspec",
21
+ "lib/typica.rb",
22
+ "lib/typica/sqs.rb",
23
+ "lib/typica/sqs/message.rb",
24
+ "lib/typica/sqs/queue.rb",
25
+ "lib/typica/sqs/queue_service.rb",
26
+ "test/integration/sqs_test.rb",
27
+ "vendor/commons-codec-1.4.jar",
28
+ "vendor/commons-httpclient-3.1.jar",
29
+ "vendor/commons-logging-1.1.1.jar",
30
+ "vendor/typica.jar"
31
+ ]
32
+ s.has_rdoc = true
33
+ s.homepage = %q{http://github.com/aeden/jruby-typica}
34
+ s.rdoc_options = ["--charset=UTF-8"]
35
+ s.require_paths = ["lib"]
36
+ s.rubygems_version = %q{1.3.1}
37
+ s.summary = %q{JRuby wrapper for Typica.}
38
+ s.test_files = [
39
+ "test/integration/sqs_test.rb"
40
+ ]
41
+
42
+ if s.respond_to? :specification_version then
43
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
44
+ s.specification_version = 2
45
+
46
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
47
+ else
48
+ end
49
+ else
50
+ end
51
+ end
data/lib/typica.rb ADDED
@@ -0,0 +1,13 @@
1
+ require 'java'
2
+ require File.dirname(__FILE__) + '/../vendor/commons-httpclient-3.1.jar'
3
+ require File.dirname(__FILE__) + '/../vendor/commons-logging-1.1.1.jar'
4
+ require File.dirname(__FILE__) + '/../vendor/commons-codec-1.4.jar'
5
+ require File.dirname(__FILE__) + '/../vendor/typica.jar'
6
+
7
+ # The Ruby module that contains wrappers for the Java Typica project.
8
+ module Typica
9
+ end
10
+
11
+ $:.unshift(File.dirname(__FILE__))
12
+
13
+ require 'typica/sqs'
data/lib/typica/sqs.rb ADDED
@@ -0,0 +1,13 @@
1
+ module Typica #:nodoc:
2
+ # The SQS module provides an SQS wrapper around the Typica
3
+ # SQS implementation.
4
+ module Sqs
5
+ # An SQS error
6
+ class SqsError < RuntimeError
7
+ end
8
+ end
9
+ end
10
+
11
+ require 'typica/sqs/queue_service'
12
+ require 'typica/sqs/queue'
13
+ require 'typica/sqs/message'
@@ -0,0 +1,27 @@
1
+ module Typica #:nodoc:
2
+ module Sqs #:nodoc:
3
+ # A single SQS message.
4
+ class Message
5
+ def initialize(message_impl, queue_impl) #:nodoc:
6
+ @message_impl = message_impl
7
+ @queue_impl = queue_impl
8
+ end
9
+
10
+ # Get the ID of the message
11
+ def id
12
+ @message_impl.message_id
13
+ end
14
+
15
+ # Get the message body text.
16
+ def body
17
+ @message_impl.message_body
18
+ end
19
+
20
+ # Delete this message from the queue.
21
+ def delete
22
+ @queue_impl.delete_message(@message_impl)
23
+ true
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,66 @@
1
+ module Typica #:nodoc:
2
+ module Sqs #:nodoc:
3
+ # An SQS queue.
4
+ class Queue
5
+ def initialize(queue_impl) #:nodoc:
6
+ @queue_impl = queue_impl
7
+ end
8
+
9
+ # Get the queue name
10
+ def name
11
+ url.path.gsub(/\/\d+\//, '')
12
+ end
13
+
14
+ # Get the full queue url
15
+ def url
16
+ @queue_impl.url
17
+ end
18
+
19
+ # Delete the queue.
20
+ def delete
21
+ @queue_impl.delete_queue
22
+ end
23
+
24
+ # Receive a single message from the queue. If no visibility timeout
25
+ # is provided then the value of 30 seconds will be used.
26
+ def receive(visibility_timeout=nil)
27
+ message = if visibility_timeout
28
+ @queue_impl.receive_message(visibility_timeout)
29
+ else
30
+ @queue_impl.receive_message
31
+ end
32
+
33
+ Message.new(message, @queue_impl) if message
34
+ end
35
+
36
+ # Receive multiple messages from the queue
37
+ def receive_messages(number_of_messages=1, visibility_timeout=nil)
38
+ messages = if visibility_timeout
39
+ @queue_impl.receive_messages(number_of_messages, visibility_timeout)
40
+ else
41
+ @queue_impl.receive_messages(number_of_messages)
42
+ end
43
+
44
+ messages.map { |message| Message.new(message, @queue_impl) }
45
+ end
46
+
47
+ # Send a message to the queue
48
+ def send_message(message)
49
+ @queue_impl.send_message(message)
50
+ end
51
+
52
+ # Get the approximate number of messages in the queue.
53
+ def size
54
+ @queue_impl.approximate_number_of_messages
55
+ end
56
+
57
+ def visibility_timeout
58
+ @queue_impl.visibility_timeout
59
+ end
60
+
61
+ def visibility_timeout=(visibility_timeout)
62
+ @queue_impl.visibility_timeout = visibility_timeout
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,34 @@
1
+ module Typica
2
+ module Sqs
3
+ class QueueService
4
+ # Initialize the queue server with the given access key id and
5
+ # secret access key.
6
+ def initialize(aws_access_key_id, aws_secret_access_key, options={})
7
+ @queue_service_impl = com.xerox.amazonws.sqs2.QueueService.new(
8
+ aws_access_key_id, aws_secret_access_key
9
+ )
10
+ end
11
+
12
+ # Get a list of all of the Queues.
13
+ def queues
14
+ @queue_service_impl.list_message_queues(nil).map { |queue|
15
+ Queue.new(queue)
16
+ }
17
+ end
18
+
19
+ # Get the queue by name.
20
+ def queue(name, create=true)
21
+ if create
22
+ begin
23
+ Queue.new(@queue_service_impl.get_or_create_message_queue(name))
24
+ rescue com.xerox.amazonws.sqs2.SQSException => e
25
+ raise Typica::Sqs::SqsError.new(e.message)
26
+ end
27
+ else
28
+ queue = @queue_service_impl.get_message_queue(name)
29
+ Queue.new(queue) if queue
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,65 @@
1
+ require 'test/unit'
2
+ require 'lib/typica'
3
+
4
+ module Integration
5
+ class SqsTest < Test::Unit::TestCase
6
+ def test_sqs
7
+ queue_service = Typica::Sqs::QueueService.new(
8
+ ENV['AWS_ACCESS_KEY_ID'], ENV['AWS_SECRET_ACCESS_KEY']
9
+ )
10
+
11
+ puts "Listing Queues:"
12
+ queues = queue_service.queues
13
+ assert_not_nil queues
14
+ assert queues.length > 1
15
+ queues.each do |queue|
16
+ puts "#{queue.url} (#{queue.name})"
17
+ end
18
+
19
+ puts "Getting 'typica_test' Queue:"
20
+ queue = queue_service.queue('typica_test')
21
+ puts "#{queue.url} (#{queue.name})"
22
+ assert_not_nil queue
23
+ assert_equal 'typica_test', queue.name
24
+
25
+ puts "#{queue.name} approx msg count: #{queue.size}"
26
+ assert_equal 0, queue.size
27
+
28
+ puts "Sending a message"
29
+ body = "message sent at #{Time.now}"
30
+ puts queue.send_message(body)
31
+
32
+ puts "Sleeping 2 seconds"
33
+ sleep(2)
34
+
35
+ puts "Receiving messages one-by-one"
36
+ while(message = queue.receive)
37
+ puts "Received message #{message.id}"
38
+ puts message.body
39
+ assert_equal body, message.body
40
+
41
+ puts "Deleting message #{message.id}"
42
+ message.delete
43
+ end
44
+
45
+ puts "Sending 10 messages"
46
+ 0.upto(10) do |i|
47
+ queue.send_message("message #{i} sent at #{Time.now}")
48
+ end
49
+
50
+ puts "Sleeping for 10 seconds"
51
+ sleep(10)
52
+
53
+ puts "Receiving 10 messages from the queue"
54
+ messages = queue.receive_messages(10)
55
+ puts "Received #{messages.length} messages"
56
+
57
+ messages.each do |message|
58
+ message.delete
59
+ end
60
+
61
+ puts "Deleting the queue"
62
+ queue.delete
63
+ end
64
+ end
65
+ end
Binary file
Binary file
Binary file
data/vendor/typica.jar ADDED
Binary file
metadata ADDED
@@ -0,0 +1,68 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: aeden-jruby-typica
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Anthony Eden
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-08-12 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: JRuby wrapper for the Typica Java library, which provides interfaces to Amazon Web Services.
17
+ email: anthonyeden@gmail.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README.rdoc
24
+ files:
25
+ - .gitignore
26
+ - README.rdoc
27
+ - Rakefile
28
+ - VERSION
29
+ - jruby-typica.gemspec
30
+ - lib/typica.rb
31
+ - lib/typica/sqs.rb
32
+ - lib/typica/sqs/message.rb
33
+ - lib/typica/sqs/queue.rb
34
+ - lib/typica/sqs/queue_service.rb
35
+ - test/integration/sqs_test.rb
36
+ - vendor/commons-codec-1.4.jar
37
+ - vendor/commons-httpclient-3.1.jar
38
+ - vendor/commons-logging-1.1.1.jar
39
+ - vendor/typica.jar
40
+ has_rdoc: true
41
+ homepage: http://github.com/aeden/jruby-typica
42
+ licenses:
43
+ post_install_message:
44
+ rdoc_options:
45
+ - --charset=UTF-8
46
+ require_paths:
47
+ - lib
48
+ required_ruby_version: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: "0"
53
+ version:
54
+ required_rubygems_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: "0"
59
+ version:
60
+ requirements: []
61
+
62
+ rubyforge_project:
63
+ rubygems_version: 1.3.5
64
+ signing_key:
65
+ specification_version: 2
66
+ summary: JRuby wrapper for Typica.
67
+ test_files:
68
+ - test/integration/sqs_test.rb