postalmethods 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +4 -0
- data/License.txt +21 -0
- data/Manifest.txt +31 -0
- data/PostInstall.txt +6 -0
- data/README.txt +35 -0
- data/Rakefile +4 -0
- data/config/hoe.rb +73 -0
- data/config/requirements.rb +15 -0
- data/lib/postalmethods.rb +51 -0
- data/lib/postalmethods/document_processor.rb +25 -0
- data/lib/postalmethods/exceptions.rb +97 -0
- data/lib/postalmethods/get_letter_status.rb +69 -0
- data/lib/postalmethods/send_letter.rb +46 -0
- data/lib/postalmethods/utility.rb +60 -0
- data/lib/postalmethods/version.rb +9 -0
- data/script/console +10 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/setup.rb +1585 -0
- data/spec/document_processor_spec.rb +37 -0
- data/spec/get_letter_status_spec.rb +74 -0
- data/spec/postalmethods_spec.rb +26 -0
- data/spec/rcov.opts +1 -0
- data/spec/send_letter_spec.rb +75 -0
- data/spec/spec.opts +7 -0
- data/spec/spec_helper.rb +30 -0
- data/spec/utility_spec.rb +62 -0
- data/tasks/deployment.rake +34 -0
- data/tasks/environment.rake +7 -0
- data/tasks/rspec.rake +33 -0
- metadata +103 -0
@@ -0,0 +1,37 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper.rb'
|
2
|
+
|
3
|
+
describe "Document Processing" do
|
4
|
+
|
5
|
+
before :each do
|
6
|
+
@client = PostalMethods::Client.new(PM_OPTS)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should open a valid pre-opened document" do
|
10
|
+
@client.document = open(File.dirname(__FILE__) + '/../doc/sample.pdf')
|
11
|
+
@client.document.class.should == Hash
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should open a valid document path" do
|
15
|
+
@client.document = File.dirname(__FILE__) + '/../doc/sample.pdf'
|
16
|
+
@client.document.class.should == Hash
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should create a hash with the right elements" do
|
20
|
+
@client.document = File.dirname(__FILE__) + '/../doc/sample.pdf'
|
21
|
+
@client.document[:extension].should == "pdf"
|
22
|
+
@client.document[:bytes].length.should == 213312
|
23
|
+
@client.document[:name].should == "sample.pdf"
|
24
|
+
@client.document[:file_obj].class.should == File
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should return true on a valid document path" do
|
28
|
+
@client.document = File.dirname(__FILE__) + '/../doc/sample.pdf'
|
29
|
+
@client.document?.should == true
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should throw an exception on a false path" do
|
33
|
+
@doc = File.dirname(__FILE__) + '/../doc/does_not_exist.pdf'
|
34
|
+
lambda {@client.document = @doc}.should raise_error(Errno::ENOENT)
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper.rb'
|
2
|
+
|
3
|
+
describe "Get Letter Status" do
|
4
|
+
|
5
|
+
before :each do
|
6
|
+
@doc = open(File.dirname(__FILE__) + '/../doc/sample.pdf')
|
7
|
+
@client = PostalMethods::Client.new(PM_OPTS)
|
8
|
+
@client.prepare!
|
9
|
+
sleep(10)
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should send a letter and get status" do
|
13
|
+
## use a static known good id that has gone thru in dev mode
|
14
|
+
f = @client.get_letter_status(1023577)
|
15
|
+
f.length.should == 2
|
16
|
+
f.first.to_i.should == -1002
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should try to get status of a letter i don't have access to" do
|
20
|
+
lambda { @client.get_letter_status(1)}.should raise_error(PostalMethods::APIStatusCode3001Exception)
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
it "should send multiple letters and get their status" do
|
25
|
+
letters = []
|
26
|
+
1.upto(3) do
|
27
|
+
@doc = open(File.dirname(__FILE__) + '/../doc/sample.pdf')
|
28
|
+
@client = PostalMethods::Client.new(PM_OPTS)
|
29
|
+
@client.prepare!
|
30
|
+
rv = @client.send_letter(@doc, "the long goodbye").sendLetterResult
|
31
|
+
rv.to_i.should > 0
|
32
|
+
letters << rv
|
33
|
+
#sleep(10) # api needs some time
|
34
|
+
end
|
35
|
+
|
36
|
+
ret = @client.get_letter_status_multiple(letters)
|
37
|
+
ret.should be_an_instance_of(Array)
|
38
|
+
|
39
|
+
# the return is an array [results, status]
|
40
|
+
recv_letters = ret.collect { |r| r.iD }
|
41
|
+
|
42
|
+
recv_letters.should == letters
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should attempt to request a multiple array of invalid letters" do
|
46
|
+
lambda { @client.get_letter_status_multiple([1,2,3]) }.should raise_error(PostalMethods::APIStatusCode3115Exception)
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should request a range of letters and get their status" do
|
50
|
+
letters = []
|
51
|
+
1.upto(3) do
|
52
|
+
@doc = open(File.dirname(__FILE__) + '/../doc/sample.pdf')
|
53
|
+
@client = PostalMethods::Client.new(PM_OPTS)
|
54
|
+
@client.prepare!
|
55
|
+
rv = @client.send_letter(@doc, "the long goodbye").sendLetterResult
|
56
|
+
rv.to_i.should > 0
|
57
|
+
letters << rv
|
58
|
+
#sleep(10) # api needs some time
|
59
|
+
end
|
60
|
+
|
61
|
+
ret = @client.get_letter_status_range(letters.first, letters.last)
|
62
|
+
ret.should be_an_instance_of(Array)
|
63
|
+
|
64
|
+
# the return is an array [results, status]
|
65
|
+
recv_letters = ret.collect { |r| r.iD }
|
66
|
+
|
67
|
+
recv_letters.should == letters
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should attempt to request a range of invalid letters" do
|
71
|
+
lambda { @client.get_letter_status_range(1,3) }.should raise_error(PostalMethods::APIStatusCode3115Exception)
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper.rb'
|
2
|
+
|
3
|
+
describe "Client" do
|
4
|
+
|
5
|
+
it "should instantiate a client with a username and password" do
|
6
|
+
c = PostalMethods::Client.new(PM_OPTS)
|
7
|
+
c.class.should == PostalMethods::Client
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should fail without a user/pass on instantiation" do
|
11
|
+
lambda {PostalMethods::Client.new()}.should raise_error(PostalMethods::NoCredentialsException)
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should create a driver client thru the factory" do
|
15
|
+
c = PostalMethods::Client.new(PM_OPTS)
|
16
|
+
c.prepare!
|
17
|
+
c.rpc_driver.class.should == SOAP::RPC::Driver
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should raise a connection error exception when the api is unreachable" do
|
21
|
+
c = PostalMethods::Client.new(PM_OPTS)
|
22
|
+
c.stubs(:api_uri).returns("http://invaliduri.tld/api_endpoint.wtf?")
|
23
|
+
lambda {c.prepare!}.should raise_error(PostalMethods::NoConnectionError)
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
data/spec/rcov.opts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--exclude "spec/*,gems/*"
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper.rb'
|
2
|
+
|
3
|
+
describe "Send Letter" do
|
4
|
+
|
5
|
+
before :each do
|
6
|
+
@doc = open(File.dirname(__FILE__) + '/../doc/sample.pdf')
|
7
|
+
@client = PostalMethods::Client.new(PM_OPTS)
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should instantiate and send a letter" do
|
11
|
+
@client.prepare!
|
12
|
+
rv = @client.send_letter(@doc, "the long goodbye")
|
13
|
+
rv.sendLetterResult.to_i.should > 0
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should refuse to send letter before prepare" do
|
17
|
+
lambda {@client.send_letter(@doc, "the long goodbye")}.should raise_error(PostalMethods::NoPreparationException)
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should raise the proper exception when trying to send textfile" do
|
21
|
+
@doc = open(File.dirname(__FILE__) + '/../README.txt')
|
22
|
+
@client.prepare!
|
23
|
+
lambda {@client.send_letter(@doc, "the long goodbye")}.should raise_error(PostalMethods::APIStatusCode3004Exception)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should raise the proper exception when trying to send an empty string" do
|
27
|
+
@client.prepare!
|
28
|
+
lambda {@client.send_letter("", "the long goodbye")}.should raise_error(Errno::ENOENT)
|
29
|
+
end
|
30
|
+
|
31
|
+
#it "should raise the proper exception when trying to send no description" do
|
32
|
+
# @client.prepare!
|
33
|
+
# lambda {@client.send_letter(@doc, nil)}.should raise_error(PostalMethods::APIStatusCode3004Exception)
|
34
|
+
#end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "Send Letter With Address" do
|
39
|
+
|
40
|
+
before :each do
|
41
|
+
@doc = open(File.dirname(__FILE__) + '/../doc/sample.pdf')
|
42
|
+
@addr = {:AttentionLine1 => "The Fonz", :Address1 => "Happy Days", :City => "Baja", :State => "CA",
|
43
|
+
:PostalCode => "90210", :Country => "USA"}
|
44
|
+
@client = PostalMethods::Client.new(PM_OPTS)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should instantiate and send a letter with address" do
|
48
|
+
@client.prepare!
|
49
|
+
rv = @client.send_letter_and_address(@doc, "Shark Jumping Notes", @addr)
|
50
|
+
rv.sendLetterAndAddressResult.to_i.should > 0
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should raise the proper exception when trying to send letter without valid attention line" do
|
54
|
+
@client.prepare!
|
55
|
+
addr = @addr.except(:AttentionLine1)
|
56
|
+
lambda {@client.send_letter_and_address(@doc, "the long goodbye", addr)}.should raise_error(PostalMethods::APIStatusCode4008Exception)
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should refuse to send letter before prepare" do
|
60
|
+
lambda {@client.send_letter_and_address(@doc, "the long goodbye", @addr)}.should raise_error(PostalMethods::NoPreparationException)
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should raise the proper exception when trying to send textfile" do
|
64
|
+
@doc = open(File.dirname(__FILE__) + '/../README.txt')
|
65
|
+
@client.prepare!
|
66
|
+
lambda {@client.send_letter_and_address(@doc, "the long goodbye", @addr)}.should raise_error(PostalMethods::APIStatusCode3004Exception)
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should raise the proper exception when trying to send an empty string" do
|
70
|
+
@client.prepare!
|
71
|
+
lambda {@client.send_letter_and_address("", "the long goodbye", @addr)}.should raise_error(Errno::ENOENT)
|
72
|
+
end
|
73
|
+
|
74
|
+
|
75
|
+
end
|
data/spec/spec.opts
ADDED
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
begin
|
2
|
+
require 'spec'
|
3
|
+
require 'mocha'
|
4
|
+
rescue LoadError
|
5
|
+
require 'rubygems'
|
6
|
+
require 'spec'
|
7
|
+
require 'mocha'
|
8
|
+
end
|
9
|
+
|
10
|
+
$:.unshift(File.dirname(__FILE__) + '/../lib')
|
11
|
+
require 'postalmethods'
|
12
|
+
|
13
|
+
$VERBOSE = nil ##silence annoying warnings from soap4r
|
14
|
+
|
15
|
+
PM_OPTS = {:username => 'imajes', :password => 'rubyr00ls'}
|
16
|
+
|
17
|
+
# hash hacks to make hacking in specs easier
|
18
|
+
class Hash
|
19
|
+
# for excluding keys
|
20
|
+
def except(*exclusions)
|
21
|
+
self.reject { |key, value| exclusions.include? key.to_sym }
|
22
|
+
end
|
23
|
+
|
24
|
+
# for overriding keys
|
25
|
+
def with(overrides = {})
|
26
|
+
self.merge overrides
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
require "ruby-debug"
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper.rb'
|
2
|
+
require 'base64'
|
3
|
+
|
4
|
+
describe "Utility Methods" do
|
5
|
+
|
6
|
+
before :each do
|
7
|
+
@doc = open(File.dirname(__FILE__) + '/../doc/sample.pdf')
|
8
|
+
@client = PostalMethods::Client.new(PM_OPTS)
|
9
|
+
@client.prepare!
|
10
|
+
end
|
11
|
+
|
12
|
+
it "Should get a pdf returned for a file sent" do
|
13
|
+
rv = @client.get_pdf(1023117) ## use known static / magic file. sucks, but what can you do?
|
14
|
+
rv.length.should == 49606
|
15
|
+
f = open("test_output.pdf", "w")
|
16
|
+
|
17
|
+
f.write(rv)
|
18
|
+
(`file test_output.pdf`).should == "test_output.pdf: PDF document, version 1.3\n"
|
19
|
+
system("rm test_output.pdf")
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should check for error for when there is no file yet" do
|
23
|
+
res = @client.send_letter(@doc, "the long goodbye")
|
24
|
+
id = res.sendLetterResult.to_i
|
25
|
+
|
26
|
+
id.should > 0
|
27
|
+
#
|
28
|
+
lambda {@client.get_pdf(id)}.should raise_error(PostalMethods::APIStatusCode3020Exception)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should get the details of a letter" do
|
32
|
+
id = @client.send_letter(@doc, "the long goodbye").sendLetterResult.to_i
|
33
|
+
sleep(10) # because it's a tired little clients
|
34
|
+
details = @client.get_letter_details(id)
|
35
|
+
|
36
|
+
# check the return...
|
37
|
+
details.should be_an_instance_of(Array)
|
38
|
+
|
39
|
+
# and now the item...
|
40
|
+
details.first.should be_an_instance_of(SOAP::Mapping::Object)
|
41
|
+
|
42
|
+
details.first.price.should == "0.00"
|
43
|
+
details.first.iD.to_i.should == id ## be careful not to confuse with class id
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should raise an error when trying to get details of an invalid letter" do
|
47
|
+
sleep(6) # got to wait 6 seconds...
|
48
|
+
lambda { @client.get_letter_details(1)}.should raise_error(PostalMethods::APIStatusCode3001Exception)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should cancel delivery of a letter" do
|
52
|
+
id = @client.send_letter(@doc, "the long goodbye").sendLetterResult.to_i
|
53
|
+
rv = @client.cancel_delivery(id)
|
54
|
+
rv.should be_true
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should raise an error when trying to cancel an invalid letter" do
|
58
|
+
lambda { @client.cancel_delivery(1)}.should raise_error(PostalMethods::APIStatusCode3001Exception)
|
59
|
+
end
|
60
|
+
|
61
|
+
|
62
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
desc 'Release the website and new gem version'
|
2
|
+
task :deploy => [:check_version, :website, :release] do
|
3
|
+
puts "Remember to create SVN tag:"
|
4
|
+
puts "svn copy svn+ssh://#{rubyforge_username}@rubyforge.org/var/svn/#{PATH}/trunk " +
|
5
|
+
"svn+ssh://#{rubyforge_username}@rubyforge.org/var/svn/#{PATH}/tags/REL-#{VERS} "
|
6
|
+
puts "Suggested comment:"
|
7
|
+
puts "Tagging release #{CHANGES}"
|
8
|
+
end
|
9
|
+
|
10
|
+
desc 'Runs tasks website_generate and install_gem as a local deployment of the gem'
|
11
|
+
task :local_deploy => [:website_generate, :install_gem]
|
12
|
+
|
13
|
+
task :check_version do
|
14
|
+
unless ENV['VERSION']
|
15
|
+
puts 'Must pass a VERSION=x.y.z release version'
|
16
|
+
exit
|
17
|
+
end
|
18
|
+
unless ENV['VERSION'] == VERS
|
19
|
+
puts "Please update your version.rb to match the release version, currently #{VERS}"
|
20
|
+
exit
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
desc 'Install the package as a gem, without generating documentation(ri/rdoc)'
|
25
|
+
task :install_gem_no_doc => [:clean, :package] do
|
26
|
+
sh "#{'sudo ' unless Hoe::WINDOZE }gem install pkg/*.gem --no-rdoc --no-ri"
|
27
|
+
end
|
28
|
+
|
29
|
+
namespace :manifest do
|
30
|
+
desc 'Recreate Manifest.txt to include ALL files'
|
31
|
+
task :refresh do
|
32
|
+
`rake check_manifest | patch -p0 > Manifest.txt`
|
33
|
+
end
|
34
|
+
end
|
data/tasks/rspec.rake
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
begin
|
2
|
+
require 'spec'
|
3
|
+
rescue LoadError
|
4
|
+
require 'rubygems'
|
5
|
+
require 'spec'
|
6
|
+
end
|
7
|
+
begin
|
8
|
+
require 'spec/rake/spectask'
|
9
|
+
rescue LoadError
|
10
|
+
puts <<-EOS
|
11
|
+
To use rspec for testing you must install rspec gem:
|
12
|
+
gem install rspec
|
13
|
+
EOS
|
14
|
+
exit(0)
|
15
|
+
end
|
16
|
+
|
17
|
+
desc "Run the specs under spec/models"
|
18
|
+
Spec::Rake::SpecTask.new do |t|
|
19
|
+
t.spec_opts = ['--options', "spec/spec.opts"]
|
20
|
+
t.spec_files = FileList['spec/**/*_spec.rb']
|
21
|
+
end
|
22
|
+
|
23
|
+
namespace :spec do
|
24
|
+
desc "Run all specs in spec directory with RCov (excluding plugin specs)"
|
25
|
+
Spec::Rake::SpecTask.new(:rcov) do |t|
|
26
|
+
t.spec_opts = ['--options', "\"spec/spec.opts\""]
|
27
|
+
t.spec_files = FileList['spec/**/*_spec.rb']
|
28
|
+
t.rcov = true
|
29
|
+
t.rcov_opts = lambda do
|
30
|
+
IO.readlines("spec/rcov.opts").map {|l| l.chomp.split " "}.flatten
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
metadata
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: postalmethods
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- James Cox
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-09-22 00:00:00 +01:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: hoe
|
17
|
+
type: :development
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 1.7.0
|
24
|
+
version:
|
25
|
+
description: Wrapper for the Postal Methods API
|
26
|
+
email:
|
27
|
+
- james-at-imaj.es
|
28
|
+
executables: []
|
29
|
+
|
30
|
+
extensions: []
|
31
|
+
|
32
|
+
extra_rdoc_files:
|
33
|
+
- History.txt
|
34
|
+
- License.txt
|
35
|
+
- Manifest.txt
|
36
|
+
- PostInstall.txt
|
37
|
+
- README.txt
|
38
|
+
files:
|
39
|
+
- History.txt
|
40
|
+
- License.txt
|
41
|
+
- Manifest.txt
|
42
|
+
- PostInstall.txt
|
43
|
+
- README.txt
|
44
|
+
- Rakefile
|
45
|
+
- config/hoe.rb
|
46
|
+
- config/requirements.rb
|
47
|
+
- lib/postalmethods.rb
|
48
|
+
- lib/postalmethods/version.rb
|
49
|
+
- lib/postalmethods/document_processor.rb
|
50
|
+
- lib/postalmethods/exceptions.rb
|
51
|
+
- lib/postalmethods/get_letter_status.rb
|
52
|
+
- lib/postalmethods/send_letter.rb
|
53
|
+
- lib/postalmethods/utility.rb
|
54
|
+
- script/console
|
55
|
+
- script/destroy
|
56
|
+
- script/generate
|
57
|
+
- setup.rb
|
58
|
+
- spec/document_processor_spec.rb
|
59
|
+
- spec/get_letter_status_spec.rb
|
60
|
+
- spec/postalmethods_spec.rb
|
61
|
+
- spec/send_letter_spec.rb
|
62
|
+
- spec/utility_spec.rb
|
63
|
+
- spec/rcov.opts
|
64
|
+
- spec/spec.opts
|
65
|
+
- spec/spec_helper.rb
|
66
|
+
- tasks/deployment.rake
|
67
|
+
- tasks/environment.rake
|
68
|
+
- tasks/rspec.rake
|
69
|
+
has_rdoc: true
|
70
|
+
homepage: http://postalmethods.rubyforge.org
|
71
|
+
post_install_message: |+
|
72
|
+
|
73
|
+
For more information on working with Postal Methods,
|
74
|
+
see the API reference here:
|
75
|
+
|
76
|
+
http://www.postalmethods.com/resources/quickstart
|
77
|
+
|
78
|
+
rdoc_options:
|
79
|
+
- --main
|
80
|
+
- README.txt
|
81
|
+
require_paths:
|
82
|
+
- lib
|
83
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
84
|
+
requirements:
|
85
|
+
- - ">="
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: "0"
|
88
|
+
version:
|
89
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
90
|
+
requirements:
|
91
|
+
- - ">="
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: "0"
|
94
|
+
version:
|
95
|
+
requirements: []
|
96
|
+
|
97
|
+
rubyforge_project: postalmethods
|
98
|
+
rubygems_version: 1.2.0
|
99
|
+
signing_key:
|
100
|
+
specification_version: 2
|
101
|
+
summary: Wrapper for the Postal Methods API
|
102
|
+
test_files: []
|
103
|
+
|