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.
- data/.gitignore +5 -0
- data/.rvmrc +1 -0
- data/Gemfile +4 -0
- data/README.md +67 -0
- data/Rakefile +17 -0
- data/features/dial_a_zip.feature +15 -0
- data/features/step_definitions/dial_a_zip_steps.rb +15 -0
- data/features/step_definitions/lady_gaga_steps.rb +19 -0
- data/features/support/env.rb +32 -0
- data/features/support/vcr.rb +9 -0
- data/lady_gaga.gemspec +38 -0
- data/lib/lady_gaga.rb +12 -0
- data/lib/lady_gaga/config.rb +23 -0
- data/lib/lady_gaga/dial_a_zip.rb +28 -0
- data/lib/lady_gaga/request.rb +47 -0
- data/lib/lady_gaga/response.rb +36 -0
- data/lib/lady_gaga/version.rb +3 -0
- data/spec/config_spec.rb +39 -0
- data/spec/dial_a_zip_spec.rb +30 -0
- data/spec/lady_gaga_spec.rb +10 -0
- data/spec/request_spec.rb +78 -0
- data/spec/response_spec.rb +65 -0
- data/spec/spec_helper.rb +7 -0
- data/spec/support/endicia.yml.sample +2 -0
- data/spec/support/vcr.rb +13 -0
- metadata +280 -0
data/.rvmrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rvm ree@lady_gaga
|
data/Gemfile
ADDED
data/README.md
ADDED
@@ -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.
|
data/Rakefile
ADDED
@@ -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
|
data/lady_gaga.gemspec
ADDED
@@ -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
|
data/lib/lady_gaga.rb
ADDED
@@ -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
|
data/spec/config_spec.rb
ADDED
@@ -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,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
|
data/spec/spec_helper.rb
ADDED
data/spec/support/vcr.rb
ADDED
@@ -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
|