lady_gaga 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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