fake_braintree 0.1.0 → 0.1.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 +3 -0
- data/Changelog.md +4 -1
- data/README.md +3 -2
- data/lib/fake_braintree.rb +1 -0
- data/lib/fake_braintree/credit_card.rb +78 -0
- data/lib/fake_braintree/customer.rb +23 -2
- data/lib/fake_braintree/registry.rb +7 -10
- data/lib/fake_braintree/sinatra_app.rb +9 -2
- data/lib/fake_braintree/valid_credit_cards.rb +1 -1
- data/lib/fake_braintree/version.rb +1 -1
- data/spec/fake_braintree/credit_card_spec.rb +15 -0
- data/spec/fake_braintree/customer_spec.rb +16 -0
- data/spec/fake_braintree/registry_spec.rb +12 -74
- data/spec/support/matchers/clear_hash_when_cleared.rb +11 -0
- data/spec/support/matchers/have_accessor_for.rb +10 -0
- metadata +113 -171
data/.gitignore
CHANGED
data/Changelog.md
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
# 0.1.
|
|
1
|
+
# 0.1.1
|
|
2
|
+
* Braintree::CreditCard.update now works
|
|
3
|
+
|
|
4
|
+
# 0.1.0
|
|
2
5
|
* FakeBraintree.{customers, transactions, failures, subscriptions, redirects}
|
|
3
6
|
are now accessed via FakeBraintree.registry. For example,
|
|
4
7
|
FakeBraintree.customers is now FakeBraintree.registry.customers
|
data/README.md
CHANGED
|
@@ -25,6 +25,7 @@ Currently in alpha (i.e. it does not support every Braintree call).
|
|
|
25
25
|
### CreditCard
|
|
26
26
|
* `Braintree::CreditCard.find`
|
|
27
27
|
* `Braintree::CreditCard.sale`
|
|
28
|
+
* `Braintree::CreditCard.update`
|
|
28
29
|
|
|
29
30
|
### Transaction
|
|
30
31
|
* `Braintree::Transaction.sale`
|
|
@@ -43,7 +44,7 @@ do before each test.
|
|
|
43
44
|
|
|
44
45
|
Full example:
|
|
45
46
|
|
|
46
|
-
# spec_helper.rb
|
|
47
|
+
# spec/spec_helper.rb
|
|
47
48
|
require 'fake_braintree'
|
|
48
49
|
|
|
49
50
|
RSpec.configure do |c|
|
|
@@ -54,7 +55,7 @@ Full example:
|
|
|
54
55
|
|
|
55
56
|
If you're using Cucumber, add this too:
|
|
56
57
|
|
|
57
|
-
# env.rb
|
|
58
|
+
# features/support/env.rb
|
|
58
59
|
require 'fake_braintree'
|
|
59
60
|
|
|
60
61
|
Before do
|
data/lib/fake_braintree.rb
CHANGED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
module FakeBraintree
|
|
2
|
+
class CreditCard
|
|
3
|
+
include Helpers
|
|
4
|
+
|
|
5
|
+
def initialize(credit_card_hash_from_params, options)
|
|
6
|
+
set_up_credit_card(credit_card_hash_from_params, options)
|
|
7
|
+
set_expiration_month_and_year
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def update
|
|
11
|
+
if credit_card_exists_in_registry?
|
|
12
|
+
update_credit_card!
|
|
13
|
+
response_for_updated_card
|
|
14
|
+
else
|
|
15
|
+
response_for_card_not_found
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
def update_credit_card!
|
|
22
|
+
@hash = credit_card_from_registry.merge!(@hash)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def response_for_updated_card
|
|
26
|
+
gzipped_response(200, @hash.to_xml(:root => 'credit_card'))
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def credit_card_exists_in_registry?
|
|
30
|
+
FakeBraintree.registry.credit_cards.key?(token)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def credit_card_from_registry
|
|
34
|
+
FakeBraintree.registry.credit_cards[token]
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def response_for_card_not_found
|
|
38
|
+
gzipped_response(404, FakeBraintree.failure_response.to_xml(:root => 'api_error_response'))
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def expiration_month
|
|
42
|
+
expiration_date_parts[0]
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def expiration_year
|
|
46
|
+
expiration_date_parts[1]
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def set_up_credit_card(credit_card_hash_from_params, options)
|
|
50
|
+
@hash = {
|
|
51
|
+
"token" => options[:token],
|
|
52
|
+
"merchant_id" => options[:merchant_id]
|
|
53
|
+
}.merge(credit_card_hash_from_params)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def set_expiration_month_and_year
|
|
57
|
+
if expiration_month
|
|
58
|
+
@hash["expiration_month"] = expiration_month
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
if expiration_year
|
|
62
|
+
@hash["expiration_year"] = expiration_year
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def token
|
|
67
|
+
@hash['token']
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def expiration_date_parts
|
|
71
|
+
if @hash.key?("expiration_date")
|
|
72
|
+
@hash["expiration_date"].split('/')
|
|
73
|
+
else
|
|
74
|
+
[]
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
@@ -14,8 +14,9 @@ module FakeBraintree
|
|
|
14
14
|
failure_response
|
|
15
15
|
else
|
|
16
16
|
hash = customer_hash
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
create_customer_with(hash)
|
|
18
|
+
create_credit_card_with(hash)
|
|
19
|
+
creation_response_for(hash)
|
|
19
20
|
end
|
|
20
21
|
end
|
|
21
22
|
|
|
@@ -121,5 +122,25 @@ module FakeBraintree
|
|
|
121
122
|
def existing_customer_id
|
|
122
123
|
@customer_hash['id']
|
|
123
124
|
end
|
|
125
|
+
|
|
126
|
+
def creation_response_for(hash)
|
|
127
|
+
gzipped_response(201, hash.to_xml(:root => 'customer'))
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def create_customer_with(hash)
|
|
131
|
+
FakeBraintree.registry.customers[hash["id"]] = hash
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def create_credit_card_with(hash)
|
|
135
|
+
if hash.key?("credit_cards")
|
|
136
|
+
hash["credit_cards"].each do |credit_card|
|
|
137
|
+
add_credit_card_to_registry(credit_card)
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def add_credit_card_to_registry(credit_card_hash)
|
|
143
|
+
FakeBraintree.registry.credit_cards[credit_card_hash["token"]] = credit_card_hash
|
|
144
|
+
end
|
|
124
145
|
end
|
|
125
146
|
end
|
|
@@ -3,7 +3,12 @@ class FakeBraintree::Registry
|
|
|
3
3
|
clear!
|
|
4
4
|
end
|
|
5
5
|
|
|
6
|
-
attr_accessor :customers,
|
|
6
|
+
attr_accessor :customers,
|
|
7
|
+
:subscriptions,
|
|
8
|
+
:failures,
|
|
9
|
+
:transactions,
|
|
10
|
+
:redirects,
|
|
11
|
+
:credit_cards
|
|
7
12
|
|
|
8
13
|
def clear!
|
|
9
14
|
@customers = {}
|
|
@@ -11,18 +16,10 @@ class FakeBraintree::Registry
|
|
|
11
16
|
@failures = {}
|
|
12
17
|
@transactions = {}
|
|
13
18
|
@redirects = {}
|
|
19
|
+
@credit_cards = {}
|
|
14
20
|
end
|
|
15
21
|
|
|
16
22
|
def failure?(card_number)
|
|
17
23
|
@failures.keys.include?(card_number)
|
|
18
24
|
end
|
|
19
|
-
|
|
20
|
-
def credit_card_from_token(token)
|
|
21
|
-
@customers.values.detect do |customer|
|
|
22
|
-
next unless customer.key?("credit_cards")
|
|
23
|
-
|
|
24
|
-
card = customer["credit_cards"].detect {|card| card["token"] == token }
|
|
25
|
-
return card if card
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
25
|
end
|
|
@@ -66,7 +66,6 @@ module FakeBraintree
|
|
|
66
66
|
|
|
67
67
|
# Braintree::Subscription.cancel
|
|
68
68
|
put "/merchants/:merchant_id/subscriptions/:id/cancel" do
|
|
69
|
-
subscription = FakeBraintree.registry.subscriptions[params[:id]]
|
|
70
69
|
updates = {"status" => Braintree::Subscription::Status::Canceled}
|
|
71
70
|
options = {:id => params[:id], :merchant_id => params[:merchant_id]}
|
|
72
71
|
Subscription.new(updates, options).update
|
|
@@ -74,10 +73,18 @@ module FakeBraintree
|
|
|
74
73
|
|
|
75
74
|
# Braintree::CreditCard.find
|
|
76
75
|
get "/merchants/:merchant_id/payment_methods/:credit_card_token" do
|
|
77
|
-
credit_card = FakeBraintree.registry.
|
|
76
|
+
credit_card = FakeBraintree.registry.credit_cards[params[:credit_card_token]]
|
|
78
77
|
gzipped_response(200, credit_card.to_xml(:root => "credit_card"))
|
|
79
78
|
end
|
|
80
79
|
|
|
80
|
+
# Braintree::CreditCard.update
|
|
81
|
+
put "/merchants/:merchant_id/payment_methods/:credit_card_token" do
|
|
82
|
+
credit_card = FakeBraintree.registry.credit_cards[params[:credit_card_token]]
|
|
83
|
+
updates = Hash.from_xml(request.body).delete("credit_card")
|
|
84
|
+
options = {:token => params[:credit_card_token], :merchant_id => params[:merchant_id]}
|
|
85
|
+
CreditCard.new(updates, options).update
|
|
86
|
+
end
|
|
87
|
+
|
|
81
88
|
# Braintree::Transaction.sale
|
|
82
89
|
# Braintree::CreditCard.sale
|
|
83
90
|
post "/merchants/:merchant_id/transactions" do
|
|
@@ -21,3 +21,18 @@ describe "Braintree::CreditCard.sale" do
|
|
|
21
21
|
Braintree::Transaction.find(result.transaction.id).should be
|
|
22
22
|
end
|
|
23
23
|
end
|
|
24
|
+
|
|
25
|
+
describe "Braintree::CreditCard.update" do
|
|
26
|
+
it "successfully updates the credit card" do
|
|
27
|
+
new_expiration_date = "08/2012"
|
|
28
|
+
token = cc_token
|
|
29
|
+
|
|
30
|
+
result = Braintree::CreditCard.update(token, :expiration_date => new_expiration_date)
|
|
31
|
+
result.should be_success
|
|
32
|
+
Braintree::CreditCard.find(token).expiration_date.should == new_expiration_date
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "raises an error for a nonexistent credit card" do
|
|
36
|
+
lambda { Braintree::CreditCard.update("foo", {:number => TEST_CC_NUMBER}) }.should raise_error(Braintree::NotFoundError)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -9,6 +9,22 @@ describe "Braintree::Customer.create" do
|
|
|
9
9
|
result.should be_success
|
|
10
10
|
end
|
|
11
11
|
|
|
12
|
+
it "associates a created credit card with the customer" do
|
|
13
|
+
result = Braintree::Customer.create(:credit_card => { :number => TEST_CC_NUMBER,
|
|
14
|
+
:expiration_date => '04/2016'})
|
|
15
|
+
credit_cards = Braintree::Customer.find(result.customer.id).credit_cards
|
|
16
|
+
credit_cards.size.should == 1
|
|
17
|
+
credit_cards.first.expiration_date.should == "04/2016"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "successfully creates the customer's credit card" do
|
|
21
|
+
result = Braintree::Customer.create(:credit_card => { :number => TEST_CC_NUMBER,
|
|
22
|
+
:expiration_date => '04/2016'})
|
|
23
|
+
|
|
24
|
+
cc_token = result.customer.credit_cards.first.token
|
|
25
|
+
expect { Braintree::CreditCard.find(cc_token) }.not_to raise_error(Braintree::NotFoundError)
|
|
26
|
+
end
|
|
27
|
+
|
|
12
28
|
it "can handle an empty credit card hash" do
|
|
13
29
|
result = Braintree::Customer.create(:credit_card => {})
|
|
14
30
|
result.should be_success
|
|
@@ -1,66 +1,21 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
3
|
describe FakeBraintree::Registry do
|
|
4
|
-
it
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
it
|
|
10
|
-
registry.subscriptions['abc123'] = "Bob"
|
|
11
|
-
registry.subscriptions['abc123'].should == "Bob"
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
it "exposes a failures accessor" do
|
|
15
|
-
registry.failures['abc123'] = "Bob"
|
|
16
|
-
registry.failures['abc123'].should == "Bob"
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
it "exposes a transactions accessor" do
|
|
20
|
-
registry.transactions['abc123'] = "Bob"
|
|
21
|
-
registry.transactions['abc123'].should == "Bob"
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
it "exposes a redirects accessor" do
|
|
25
|
-
registry.redirects['abc123'] = "Bob"
|
|
26
|
-
registry.redirects['abc123'].should == "Bob"
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
let(:registry) { subject }
|
|
4
|
+
it { should have_hash_accessor_for(:customers) }
|
|
5
|
+
it { should have_hash_accessor_for(:subscriptions) }
|
|
6
|
+
it { should have_hash_accessor_for(:failures) }
|
|
7
|
+
it { should have_hash_accessor_for(:transactions) }
|
|
8
|
+
it { should have_hash_accessor_for(:redirects) }
|
|
9
|
+
it { should have_hash_accessor_for(:credit_cards) }
|
|
30
10
|
end
|
|
31
11
|
|
|
32
12
|
describe FakeBraintree::Registry, "#clear!" do
|
|
33
|
-
it
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
it "clears stored subscriptions" do
|
|
40
|
-
registry.subscriptions['abc123'] = "Bob"
|
|
41
|
-
registry.clear!
|
|
42
|
-
registry.subscriptions.should be_empty
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
it "clears stored failures" do
|
|
46
|
-
registry.failures['abc123'] = "Bob"
|
|
47
|
-
registry.clear!
|
|
48
|
-
registry.failures.should be_empty
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
it "clears stored transactions" do
|
|
52
|
-
registry.transactions['abc123'] = "Bob"
|
|
53
|
-
registry.clear!
|
|
54
|
-
registry.transactions.should be_empty
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
it "clears stored redirects" do
|
|
58
|
-
registry.redirects['abc123'] = "Bob"
|
|
59
|
-
registry.clear!
|
|
60
|
-
registry.redirects.should be_empty
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
let(:registry) { subject }
|
|
13
|
+
it { should clear_hash_when_cleared(:customers) }
|
|
14
|
+
it { should clear_hash_when_cleared(:subscriptions) }
|
|
15
|
+
it { should clear_hash_when_cleared(:failures) }
|
|
16
|
+
it { should clear_hash_when_cleared(:transactions) }
|
|
17
|
+
it { should clear_hash_when_cleared(:redirects) }
|
|
18
|
+
it { should clear_hash_when_cleared(:credit_cards) }
|
|
64
19
|
end
|
|
65
20
|
|
|
66
21
|
describe FakeBraintree::Registry, "#failure?" do
|
|
@@ -73,22 +28,5 @@ describe FakeBraintree::Registry, "#failure?" do
|
|
|
73
28
|
registry.failure?('abc123').should be_true
|
|
74
29
|
end
|
|
75
30
|
|
|
76
|
-
|
|
77
31
|
let(:registry) { subject }
|
|
78
32
|
end
|
|
79
|
-
|
|
80
|
-
describe FakeBraintree::Registry, ".credit_card_from_token" do
|
|
81
|
-
it "looks up the credit card based on a CC token" do
|
|
82
|
-
number = %w(4111 1111 1111 2222).join
|
|
83
|
-
expiration_date = "04/2016"
|
|
84
|
-
customer = create_braintree_customer(number, expiration_date)
|
|
85
|
-
credit_card = customer.credit_cards.first
|
|
86
|
-
|
|
87
|
-
# registry.customers[customer.id] = customer
|
|
88
|
-
|
|
89
|
-
registry.credit_card_from_token(credit_card.token)["last_4"].should == "2222"
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
# let(:registry) { FakeBraintree::Registry.new }
|
|
93
|
-
let(:registry) { FakeBraintree.registry }
|
|
94
|
-
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
RSpec::Matchers.define :clear_hash_when_cleared do |property|
|
|
2
|
+
match do |object|
|
|
3
|
+
object.send(property.to_sym)["key"] = "value"
|
|
4
|
+
object.clear!
|
|
5
|
+
object.send(property.to_sym).should be_empty
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
failure_message do
|
|
9
|
+
"Expected #{object} to clear #{property} hash after clear!, but it did not."
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
RSpec::Matchers.define :have_hash_accessor_for do |property|
|
|
2
|
+
match do |object|
|
|
3
|
+
object.send(property.to_sym)['key'] = 'value'
|
|
4
|
+
object.send(property.to_sym)['key'].should == 'value'
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
failure_message do
|
|
8
|
+
"Expected #{object} to have accessor for #{property}, but it did not."
|
|
9
|
+
end
|
|
10
|
+
end
|
metadata
CHANGED
|
@@ -1,216 +1,156 @@
|
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: fake_braintree
|
|
3
|
-
version: !ruby/object:Gem::Version
|
|
4
|
-
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.1
|
|
5
5
|
prerelease:
|
|
6
|
-
segments:
|
|
7
|
-
- 0
|
|
8
|
-
- 1
|
|
9
|
-
- 0
|
|
10
|
-
version: 0.1.0
|
|
11
6
|
platform: ruby
|
|
12
|
-
authors:
|
|
7
|
+
authors:
|
|
13
8
|
- thoughtbot, inc.
|
|
14
9
|
autorequire:
|
|
15
10
|
bindir: bin
|
|
16
11
|
cert_chain: []
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
- !ruby/object:Gem::Dependency
|
|
21
|
-
version_requirements: &id001 !ruby/object:Gem::Requirement
|
|
22
|
-
none: false
|
|
23
|
-
requirements:
|
|
24
|
-
- - ">="
|
|
25
|
-
- !ruby/object:Gem::Version
|
|
26
|
-
hash: 3
|
|
27
|
-
segments:
|
|
28
|
-
- 0
|
|
29
|
-
version: "0"
|
|
30
|
-
requirement: *id001
|
|
31
|
-
type: :runtime
|
|
32
|
-
prerelease: false
|
|
12
|
+
date: 2012-01-12 00:00:00.000000000 Z
|
|
13
|
+
dependencies:
|
|
14
|
+
- !ruby/object:Gem::Dependency
|
|
33
15
|
name: capybara
|
|
34
|
-
|
|
35
|
-
version_requirements: &id002 !ruby/object:Gem::Requirement
|
|
16
|
+
requirement: &70333736724140 !ruby/object:Gem::Requirement
|
|
36
17
|
none: false
|
|
37
|
-
requirements:
|
|
38
|
-
- -
|
|
39
|
-
- !ruby/object:Gem::Version
|
|
40
|
-
|
|
41
|
-
segments:
|
|
42
|
-
- 0
|
|
43
|
-
version: "0"
|
|
44
|
-
requirement: *id002
|
|
18
|
+
requirements:
|
|
19
|
+
- - ! '>='
|
|
20
|
+
- !ruby/object:Gem::Version
|
|
21
|
+
version: '0'
|
|
45
22
|
type: :runtime
|
|
46
23
|
prerelease: false
|
|
24
|
+
version_requirements: *70333736724140
|
|
25
|
+
- !ruby/object:Gem::Dependency
|
|
47
26
|
name: activesupport
|
|
48
|
-
|
|
49
|
-
version_requirements: &id003 !ruby/object:Gem::Requirement
|
|
27
|
+
requirement: &70333736722000 !ruby/object:Gem::Requirement
|
|
50
28
|
none: false
|
|
51
|
-
requirements:
|
|
52
|
-
- -
|
|
53
|
-
- !ruby/object:Gem::Version
|
|
54
|
-
|
|
55
|
-
segments:
|
|
56
|
-
- 0
|
|
57
|
-
version: "0"
|
|
58
|
-
requirement: *id003
|
|
29
|
+
requirements:
|
|
30
|
+
- - ! '>='
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '0'
|
|
59
33
|
type: :runtime
|
|
60
34
|
prerelease: false
|
|
35
|
+
version_requirements: *70333736722000
|
|
36
|
+
- !ruby/object:Gem::Dependency
|
|
61
37
|
name: i18n
|
|
62
|
-
|
|
63
|
-
version_requirements: &id004 !ruby/object:Gem::Requirement
|
|
38
|
+
requirement: &70333736716440 !ruby/object:Gem::Requirement
|
|
64
39
|
none: false
|
|
65
|
-
requirements:
|
|
66
|
-
- -
|
|
67
|
-
- !ruby/object:Gem::Version
|
|
68
|
-
|
|
69
|
-
segments:
|
|
70
|
-
- 0
|
|
71
|
-
version: "0"
|
|
72
|
-
requirement: *id004
|
|
40
|
+
requirements:
|
|
41
|
+
- - ! '>='
|
|
42
|
+
- !ruby/object:Gem::Version
|
|
43
|
+
version: '0'
|
|
73
44
|
type: :runtime
|
|
74
45
|
prerelease: false
|
|
46
|
+
version_requirements: *70333736716440
|
|
47
|
+
- !ruby/object:Gem::Dependency
|
|
75
48
|
name: sinatra
|
|
76
|
-
|
|
77
|
-
version_requirements: &id005 !ruby/object:Gem::Requirement
|
|
49
|
+
requirement: &70333736728540 !ruby/object:Gem::Requirement
|
|
78
50
|
none: false
|
|
79
|
-
requirements:
|
|
80
|
-
- -
|
|
81
|
-
- !ruby/object:Gem::Version
|
|
82
|
-
|
|
83
|
-
segments:
|
|
84
|
-
- 2
|
|
85
|
-
- 5
|
|
86
|
-
version: "2.5"
|
|
87
|
-
requirement: *id005
|
|
51
|
+
requirements:
|
|
52
|
+
- - ! '>='
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '0'
|
|
88
55
|
type: :runtime
|
|
89
56
|
prerelease: false
|
|
57
|
+
version_requirements: *70333736728540
|
|
58
|
+
- !ruby/object:Gem::Dependency
|
|
90
59
|
name: braintree
|
|
91
|
-
|
|
92
|
-
version_requirements: &id006 !ruby/object:Gem::Requirement
|
|
60
|
+
requirement: &70333736727580 !ruby/object:Gem::Requirement
|
|
93
61
|
none: false
|
|
94
|
-
requirements:
|
|
62
|
+
requirements:
|
|
95
63
|
- - ~>
|
|
96
|
-
- !ruby/object:Gem::Version
|
|
97
|
-
|
|
98
|
-
segments:
|
|
99
|
-
- 1
|
|
100
|
-
- 2
|
|
101
|
-
- 0
|
|
102
|
-
- pre
|
|
103
|
-
version: 1.2.0.pre
|
|
104
|
-
requirement: *id006
|
|
64
|
+
- !ruby/object:Gem::Version
|
|
65
|
+
version: '2.5'
|
|
105
66
|
type: :runtime
|
|
106
67
|
prerelease: false
|
|
68
|
+
version_requirements: *70333736727580
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
107
70
|
name: mongrel
|
|
108
|
-
|
|
109
|
-
version_requirements: &id007 !ruby/object:Gem::Requirement
|
|
71
|
+
requirement: &70333736726360 !ruby/object:Gem::Requirement
|
|
110
72
|
none: false
|
|
111
|
-
requirements:
|
|
73
|
+
requirements:
|
|
112
74
|
- - ~>
|
|
113
|
-
- !ruby/object:Gem::Version
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
- 2
|
|
117
|
-
- 6
|
|
118
|
-
- 0
|
|
119
|
-
version: 2.6.0
|
|
120
|
-
requirement: *id007
|
|
121
|
-
type: :development
|
|
75
|
+
- !ruby/object:Gem::Version
|
|
76
|
+
version: 1.2.0.pre
|
|
77
|
+
type: :runtime
|
|
122
78
|
prerelease: false
|
|
79
|
+
version_requirements: *70333736726360
|
|
80
|
+
- !ruby/object:Gem::Dependency
|
|
123
81
|
name: rspec
|
|
124
|
-
|
|
125
|
-
version_requirements: &id008 !ruby/object:Gem::Requirement
|
|
82
|
+
requirement: &70333736724400 !ruby/object:Gem::Requirement
|
|
126
83
|
none: false
|
|
127
|
-
requirements:
|
|
84
|
+
requirements:
|
|
128
85
|
- - ~>
|
|
129
|
-
- !ruby/object:Gem::Version
|
|
130
|
-
|
|
131
|
-
segments:
|
|
132
|
-
- 1
|
|
133
|
-
- 0
|
|
134
|
-
version: "1.0"
|
|
135
|
-
requirement: *id008
|
|
86
|
+
- !ruby/object:Gem::Version
|
|
87
|
+
version: 2.6.0
|
|
136
88
|
type: :development
|
|
137
89
|
prerelease: false
|
|
90
|
+
version_requirements: *70333736724400
|
|
91
|
+
- !ruby/object:Gem::Dependency
|
|
138
92
|
name: bourne
|
|
139
|
-
|
|
140
|
-
version_requirements: &id009 !ruby/object:Gem::Requirement
|
|
93
|
+
requirement: &70333736739180 !ruby/object:Gem::Requirement
|
|
141
94
|
none: false
|
|
142
|
-
requirements:
|
|
95
|
+
requirements:
|
|
143
96
|
- - ~>
|
|
144
|
-
- !ruby/object:Gem::Version
|
|
145
|
-
|
|
146
|
-
segments:
|
|
147
|
-
- 0
|
|
148
|
-
- 3
|
|
149
|
-
- 5
|
|
150
|
-
version: 0.3.5
|
|
151
|
-
requirement: *id009
|
|
97
|
+
- !ruby/object:Gem::Version
|
|
98
|
+
version: '1.0'
|
|
152
99
|
type: :development
|
|
153
100
|
prerelease: false
|
|
101
|
+
version_requirements: *70333736739180
|
|
102
|
+
- !ruby/object:Gem::Dependency
|
|
154
103
|
name: timecop
|
|
155
|
-
|
|
156
|
-
version_requirements: &id010 !ruby/object:Gem::Requirement
|
|
104
|
+
requirement: &70333736737640 !ruby/object:Gem::Requirement
|
|
157
105
|
none: false
|
|
158
|
-
requirements:
|
|
106
|
+
requirements:
|
|
159
107
|
- - ~>
|
|
160
|
-
- !ruby/object:Gem::Version
|
|
161
|
-
|
|
162
|
-
segments:
|
|
163
|
-
- 0
|
|
164
|
-
- 9
|
|
165
|
-
- 0
|
|
166
|
-
- rc
|
|
167
|
-
- 9
|
|
168
|
-
version: 0.9.0.rc9
|
|
169
|
-
requirement: *id010
|
|
108
|
+
- !ruby/object:Gem::Version
|
|
109
|
+
version: 0.3.5
|
|
170
110
|
type: :development
|
|
171
111
|
prerelease: false
|
|
112
|
+
version_requirements: *70333736737640
|
|
113
|
+
- !ruby/object:Gem::Dependency
|
|
172
114
|
name: spork
|
|
173
|
-
|
|
174
|
-
version_requirements: &id011 !ruby/object:Gem::Requirement
|
|
115
|
+
requirement: &70333736736180 !ruby/object:Gem::Requirement
|
|
175
116
|
none: false
|
|
176
|
-
requirements:
|
|
177
|
-
- -
|
|
178
|
-
- !ruby/object:Gem::Version
|
|
179
|
-
|
|
180
|
-
segments:
|
|
181
|
-
- 1
|
|
182
|
-
- 0
|
|
183
|
-
- 14
|
|
184
|
-
version: 1.0.14
|
|
185
|
-
requirement: *id011
|
|
117
|
+
requirements:
|
|
118
|
+
- - ~>
|
|
119
|
+
- !ruby/object:Gem::Version
|
|
120
|
+
version: 0.9.0.rc9
|
|
186
121
|
type: :development
|
|
187
122
|
prerelease: false
|
|
123
|
+
version_requirements: *70333736736180
|
|
124
|
+
- !ruby/object:Gem::Dependency
|
|
188
125
|
name: bundler
|
|
189
|
-
|
|
190
|
-
version_requirements: &id012 !ruby/object:Gem::Requirement
|
|
126
|
+
requirement: &70333736734420 !ruby/object:Gem::Requirement
|
|
191
127
|
none: false
|
|
192
|
-
requirements:
|
|
193
|
-
- -
|
|
194
|
-
- !ruby/object:Gem::Version
|
|
195
|
-
|
|
196
|
-
segments:
|
|
197
|
-
- 0
|
|
198
|
-
version: "0"
|
|
199
|
-
requirement: *id012
|
|
128
|
+
requirements:
|
|
129
|
+
- - ! '>='
|
|
130
|
+
- !ruby/object:Gem::Version
|
|
131
|
+
version: 1.0.14
|
|
200
132
|
type: :development
|
|
201
133
|
prerelease: false
|
|
134
|
+
version_requirements: *70333736734420
|
|
135
|
+
- !ruby/object:Gem::Dependency
|
|
202
136
|
name: rake
|
|
137
|
+
requirement: &70333736778120 !ruby/object:Gem::Requirement
|
|
138
|
+
none: false
|
|
139
|
+
requirements:
|
|
140
|
+
- - ! '>='
|
|
141
|
+
- !ruby/object:Gem::Version
|
|
142
|
+
version: '0'
|
|
143
|
+
type: :development
|
|
144
|
+
prerelease: false
|
|
145
|
+
version_requirements: *70333736778120
|
|
203
146
|
description: A fake Braintree that you can run integration tests against
|
|
204
|
-
email:
|
|
147
|
+
email:
|
|
205
148
|
- gabe@thoughtbot.com
|
|
206
149
|
- ben@thoughtbot.com
|
|
207
150
|
executables: []
|
|
208
|
-
|
|
209
151
|
extensions: []
|
|
210
|
-
|
|
211
152
|
extra_rdoc_files: []
|
|
212
|
-
|
|
213
|
-
files:
|
|
153
|
+
files:
|
|
214
154
|
- .gitignore
|
|
215
155
|
- .travis.yml
|
|
216
156
|
- Changelog.md
|
|
@@ -219,6 +159,7 @@ files:
|
|
|
219
159
|
- Rakefile
|
|
220
160
|
- fake_braintree.gemspec
|
|
221
161
|
- lib/fake_braintree.rb
|
|
162
|
+
- lib/fake_braintree/credit_card.rb
|
|
222
163
|
- lib/fake_braintree/customer.rb
|
|
223
164
|
- lib/fake_braintree/helpers.rb
|
|
224
165
|
- lib/fake_braintree/redirect.rb
|
|
@@ -238,41 +179,40 @@ files:
|
|
|
238
179
|
- spec/spec_helper.rb
|
|
239
180
|
- spec/support/braintree_helpers.rb
|
|
240
181
|
- spec/support/customer_helpers.rb
|
|
182
|
+
- spec/support/matchers/clear_hash_when_cleared.rb
|
|
183
|
+
- spec/support/matchers/have_accessor_for.rb
|
|
241
184
|
- spec/support/subscription_helpers.rb
|
|
242
|
-
homepage:
|
|
185
|
+
homepage: ''
|
|
243
186
|
licenses: []
|
|
244
|
-
|
|
245
187
|
post_install_message:
|
|
246
188
|
rdoc_options: []
|
|
247
|
-
|
|
248
|
-
require_paths:
|
|
189
|
+
require_paths:
|
|
249
190
|
- lib
|
|
250
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
|
191
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
251
192
|
none: false
|
|
252
|
-
requirements:
|
|
253
|
-
- -
|
|
254
|
-
- !ruby/object:Gem::Version
|
|
255
|
-
|
|
256
|
-
segments:
|
|
193
|
+
requirements:
|
|
194
|
+
- - ! '>='
|
|
195
|
+
- !ruby/object:Gem::Version
|
|
196
|
+
version: '0'
|
|
197
|
+
segments:
|
|
257
198
|
- 0
|
|
258
|
-
|
|
259
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
199
|
+
hash: 2066919718453722382
|
|
200
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
260
201
|
none: false
|
|
261
|
-
requirements:
|
|
262
|
-
- -
|
|
263
|
-
- !ruby/object:Gem::Version
|
|
264
|
-
|
|
265
|
-
segments:
|
|
202
|
+
requirements:
|
|
203
|
+
- - ! '>='
|
|
204
|
+
- !ruby/object:Gem::Version
|
|
205
|
+
version: '0'
|
|
206
|
+
segments:
|
|
266
207
|
- 0
|
|
267
|
-
|
|
208
|
+
hash: 2066919718453722382
|
|
268
209
|
requirements: []
|
|
269
|
-
|
|
270
210
|
rubyforge_project:
|
|
271
211
|
rubygems_version: 1.8.11
|
|
272
212
|
signing_key:
|
|
273
213
|
specification_version: 3
|
|
274
214
|
summary: A fake Braintree that you can run integration tests against
|
|
275
|
-
test_files:
|
|
215
|
+
test_files:
|
|
276
216
|
- spec/fake_braintree/credit_card_spec.rb
|
|
277
217
|
- spec/fake_braintree/customer_spec.rb
|
|
278
218
|
- spec/fake_braintree/registry_spec.rb
|
|
@@ -283,4 +223,6 @@ test_files:
|
|
|
283
223
|
- spec/spec_helper.rb
|
|
284
224
|
- spec/support/braintree_helpers.rb
|
|
285
225
|
- spec/support/customer_helpers.rb
|
|
226
|
+
- spec/support/matchers/clear_hash_when_cleared.rb
|
|
227
|
+
- spec/support/matchers/have_accessor_for.rb
|
|
286
228
|
- spec/support/subscription_helpers.rb
|