solidus_paypal_braintree 0.4.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (135) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +40 -0
  3. data/.gem_release.yml +5 -0
  4. data/.github/stale.yml +17 -0
  5. data/.gitignore +18 -0
  6. data/.rspec +2 -0
  7. data/.rubocop.yml +68 -0
  8. data/CHANGELOG.md +258 -0
  9. data/Gemfile +43 -0
  10. data/LICENSE +2 -2
  11. data/README.md +77 -23
  12. data/Rakefile +4 -25
  13. data/app/assets/javascripts/solidus_paypal_braintree/checkout.js +32 -3
  14. data/app/assets/javascripts/solidus_paypal_braintree/client.js +23 -4
  15. data/app/assets/javascripts/solidus_paypal_braintree/constants.js +19 -0
  16. data/app/assets/javascripts/solidus_paypal_braintree/frontend.js +1 -0
  17. data/app/assets/javascripts/solidus_paypal_braintree/hosted_form.js +15 -5
  18. data/app/assets/javascripts/solidus_paypal_braintree/paypal_button.js +47 -20
  19. data/app/assets/javascripts/solidus_paypal_braintree/paypal_messaging.js +22 -0
  20. data/app/decorators/controllers/solidus_paypal_braintree/admin_payments_controller_decorator.rb +11 -0
  21. data/app/decorators/controllers/solidus_paypal_braintree/checkout_controller_decorator.rb +11 -0
  22. data/app/decorators/controllers/solidus_paypal_braintree/client_tokens_controller.rb +41 -0
  23. data/app/decorators/controllers/solidus_paypal_braintree/orders_controller_decorator.rb +11 -0
  24. data/app/decorators/models/solidus_paypal_braintree/spree/store_decorator.rb +20 -0
  25. data/app/decorators/models/solidus_paypal_braintree/spree/user_decorator.rb +13 -0
  26. data/app/helpers/solidus_paypal_braintree/braintree_admin_helper.rb +23 -0
  27. data/app/helpers/solidus_paypal_braintree/braintree_checkout_helper.rb +46 -0
  28. data/app/models/application_record.rb +2 -0
  29. data/app/models/solidus_paypal_braintree/address.rb +30 -0
  30. data/app/models/solidus_paypal_braintree/configuration.rb +26 -3
  31. data/app/models/solidus_paypal_braintree/customer.rb +7 -3
  32. data/app/models/solidus_paypal_braintree/gateway.rb +52 -20
  33. data/app/models/solidus_paypal_braintree/response.rb +3 -2
  34. data/app/models/solidus_paypal_braintree/source.rb +21 -7
  35. data/app/models/solidus_paypal_braintree/transaction.rb +2 -0
  36. data/app/models/solidus_paypal_braintree/transaction_address.rb +30 -12
  37. data/app/models/solidus_paypal_braintree/transaction_import.rb +13 -9
  38. data/app/views/spree/api/payments/source_views/_paypal_braintree.json.jbuilder +3 -0
  39. data/app/views/spree/checkout/existing_payment/_paypal_braintree.html.erb +10 -0
  40. data/app/views/spree/shared/_apple_pay_button.html.erb +2 -2
  41. data/app/views/spree/shared/_braintree_errors.html.erb +11 -17
  42. data/app/views/spree/shared/_braintree_hosted_fields.html.erb +24 -9
  43. data/app/views/spree/shared/_paypal_braintree_head_scripts.html.erb +9 -6
  44. data/app/views/spree/shared/_paypal_cart_button.html.erb +16 -2
  45. data/app/views/spree/shared/_paypal_messaging.html.erb +13 -0
  46. data/bin/console +17 -0
  47. data/bin/rails +15 -0
  48. data/bin/setup +8 -0
  49. data/config/locales/en.yml +10 -0
  50. data/config/locales/it.yml +51 -8
  51. data/config/routes.rb +2 -0
  52. data/db/migrate/20160906201711_create_solidus_paypal_braintree_customers.rb +3 -1
  53. data/db/migrate/20161125172005_add_braintree_configuration_to_stores.rb +5 -7
  54. data/db/migrate/20170505193712_add_null_constraint_to_sources.rb +3 -1
  55. data/db/migrate/20190705115327_add_paypal_button_preferences_to_braintree_configurations.rb +5 -0
  56. data/db/migrate/20190911141712_add_3d_secure_to_braintree_configuration.rb +5 -0
  57. data/lib/controllers/backend/solidus_paypal_braintree/configurations_controller.rb +20 -5
  58. data/lib/controllers/frontend/solidus_paypal_braintree/checkouts_controller.rb +25 -21
  59. data/lib/controllers/frontend/solidus_paypal_braintree/transactions_controller.rb +55 -51
  60. data/lib/generators/solidus_paypal_braintree/install/install_generator.rb +7 -5
  61. data/lib/solidus_paypal_braintree.rb +4 -0
  62. data/lib/solidus_paypal_braintree/country_mapper.rb +4 -2
  63. data/lib/solidus_paypal_braintree/engine.rb +11 -11
  64. data/lib/solidus_paypal_braintree/factories.rb +8 -4
  65. data/lib/solidus_paypal_braintree/request_protection.rb +3 -0
  66. data/lib/solidus_paypal_braintree/version.rb +3 -1
  67. data/lib/views/backend/solidus_paypal_braintree/configurations/list.html.erb +30 -5
  68. data/lib/views/backend/spree/admin/payments/source_forms/_paypal_braintree.html.erb +2 -2
  69. data/lib/views/backend/spree/admin/payments/source_views/_paypal_braintree.html.erb +2 -2
  70. data/lib/views/backend_v1.2/spree/admin/payments/source_forms/_paypal_braintree.html.erb +2 -2
  71. data/lib/views/frontend/spree/checkout/payment/_paypal_braintree.html.erb +4 -2
  72. data/lib/views/frontend/spree/shared/_paypal_checkout_button.html.erb +30 -0
  73. data/solidus_paypal_braintree.gemspec +42 -0
  74. data/spec/controllers/solidus_paypal_braintree/checkouts_controller_spec.rb +99 -0
  75. data/spec/controllers/solidus_paypal_braintree/client_tokens_controller_spec.rb +55 -0
  76. data/spec/controllers/solidus_paypal_braintree/configurations_controller_spec.rb +73 -0
  77. data/spec/controllers/solidus_paypal_braintree/transactions_controller_spec.rb +183 -0
  78. data/spec/features/backend/configuration_spec.rb +23 -0
  79. data/spec/features/backend/new_payment_spec.rb +137 -0
  80. data/spec/features/frontend/braintree_credit_card_checkout_spec.rb +187 -0
  81. data/spec/features/frontend/paypal_checkout_spec.rb +166 -0
  82. data/spec/fixtures/cassettes/admin/invalid_credit_card.yml +63 -0
  83. data/spec/fixtures/cassettes/admin/resubmit_credit_card.yml +352 -0
  84. data/spec/fixtures/cassettes/admin/valid_credit_card.yml +412 -0
  85. data/spec/fixtures/cassettes/braintree/create_profile.yml +71 -0
  86. data/spec/fixtures/cassettes/braintree/generate_token.yml +63 -0
  87. data/spec/fixtures/cassettes/braintree/token.yml +63 -0
  88. data/spec/fixtures/cassettes/checkout/invalid_credit_card.yml +63 -0
  89. data/spec/fixtures/cassettes/checkout/resubmit_credit_card.yml +216 -0
  90. data/spec/fixtures/cassettes/checkout/update.yml +71 -0
  91. data/spec/fixtures/cassettes/checkout/valid_credit_card.yml +156 -0
  92. data/spec/fixtures/cassettes/gateway/authorize.yml +86 -0
  93. data/spec/fixtures/cassettes/gateway/authorize/credit_card/address.yml +86 -0
  94. data/spec/fixtures/cassettes/gateway/authorize/merchant_account/EUR.yml +154 -0
  95. data/spec/fixtures/cassettes/gateway/authorize/paypal/EUR.yml +90 -0
  96. data/spec/fixtures/cassettes/gateway/authorize/paypal/address.yml +90 -0
  97. data/spec/fixtures/cassettes/gateway/authorized_transaction.yml +73 -0
  98. data/spec/fixtures/cassettes/gateway/cancel/missing.yml +63 -0
  99. data/spec/fixtures/cassettes/gateway/cancel/refunds.yml +272 -0
  100. data/spec/fixtures/cassettes/gateway/cancel/void.yml +201 -0
  101. data/spec/fixtures/cassettes/gateway/capture.yml +141 -0
  102. data/spec/fixtures/cassettes/gateway/complete.yml +157 -0
  103. data/spec/fixtures/cassettes/gateway/credit.yml +208 -0
  104. data/spec/fixtures/cassettes/gateway/purchase.yml +87 -0
  105. data/spec/fixtures/cassettes/gateway/settled_transaction.yml +140 -0
  106. data/spec/fixtures/cassettes/gateway/void.yml +137 -0
  107. data/spec/fixtures/cassettes/source/card_type.yml +267 -0
  108. data/spec/fixtures/cassettes/source/last4.yml +267 -0
  109. data/spec/fixtures/cassettes/transaction/import/valid.yml +71 -0
  110. data/spec/fixtures/cassettes/transaction/import/valid/capture.yml +224 -0
  111. data/spec/fixtures/views/spree/orders/edit.html.erb +50 -0
  112. data/spec/helpers/solidus_paypal_braintree/braintree_admin_helper_spec.rb +17 -0
  113. data/spec/models/solidus_paypal_braintree/address_spec.rb +51 -0
  114. data/spec/models/solidus_paypal_braintree/avs_result_spec.rb +317 -0
  115. data/spec/models/solidus_paypal_braintree/gateway_spec.rb +692 -0
  116. data/spec/models/solidus_paypal_braintree/response_spec.rb +280 -0
  117. data/spec/models/solidus_paypal_braintree/source_spec.rb +360 -0
  118. data/spec/models/solidus_paypal_braintree/transaction_address_spec.rb +253 -0
  119. data/spec/models/solidus_paypal_braintree/transaction_import_spec.rb +283 -0
  120. data/spec/models/solidus_paypal_braintree/transaction_spec.rb +85 -0
  121. data/spec/models/spree/store_spec.rb +14 -0
  122. data/spec/requests/spree/api/orders_controller_spec.rb +36 -0
  123. data/spec/spec_helper.rb +26 -0
  124. data/spec/support/capybara.rb +7 -0
  125. data/spec/support/factories.rb +2 -0
  126. data/spec/support/gateway_helpers.rb +29 -0
  127. data/spec/support/order_ready_for_payment.rb +37 -0
  128. data/spec/support/vcr.rb +42 -0
  129. data/spec/support/views.rb +1 -0
  130. metadata +182 -194
  131. data/app/controllers/solidus_paypal_braintree/client_tokens_controller.rb +0 -22
  132. data/app/helpers/braintree_admin_helper.rb +0 -18
  133. data/app/models/spree/store_decorator.rb +0 -11
  134. data/app/views/spree/shared/_paypal_checkout_button.html.erb +0 -27
  135. data/config/initializers/braintree.rb +0 -1
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ gem install bundler --conservative
7
+ bundle update
8
+ bundle exec rake clobber
@@ -2,6 +2,12 @@ en:
2
2
  activerecord:
3
3
  models:
4
4
  solidus_paypal_braintree/gateway: Braintree
5
+ attributes:
6
+ solidus_paypal_braintree/configuration:
7
+ paypal: PayPal
8
+ apple_pay: Apple Pay
9
+ credit_card: Credit Card
10
+ three_d_secure: 3D Secure
5
11
  spree:
6
12
  admin:
7
13
  tab:
@@ -14,12 +20,14 @@ en:
14
20
  private_key: Private key
15
21
  public_key: Public key
16
22
  token_generation_enabled: Token generation enabled?
23
+ paypal_flow: PayPal flow
17
24
  solidus_paypal_braintree:
18
25
  braintree: Braintree
19
26
  nonce: Nonce
20
27
  token: Token
21
28
  errors:
22
29
  default_error: "Something bad happened!"
30
+ paypal_popup_closed: "PayPal popup has been closed before payment completion."
23
31
  empty_fields: "All fields are empty! Please fill out the form."
24
32
  invalid_fields: "Some payment input fields are invalid."
25
33
  invalid_card: "Credit card data is incorrect."
@@ -27,6 +35,8 @@ en:
27
35
  duplicate_iframe: "Duplicate Braintree iframe."
28
36
  fail_on_duplicate: "This payment method already exists in your vault."
29
37
  cvv_verification_failed: "CVV did not pass verification."
38
+ threeds:
39
+ authentication_failed: "3D Secure authentication failed. Please try again using a different payment method."
30
40
  payment_type:
31
41
  label: Payment Type
32
42
  apple_pay_card: Apple Pay
@@ -1,11 +1,54 @@
1
1
  it:
2
+ activerecord:
3
+ models:
4
+ solidus_paypal_braintree/gateway: Braintree
5
+ spree:
6
+ admin:
7
+ tab:
8
+ braintree: Braintree
9
+ client_sdk_enabled: Client SDK abilitato?
10
+ environment: Environment
11
+ merchant_currency_map: Associazioni tra merchant Braintree e valute
12
+ merchant_id: Merchant ID
13
+ paypal_payee_email_map: Associazioni tra email beneficiari PayPal e valute
14
+ private_key: Private key
15
+ public_key: Public key
16
+ token_generation_enabled: Generazione dei Token abilitata?
17
+ paypal_flow: Flusso PayPal
2
18
  solidus_paypal_braintree:
19
+ braintree: Braintree
20
+ nonce: Nonce
21
+ token: Token
3
22
  errors:
4
- default_error: "Qualcosa è andato storto."
5
- empty_fields: "I campi non possono essere vuoti."
6
- invalid_fields: "Alcuni campi non sono corretti."
7
- invalid_card: "I dati della carta di credito non sono corretti."
8
- network_error: "Si è verificato un errore di rete."
9
- duplicate_iframe: "Ci sono due form Braintree."
10
- fail_on_duplicate: "Questo metodo di pagamento già esiste."
11
- cvv_verification_failed: "Il codice CVV non è corretto."
23
+ default_error: Qualcosa è andato storto!
24
+ paypal_popup_closed: La finestra di PayPal è stata chiusa prima di completare il pagamento.
25
+ empty_fields: I campi non possono essere vuoti!
26
+ invalid_fields: Alcuni campi non sono corretti.
27
+ invalid_card: I dati della carta di credito non sono corretti.
28
+ network_error: Si è verificato un errore di rete.
29
+ duplicate_iframe: Ci sono due iframe di Braintree.
30
+ fail_on_duplicate: Questo metodo di pagamento esiste già.
31
+ cvv_verification_failed: Il codice CVV non è corretto.
32
+ payment_type:
33
+ label: Metodo di Pagamento
34
+ apple_pay_card: Apple Pay
35
+ credit_card: Carta di credito
36
+ pay_pal_account: PayPal
37
+ configurations:
38
+ title: Configurazioni di Braintree
39
+ tab: Braintree
40
+ update_success: Configurazioni di Braintree aggiornate con successo.
41
+ update_error: Si è verificato un errore durante l'aggiornamento delle configurazioni di Braintree.
42
+ gateway_rejection_reasons:
43
+ avs: Controllo AVS fallito.
44
+ avs_and_cvv: Controlli AVS e CVV falliti.
45
+ cvv: Controllo CVV fallito.
46
+ duplicate: Transazione duplicata.
47
+ fraud: La carta di credito è stata rifiutata a seguito di un potenziale uso fraudolento.
48
+ three_d_secure: Controllo '3D Secure' fallito.
49
+ transaction_statuses:
50
+ authorization_expired: L'autorizzazione di pagamento è scaduta.
51
+ failed: Si è verificato un errore durante l'invio della transazione al sistema di pagamento.
52
+ gateway_rejected: Il gateway di pagamento ha rifiutato questa transazione.
53
+ processor_declined: Il sistema di pagamento ha rifiutato questa transazione.
54
+ settlement_declined: Il saldo di questa transazione è stato rifiutato dal sistema di pagamento.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  SolidusPaypalBraintree::Engine.routes.draw do
2
4
  resource :checkout, only: [:update, :edit]
3
5
  resource :client_token, only: [:create], format: :json
@@ -3,9 +3,11 @@ class CreateSolidusPaypalBraintreeCustomers < SolidusSupport::Migration[4.2]
3
3
  create_table :solidus_paypal_braintree_customers do |t|
4
4
  t.references :user
5
5
  t.string :braintree_customer_id
6
+
7
+ t.timestamps
6
8
  end
7
9
 
8
10
  add_index :solidus_paypal_braintree_customers, :user_id, unique: true, name: "index_braintree_customers_on_user_id"
9
- add_index :solidus_paypal_braintree_customers, :braintree_customer_id, unique: true, name: "index_braintree_customers_on_braintree_customer_id"
11
+ add_index :solidus_paypal_braintree_customers, :braintree_customer_id, unique: true, name: "index_braintree_customers_on_braintree_customer_id" # rubocop:disable Layout/LineLength
10
12
  end
11
13
  end
@@ -1,9 +1,7 @@
1
1
  class AddBraintreeConfigurationToStores < SolidusSupport::Migration[4.2]
2
- def up
3
- Spree::Store.all.each(&:create_braintree_configuration)
4
- end
5
-
6
- def down
7
- SolidusPaypalBraintree::Configuration.joins(:store).destroy_all
8
- end
2
+ # The content of this migration has been removed because store's Braintree
3
+ # configuration doesn't already have paypal_button_preferences fields, so
4
+ # their validations will break this migration.
5
+ #
6
+ # Ref here for more info https://github.com/solidusio/solidus_paypal_braintree/pull/249
9
7
  end
@@ -15,7 +15,9 @@ class AddNullConstraintToSources < SolidusSupport::Migration[4.2]
15
15
 
16
16
  Spree::Payment.joins(join_sources).find_each do |payment|
17
17
  Rails.logger.info("Updating source #{payment.source_id} with payment method id #{payment.payment_method_id}")
18
- SolidusPaypalBraintree::Source.where(id: payment.source_id).update_all(payment_method_id: payment.payment_method_id)
18
+ SolidusPaypalBraintree::Source.where(id: payment.source_id).update_all(
19
+ payment_method_id: payment.payment_method_id
20
+ )
19
21
  end
20
22
 
21
23
  # We use a foreign key constraint on the model,
@@ -0,0 +1,5 @@
1
+ class AddPaypalButtonPreferencesToBraintreeConfigurations < ActiveRecord::Migration[5.1]
2
+ def change
3
+ add_column :solidus_paypal_braintree_configurations, :preferences, :text
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class Add3dSecureToBraintreeConfiguration < SolidusSupport::Migration[4.2]
2
+ def change
3
+ add_column :solidus_paypal_braintree_configurations, :three_d_secure, :boolean, null: false, default: false
4
+ end
5
+ end
@@ -1,18 +1,21 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SolidusPaypalBraintree
2
- class ConfigurationsController < Spree::Admin::BaseController
3
- helper Spree::Core::Engine.routes.url_helpers
4
+ class ConfigurationsController < ::Spree::Admin::BaseController
5
+ helper ::Spree::Core::Engine.routes.url_helpers
4
6
 
5
7
  def list
6
8
  authorize! :list, SolidusPaypalBraintree::Configuration
7
9
 
8
- @configurations = Spree::Store.all.map(&:braintree_configuration)
10
+ @configurations = ::Spree::Store.all.map { |s| s.braintree_configuration || s.create_braintree_configuration }
9
11
  end
10
12
 
11
13
  def update
12
14
  authorize! :update, SolidusPaypalBraintree::Configuration
13
15
 
14
16
  params = configurations_params[:configuration_fields]
15
- if SolidusPaypalBraintree::Configuration.update(params.keys, params.values)
17
+ results = SolidusPaypalBraintree::Configuration.update(params.keys, params.values)
18
+ if results.all?(&:valid?)
16
19
  flash[:success] = t('update_success', scope: 'solidus_paypal_braintree.configurations')
17
20
  else
18
21
  flash[:error] = t('update_error', scope: 'solidus_paypal_braintree.configurations')
@@ -24,7 +27,19 @@ module SolidusPaypalBraintree
24
27
 
25
28
  def configurations_params
26
29
  params.require(:configurations).
27
- permit(configuration_fields: [:paypal, :apple_pay, :credit_card])
30
+ permit(configuration_fields: [
31
+ :paypal,
32
+ :apple_pay,
33
+ :credit_card,
34
+ :three_d_secure,
35
+ :preferred_paypal_button_locale,
36
+ :preferred_paypal_button_color,
37
+ :preferred_paypal_button_shape,
38
+ :preferred_paypal_button_label,
39
+ :preferred_paypal_button_tagline,
40
+ :preferred_paypal_button_layout,
41
+ :preferred_paypal_button_messaging
42
+ ])
28
43
  end
29
44
  end
30
45
  end
@@ -1,27 +1,31 @@
1
- class SolidusPaypalBraintree::CheckoutsController < Spree::CheckoutController
2
- PERMITTED_PAYMENT_PARAMS = [
3
- :payment_method_id,
4
- source_attributes: [
5
- :nonce,
6
- :payment_type
7
- ]
8
- ].freeze
1
+ # frozen_string_literal: true
9
2
 
10
- def update
11
- @payment = Spree::PaymentCreate.new(@order, payment_params).build
3
+ module SolidusPaypalBraintree
4
+ class CheckoutsController < ::Spree::CheckoutController
5
+ PERMITTED_PAYMENT_PARAMS = [
6
+ :payment_method_id,
7
+ { source_attributes: [
8
+ :nonce,
9
+ :payment_type
10
+ ] }
11
+ ].freeze
12
12
 
13
- if @payment.save
14
- render plain: "ok"
15
- else
16
- render plain: "not-ok"
13
+ def update
14
+ @payment = ::Spree::PaymentCreate.new(@order, payment_params).build
15
+
16
+ if @payment.save
17
+ render plain: "ok"
18
+ else
19
+ render plain: "not-ok"
20
+ end
17
21
  end
18
- end
19
22
 
20
- def payment_params
21
- params.
22
- require(:order).
23
- require(:payments_attributes).
24
- first.
25
- permit(PERMITTED_PAYMENT_PARAMS)
23
+ def payment_params
24
+ params.
25
+ require(:order).
26
+ require(:payments_attributes).
27
+ first.
28
+ permit(PERMITTED_PAYMENT_PARAMS)
29
+ end
26
30
  end
27
31
  end
@@ -1,62 +1,66 @@
1
- class SolidusPaypalBraintree::TransactionsController < Spree::StoreController
2
- class InvalidImportError < StandardError; end
3
-
4
- PERMITTED_BRAINTREE_TRANSACTION_PARAMS = [
5
- :nonce,
6
- :payment_type,
7
- :phone,
8
- :email,
9
- address_attributes: [
10
- :country_code, :country_name, :last_name, :first_name,
11
- :city, :zip, :state_code, :address_line_1, :address_line_2
12
- ]
13
- ]
14
-
15
- def create
16
- transaction = SolidusPaypalBraintree::Transaction.new transaction_params
17
- import = SolidusPaypalBraintree::TransactionImport.new(current_order, transaction)
18
- restart_checkout = params[:options] && params[:options][:restart_checkout] == "true"
19
-
20
- respond_to do |format|
21
- if import.valid?
22
- import.import!(import_state, restart_checkout: restart_checkout)
23
-
24
- format.html { redirect_to redirect_url(import) }
25
- format.json { render json: { redirectUrl: redirect_url(import) } }
26
- else
27
- status = 422
28
- format.html { import_error(import) }
29
- format.json { render json: { errors: import.errors, status: status }, status: status }
1
+ # frozen_string_literal: true
2
+
3
+ module SolidusPaypalBraintree
4
+ class TransactionsController < ::Spree::StoreController
5
+ class InvalidImportError < StandardError; end
6
+
7
+ PERMITTED_BRAINTREE_TRANSACTION_PARAMS = [
8
+ :nonce,
9
+ :payment_type,
10
+ :phone,
11
+ :email,
12
+ { address_attributes: [
13
+ :country_code, :country_name, :name, :city, :zip, :state_code,
14
+ :address_line_1, :address_line_2, :first_name, :last_name
15
+ ] }
16
+ ].freeze
17
+
18
+ def create
19
+ transaction = SolidusPaypalBraintree::Transaction.new transaction_params
20
+ import = SolidusPaypalBraintree::TransactionImport.new(current_order, transaction)
21
+ restart_checkout = params[:options] && params[:options][:restart_checkout] == "true"
22
+
23
+ respond_to do |format|
24
+ if import.valid?
25
+ import.import!(import_state, restart_checkout: restart_checkout)
26
+
27
+ format.html { redirect_to redirect_url(import) }
28
+ format.json { render json: { redirectUrl: redirect_url(import) } }
29
+ else
30
+ status = 422
31
+ format.html { import_error(import) }
32
+ format.json { render json: { errors: import.errors, status: status }, status: status }
33
+ end
30
34
  end
31
35
  end
32
- end
33
36
 
34
- private
37
+ private
35
38
 
36
- def import_state
37
- params[:state] || 'confirm'
38
- end
39
+ def import_state
40
+ params[:state] || 'confirm'
41
+ end
39
42
 
40
- def import_error(import)
41
- raise InvalidImportError,
42
- "Import invalid: #{import.errors.full_messages.join(', ')}"
43
- end
43
+ def import_error(import)
44
+ raise InvalidImportError,
45
+ "Import invalid: #{import.errors.full_messages.join(', ')}"
46
+ end
44
47
 
45
- def redirect_url(import)
46
- if import.order.complete?
47
- spree.order_url(import.order)
48
- else
49
- spree.checkout_state_url(import.order.state)
48
+ def redirect_url(import)
49
+ if import.order.complete?
50
+ spree.order_url(import.order)
51
+ else
52
+ spree.checkout_state_url(import.order.state)
53
+ end
50
54
  end
51
- end
52
55
 
53
- def transaction_params
54
- params.require(:transaction)
55
- .permit(PERMITTED_BRAINTREE_TRANSACTION_PARAMS)
56
- .merge({ payment_method: payment_method })
57
- end
56
+ def transaction_params
57
+ params.require(:transaction)
58
+ .permit(PERMITTED_BRAINTREE_TRANSACTION_PARAMS)
59
+ .merge({ payment_method: payment_method })
60
+ end
58
61
 
59
- def payment_method
60
- SolidusPaypalBraintree::Gateway.find(params[:payment_method_id])
62
+ def payment_method
63
+ SolidusPaypalBraintree::Gateway.find(params[:payment_method_id])
64
+ end
61
65
  end
62
66
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SolidusPaypalBraintree
2
4
  module Generators
3
5
  class InstallGenerator < Rails::Generators::Base
@@ -5,12 +7,12 @@ module SolidusPaypalBraintree
5
7
 
6
8
  def add_javascripts
7
9
  append_file 'vendor/assets/javascripts/spree/frontend/all.js', "//= require solidus_paypal_braintree/frontend\n"
8
- append_file 'vendor/assets/javascripts/spree/backend/all.js', "//= require spree/backend/solidus_paypal_braintree\n"
10
+ append_file 'vendor/assets/javascripts/spree/backend/all.js', "//= require spree/backend/solidus_paypal_braintree\n" # rubocop:disable Layout/LineLength
9
11
  end
10
12
 
11
13
  def add_stylesheets
12
- inject_into_file 'vendor/assets/stylesheets/spree/frontend/all.css', " *= require spree/frontend/solidus_paypal_braintree\n", before: /\*\//, verbose: true
13
- inject_into_file 'vendor/assets/stylesheets/spree/backend/all.css', " *= require spree/backend/solidus_paypal_braintree\n", before: /\*\//, verbose: true
14
+ inject_into_file 'vendor/assets/stylesheets/spree/frontend/all.css', " *= require spree/frontend/solidus_paypal_braintree\n", before: %r{\*/}, verbose: true # rubocop:disable Layout/LineLength
15
+ inject_into_file 'vendor/assets/stylesheets/spree/backend/all.css', " *= require spree/backend/solidus_paypal_braintree\n", before: %r{\*/}, verbose: true # rubocop:disable Layout/LineLength
14
16
  end
15
17
 
16
18
  def add_migrations
@@ -24,11 +26,11 @@ module SolidusPaypalBraintree
24
26
  end
25
27
 
26
28
  def run_migrations
27
- run_migrations = options[:auto_run_migrations] || ['', 'y', 'Y'].include?(ask('Would you like to run the migrations now? [Y/n]'))
29
+ run_migrations = options[:auto_run_migrations] || ['', 'y', 'Y'].include?(ask('Would you like to run the migrations now? [Y/n]')) # rubocop:disable Layout/LineLength
28
30
  if run_migrations
29
31
  run 'bundle exec rake db:migrate'
30
32
  else
31
- puts 'Skipping rake db:migrate, don\'t forget to run it!'
33
+ say_status :skipping, 'rake db:migrate, don\'t forget to run it!'
32
34
  end
33
35
  end
34
36
  end
@@ -1,7 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'solidus_core'
4
+ require 'solidus_paypal_braintree/version'
2
5
  require 'solidus_paypal_braintree/engine'
3
6
  require 'solidus_paypal_braintree/country_mapper'
4
7
  require 'solidus_paypal_braintree/request_protection'
8
+ require 'solidus_support'
5
9
 
6
10
  module SolidusPaypalBraintree
7
11
  def self.table_name_prefix
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SolidusPaypalBraintree
2
4
  module CountryMapper
3
5
  extend ActiveSupport::Concern
@@ -12,12 +14,12 @@ module SolidusPaypalBraintree
12
14
  "usa",
13
15
  "u.s.",
14
16
  "us"
15
- ]
17
+ ].freeze
16
18
 
17
19
  CANADA_VARIANTS = [
18
20
  "canada",
19
21
  "ca"
20
- ]
22
+ ].freeze
21
23
 
22
24
  # Generates a hash mapping each variant of the country name to the same ISO
23
25
  # ie: { "usa" => "US", "united states" => "US", "canada" => "CA", ... }