lady_gaga 0.0.1

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.
@@ -0,0 +1,5 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ *.yml
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm ree@lady_gaga
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in lady_gaga.gemspec
4
+ gemspec
@@ -0,0 +1,67 @@
1
+ Lady Gaga
2
+ ======
3
+
4
+ Lady Gaga is a minimalistic, Nokogiri-based Ruby wrapper to the [Endicia Web Services API](http://www.endicia.com/Developers/).
5
+
6
+ Currently the following APIs are supported:
7
+ - [Dial-A-ZIP Address Verification API](http://www.endicia.com/Developers/ZipLookup/)
8
+
9
+ Usage
10
+ -----
11
+ Set up.
12
+
13
+ LadyGaga.configure do |config|
14
+ config.user = '1234'
15
+ config.password = 'password'
16
+ end
17
+
18
+ Initialize a request
19
+
20
+ request = LadyGaga::DialAZip.new
21
+
22
+ Build request params.
23
+
24
+ request << {
25
+ 'ADDRESS0' => 'John Doe',
26
+ 'ADDRESS1' => 'DYMO Endicia',
27
+ 'ADDRESS2' => '385 Sherman Ave',
28
+ 'ADDRESS3' => 'Palo Alto, CA 94306'
29
+ }
30
+
31
+ Get a response.
32
+
33
+ response = request.post
34
+
35
+ Check response validity:
36
+
37
+ response.code
38
+ returns: "200"
39
+
40
+ response.valid?
41
+ returns: true
42
+
43
+ Convert response to hash:
44
+
45
+ response.to_h
46
+
47
+ returns: {
48
+ 'Dial-A-ZIP_Response' => {
49
+ 'AddrLine1' => '385 Sherman Ave',
50
+ 'AddrLine2' => 'DYMO ENDICIA',
51
+ 'AddrLine3' => '',
52
+ 'AddrLineLast' => 'PALO ALTO CA 94306-1864'
53
+ }
54
+ }
55
+
56
+
57
+ Or parse a response with Nokogiri:
58
+
59
+ response.xml.css("Dial-A-ZIP_Response").each do |r|
60
+ some business value
61
+ end
62
+
63
+ response.xml.xpath("//User")
64
+
65
+ ----
66
+
67
+ To get started with the Dial-A-Zip Address Verification API, Sign Up for an Endicia Account and request API access.
@@ -0,0 +1,17 @@
1
+ require 'bundler'
2
+ require 'cucumber/rake/task'
3
+ require 'rspec/core/rake_task'
4
+
5
+ Bundler::GemHelper.install_tasks
6
+
7
+ desc 'Run all specs in spec directory'
8
+ RSpec::Core::RakeTask.new(:spec) do |t|
9
+ t.pattern = "spec/**/*_spec.rb"
10
+ t.rspec_opts = %w(-fd -c)
11
+ end
12
+
13
+ Cucumber::Rake::Task.new(:features) do |t|
14
+ t.cucumber_opts = "features --format pretty"
15
+ end
16
+
17
+ task :default => [:spec, :features]
@@ -0,0 +1,15 @@
1
+ Feature: Endicia Dial-A-ZIP
2
+ As an API consumer
3
+
4
+ Background:
5
+ Given a new DialAZip request
6
+
7
+ Scenario:
8
+ Given the following parameters:
9
+ | ADDRESS0 | ADDRESS1 | ADDRESS2 | ADDRESS3 |
10
+ | John Doe | DYMO Endicia | 385 Sherman Ave | Palo Alto, CA 94306 |
11
+ When I tape the "dial_a_zip" request as: "address_verification"
12
+ Then the response code should be "200"
13
+ And the returned address should equal:
14
+ | AddrLine1 | AddrLine2 | AddrLineLast |
15
+ | 385 SHERMAN AVE | DYMO ENDICIA | PALO ALTO CA 94306-1864 |
@@ -0,0 +1,15 @@
1
+ Given /^a new DialAZip request$/ do
2
+ @request = LadyGaga::DialAZip.new
3
+ end
4
+
5
+ Then /^the returned address should equal:$/ do |table|
6
+ response = @response.to_h['Dial_A_ZIP_Response']
7
+
8
+ table.hashes.each do |address|
9
+ address.each_pair do |k,v|
10
+ returned_value = response[k]
11
+ returned_value.should == v
12
+ end
13
+ end
14
+ end
15
+
@@ -0,0 +1,19 @@
1
+ Given /^the following parameters:$/ do |table|
2
+ table.hashes.each do |h|
3
+ @request << h
4
+ end
5
+ end
6
+
7
+ When /^I tape the "([^"]*)" request as: "([^"]*)"$/ do |service, operation|
8
+ VCR.use_cassette("#{service}/#{operation}/#{cassette_name}", :record => :new_episodes) do
9
+ @response = @request.post
10
+ end
11
+ end
12
+
13
+ Then /^the response code should be "([^"]*)"$/ do |code|
14
+ @response.code.should == code.to_i
15
+ end
16
+
17
+ Then /^the response should have (\d+) "([^"]*)" nodes$/ do |count, node|
18
+ @response.xml.css(node).count.should == count.to_i
19
+ end
@@ -0,0 +1,32 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require 'digest/md5'
4
+ require 'lady_gaga'
5
+
6
+
7
+ module LadyGagaMethods
8
+ def cassette_name
9
+ Digest::MD5.hexdigest(@request.options.to_json)
10
+ end
11
+
12
+ def endicia
13
+ @endicia ||= YAML::load_file(File.dirname(__FILE__) + "/../../spec/support/endicia.yml")
14
+ end
15
+
16
+ def endicia_user
17
+ endicia['user']
18
+ end
19
+
20
+ def endicia_password
21
+ endicia['password']
22
+ end
23
+ end
24
+
25
+ World(LadyGagaMethods)
26
+
27
+ Before do
28
+ LadyGaga.configure do |config|
29
+ config.user = endicia_user
30
+ config.password = endicia_password
31
+ end
32
+ end
@@ -0,0 +1,9 @@
1
+ require 'vcr'
2
+
3
+ VCR.config do |c|
4
+ c.cassette_library_dir = File.dirname(__FILE__) + '/../../spec/fixtures/cassettes'
5
+ c.default_cassette_options = {
6
+ :record => :none,
7
+ :match_requests_on => [:host] }
8
+ c.stub_with :webmock
9
+ end
@@ -0,0 +1,38 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "lady_gaga/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "lady_gaga"
7
+ s.version = LadyGaga::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Ryan Closner"]
10
+ s.email = ["ryan.closner@gmail.com"]
11
+ s.homepage = "https://rubygems.org/gems/lady_gaga"
12
+ s.summary = %q{A Ruby Wrapper to the Endicia API}
13
+ s.description = %q{A minimalistic Ruby Wrapper to the Endicia API}
14
+
15
+ s.rubyforge_project = "lady_gaga"
16
+
17
+ {
18
+ 'httparty' => '~> 0.7.7',
19
+ 'nokogiri' => '~> 1.4.4',
20
+ 'activesupport' => '~> 2.3.10'
21
+ }.each {|lib, version| s.add_runtime_dependency lib, version }
22
+
23
+ {
24
+ 'bundler' => '~> 1.0.0',
25
+ 'addressable' => '2.2.4',
26
+ 'cucumber' => '~> 0.10.0',
27
+ 'rake' => '~> 0.8.7',
28
+ 'relish' => '~> 0.3.0.pre',
29
+ 'rspec' => '~> 2.5.0',
30
+ 'vcr' => '~> 1.9.0',
31
+ 'webmock' => '~> 1.6.0'
32
+ }.each {|lib, version| s.add_development_dependency lib, version }
33
+
34
+ s.files = `git ls-files`.split("\n")
35
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
36
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
37
+ s.require_paths = ["lib"]
38
+ end
@@ -0,0 +1,12 @@
1
+ require 'lady_gaga/request'
2
+ require 'lady_gaga/response'
3
+ require 'lady_gaga/config'
4
+ require 'lady_gaga/dial_a_zip'
5
+
6
+ module LadyGaga
7
+ class << self
8
+ def configure(&block)
9
+ yield Config
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,23 @@
1
+ module LadyGaga
2
+ class Config
3
+
4
+ class << self
5
+ def user=(user)
6
+ @user = user
7
+ end
8
+
9
+ def user
10
+ @user
11
+ end
12
+
13
+ def password=(password)
14
+ @password = password
15
+ end
16
+
17
+ def password
18
+ @password
19
+ end
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,28 @@
1
+ module LadyGaga
2
+ class DialAZip < Request
3
+
4
+ base_uri 'dial-a-zip.com'
5
+
6
+ protected
7
+
8
+ def default_options
9
+ {'COMMAND' => 'ZIP1'}
10
+ end
11
+
12
+ def credentials
13
+ {'USER' => Config.user, 'PASSWORD' => Config.password}
14
+ end
15
+
16
+ def xml_root
17
+ 'VERIFYADDRESS'
18
+ end
19
+
20
+ def xml_param
21
+ 'input'
22
+ end
23
+
24
+ def path
25
+ '/XML-Dial-A-ZIP/DAZService.asmx/MethodZIPValidate'
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,47 @@
1
+ require 'httparty'
2
+ require 'activesupport'
3
+
4
+ module LadyGaga
5
+ class Request
6
+
7
+ include HTTParty
8
+
9
+ format :xml
10
+
11
+ attr_accessor :xml_path, :xml_root, :path, :credentials
12
+
13
+ def default_options
14
+ {}
15
+ end
16
+
17
+ def credentials
18
+ {}
19
+ end
20
+
21
+ def options
22
+ @options ||= default_options
23
+ end
24
+
25
+ def <<(hash)
26
+ options.merge!(hash)
27
+ end
28
+
29
+ def reset!
30
+ @options = default_options
31
+ end
32
+
33
+ def body
34
+ {xml_param => options.merge(credentials).to_xml(:root => xml_root, :skip_instruct => true)}
35
+ end
36
+
37
+ def get
38
+ response = self.class.get(path, :query => body)
39
+ Response.new(response)
40
+ end
41
+
42
+ def post
43
+ response = self.class.post(path, :body => body)
44
+ Response.new(response)
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,36 @@
1
+ require 'nokogiri'
2
+
3
+ module LadyGaga
4
+ class Response
5
+
6
+ def initialize(response)
7
+ @response = response
8
+ end
9
+
10
+ def body
11
+ response.body
12
+ end
13
+
14
+ def to_h
15
+ response.to_hash
16
+ end
17
+
18
+ def code
19
+ response.code
20
+ end
21
+
22
+ def valid?
23
+ code == 200
24
+ end
25
+
26
+ def xml
27
+ @xml ||= Nokogiri::XML(body)
28
+ end
29
+
30
+ protected
31
+
32
+ def response
33
+ @response
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,3 @@
1
+ module LadyGaga
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ module LadyGaga
4
+ describe LadyGaga do
5
+
6
+ subject { Config }
7
+
8
+ describe ".user" do
9
+ it "sets the @user class variable" do
10
+ Config.instance_variable_set(:@user, '12345')
11
+ Config.user.should == '12345'
12
+ end
13
+ end
14
+
15
+ describe ".user=" do
16
+ it "sets the @user class variable" do
17
+ Config.user = '6789'
18
+ Config.instance_variable_get(:@user).should == '6789'
19
+ end
20
+ end
21
+
22
+
23
+ describe ".password" do
24
+ it "sets the @password class variable" do
25
+ Config.instance_variable_set(:@password, 'password')
26
+ Config.password.should == 'password'
27
+ end
28
+ end
29
+
30
+ describe ".password=" do
31
+ it "sets the @password class variable" do
32
+ Config.password = 'new_password'
33
+ Config.instance_variable_get(:@password).should == 'new_password'
34
+ end
35
+ end
36
+
37
+
38
+ end
39
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ module LadyGaga
4
+ describe DialAZip do
5
+
6
+ subject { DialAZip }
7
+
8
+ let(:request) { subject.new }
9
+
10
+ let(:credentials) do
11
+ {'USER' => '1234', 'PASSWORD' => 'password'}
12
+ end
13
+
14
+ before(:each) do
15
+ request.stub(:credentials).and_return(credentials)
16
+ end
17
+
18
+ describe "#post" do
19
+
20
+ before(:each) do
21
+ subject.stub(:post).and_return('')
22
+ end
23
+
24
+ it "returns a response object" do
25
+ request.post.should be_a(Response)
26
+ end
27
+ end
28
+ end
29
+
30
+ end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+
3
+ describe LadyGaga do
4
+ subject { LadyGaga }
5
+
6
+ describe "#configure" do
7
+ it "yields the LadyGaga::Config file" do
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,78 @@
1
+ require 'spec_helper'
2
+
3
+ module LadyGaga
4
+ describe Request do
5
+
6
+ subject { Request }
7
+
8
+ let(:path) { 'http://someurl.com' }
9
+ let(:xml_param) { 'q' }
10
+ let(:xml_root) { 'root' }
11
+
12
+ let(:default_options) do
13
+ {'USER' => '1234', 'PASSWORD' => 'password'}
14
+ end
15
+
16
+ before(:each) do
17
+ @request = subject.new
18
+ end
19
+
20
+ describe '#default_options' do
21
+ it 'defaults to an empty hash' do
22
+ @request.default_options.should eql({})
23
+ end
24
+ end
25
+
26
+ describe '#options' do
27
+ it 'defaults to the default_options' do
28
+ @request.stub(:default_options).and_return(default_options)
29
+ @request.options.should === default_options
30
+ end
31
+ end
32
+
33
+ describe '#<<' do
34
+ it "merges a hash into the existing options" do
35
+ @request << {:foo => "bar"}
36
+ @request.options[:foo].should == "bar"
37
+ end
38
+ end
39
+
40
+ describe '#reset!' do
41
+ it "resets the parameters to a blank hash" do
42
+ @request << {:foo => 'bar'}
43
+ @request.reset!
44
+ @request.options.should_not have_key(:foo)
45
+ end
46
+ end
47
+
48
+ context "making a request" do
49
+
50
+ before(:each) do
51
+ @request.stub(:path).and_return(path)
52
+ @request.stub(:xml_param).and_return(xml_param)
53
+ @request.stub(:xml_root).and_return(xml_root)
54
+ end
55
+
56
+ describe '#post' do
57
+ before(:each) do
58
+ subject.stub(:post).and_return('')
59
+ end
60
+
61
+ it 'returns a Response object' do
62
+ @request.post.should be_a(Response)
63
+ end
64
+ end
65
+
66
+ describe '#get' do
67
+ before(:each) do
68
+ subject.stub(:get).and_return('')
69
+ end
70
+
71
+ it 'returns a Response object' do
72
+ @request.get.should be_a(Response)
73
+ end
74
+ end
75
+ end
76
+ end
77
+
78
+ end
@@ -0,0 +1,65 @@
1
+ require 'spec_helper'
2
+
3
+ module LadyGaga
4
+ describe Response do
5
+
6
+ let(:response) do
7
+ mock(HTTParty::Response)
8
+ end
9
+
10
+ subject { Response.new(response) }
11
+
12
+ describe "#body" do
13
+ it "calls the HTTParty::Response#body" do
14
+ response.should_receive(:body)
15
+ subject.body
16
+ end
17
+ end
18
+
19
+ describe "#to_h" do
20
+ it "calls the HTTParty::Response#to_hash" do
21
+ response.should_receive(:to_hash)
22
+ subject.to_h
23
+ end
24
+ end
25
+
26
+ describe "#code" do
27
+ it "calls the HTTParty::Response#code" do
28
+ response.should_receive(:code)
29
+ subject.code
30
+ end
31
+ end
32
+
33
+ describe "#valid?" do
34
+ context "code is 200" do
35
+ before(:each) do
36
+ subject.stub(:code).and_return(200)
37
+ end
38
+
39
+ it "returns true" do
40
+ subject.valid?.should be_true
41
+ end
42
+ end
43
+
44
+ context "code is not 200" do
45
+ before(:each) do
46
+ subject.stub(:code).and_return(500)
47
+ end
48
+
49
+ it "returns false" do
50
+ subject.valid?.should be_false
51
+ end
52
+ end
53
+ end
54
+
55
+ describe "#xml" do
56
+ before(:each) do
57
+ subject.stub(:body).and_return('')
58
+ end
59
+
60
+ it "returns a Nokogiri::XML document" do
61
+ subject.xml.should be_a(Nokogiri::XML::Document)
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,7 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require 'rspec'
4
+
5
+ require File.expand_path('../../lib/lady_gaga', __FILE__)
6
+
7
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
@@ -0,0 +1,2 @@
1
+ user: 'ENDICIA USER ID (e.g. 1234567)'
2
+ password: 'ENDICIA PASSWORD'
@@ -0,0 +1,13 @@
1
+ require 'vcr'
2
+
3
+ VCR.config do |c|
4
+ c.cassette_library_dir = File.dirname(__FILE__) + '/../fixtures/cassette_library'
5
+ c.default_cassette_options = {
6
+ :record => :none,
7
+ :match_requests_on => [:host] }
8
+ c.stub_with :webmock
9
+ end
10
+
11
+ RSpec.configure do |config|
12
+ config.extend VCR::RSpec::Macros
13
+ end
metadata ADDED
@@ -0,0 +1,280 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lady_gaga
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Ryan Closner
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-06-23 00:00:00 -07:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: httparty
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ hash: 13
30
+ segments:
31
+ - 0
32
+ - 7
33
+ - 7
34
+ version: 0.7.7
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: activesupport
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ hash: 23
46
+ segments:
47
+ - 2
48
+ - 3
49
+ - 10
50
+ version: 2.3.10
51
+ type: :runtime
52
+ version_requirements: *id002
53
+ - !ruby/object:Gem::Dependency
54
+ name: nokogiri
55
+ prerelease: false
56
+ requirement: &id003 !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ hash: 15
62
+ segments:
63
+ - 1
64
+ - 4
65
+ - 4
66
+ version: 1.4.4
67
+ type: :runtime
68
+ version_requirements: *id003
69
+ - !ruby/object:Gem::Dependency
70
+ name: relish
71
+ prerelease: false
72
+ requirement: &id004 !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ hash: 961915996
78
+ segments:
79
+ - 0
80
+ - 3
81
+ - 0
82
+ - pre
83
+ version: 0.3.0.pre
84
+ type: :development
85
+ version_requirements: *id004
86
+ - !ruby/object:Gem::Dependency
87
+ name: rake
88
+ prerelease: false
89
+ requirement: &id005 !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ~>
93
+ - !ruby/object:Gem::Version
94
+ hash: 49
95
+ segments:
96
+ - 0
97
+ - 8
98
+ - 7
99
+ version: 0.8.7
100
+ type: :development
101
+ version_requirements: *id005
102
+ - !ruby/object:Gem::Dependency
103
+ name: addressable
104
+ prerelease: false
105
+ requirement: &id006 !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - "="
109
+ - !ruby/object:Gem::Version
110
+ hash: 15
111
+ segments:
112
+ - 2
113
+ - 2
114
+ - 4
115
+ version: 2.2.4
116
+ type: :development
117
+ version_requirements: *id006
118
+ - !ruby/object:Gem::Dependency
119
+ name: rspec
120
+ prerelease: false
121
+ requirement: &id007 !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - ~>
125
+ - !ruby/object:Gem::Version
126
+ hash: 27
127
+ segments:
128
+ - 2
129
+ - 5
130
+ - 0
131
+ version: 2.5.0
132
+ type: :development
133
+ version_requirements: *id007
134
+ - !ruby/object:Gem::Dependency
135
+ name: vcr
136
+ prerelease: false
137
+ requirement: &id008 !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ~>
141
+ - !ruby/object:Gem::Version
142
+ hash: 51
143
+ segments:
144
+ - 1
145
+ - 9
146
+ - 0
147
+ version: 1.9.0
148
+ type: :development
149
+ version_requirements: *id008
150
+ - !ruby/object:Gem::Dependency
151
+ name: bundler
152
+ prerelease: false
153
+ requirement: &id009 !ruby/object:Gem::Requirement
154
+ none: false
155
+ requirements:
156
+ - - ~>
157
+ - !ruby/object:Gem::Version
158
+ hash: 23
159
+ segments:
160
+ - 1
161
+ - 0
162
+ - 0
163
+ version: 1.0.0
164
+ type: :development
165
+ version_requirements: *id009
166
+ - !ruby/object:Gem::Dependency
167
+ name: cucumber
168
+ prerelease: false
169
+ requirement: &id010 !ruby/object:Gem::Requirement
170
+ none: false
171
+ requirements:
172
+ - - ~>
173
+ - !ruby/object:Gem::Version
174
+ hash: 55
175
+ segments:
176
+ - 0
177
+ - 10
178
+ - 0
179
+ version: 0.10.0
180
+ type: :development
181
+ version_requirements: *id010
182
+ - !ruby/object:Gem::Dependency
183
+ name: webmock
184
+ prerelease: false
185
+ requirement: &id011 !ruby/object:Gem::Requirement
186
+ none: false
187
+ requirements:
188
+ - - ~>
189
+ - !ruby/object:Gem::Version
190
+ hash: 15
191
+ segments:
192
+ - 1
193
+ - 6
194
+ - 0
195
+ version: 1.6.0
196
+ type: :development
197
+ version_requirements: *id011
198
+ description: A minimalistic Ruby Wrapper to the Endicia API
199
+ email:
200
+ - ryan.closner@gmail.com
201
+ executables: []
202
+
203
+ extensions: []
204
+
205
+ extra_rdoc_files: []
206
+
207
+ files:
208
+ - .gitignore
209
+ - .rvmrc
210
+ - Gemfile
211
+ - README.md
212
+ - Rakefile
213
+ - features/dial_a_zip.feature
214
+ - features/step_definitions/dial_a_zip_steps.rb
215
+ - features/step_definitions/lady_gaga_steps.rb
216
+ - features/support/env.rb
217
+ - features/support/vcr.rb
218
+ - lady_gaga.gemspec
219
+ - lib/lady_gaga.rb
220
+ - lib/lady_gaga/config.rb
221
+ - lib/lady_gaga/dial_a_zip.rb
222
+ - lib/lady_gaga/request.rb
223
+ - lib/lady_gaga/response.rb
224
+ - lib/lady_gaga/version.rb
225
+ - spec/config_spec.rb
226
+ - spec/dial_a_zip_spec.rb
227
+ - spec/lady_gaga_spec.rb
228
+ - spec/request_spec.rb
229
+ - spec/response_spec.rb
230
+ - spec/spec_helper.rb
231
+ - spec/support/endicia.yml.sample
232
+ - spec/support/vcr.rb
233
+ has_rdoc: true
234
+ homepage: https://rubygems.org/gems/lady_gaga
235
+ licenses: []
236
+
237
+ post_install_message:
238
+ rdoc_options: []
239
+
240
+ require_paths:
241
+ - lib
242
+ required_ruby_version: !ruby/object:Gem::Requirement
243
+ none: false
244
+ requirements:
245
+ - - ">="
246
+ - !ruby/object:Gem::Version
247
+ hash: 3
248
+ segments:
249
+ - 0
250
+ version: "0"
251
+ required_rubygems_version: !ruby/object:Gem::Requirement
252
+ none: false
253
+ requirements:
254
+ - - ">="
255
+ - !ruby/object:Gem::Version
256
+ hash: 3
257
+ segments:
258
+ - 0
259
+ version: "0"
260
+ requirements: []
261
+
262
+ rubyforge_project: lady_gaga
263
+ rubygems_version: 1.4.2
264
+ signing_key:
265
+ specification_version: 3
266
+ summary: A Ruby Wrapper to the Endicia API
267
+ test_files:
268
+ - features/dial_a_zip.feature
269
+ - features/step_definitions/dial_a_zip_steps.rb
270
+ - features/step_definitions/lady_gaga_steps.rb
271
+ - features/support/env.rb
272
+ - features/support/vcr.rb
273
+ - spec/config_spec.rb
274
+ - spec/dial_a_zip_spec.rb
275
+ - spec/lady_gaga_spec.rb
276
+ - spec/request_spec.rb
277
+ - spec/response_spec.rb
278
+ - spec/spec_helper.rb
279
+ - spec/support/endicia.yml.sample
280
+ - spec/support/vcr.rb