spree_braintree_vzero 3.5.1 → 3.6.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/.github/dependabot.yml +11 -0
- data/.travis.yml +39 -46
- data/Appraisals +19 -28
- data/README.md +6 -4
- data/app/assets/images/backend-settle.svg +3 -0
- data/app/assets/javascripts/spree/frontend/spree_braintree_vzero.js +3 -1
- data/app/controllers/spree/admin/payments_controller_decorator.rb +9 -4
- data/app/controllers/spree/orders_controller_decorator.rb +2 -0
- data/app/helpers/spree/admin/payment_methods_helper.rb +11 -5
- data/app/helpers/spree/braintree_helper.rb +2 -2
- data/app/models/concerns/spree/gateway/braintree_vzero/legacy_rails_patch.rb +20 -0
- data/app/models/spree/address_decorator.rb +2 -2
- data/app/models/spree/braintree_vzero/order_decorator.rb +155 -0
- data/app/models/spree/gateway/braintree_vzero_base/utils.rb +50 -3
- data/app/models/spree/gateway/braintree_vzero_base.rb +4 -0
- data/app/models/spree/gateway/braintree_vzero_drop_in_ui.rb +3 -1
- data/app/models/spree/gateway/braintree_vzero_hosted_fields.rb +3 -1
- data/app/models/spree/log_entry_decorator.rb +52 -0
- data/app/models/spree/payment_processing_decorator.rb +12 -0
- data/app/models/spree/preferences/preferable_decorator.rb +1 -1
- data/app/overrides/spree/orders/edit.rb +1 -1
- data/app/views/spree/braintree_vzero/_paypal_checkout.html.erb +77 -59
- data/app/views/spree/checkout/payment/braintree_vzero/_non_three_d_secure.html.erb +178 -0
- data/app/views/spree/checkout/payment/braintree_vzero/_payment.html.erb +32 -13
- data/app/views/spree/checkout/payment/braintree_vzero/_three_d_secure.html.erb +54 -14
- data/config/initializers/prepend_helpers.rb +3 -1
- data/db/migrate/20160112153422_add_admin_payment_to_spree_braintree_checkout.rb +1 -1
- data/gemfiles/spree_3_7.gemfile +2 -0
- data/gemfiles/spree_4_0.gemfile +1 -0
- data/gemfiles/{spree_3_5.gemfile → spree_4_1.gemfile} +2 -5
- data/gemfiles/{spree_4_0_spree_auth_devise.gemfile → spree_4_2.gemfile} +2 -2
- data/gemfiles/spree_master.gemfile +1 -3
- data/lib/spree_braintree_vzero/engine.rb +3 -1
- data/lib/spree_braintree_vzero/version.rb +2 -2
- data/spec/controllers/spree/checkout_controller_spec.rb +1 -1
- data/spec/features/spree/admin/log_entries_spec.rb +18 -3
- data/spec/models/gateway/braintree_vzero_base_spec.rb +8 -5
- data/spec/models/spree/address_spec.rb +18 -0
- data/spec/support/vcr.rb +1 -1
- data/spec/vcr/Spree_Gateway_BraintreeVzeroBase/valid_credentials/_purchase/using_Vault/sends_address_data_when_address_is_new.yml +72 -0
- data/spree_braintree_vzero.gemspec +4 -5
- metadata +22 -49
- data/app/controllers/spree/user_sessions_controller_decorator.rb +0 -15
- data/app/models/spree/order_decorator.rb +0 -153
- data/gemfiles/spree_3_5_spree_auth_devise.gemfile +0 -13
- data/gemfiles/spree_3_7_spree_auth_devise.gemfile +0 -13
- data/gemfiles/spree_master_spree_auth_devise.gemfile +0 -12
@@ -1,153 +0,0 @@
|
|
1
|
-
module Spree
|
2
|
-
module OrderDecorator
|
3
|
-
def self.prepended(base)
|
4
|
-
base.state_machine.before_transition to: :complete, do: :process_paypal_express_payments
|
5
|
-
end
|
6
|
-
|
7
|
-
def save_paypal_address(type, address_hash)
|
8
|
-
return if address_hash.blank?
|
9
|
-
address = Spree::Address.new(prepare_address_hash(address_hash))
|
10
|
-
return unless address.save
|
11
|
-
|
12
|
-
update_column("#{type}_id", address.id)
|
13
|
-
end
|
14
|
-
|
15
|
-
def save_paypal_payment(options)
|
16
|
-
options[:source] = Spree::BraintreeCheckout.create!(options.slice(:paypal_email, :advanced_fraud_data))
|
17
|
-
payments.create(options.slice(:braintree_nonce, :payment_method_id, :source))
|
18
|
-
end
|
19
|
-
|
20
|
-
def set_billing_address
|
21
|
-
return if bill_address_id
|
22
|
-
return unless ship_address_id
|
23
|
-
|
24
|
-
address = Spree::Address.create(shipping_address.attributes.except('id', 'updated_at', 'created_at', 'braintree_id'))
|
25
|
-
update_column(:bill_address_id, address.try(:id))
|
26
|
-
end
|
27
|
-
|
28
|
-
# override needed to add braintree source attribute
|
29
|
-
def update_from_params(params, permitted_params, request_env = {})
|
30
|
-
success = false
|
31
|
-
@updating_params = params
|
32
|
-
run_callbacks :updating_from_params do
|
33
|
-
# Set existing card after setting permitted parameters because
|
34
|
-
# rails would slice parameters containg ruby objects, apparently
|
35
|
-
existing_card_id = @updating_params[:order] ? @updating_params[:order].delete(:existing_card) : nil
|
36
|
-
|
37
|
-
attributes = @updating_params[:order] ? @updating_params[:order].permit(permitted_params).delete_if { |_k, v| v.nil? } : {}
|
38
|
-
payment_attributes = attributes[:payments_attributes].first if attributes[:payments_attributes].present?
|
39
|
-
|
40
|
-
if existing_card_id.present?
|
41
|
-
credit_card = Spree::CreditCard.find existing_card_id
|
42
|
-
if credit_card.user_id != user_id || credit_card.user_id.blank?
|
43
|
-
raise Spree::Core::GatewayError, Spree.t(:invalid_credit_card)
|
44
|
-
end
|
45
|
-
|
46
|
-
credit_card.verification_value = params[:cvc_confirm] if params[:cvc_confirm].present?
|
47
|
-
|
48
|
-
attributes[:payments_attributes].first[:source] = credit_card
|
49
|
-
attributes[:payments_attributes].first[:payment_method_id] = credit_card.payment_method_id
|
50
|
-
attributes[:payments_attributes].first.delete :source_attributes
|
51
|
-
end
|
52
|
-
|
53
|
-
if payment_attributes.present?
|
54
|
-
payment_attributes[:request_env] = request_env
|
55
|
-
|
56
|
-
if (token = payment_attributes[:braintree_token]).present?
|
57
|
-
payment_attributes[:source] = Spree::BraintreeCheckout.create_from_token(token, payment_attributes[:payment_method_id])
|
58
|
-
elsif payment_attributes[:braintree_nonce].present?
|
59
|
-
payment_attributes[:source] = Spree::BraintreeCheckout.create_from_params(params)
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
success = update(attributes)
|
64
|
-
set_shipments_cost if shipments.any?
|
65
|
-
end
|
66
|
-
|
67
|
-
@updating_params = nil
|
68
|
-
success
|
69
|
-
end
|
70
|
-
|
71
|
-
def payment_required?
|
72
|
-
# default payment processing requires order to have state == payment
|
73
|
-
# so there is no need to divide this method for checkout steps and actual payment processing
|
74
|
-
return false if paid_with_paypal_express?
|
75
|
-
total.to_f > 0.0
|
76
|
-
end
|
77
|
-
|
78
|
-
def confirmation_required?
|
79
|
-
Spree::Config[:always_include_confirm_step] ||
|
80
|
-
payments.valid.map(&:payment_method).compact.any?(&:payment_profiles_supported?) ||
|
81
|
-
# setting payment_profiles_supported? for braintree gateways would require few additional changes in payments profiles system
|
82
|
-
braintree_confirmation_required? || state == 'confirm'
|
83
|
-
end
|
84
|
-
|
85
|
-
def paid_with_braintree?
|
86
|
-
payments.valid.map(&:payment_method).compact.any? { |p| p.is_a?(Spree::Gateway::BraintreeVzeroBase) }
|
87
|
-
end
|
88
|
-
|
89
|
-
def paid_with_paypal_express?
|
90
|
-
payments.valid.map(&:payment_method).compact.any? { |p| p.is_a?(Spree::Gateway::BraintreeVzeroPaypalExpress) }
|
91
|
-
end
|
92
|
-
|
93
|
-
def invalidate_paypal_express_payments
|
94
|
-
return unless paid_with_paypal_express?
|
95
|
-
|
96
|
-
payments.valid.each do |payment|
|
97
|
-
payment.invalidate! if payment.payment_method.is_a?(Spree::Gateway::BraintreeVzeroPaypalExpress)
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
def no_phone_number?
|
102
|
-
[ship_address, bill_address].each do |address|
|
103
|
-
return true if address.try(:phone).eql?(I18n.t('braintree.phone_number_placeholder'))
|
104
|
-
end
|
105
|
-
false
|
106
|
-
end
|
107
|
-
|
108
|
-
def remove_phone_number_placeholder
|
109
|
-
[ship_address, bill_address].each do |address|
|
110
|
-
address.update_column(:phone, nil) if address.try(:phone).eql?(I18n.t('braintree.phone_number_placeholder'))
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
private
|
115
|
-
|
116
|
-
def braintree_confirmation_required?
|
117
|
-
paid_with_braintree? && state.eql?('payment')
|
118
|
-
end
|
119
|
-
|
120
|
-
def prepare_address_hash(hash)
|
121
|
-
hash.delete_if { |e| hash[e].eql?('undefined') }
|
122
|
-
country_id = Spree::Country.find_by(iso: hash.delete(:country)).try(:id)
|
123
|
-
|
124
|
-
hash[:country_id] = country_id
|
125
|
-
state_param = hash.delete(:state)
|
126
|
-
state = Spree::State.where('spree_states.abbr = :abbr OR upper(spree_states.name) = :name',
|
127
|
-
abbr: state_param, name: state_param.upcase).find_by(country_id: country_id)
|
128
|
-
hash[:state_id] = state.try(:id)
|
129
|
-
hash[:phone] ||= I18n.t('braintree.phone_number_placeholder')
|
130
|
-
|
131
|
-
return hash if hash[:full_name].blank?
|
132
|
-
|
133
|
-
full_name = hash.delete(:full_name).split(' ')
|
134
|
-
hash[:lastname] = full_name.slice!(-1)
|
135
|
-
hash[:firstname] = full_name.join(' ')
|
136
|
-
hash
|
137
|
-
end
|
138
|
-
|
139
|
-
def process_paypal_express_payments
|
140
|
-
return unless paid_with_paypal_express?
|
141
|
-
|
142
|
-
if payments.valid.empty?
|
143
|
-
order.errors.add(:base, Spree.t(:no_payment_found))
|
144
|
-
false
|
145
|
-
else
|
146
|
-
payments.valid.last.update(amount: order_total_after_store_credit)
|
147
|
-
process_payments!
|
148
|
-
end
|
149
|
-
end
|
150
|
-
end
|
151
|
-
end
|
152
|
-
|
153
|
-
::Spree::Order.prepend(Spree::OrderDecorator)
|
@@ -1,13 +0,0 @@
|
|
1
|
-
# This file was generated by Appraisal
|
2
|
-
|
3
|
-
source "https://rubygems.org"
|
4
|
-
|
5
|
-
gem "spree", "~> 3.5.0"
|
6
|
-
gem "pg"
|
7
|
-
gem "mysql2"
|
8
|
-
gem "webmock", ">= 2.3.1"
|
9
|
-
gem "rails-controller-testing"
|
10
|
-
gem "spree_auth_devise", "~> 3.3.0"
|
11
|
-
gem 'sprockets', '~> 3.7'
|
12
|
-
|
13
|
-
gemspec path: "../"
|
@@ -1,13 +0,0 @@
|
|
1
|
-
# This file was generated by Appraisal
|
2
|
-
|
3
|
-
source "https://rubygems.org"
|
4
|
-
|
5
|
-
gem 'sassc-rails'
|
6
|
-
gem "spree", "~> 3.7.1"
|
7
|
-
gem "pg"
|
8
|
-
gem "mysql2"
|
9
|
-
gem "webmock", ">= 2.3.1"
|
10
|
-
gem "rails-controller-testing"
|
11
|
-
gem "spree_auth_devise", "~> 3.5.2"
|
12
|
-
|
13
|
-
gemspec path: "../"
|
@@ -1,12 +0,0 @@
|
|
1
|
-
# This file was generated by Appraisal
|
2
|
-
|
3
|
-
source "https://rubygems.org"
|
4
|
-
|
5
|
-
gem "spree", github: "spree/spree", branch: "master"
|
6
|
-
gem "pg"
|
7
|
-
gem "mysql2"
|
8
|
-
gem "webmock", ">= 2.3.1"
|
9
|
-
gem "rails-controller-testing"
|
10
|
-
gem "spree_auth_devise", github: "spree/spree_auth_devise", branch: "master"
|
11
|
-
|
12
|
-
gemspec path: "../"
|