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