solidus_core 2.11.10 → 3.3.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.
Files changed (252) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +6 -2
  3. data/app/assets/javascripts/spree.js.erb +0 -51
  4. data/app/controllers/spree/base_controller.rb +1 -1
  5. data/app/helpers/spree/base_helper.rb +1 -1
  6. data/app/helpers/spree/products_helper.rb +2 -2
  7. data/app/helpers/spree/store_helper.rb +0 -11
  8. data/app/mailers/spree/carton_mailer.rb +1 -5
  9. data/app/models/concerns/spree/active_storage_adapter/attachment.rb +30 -11
  10. data/app/models/concerns/spree/active_storage_adapter.rb +1 -1
  11. data/app/models/concerns/spree/adjustment_source.rb +0 -15
  12. data/app/models/concerns/spree/calculated_adjustments.rb +0 -18
  13. data/app/models/concerns/spree/default_price.rb +39 -10
  14. data/app/models/concerns/spree/ransackable_attributes.rb +24 -4
  15. data/app/models/concerns/spree/soft_deletable.rb +2 -4
  16. data/app/models/concerns/spree/user_address_book.rb +10 -37
  17. data/app/models/concerns/spree/user_methods.rb +38 -13
  18. data/app/models/spree/ability.rb +0 -37
  19. data/app/models/spree/address/name.rb +2 -20
  20. data/app/models/spree/address.rb +8 -186
  21. data/app/models/spree/adjustment.rb +7 -33
  22. data/app/models/spree/base.rb +0 -53
  23. data/app/models/spree/calculator/flat_fee.rb +21 -0
  24. data/app/models/spree/calculator/flexi_rate.rb +0 -5
  25. data/app/models/spree/calculator.rb +0 -7
  26. data/app/models/spree/carton.rb +1 -1
  27. data/app/models/spree/country.rb +2 -7
  28. data/app/models/spree/credit_card.rb +1 -28
  29. data/app/models/spree/customer_return.rb +5 -7
  30. data/app/models/spree/image/active_storage_attachment.rb +2 -7
  31. data/app/models/spree/image/paperclip_attachment.rb +2 -2
  32. data/app/models/spree/image.rb +0 -7
  33. data/app/models/spree/inventory_unit.rb +0 -21
  34. data/app/models/spree/line_item.rb +6 -49
  35. data/app/models/spree/log_entry.rb +74 -1
  36. data/app/models/spree/option_type.rb +1 -1
  37. data/app/models/spree/option_value.rb +10 -1
  38. data/app/models/spree/order/number_generator.rb +7 -1
  39. data/app/models/spree/order.rb +82 -170
  40. data/app/models/spree/order_cancellations.rb +4 -24
  41. data/app/models/spree/order_contents.rb +2 -1
  42. data/app/models/spree/order_inventory.rb +1 -1
  43. data/app/models/spree/order_merger.rb +2 -2
  44. data/app/models/spree/order_promotion.rb +1 -1
  45. data/app/models/spree/order_shipping.rb +6 -9
  46. data/app/models/spree/order_taxation.rb +6 -4
  47. data/app/models/spree/order_updater.rb +17 -16
  48. data/app/models/spree/payment/cancellation.rb +1 -1
  49. data/app/models/spree/payment/processing.rb +58 -55
  50. data/app/models/spree/payment.rb +0 -3
  51. data/app/models/spree/payment_create.rb +1 -13
  52. data/app/models/spree/payment_method/bogus_credit_card.rb +6 -7
  53. data/app/models/spree/payment_method/credit_card.rb +1 -3
  54. data/app/models/spree/payment_method/simple_bogus_credit_card.rb +8 -0
  55. data/app/models/spree/payment_method.rb +26 -110
  56. data/app/models/spree/price.rb +3 -3
  57. data/app/models/spree/product/scopes.rb +24 -33
  58. data/app/models/spree/product.rb +15 -42
  59. data/app/models/spree/product_property.rb +1 -1
  60. data/app/models/spree/promotion/actions/create_adjustment.rb +4 -3
  61. data/app/models/spree/promotion/actions/create_item_adjustments.rb +5 -9
  62. data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +0 -3
  63. data/app/models/spree/promotion/actions/free_shipping.rb +1 -0
  64. data/app/models/spree/promotion/order_adjustments_recalculator.rb +92 -0
  65. data/app/models/spree/promotion/rules/item_total.rb +50 -6
  66. data/app/models/spree/promotion/rules/product.rb +20 -8
  67. data/app/models/spree/promotion/rules/store.rb +4 -0
  68. data/app/models/spree/promotion/rules/taxon.rb +6 -15
  69. data/app/models/spree/promotion/rules/user.rb +4 -0
  70. data/app/models/spree/promotion.rb +39 -32
  71. data/app/models/spree/promotion_action.rb +6 -9
  72. data/app/models/spree/promotion_code/batch_builder.rb +0 -14
  73. data/app/models/spree/promotion_code.rb +11 -7
  74. data/app/models/spree/promotion_handler/cart.rb +26 -6
  75. data/app/models/spree/promotion_rule.rb +5 -0
  76. data/app/models/spree/property.rb +1 -1
  77. data/app/models/spree/refund.rb +8 -52
  78. data/app/models/spree/reimbursement.rb +5 -43
  79. data/app/models/spree/reimbursement_performer.rb +2 -8
  80. data/app/models/spree/reimbursement_type/credit.rb +1 -4
  81. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +1 -2
  82. data/app/models/spree/reimbursement_type/store_credit.rb +1 -4
  83. data/app/models/spree/return_authorization.rb +2 -5
  84. data/app/models/spree/return_item.rb +4 -24
  85. data/app/models/spree/shipment.rb +3 -56
  86. data/app/models/spree/shipping_method.rb +0 -25
  87. data/app/models/spree/shipping_rate.rb +0 -2
  88. data/app/models/spree/shipping_rate_tax.rb +1 -1
  89. data/app/models/spree/state.rb +1 -5
  90. data/app/models/spree/stock/allocator/on_hand_first.rb +2 -2
  91. data/app/models/spree/stock/availability.rb +11 -3
  92. data/app/models/spree/stock/quantifier.rb +12 -8
  93. data/app/models/spree/stock/simple_coordinator.rb +8 -26
  94. data/app/models/spree/stock/splitter/base.rb +2 -7
  95. data/app/models/spree/stock_item.rb +2 -8
  96. data/app/models/spree/stock_location.rb +2 -2
  97. data/app/models/spree/stock_movement.rb +2 -2
  98. data/app/models/spree/store.rb +0 -12
  99. data/app/models/spree/store_credit.rb +14 -1
  100. data/app/models/spree/store_credit_category.rb +0 -32
  101. data/app/models/spree/store_credit_prioritizer.rb +17 -0
  102. data/app/models/spree/tax/item_tax.rb +3 -2
  103. data/app/models/spree/tax/order_tax.rb +3 -1
  104. data/app/models/spree/tax/tax_helpers.rb +2 -2
  105. data/app/models/spree/tax/tax_location.rb +4 -7
  106. data/app/models/spree/tax_calculator/default.rb +31 -0
  107. data/app/models/spree/tax_calculator/shipping_rate.rb +2 -13
  108. data/app/models/spree/tax_rate.rb +9 -27
  109. data/app/models/spree/taxon/active_storage_attachment.rb +2 -7
  110. data/app/models/spree/taxon/paperclip_attachment.rb +3 -8
  111. data/app/models/spree/taxon.rb +1 -12
  112. data/app/models/spree/taxonomy.rb +1 -1
  113. data/app/models/spree/user_address.rb +0 -5
  114. data/app/models/spree/user_last_url_storer/rules/authentication_rule.rb +1 -1
  115. data/app/models/spree/variant/price_selector.rb +34 -4
  116. data/app/models/spree/variant.rb +52 -66
  117. data/app/models/spree/zone.rb +1 -1
  118. data/app/subscribers/spree/mailer_subscriber.rb +4 -0
  119. data/app/subscribers/spree/order_mailer_subscriber.rb +35 -0
  120. data/config/i18n-tasks.yml +134 -0
  121. data/config/locales/en.yml +406 -263
  122. data/db/migrate/20180416083007_add_apply_to_all_to_variant_property_rule.rb +1 -1
  123. data/db/migrate/20201127212108_add_type_before_removal_to_spree_payment_methods.rb +7 -0
  124. data/db/migrate/20210312061050_change_column_null_on_prices.rb +7 -0
  125. data/db/migrate/20220317165036_set_promotions_with_any_policy_to_all_if_possible.rb +20 -0
  126. data/db/migrate/20220805202442_add_level_to_spree_tax_rates.rb +5 -0
  127. data/db/migrate/20221123152807_add_shipping_category_to_spree_variants.rb +5 -0
  128. data/db/seeds.rb +4 -1
  129. data/lib/generators/solidus/install/app_templates/authentication/custom.rb +21 -0
  130. data/lib/generators/solidus/install/app_templates/authentication/devise.rb +16 -0
  131. data/lib/generators/solidus/install/app_templates/authentication/existing.rb +10 -0
  132. data/lib/generators/solidus/install/app_templates/authentication/none.rb +1 -0
  133. data/lib/generators/solidus/install/app_templates/frontend/break_down_solidus_gem.rb +54 -0
  134. data/lib/generators/solidus/install/app_templates/frontend/classic.rb +16 -0
  135. data/lib/generators/solidus/install/app_templates/frontend/none.rb +2 -0
  136. data/lib/generators/solidus/install/app_templates/frontend/starter.rb +3 -0
  137. data/lib/generators/solidus/install/app_templates/payment_method/bolt.rb +13 -0
  138. data/lib/generators/solidus/install/app_templates/payment_method/none.rb +1 -0
  139. data/lib/generators/solidus/install/app_templates/payment_method/paypal.rb +10 -0
  140. data/lib/generators/solidus/install/install_generator.rb +247 -149
  141. data/lib/generators/solidus/install/templates/config/initializers/spree.rb.tt +15 -60
  142. data/lib/generators/solidus/install/templates/vendor/assets/javascripts/spree/backend/all.js +2 -2
  143. data/lib/generators/solidus/update/templates/config/initializers/new_solidus_defaults.rb.tt +30 -0
  144. data/lib/generators/solidus/update/update_generator.rb +112 -0
  145. data/lib/generators/spree/custom_user/custom_user_generator.rb +6 -4
  146. data/lib/generators/spree/custom_user/templates/authentication_helpers.rb.tt +2 -6
  147. data/lib/generators/spree/custom_user/templates/migration.rb.tt +7 -3
  148. data/lib/generators/spree/dummy/dummy_generator.rb +12 -9
  149. data/lib/generators/spree/dummy/templates/rails/application.rb.tt +0 -1
  150. data/lib/generators/spree/dummy/templates/rails/database.yml +81 -39
  151. data/lib/generators/spree/dummy/templates/rails/storage.yml +3 -0
  152. data/lib/generators/spree/dummy/templates/rails/test.rb +2 -0
  153. data/lib/spree/app_configuration.rb +134 -64
  154. data/lib/spree/bus.rb +20 -0
  155. data/lib/spree/core/class_constantizer.rb +2 -0
  156. data/lib/spree/core/controller_helpers/auth.rb +10 -15
  157. data/lib/spree/core/controller_helpers/current_host.rb +5 -3
  158. data/lib/spree/core/controller_helpers/order.rb +12 -32
  159. data/lib/spree/core/controller_helpers/payment_parameters.rb +0 -54
  160. data/lib/spree/core/controller_helpers/pricing.rb +0 -8
  161. data/lib/spree/core/controller_helpers/search.rb +1 -1
  162. data/lib/spree/core/controller_helpers/strong_parameters.rb +0 -4
  163. data/lib/spree/core/engine.rb +54 -50
  164. data/lib/spree/core/environment_extension.rb +0 -9
  165. data/lib/spree/core/product_filters.rb +1 -41
  166. data/lib/spree/core/role_configuration.rb +0 -14
  167. data/lib/spree/core/search/base.rb +18 -35
  168. data/lib/spree/core/state_machines/order.rb +2 -2
  169. data/lib/spree/core/state_machines.rb +2 -11
  170. data/lib/spree/core/stock_configuration.rb +18 -0
  171. data/lib/spree/core/validators/email.rb +5 -3
  172. data/lib/spree/core/version.rb +5 -1
  173. data/lib/spree/core/versioned_value.rb +75 -0
  174. data/lib/spree/core.rb +40 -11
  175. data/lib/spree/deprecation.rb +1 -1
  176. data/lib/spree/event/configuration.rb +0 -5
  177. data/lib/spree/event/subscriber.rb +0 -18
  178. data/lib/spree/event/subscriber_registry.rb +7 -7
  179. data/lib/spree/event.rb +1 -32
  180. data/lib/spree/i18n.rb +0 -22
  181. data/lib/spree/migrations.rb +13 -11
  182. data/lib/spree/money.rb +3 -18
  183. data/lib/spree/permission_sets/default_customer.rb +8 -1
  184. data/lib/spree/permitted_attributes.rb +17 -59
  185. data/lib/spree/preferences/configuration.rb +84 -0
  186. data/lib/spree/preferences/preferable.rb +13 -0
  187. data/lib/spree/preferences/preferable_class_methods.rb +37 -4
  188. data/lib/spree/preferences/preference_differentiator.rb +29 -0
  189. data/lib/spree/preferences/static_model_preferences.rb +25 -10
  190. data/lib/spree/rails_compatibility.rb +106 -0
  191. data/lib/spree/testing_support/blacklist_urls.rb +1 -1
  192. data/lib/spree/testing_support/bus_helpers.rb +101 -0
  193. data/lib/spree/testing_support/capybara_ext.rb +0 -30
  194. data/lib/spree/testing_support/common_rake.rb +71 -23
  195. data/lib/spree/testing_support/controller_requests.rb +0 -82
  196. data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/backend/all.js +1 -1
  197. data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/frontend/all.js +1 -1
  198. data/lib/spree/testing_support/dummy_app/database.yml +42 -22
  199. data/lib/spree/testing_support/dummy_app/migrations.rb +0 -3
  200. data/lib/spree/testing_support/dummy_app.rb +47 -34
  201. data/lib/spree/testing_support/factories/address_factory.rb +9 -6
  202. data/lib/spree/testing_support/factories/calculator_factory.rb +3 -0
  203. data/lib/spree/testing_support/factories/country_factory.rb +1 -2
  204. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +1 -1
  205. data/lib/spree/testing_support/factories/order_factory.rb +8 -5
  206. data/lib/spree/testing_support/factories/product_factory.rb +4 -1
  207. data/lib/spree/testing_support/factories/promotion_factory.rb +28 -14
  208. data/lib/spree/testing_support/factories/refund_factory.rb +0 -1
  209. data/lib/spree/testing_support/factories/state_factory.rb +8 -2
  210. data/lib/spree/testing_support/factories/store_credit_factory.rb +4 -4
  211. data/lib/spree/testing_support/factories/user_factory.rb +6 -0
  212. data/lib/spree/testing_support/factory_bot.rb +2 -2
  213. data/lib/spree/testing_support/order_walkthrough.rb +6 -8
  214. data/lib/spree/testing_support/preferences.rb +0 -25
  215. data/lib/spree/testing_support/silence_deprecations.rb +9 -0
  216. data/lib/tasks/colorado_delivery_fee.rake +28 -0
  217. data/lib/tasks/payment_method.rake +29 -0
  218. data/lib/tasks/solidus/check_orders_with_invalid_email.rake +18 -0
  219. data/lib/tasks/solidus/delete_prices_with_nil_amount.rake +8 -0
  220. data/lib/tasks/solidus/split_promotions_with_any_match_policy.rake +33 -0
  221. data/solidus_core.gemspec +14 -7
  222. metadata +127 -78
  223. data/app/mailers/spree/test_mailer.rb +0 -13
  224. data/app/models/concerns/spree/user_payment_source.rb +0 -26
  225. data/app/models/spree/calculator/free_shipping.rb +0 -22
  226. data/app/models/spree/calculator/percent_per_item.rb +0 -51
  227. data/app/models/spree/calculator/price_sack.rb +0 -28
  228. data/app/models/spree/gateway/bogus.rb +0 -13
  229. data/app/models/spree/gateway/bogus_simple.rb +0 -13
  230. data/app/models/spree/gateway.rb +0 -14
  231. data/app/models/spree/order/checkout.rb +0 -244
  232. data/app/models/spree/order_capturing.rb +0 -50
  233. data/app/models/spree/promotion_handler/free_shipping.rb +0 -9
  234. data/app/models/spree/tax/shipping_rate_taxer.rb +0 -24
  235. data/lib/generators/solidus/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -10
  236. data/lib/generators/solidus/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -9
  237. data/lib/generators/spree/install/install_generator.rb +0 -15
  238. data/lib/solidus/migrations/rename_gateways.rb +0 -41
  239. data/lib/spree/core/current_store.rb +0 -24
  240. data/lib/spree/paranoia_deprecations.rb +0 -41
  241. data/lib/spree/promo/environment.rb +0 -12
  242. data/lib/spree/testing_support/bar_ability.rb +0 -19
  243. data/lib/tasks/core.rake +0 -104
  244. data/lib/tasks/email.rake +0 -12
  245. data/lib/tasks/migrations/copy_order_bill_address_to_credit_card.rake +0 -119
  246. data/lib/tasks/migrations/migrate_address_names.rake +0 -158
  247. data/lib/tasks/migrations/migrate_default_billing_addresses_to_address_book.rake +0 -26
  248. data/lib/tasks/migrations/migrate_shipping_rate_taxes.rake +0 -22
  249. data/lib/tasks/migrations/migrate_user_addresses.rake +0 -34
  250. data/lib/tasks/migrations/rename_gateways.rake +0 -23
  251. data/lib/tasks/order_capturing.rake +0 -27
  252. data/lib/tasks/upgrade.rake +0 -13
@@ -1,51 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_dependency 'spree/calculator'
4
-
5
- module Spree
6
- # A calculator for promotions that calculates a percent-off discount
7
- # for all matching products in an order. This should not be used as a
8
- # shipping calculator since it would be the same thing as a flat percent
9
- # off the entire order.
10
- #
11
- #
12
- # TODO Should be deprecated now that we have adjustments at the line item level in spree core
13
-
14
- class Calculator::PercentPerItem < Calculator
15
- preference :percent, :decimal, default: 0
16
-
17
- def compute(object = nil)
18
- Spree::Deprecation.warn('This method is deprecated, please use adjustments at line item level')
19
-
20
- return 0 if object.nil?
21
- object.line_items.sum { |line_item|
22
- value_for_line_item(line_item)
23
- }
24
- end
25
-
26
- private
27
-
28
- # Returns all products that match this calculator, but only if the calculator
29
- # is attached to a promotion. If attached to a ShippingMethod, nil is returned.
30
- # Copied from per_item.rb
31
- def matching_products
32
- if compute_on_promotion?
33
- calculable.promotion.rules.flat_map do |rule|
34
- rule.respond_to?(:products) ? rule.products : []
35
- end
36
- end
37
- end
38
-
39
- def value_for_line_item(line_item)
40
- if compute_on_promotion?
41
- return 0 unless matching_products.blank? || matching_products.include?(line_item.product)
42
- end
43
- ((line_item.price * line_item.quantity) * preferred_percent) / 100
44
- end
45
-
46
- # Determines wether or not the calculable object is a promotion
47
- def compute_on_promotion?
48
- @compute_on_promotion ||= calculable.respond_to?(:promotion)
49
- end
50
- end
51
- end
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_dependency 'spree/calculator'
4
-
5
- module Spree
6
- class Calculator::PriceSack < Calculator
7
- preference :minimal_amount, :decimal, default: 0
8
- preference :normal_amount, :decimal, default: 0
9
- preference :discount_amount, :decimal, default: 0
10
- preference :currency, :string, default: ->{ Spree::Config[:currency] }
11
-
12
- # as object we always get line items, as calculable we have Coupon, ShippingMethod
13
- def compute(object)
14
- Spree::Deprecation.warn('This method is deprecated, please use adjustments at line item level')
15
- if object.is_a?(Array)
16
- base = object.sum { |element| element.respond_to?(:amount) ? element.amount : BigDecimal(element.to_s) }
17
- else
18
- base = object.respond_to?(:amount) ? object.amount : BigDecimal(object.to_s)
19
- end
20
-
21
- if base < preferred_minimal_amount
22
- preferred_normal_amount
23
- else
24
- preferred_discount_amount
25
- end
26
- end
27
- end
28
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Spree
4
- # @deprecated Use Spree::PaymentMethod::BogusCreditCard instead
5
- class Gateway::Bogus < PaymentMethod::BogusCreditCard
6
- def initialize(*args)
7
- Spree::Deprecation.warn \
8
- 'Spree::Gateway::Bogus is deprecated. ' \
9
- 'Please use Spree::PaymentMethod::BogusCreditCard instead'
10
- super
11
- end
12
- end
13
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Spree
4
- # @deprecated Use Spree::PaymentMethod::SimpleBogusCreditCard instead
5
- class Gateway::BogusSimple < Spree::PaymentMethod::SimpleBogusCreditCard
6
- def initialize(*args)
7
- Spree::Deprecation.warn \
8
- 'Spree::Gateway::BogusSimple is deprecated. ' \
9
- 'Please use Spree::PaymentMethod::SimpleBogusCreditCard instead'
10
- super
11
- end
12
- end
13
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Spree
4
- # @deprecated Use Spree::PaymentMethod::CreditCard or Spree::PaymentMethod instead
5
- class Gateway < PaymentMethod::CreditCard
6
- def initialize(*args)
7
- Spree::Deprecation.warn \
8
- "Using Spree::Gateway as parent class of payment methods is deprecated. " \
9
- "Please use Spree::PaymentMethod::CreditCard for credit card based payment methods " \
10
- "or Spree::PaymentMethod for non credit card payment methods instead."
11
- super
12
- end
13
- end
14
- end
@@ -1,244 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Spree
4
- class Order < Spree::Base
5
- module Checkout
6
- def self.included(klass)
7
- klass.extend ClassMethods
8
- end
9
-
10
- module ClassMethods
11
- attr_accessor :previous_states
12
- attr_writer :next_event_transitions
13
- attr_writer :checkout_steps
14
- attr_writer :removed_transitions
15
-
16
- def checkout_flow(&block)
17
- if block_given?
18
- @checkout_flow = block
19
- define_state_machine!
20
- else
21
- @checkout_flow
22
- end
23
- end
24
-
25
- def define_state_machine!
26
- self.checkout_steps = {}
27
- self.next_event_transitions = []
28
- self.previous_states = [:cart]
29
- self.removed_transitions = []
30
-
31
- # Build the checkout flow using the checkout_flow defined either
32
- # within the Order class, or a decorator for that class.
33
- #
34
- # This method may be called multiple times depending on if the
35
- # checkout_flow is re-defined in a decorator or not.
36
- instance_eval(&checkout_flow)
37
-
38
- klass = self
39
-
40
- # To avoid multiple occurrences of the same transition being defined
41
- # On first definition, state_machines will not be defined
42
- state_machines.clear if respond_to?(:state_machines)
43
- state_machine :state, initial: :cart, use_transactions: false do
44
- klass.next_event_transitions.each { |state| transition(state.merge(on: :next)) }
45
-
46
- # Persist the state on the order
47
- after_transition do |order, transition|
48
- order.state = order.state
49
- order.state_changes.create(
50
- previous_state: transition.from,
51
- next_state: transition.to,
52
- name: 'order',
53
- user_id: order.user_id
54
- )
55
- order.save
56
- end
57
-
58
- event :cancel do
59
- transition to: :canceled, if: :allow_cancel?
60
- end
61
-
62
- event :return do
63
- transition to: :returned, from: [:returned, :complete, :awaiting_return, :canceled], if: :all_inventory_units_returned?
64
- end
65
-
66
- event :resume do
67
- transition to: :resumed, from: :canceled, if: :canceled?
68
- end
69
-
70
- event :authorize_return do
71
- transition to: :awaiting_return
72
- end
73
-
74
- event :complete do
75
- transition to: :complete, from: :confirm
76
- end
77
-
78
- if states[:payment]
79
- event :payment_failed do
80
- transition to: :payment, from: :confirm
81
- end
82
-
83
- after_transition to: :complete, do: :add_payment_sources_to_wallet
84
- before_transition to: :payment, do: :add_default_payment_from_wallet
85
- before_transition to: :payment, do: :ensure_billing_address
86
-
87
- before_transition to: :confirm, do: :add_store_credit_payments
88
-
89
- # see also process_payments_before_complete below which needs to
90
- # be added in the correct sequence.
91
- end
92
-
93
- before_transition from: :cart, do: :ensure_line_items_present
94
-
95
- if states[:address]
96
- before_transition to: :address, do: :assign_default_user_addresses
97
- before_transition from: :address, do: :persist_user_address!
98
- end
99
-
100
- if states[:delivery]
101
- before_transition to: :delivery, do: :ensure_shipping_address
102
- before_transition to: :delivery, do: :create_proposed_shipments
103
- before_transition to: :delivery, do: :ensure_available_shipping_rates
104
- before_transition from: :delivery, do: :apply_shipping_promotions
105
- end
106
-
107
- before_transition to: :resumed, do: :ensure_line_item_variants_are_not_deleted
108
- before_transition to: :resumed, do: :validate_line_item_availability
109
-
110
- # Sequence of before_transition to: :complete
111
- # calls matter so that we do not process payments
112
- # until validations have passed
113
- before_transition to: :complete, do: :validate_line_item_availability
114
- before_transition to: :complete, do: :ensure_promotions_eligible
115
- before_transition to: :complete, do: :ensure_line_item_variants_are_not_deleted
116
- before_transition to: :complete, do: :ensure_inventory_units
117
- if states[:payment]
118
- before_transition to: :complete, do: :process_payments_before_complete
119
- end
120
-
121
- after_transition to: :complete, do: :finalize!
122
- after_transition to: :resumed, do: :after_resume
123
- after_transition to: :canceled, do: :after_cancel
124
-
125
- after_transition from: any - :cart, to: any - [:confirm, :complete] do |order|
126
- order.recalculate
127
- end
128
-
129
- after_transition do |order, transition|
130
- order.logger.debug "Order #{order.number} transitioned from #{transition.from} to #{transition.to} via #{transition.event}"
131
- end
132
-
133
- after_failure do |order, transition|
134
- order.logger.debug "Order #{order.number} halted transition on event #{transition.event} state #{transition.from}: #{order.errors.full_messages.join}"
135
- end
136
- end
137
- end
138
-
139
- def go_to_state(name, options = {})
140
- checkout_steps[name] = options
141
- previous_states.each do |state|
142
- add_transition({ from: state, to: name }.merge(options))
143
- end
144
- if options[:if]
145
- previous_states << name
146
- else
147
- self.previous_states = [name]
148
- end
149
- end
150
-
151
- def insert_checkout_step(name, options = {})
152
- before = options.delete(:before)
153
- after = options.delete(:after) unless before
154
- after = checkout_steps.keys.last unless before || after
155
-
156
- cloned_steps = checkout_steps.clone
157
- cloned_removed_transitions = removed_transitions.clone
158
- checkout_flow do
159
- cloned_steps.each_pair do |key, value|
160
- go_to_state(name, options) if key == before
161
- go_to_state(key, value)
162
- go_to_state(name, options) if key == after
163
- end
164
- cloned_removed_transitions.each do |transition|
165
- remove_transition(transition)
166
- end
167
- end
168
- end
169
-
170
- def remove_checkout_step(name)
171
- cloned_steps = checkout_steps.clone
172
- cloned_removed_transitions = removed_transitions.clone
173
- checkout_flow do
174
- cloned_steps.each_pair do |key, value|
175
- go_to_state(key, value) unless key == name
176
- end
177
- cloned_removed_transitions.each do |transition|
178
- remove_transition(transition)
179
- end
180
- end
181
- end
182
-
183
- def remove_transition(options = {})
184
- removed_transitions << options
185
- next_event_transitions.delete(find_transition(options))
186
- end
187
-
188
- def find_transition(options = {})
189
- return nil if options.nil? || !options.include?(:from) || !options.include?(:to)
190
- next_event_transitions.detect do |transition|
191
- transition[options[:from].to_sym] == options[:to].to_sym
192
- end
193
- end
194
-
195
- def next_event_transitions
196
- @next_event_transitions ||= []
197
- end
198
-
199
- def checkout_steps
200
- @checkout_steps ||= {}
201
- end
202
-
203
- def checkout_step_names
204
- checkout_steps.keys
205
- end
206
-
207
- def add_transition(options)
208
- next_event_transitions << { options.delete(:from) => options.delete(:to) }.merge(options)
209
- end
210
-
211
- def removed_transitions
212
- @removed_transitions ||= []
213
- end
214
- end
215
-
216
- def checkout_steps
217
- steps = self.class.checkout_steps.each_with_object([]) { |(step, options), checkout_steps|
218
- next if options.include?(:if) && !options[:if].call(self)
219
- checkout_steps << step
220
- }.map(&:to_s)
221
- # Ensure there is always a complete step
222
- steps << "complete" unless steps.include?("complete")
223
- steps
224
- end
225
-
226
- def has_checkout_step?(step)
227
- step.present? && checkout_steps.include?(step)
228
- end
229
-
230
- def passed_checkout_step?(step)
231
- has_checkout_step?(step) && checkout_step_index(step) < checkout_step_index(state)
232
- end
233
-
234
- def checkout_step_index(step)
235
- checkout_steps.index(step).to_i
236
- end
237
-
238
- def can_go_to_state?(state)
239
- return false unless has_checkout_step?(self.state) && has_checkout_step?(state)
240
- checkout_step_index(state) > checkout_step_index(self.state)
241
- end
242
- end
243
- end
244
- end
@@ -1,50 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class Spree::OrderCapturing
4
- # Allows for prioritizing payment methods in the order to be captured
5
- class_attribute :sorted_payment_method_classes
6
- self.sorted_payment_method_classes = []
7
-
8
- # Allows your store to void unused payments and release auths
9
- class_attribute :void_unused_payments
10
- self.void_unused_payments = false
11
-
12
- class_attribute :failure_handler
13
- self.failure_handler = ->(failures) { raise Spree::OrderCapturingFailures.new(failures.to_json) }
14
-
15
- def initialize(order, sorted_payment_method_classes = nil)
16
- Spree::Deprecation.warn "Spree::OrderCapturing is deprecated and will be removed without replacement. " \
17
- "Please implement your own automated capturing logic in your store."
18
- @order = order
19
- @sorted_payment_method_classes = sorted_payment_method_classes || Spree::OrderCapturing.sorted_payment_method_classes
20
- end
21
-
22
- def capture_payments
23
- return if @order.paid?
24
-
25
- Spree::OrderMutex.with_lock!(@order) do
26
- uncaptured_amount = @order.display_total.cents
27
-
28
- sorted_payments(@order).each do |payment|
29
- amount = [uncaptured_amount, payment.money.cents].min
30
-
31
- if amount > 0
32
- payment.capture!(amount)
33
- uncaptured_amount -= amount
34
- elsif Spree::OrderCapturing.void_unused_payments
35
- payment.void_transaction!
36
- end
37
- end
38
- end
39
- end
40
-
41
- private
42
-
43
- def sorted_payments(order)
44
- order.payments.pending.sort_by do |payment|
45
- [@sorted_payment_method_classes.index(payment.payment_method.class), payment.id]
46
- end
47
- end
48
- end
49
-
50
- class Spree::OrderCapturingFailures < StandardError; end
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Spree::PromotionHandler
4
- FreeShipping = ActiveSupport::Deprecation::DeprecatedConstantProxy.new(
5
- 'Spree::PromotionHandler::FreeShipping',
6
- 'Spree::PromotionHandler::Shipping',
7
- Spree::Deprecation,
8
- )
9
- end
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Spree
4
- module Tax
5
- # Used to build shipping rate taxes
6
- class ShippingRateTaxer
7
- # Build shipping rate taxes for a shipping rate
8
- # Modifies the passed-in shipping rate with associated shipping rate taxes.
9
- # @param [Spree::ShippingRate] shipping_rate The shipping rate to add taxes to.
10
- # This parameter will be modified.
11
- # @return [Spree::ShippingRate] The shipping rate with associated tax objects
12
- def tax(shipping_rate)
13
- taxes = Spree::Config.shipping_rate_tax_calculator_class.new(shipping_rate.order).calculate(shipping_rate)
14
- taxes.each do |tax|
15
- shipping_rate.taxes.build(
16
- amount: tax.amount,
17
- tax_rate: tax.tax_rate
18
- )
19
- end
20
- shipping_rate
21
- end
22
- end
23
- end
24
- end
@@ -1,10 +0,0 @@
1
- // This is a manifest file that'll be compiled into including all the files listed below.
2
- // Add new JavaScript/Coffee code in separate files in this directory and they'll automatically
3
- // be included in the compiled file accessible from http://example.com/assets/application.js
4
- // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
5
- // the compiled file.
6
- //
7
- //= require jquery
8
- //= require rails-ujs
9
- //= require spree/frontend
10
- //= require_tree .
@@ -1,9 +0,0 @@
1
- /*
2
- * This is a manifest file that'll automatically include all the stylesheets available in this directory
3
- * and any sub-directories. You're free to add application-wide styles to this file and they'll appear at
4
- * the top of the compiled file, but it's generally better to create a new file per style scope.
5
- *
6
- *= require spree/frontend
7
- *= require_self
8
- *= require_tree .
9
- */
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'generators/solidus/install/install_generator'
4
-
5
- module Spree
6
- # @private
7
- class InstallGenerator < Solidus::InstallGenerator
8
- def print_deprecation_warning
9
- puts " "
10
- puts "*" * 50
11
- puts "spree:install generator is deprecated, please use solidus:install."
12
- puts " "
13
- end
14
- end
15
- end
@@ -1,41 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Solidus
4
- module Migrations
5
- class RenameGateways
6
- DEFAULT_MAPPING = {
7
- 'Spree::Gateway' => 'Spree::PaymentMethod::CreditCard',
8
- 'Spree::Gateway::Bogus' => 'Spree::PaymentMethod::BogusCreditCard',
9
- 'Spree::Gateway::BogusSimple' => 'Spree::PaymentMethod::SimpleBogusCreditCard'
10
- }
11
-
12
- attr_reader :gateway_mapping
13
-
14
- def initialize(gateway_mapping = DEFAULT_MAPPING)
15
- Spree::Deprecation.warn 'Solidus::Migrations::RenameGateways is deprecated and will be removed with Solidus 3.0.'
16
-
17
- @gateway_mapping = gateway_mapping
18
- end
19
-
20
- def up
21
- gateway_mapping.inject(0) do |count, mapping|
22
- count + update(from: mapping[0], to: mapping[1])
23
- end
24
- end
25
-
26
- def down
27
- gateway_mapping.inject(0) do |count, mapping|
28
- count + update(from: mapping[1], to: mapping[0])
29
- end
30
- end
31
-
32
- private
33
-
34
- def update(from:, to:)
35
- ActiveRecord::Base.connection.update <<-SQL.strip_heredoc
36
- UPDATE spree_payment_methods SET type = '#{to}' WHERE type = '#{from}';
37
- SQL
38
- end
39
- end
40
- end
41
- end
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Default class for deciding what the current store is, given an HTTP request
4
- # This is an extension point used in Spree::Core::ControllerHelpers::Store
5
- # Custom versions of this class must respond to a store instance method
6
- module Spree
7
- module Core
8
- class CurrentStore
9
- def initialize(request)
10
- @request = request
11
- @current_store_selector = Spree::Config.current_store_selector_class.new(request)
12
- Spree::Deprecation.warn "Using Spree::Core::CurrentStore is deprecated. Use Spree::Config.current_store_selector_class instead", caller
13
- end
14
-
15
- # Delegate store selection to Spree::Config.current_store_selector_class
16
- # Using this class is deprecated.
17
- #
18
- # @return [Spree::Store]
19
- def store
20
- @current_store_selector.store
21
- end
22
- end
23
- end
24
- end
@@ -1,41 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Spree
4
- module ParanoiaDeprecations
5
- module InstanceMethods
6
- def paranoia_destroy
7
- Spree::Deprecation.warn <<~WARN, caller
8
- Calling #destroy (or #paranoia_destroy) on a #{self.class} currently performs a soft-destroy using the paranoia gem.
9
- In Solidus 3.0, paranoia will be removed, and this will perform a HARD destroy instead. To continue soft-deleting, use #discard instead.
10
- WARN
11
- super
12
- end
13
-
14
- def paranoia_delete
15
- Spree::Deprecation.warn <<~WARN, caller
16
- Calling #delete (or #paranoia_delete) on a #{self.class} currently performs a soft-destroy using the paranoia gem.
17
- In Solidus 3.0, paranoia will be removed, and this will perform a HARD destroy instead. To continue soft-deleting, use #discard instead.
18
- WARN
19
- super
20
- end
21
- end
22
-
23
- module ClassMethods
24
- def with_deleted
25
- Spree::Deprecation.warn <<~WARN, caller
26
- #{self}.with_deleted has been deprecated. Use #{self}.with_discarded instead.
27
- In Solidus 3.0, paranoia will be removed, and this method will be replaced by #{self}.with_discarded.
28
- WARN
29
- super
30
- end
31
-
32
- def only_deleted
33
- Spree::Deprecation.warn <<~WARN, caller
34
- #{self}.only_deleted has been deprecated. Use #{self}.discarded instead.
35
- In Solidus 3.0, paranoia will be removed, and this method will be replaced by #{self}.discarded.
36
- WARN
37
- super
38
- end
39
- end
40
- end
41
- end
@@ -1,12 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Spree
4
- module Promo
5
- Environment =
6
- ActiveSupport::Deprecation::DeprecatedConstantProxy.new(
7
- 'Spree::Promo::Environment',
8
- 'Spree::Core::Environment::Promotions',
9
- Spree::Deprecation
10
- )
11
- end
12
- end
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- Spree::Deprecation.warn "BarAbility is deprecated. Use stub_authorization! instead"
4
-
5
- # Fake ability for testing administration
6
- # @private
7
- class BarAbility
8
- include CanCan::Ability
9
-
10
- def initialize(user)
11
- user ||= Spree::User.new
12
- if user.has_spree_role? 'bar'
13
- # allow dispatch to :admin, :index, and :show on Spree::Order
14
- can [:admin, :index, :show], Spree::Order
15
- # allow dispatch to :index, :show, :create and :update shipments on the admin
16
- can [:admin, :manage], Spree::Shipment
17
- end
18
- end
19
- end