braintree 2.88.0 → 2.89.0
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.
- checksums.yaml +4 -4
- data/lib/braintree/configuration.rb +9 -0
- data/lib/braintree/connected_merchant_paypal_status_changed.rb +2 -0
- data/lib/braintree/connected_merchant_status_transitioned.rb +2 -0
- data/lib/braintree/disbursement.rb +14 -0
- data/lib/braintree/error_codes.rb +1 -0
- data/lib/braintree/transaction/paypal_details.rb +1 -0
- data/lib/braintree/transaction_gateway.rb +3 -2
- data/lib/braintree/version.rb +1 -1
- data/lib/braintree/webhook_notification.rb +1 -1
- data/lib/braintree/webhook_testing_gateway.rb +9 -8
- data/spec/integration/braintree/transaction_spec.rb +117 -0
- data/spec/unit/braintree/configuration_spec.rb +29 -0
- data/spec/unit/braintree/disbursement_spec.rb +52 -0
- data/spec/unit/braintree/webhook_notification_spec.rb +17 -13
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1dbdc2a3360539354ac8dee567e437609b10047e
|
4
|
+
data.tar.gz: b79dfe5dc9dc997325c094d76e35fe8e952cfe54
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2997abeff62b6067f00979a8fb13d215f7716dcdd994f3451e77c09d0ecf2649dc267e3dfaadc165e6e36c54a915be58fe1b6ad1930ec641dffe8b3f72232e32
|
7
|
+
data.tar.gz: 6f0d883162764a99a777d84c33c9ff04a41c175a1acde9ec10738e10fde37ee9e46a66dd99882b5219cbd2153125362eb0aef641231d4766131aaac9f777142d
|
@@ -123,6 +123,9 @@ module Braintree
|
|
123
123
|
@environment = parser.environment
|
124
124
|
elsif options[:access_token]
|
125
125
|
parser.parse_access_token(options[:access_token])
|
126
|
+
|
127
|
+
_check_for_mixed_environment(options[:environment], parser.environment)
|
128
|
+
|
126
129
|
@access_token = parser.access_token
|
127
130
|
@environment = parser.environment
|
128
131
|
@merchant_id = parser.merchant_id
|
@@ -145,6 +148,12 @@ module Braintree
|
|
145
148
|
end
|
146
149
|
end
|
147
150
|
|
151
|
+
def _check_for_mixed_environment(options_environment, token_environment)
|
152
|
+
if options_environment && options_environment.to_sym != token_environment.to_sym
|
153
|
+
warn "Braintree::Gateway should not be initialized with mixed environments: environment parameter and access_token do not match, environment from access_token is used."
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
148
157
|
def api_version # :nodoc:
|
149
158
|
API_VERSION
|
150
159
|
end
|
@@ -2,8 +2,14 @@ module Braintree
|
|
2
2
|
class Disbursement
|
3
3
|
include BaseModule
|
4
4
|
|
5
|
+
module Types
|
6
|
+
Credit = "credit"
|
7
|
+
Debit = "debit"
|
8
|
+
end
|
9
|
+
|
5
10
|
attr_reader :amount
|
6
11
|
attr_reader :disbursement_date
|
12
|
+
attr_reader :disbursement_type
|
7
13
|
attr_reader :exception_message
|
8
14
|
attr_reader :follow_up_action
|
9
15
|
attr_reader :id
|
@@ -35,6 +41,14 @@ module Braintree
|
|
35
41
|
"#<#{self.class} #{nice_attributes.join(', ')}>"
|
36
42
|
end
|
37
43
|
|
44
|
+
def debit?
|
45
|
+
disbursement_type == Types::Debit
|
46
|
+
end
|
47
|
+
|
48
|
+
def credit?
|
49
|
+
disbursement_type == Types::Credit
|
50
|
+
end
|
51
|
+
|
38
52
|
class << self
|
39
53
|
protected :new
|
40
54
|
def _new(*args) # :nodoc:
|
@@ -215,11 +215,12 @@ module Braintree
|
|
215
215
|
:add_billing_address_to_payment_method,
|
216
216
|
:store_shipping_address_in_vault,
|
217
217
|
:venmo_sdk_session,
|
218
|
+
:payee_id,
|
218
219
|
:payee_email,
|
219
220
|
:skip_advanced_fraud_checking,
|
220
221
|
:skip_avs,
|
221
222
|
:skip_cvv,
|
222
|
-
{:paypal => [:custom_field, :payee_email, :description, {:supplementary_data => :_any_key_}]},
|
223
|
+
{:paypal => [:custom_field, :payee_id, :payee_email, :description, {:supplementary_data => :_any_key_}]},
|
223
224
|
{:three_d_secure => [:required]},
|
224
225
|
{:amex_rewards => [:request_id, :points, :currency_amount, :currency_iso_code]},
|
225
226
|
{:venmo => [:profile_id]}
|
@@ -227,7 +228,7 @@ module Braintree
|
|
227
228
|
},
|
228
229
|
{:custom_fields => :_any_key_},
|
229
230
|
{:descriptor => [:name, :phone, :url]},
|
230
|
-
{:paypal_account => [:email, :token, :paypal_data, :payee_email]},
|
231
|
+
{:paypal_account => [:email, :token, :paypal_data, :payee_id, :payee_email]},
|
231
232
|
{:industry => [:industry_type, {:data => [:folio_number, :check_in_date, :check_out_date, :travel_package, :lodging_check_in_date, :lodging_check_out_date, :departure_date, :lodging_name, :room_rate]}]},
|
232
233
|
{:apple_pay_card => [:number, :cardholder_name, :cryptogram, :expiration_month, :expiration_year, :eci_indicator]},
|
233
234
|
{:android_pay_card => [:number, :cryptogram, :google_transaction_id, :expiration_month, :expiration_year, :source_card_type, :source_card_last_four, :eci_indicator]}
|
data/lib/braintree/version.rb
CHANGED
@@ -30,13 +30,13 @@ module Braintree
|
|
30
30
|
PartnerMerchantConnected = "partner_merchant_connected"
|
31
31
|
PartnerMerchantDisconnected = "partner_merchant_disconnected"
|
32
32
|
PartnerMerchantDeclined = "partner_merchant_declined"
|
33
|
-
OAuthAccessRevoked = "oauth_access_revoked"
|
34
33
|
|
35
34
|
AccountUpdaterDailyReport = "account_updater_daily_report"
|
36
35
|
|
37
36
|
IdealPaymentComplete = "ideal_payment_complete"
|
38
37
|
IdealPaymentFailed = "ideal_payment_failed"
|
39
38
|
|
39
|
+
OAuthAccessRevoked = "oauth_access_revoked"
|
40
40
|
ConnectedMerchantStatusTransitioned = "connected_merchant_status_transitioned"
|
41
41
|
ConnectedMerchantPayPalStatusChanged = "connected_merchant_paypal_status_changed"
|
42
42
|
|
@@ -153,14 +153,6 @@ module Braintree
|
|
153
153
|
XML
|
154
154
|
end
|
155
155
|
|
156
|
-
def _oauth_access_revoked_sample_xml(id)
|
157
|
-
<<-XML
|
158
|
-
<oauth-application-revocation>
|
159
|
-
<merchant-id>abc123</merchant-id>
|
160
|
-
</oauth-application-revocation>
|
161
|
-
XML
|
162
|
-
end
|
163
|
-
|
164
156
|
def _merchant_account_approved_sample_xml(id)
|
165
157
|
|
166
158
|
<<-XML
|
@@ -587,6 +579,15 @@ module Braintree
|
|
587
579
|
XML
|
588
580
|
end
|
589
581
|
|
582
|
+
def _oauth_access_revoked_sample_xml(id)
|
583
|
+
<<-XML
|
584
|
+
<oauth-application-revocation>
|
585
|
+
<merchant-id>#{id}</merchant-id>
|
586
|
+
<oauth-application-client-id>oauth_application_client_id</oauth-application-client-id>
|
587
|
+
</oauth-application-revocation>
|
588
|
+
XML
|
589
|
+
end
|
590
|
+
|
590
591
|
def _ideal_payment_complete_sample_xml(id)
|
591
592
|
|
592
593
|
<<-XML
|
@@ -1046,6 +1046,20 @@ describe Braintree::Transaction do
|
|
1046
1046
|
end
|
1047
1047
|
|
1048
1048
|
context "transaction_source" do
|
1049
|
+
it "marks a transactions as recurring_first" do
|
1050
|
+
result = Braintree::Transaction.create(
|
1051
|
+
:type => "sale",
|
1052
|
+
:amount => Braintree::Test::TransactionAmounts::Authorize,
|
1053
|
+
:credit_card => {
|
1054
|
+
:number => Braintree::Test::CreditCardNumbers::Visa,
|
1055
|
+
:expiration_date => "12/12",
|
1056
|
+
},
|
1057
|
+
:transaction_source => "recurring_first"
|
1058
|
+
)
|
1059
|
+
result.success?.should == true
|
1060
|
+
result.transaction.recurring.should == true
|
1061
|
+
end
|
1062
|
+
|
1049
1063
|
it "marks a transactions as recurring" do
|
1050
1064
|
result = Braintree::Transaction.create(
|
1051
1065
|
:type => "sale",
|
@@ -1060,6 +1074,20 @@ describe Braintree::Transaction do
|
|
1060
1074
|
result.transaction.recurring.should == true
|
1061
1075
|
end
|
1062
1076
|
|
1077
|
+
it "marks a transactions as merchant" do
|
1078
|
+
result = Braintree::Transaction.create(
|
1079
|
+
:type => "sale",
|
1080
|
+
:amount => Braintree::Test::TransactionAmounts::Authorize,
|
1081
|
+
:credit_card => {
|
1082
|
+
:number => Braintree::Test::CreditCardNumbers::Visa,
|
1083
|
+
:expiration_date => "12/12",
|
1084
|
+
},
|
1085
|
+
:transaction_source => "merchant"
|
1086
|
+
)
|
1087
|
+
result.success?.should == true
|
1088
|
+
result.transaction.recurring.should == false
|
1089
|
+
end
|
1090
|
+
|
1063
1091
|
it "marks a transactions as moto" do
|
1064
1092
|
result = Braintree::Transaction.create(
|
1065
1093
|
:type => "sale",
|
@@ -1073,6 +1101,20 @@ describe Braintree::Transaction do
|
|
1073
1101
|
result.success?.should == true
|
1074
1102
|
result.transaction.recurring.should == false
|
1075
1103
|
end
|
1104
|
+
|
1105
|
+
it "handles validation when transaction source invalid" do
|
1106
|
+
result = Braintree::Transaction.create(
|
1107
|
+
:type => "sale",
|
1108
|
+
:amount => Braintree::Test::TransactionAmounts::Authorize,
|
1109
|
+
:credit_card => {
|
1110
|
+
:number => Braintree::Test::CreditCardNumbers::Visa,
|
1111
|
+
:expiration_date => "12/12",
|
1112
|
+
},
|
1113
|
+
:transaction_source => "invalid_value"
|
1114
|
+
)
|
1115
|
+
result.success?.should == false
|
1116
|
+
result.errors.for(:transaction).on(:transaction_source)[0].code.should == Braintree::ErrorCodes::Transaction::TransactionSourceIsInvalid
|
1117
|
+
end
|
1076
1118
|
end
|
1077
1119
|
|
1078
1120
|
context "store_in_vault_on_success" do
|
@@ -1544,6 +1586,81 @@ describe Braintree::Transaction do
|
|
1544
1586
|
result.transaction.should_not be_nil
|
1545
1587
|
end
|
1546
1588
|
|
1589
|
+
it "can create a transaction with a payee id" do
|
1590
|
+
customer = Braintree::Customer.create!
|
1591
|
+
nonce = nonce_for_new_payment_method(
|
1592
|
+
:paypal_account => {
|
1593
|
+
:consent_code => "PAYPAL_CONSENT_CODE",
|
1594
|
+
}
|
1595
|
+
)
|
1596
|
+
nonce.should_not be_nil
|
1597
|
+
|
1598
|
+
result = Braintree::Transaction.create(
|
1599
|
+
:type => "sale",
|
1600
|
+
:amount => Braintree::Test::TransactionAmounts::Authorize,
|
1601
|
+
:payment_method_nonce => nonce,
|
1602
|
+
:paypal_account => {
|
1603
|
+
:payee_id => "fake-payee-id"
|
1604
|
+
}
|
1605
|
+
)
|
1606
|
+
|
1607
|
+
result.success?.should == true
|
1608
|
+
result.transaction.paypal_details.should_not be_nil
|
1609
|
+
result.transaction.paypal_details.debug_id.should_not be_nil
|
1610
|
+
result.transaction.paypal_details.payee_id.should == "fake-payee-id"
|
1611
|
+
end
|
1612
|
+
|
1613
|
+
it "can create a transaction with a payee id in the options params" do
|
1614
|
+
customer = Braintree::Customer.create!
|
1615
|
+
nonce = nonce_for_new_payment_method(
|
1616
|
+
:paypal_account => {
|
1617
|
+
:consent_code => "PAYPAL_CONSENT_CODE",
|
1618
|
+
}
|
1619
|
+
)
|
1620
|
+
nonce.should_not be_nil
|
1621
|
+
|
1622
|
+
result = Braintree::Transaction.create(
|
1623
|
+
:type => "sale",
|
1624
|
+
:amount => Braintree::Test::TransactionAmounts::Authorize,
|
1625
|
+
:payment_method_nonce => nonce,
|
1626
|
+
:paypal_account => {},
|
1627
|
+
:options => {
|
1628
|
+
:payee_id => "fake-payee-id"
|
1629
|
+
}
|
1630
|
+
)
|
1631
|
+
|
1632
|
+
result.success?.should == true
|
1633
|
+
result.transaction.paypal_details.should_not be_nil
|
1634
|
+
result.transaction.paypal_details.debug_id.should_not be_nil
|
1635
|
+
result.transaction.paypal_details.payee_id.should == "fake-payee-id"
|
1636
|
+
end
|
1637
|
+
|
1638
|
+
it "can create a transaction with a payee id in options.paypal" do
|
1639
|
+
customer = Braintree::Customer.create!
|
1640
|
+
nonce = nonce_for_new_payment_method(
|
1641
|
+
:paypal_account => {
|
1642
|
+
:consent_code => "PAYPAL_CONSENT_CODE",
|
1643
|
+
}
|
1644
|
+
)
|
1645
|
+
nonce.should_not be_nil
|
1646
|
+
|
1647
|
+
result = Braintree::Transaction.create(
|
1648
|
+
:type => "sale",
|
1649
|
+
:amount => Braintree::Test::TransactionAmounts::Authorize,
|
1650
|
+
:payment_method_nonce => nonce,
|
1651
|
+
:options => {
|
1652
|
+
:paypal => {
|
1653
|
+
:payee_id => "fake-payee-id"
|
1654
|
+
}
|
1655
|
+
}
|
1656
|
+
)
|
1657
|
+
|
1658
|
+
result.success?.should == true
|
1659
|
+
result.transaction.paypal_details.should_not be_nil
|
1660
|
+
result.transaction.paypal_details.debug_id.should_not be_nil
|
1661
|
+
result.transaction.paypal_details.payee_id.should == "fake-payee-id"
|
1662
|
+
end
|
1663
|
+
|
1547
1664
|
it "can create a transaction with a payee email" do
|
1548
1665
|
customer = Braintree::Customer.create!
|
1549
1666
|
nonce = nonce_for_new_payment_method(
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'stringio'
|
2
|
+
|
1
3
|
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
4
|
|
3
5
|
describe Braintree::Configuration do
|
@@ -65,6 +67,33 @@ describe Braintree::Configuration do
|
|
65
67
|
end.to raise_error(Braintree::ConfigurationError, /mixed credential types/)
|
66
68
|
end
|
67
69
|
|
70
|
+
context "mixed environments" do
|
71
|
+
before do
|
72
|
+
@original_stderr = $stderr
|
73
|
+
$stderr = StringIO.new
|
74
|
+
end
|
75
|
+
|
76
|
+
after do
|
77
|
+
$stderr = @original_stderr
|
78
|
+
end
|
79
|
+
|
80
|
+
it "warns if both environment and access_token are provided and their environments differ" do
|
81
|
+
Braintree::Configuration.new(
|
82
|
+
:access_token => "access_token$development$integration_merchant_id$fb27c79dd",
|
83
|
+
:environment => "sandbox",
|
84
|
+
)
|
85
|
+
$stderr.string.should == "Braintree::Gateway should not be initialized with mixed environments: environment parameter and access_token do not match, environment from access_token is used.\n"
|
86
|
+
end
|
87
|
+
|
88
|
+
it "does not warn if both environment and access_token are provided and their environments match" do
|
89
|
+
Braintree::Configuration.new(
|
90
|
+
:access_token => "access_token$development$integration_merchant_id$fb27c79dd",
|
91
|
+
:environment => "development",
|
92
|
+
)
|
93
|
+
$stderr.string.should == ""
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
68
97
|
it "accepts proxy params" do
|
69
98
|
config = Braintree::Configuration.new(
|
70
99
|
:proxy_address => 'localhost',
|
@@ -76,4 +76,56 @@ describe Braintree::Disbursement do
|
|
76
76
|
disbursement.success?.should == true
|
77
77
|
end
|
78
78
|
end
|
79
|
+
|
80
|
+
describe "credit?" do
|
81
|
+
subject do
|
82
|
+
described_class._new(
|
83
|
+
:gateway,
|
84
|
+
merchant_account: {
|
85
|
+
id: "sandbox_master_merchant_account",
|
86
|
+
status: "active",
|
87
|
+
},
|
88
|
+
success: true,
|
89
|
+
amount: "100.00",
|
90
|
+
disbursement_type: type,
|
91
|
+
disbursement_date: "2013-04-10",
|
92
|
+
)
|
93
|
+
end
|
94
|
+
|
95
|
+
context "when the disbursement type is credit" do
|
96
|
+
let(:type) { described_class::Types::Credit }
|
97
|
+
it { is_expected.to be_credit }
|
98
|
+
end
|
99
|
+
|
100
|
+
context "when the disbursement type is not credit" do
|
101
|
+
let(:type) { described_class::Types::Debit }
|
102
|
+
it { is_expected.not_to be_credit }
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
describe "debit?" do
|
107
|
+
subject do
|
108
|
+
described_class._new(
|
109
|
+
:gateway,
|
110
|
+
merchant_account: {
|
111
|
+
id: "sandbox_master_merchant_account",
|
112
|
+
status: "active",
|
113
|
+
},
|
114
|
+
success: true,
|
115
|
+
amount: "100.00",
|
116
|
+
disbursement_type: type,
|
117
|
+
disbursement_date: "2013-04-10",
|
118
|
+
)
|
119
|
+
end
|
120
|
+
|
121
|
+
context "when the disbursement type is debit" do
|
122
|
+
let(:type) { described_class::Types::Debit }
|
123
|
+
it { is_expected.to be_debit }
|
124
|
+
end
|
125
|
+
|
126
|
+
context "when the disbursement type is not debit" do
|
127
|
+
let(:type) { described_class::Types::Credit }
|
128
|
+
it { is_expected.not_to be_debit }
|
129
|
+
end
|
130
|
+
end
|
79
131
|
end
|
@@ -58,19 +58,6 @@ describe Braintree::WebhookNotification do
|
|
58
58
|
notification.timestamp.should be_within(10).of(Time.now.utc)
|
59
59
|
end
|
60
60
|
|
61
|
-
it 'builds a sample notification for OAuth application revocation' do
|
62
|
-
sample_notification = Braintree::WebhookTesting.sample_notification(
|
63
|
-
Braintree::WebhookNotification::Kind::OAuthAccessRevoked,
|
64
|
-
'my_id'
|
65
|
-
)
|
66
|
-
|
67
|
-
notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
|
68
|
-
|
69
|
-
expect(notification.kind).to eq(Braintree::WebhookNotification::Kind::OAuthAccessRevoked)
|
70
|
-
expect(notification.oauth_access_revocation.merchant_id).to eq('abc123')
|
71
|
-
expect(notification.timestamp).to be_within(10).of(Time.now.utc)
|
72
|
-
end
|
73
|
-
|
74
61
|
it "builds a sample notification with a source merchant ID" do
|
75
62
|
sample_notification = Braintree::WebhookTesting.sample_notification(
|
76
63
|
Braintree::WebhookNotification::Kind::SubscriptionWentPastDue,
|
@@ -107,6 +94,7 @@ describe Braintree::WebhookNotification do
|
|
107
94
|
|
108
95
|
status_transitioned = notification.connected_merchant_status_transitioned
|
109
96
|
status_transitioned.merchant_public_id.should == "my_id"
|
97
|
+
status_transitioned.merchant_id.should == "my_id"
|
110
98
|
status_transitioned.oauth_application_client_id.should == "oauth_application_client_id"
|
111
99
|
status_transitioned.status.should == "new_status"
|
112
100
|
end
|
@@ -123,9 +111,25 @@ describe Braintree::WebhookNotification do
|
|
123
111
|
|
124
112
|
paypal_status_changed = notification.connected_merchant_paypal_status_changed
|
125
113
|
paypal_status_changed.merchant_public_id.should == "my_id"
|
114
|
+
paypal_status_changed.merchant_id.should == "my_id"
|
126
115
|
paypal_status_changed.oauth_application_client_id.should == "oauth_application_client_id"
|
127
116
|
paypal_status_changed.action.should == "link"
|
128
117
|
end
|
118
|
+
|
119
|
+
it 'builds a sample notification for OAuth application revocation' do
|
120
|
+
sample_notification = Braintree::WebhookTesting.sample_notification(
|
121
|
+
Braintree::WebhookNotification::Kind::OAuthAccessRevoked,
|
122
|
+
'my_id'
|
123
|
+
)
|
124
|
+
|
125
|
+
notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
|
126
|
+
|
127
|
+
notification.kind.should == Braintree::WebhookNotification::Kind::OAuthAccessRevoked
|
128
|
+
notification.oauth_access_revocation.merchant_id.should == "my_id"
|
129
|
+
notification.oauth_access_revocation.oauth_application_client_id.should == "oauth_application_client_id"
|
130
|
+
notification.timestamp.should be_within(10).of(Time.now.utc)
|
131
|
+
end
|
132
|
+
|
129
133
|
end
|
130
134
|
|
131
135
|
context "disputes" do
|
metadata
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: braintree
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.89.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Braintree
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-05-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: builder
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 2.0.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 2.0.0
|
27
27
|
description: Ruby library for integrating with the Braintree Gateway
|
@@ -295,17 +295,17 @@ require_paths:
|
|
295
295
|
- lib
|
296
296
|
required_ruby_version: !ruby/object:Gem::Requirement
|
297
297
|
requirements:
|
298
|
-
- -
|
298
|
+
- - '>='
|
299
299
|
- !ruby/object:Gem::Version
|
300
300
|
version: '0'
|
301
301
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
302
302
|
requirements:
|
303
|
-
- -
|
303
|
+
- - '>='
|
304
304
|
- !ruby/object:Gem::Version
|
305
305
|
version: '0'
|
306
306
|
requirements: []
|
307
307
|
rubyforge_project: braintree
|
308
|
-
rubygems_version: 2.
|
308
|
+
rubygems_version: 2.2.0
|
309
309
|
signing_key:
|
310
310
|
specification_version: 4
|
311
311
|
summary: Braintree Gateway Ruby Client Library
|