spree_core 3.6.6 → 3.7.0.rc1

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 (218) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/spree.js +60 -0
  3. data/app/finders/spree/countries/find.rb +31 -0
  4. data/app/finders/spree/credit_cards/find.rb +12 -0
  5. data/app/finders/spree/line_items/find_by_variant.rb +13 -0
  6. data/app/finders/spree/orders/find_current.rb +34 -0
  7. data/app/finders/spree/products/find.rb +93 -0
  8. data/app/finders/spree/taxons/find.rb +79 -0
  9. data/app/helpers/spree/base_helper.rb +7 -3
  10. data/app/helpers/spree/products_helper.rb +2 -1
  11. data/app/models/concerns/spree/adjustment_source.rb +11 -6
  12. data/app/models/concerns/spree/user_address.rb +2 -2
  13. data/app/models/concerns/spree/vat_price_calculation.rb +2 -1
  14. data/app/models/spree/ability.rb +2 -2
  15. data/app/models/spree/address.rb +23 -14
  16. data/app/models/spree/adjustable/adjustments_updater.rb +1 -1
  17. data/app/models/spree/adjustable/promotion_accumulator.rb +2 -1
  18. data/app/models/spree/adjustment.rb +18 -3
  19. data/app/models/spree/asset/support/active_storage.rb +1 -1
  20. data/app/models/spree/calculator.rb +1 -4
  21. data/app/models/spree/calculator/flexi_rate.rb +8 -11
  22. data/app/models/spree/calculator/returns/default_refund_amount.rb +3 -1
  23. data/app/models/spree/calculator/shipping/flexi_rate.rb +13 -13
  24. data/app/models/spree/country.rb +4 -0
  25. data/app/models/spree/credit_card.rb +8 -2
  26. data/app/models/spree/customer_return.rb +1 -0
  27. data/app/models/spree/fulfilment_changer.rb +117 -0
  28. data/app/models/spree/gateway.rb +1 -0
  29. data/app/models/spree/gateway/bogus.rb +3 -2
  30. data/app/models/spree/image.rb +13 -0
  31. data/app/models/spree/image/configuration/active_storage.rb +3 -3
  32. data/app/models/spree/inventory_unit.rb +1 -1
  33. data/app/models/spree/line_item.rb +3 -2
  34. data/app/models/spree/order.rb +72 -28
  35. data/app/models/spree/order/checkout.rb +10 -0
  36. data/app/models/spree/order/store_credit.rb +14 -35
  37. data/app/models/spree/order_contents.rb +22 -118
  38. data/app/models/spree/order_inventory.rb +6 -2
  39. data/app/models/spree/order_merger.rb +1 -3
  40. data/app/models/spree/order_promotion.rb +10 -0
  41. data/app/models/spree/order_updater.rb +11 -8
  42. data/app/models/spree/payment.rb +9 -3
  43. data/app/models/spree/payment/processing.rb +4 -4
  44. data/app/models/spree/preferences/store.rb +3 -3
  45. data/app/models/spree/product.rb +32 -0
  46. data/app/models/spree/product/scopes.rb +13 -34
  47. data/app/models/spree/product_property.rb +1 -1
  48. data/app/models/spree/promotion.rb +2 -0
  49. data/app/models/spree/promotion/actions/create_adjustment.rb +6 -1
  50. data/app/models/spree/promotion/actions/create_item_adjustments.rb +10 -2
  51. data/app/models/spree/promotion/actions/create_line_items.rb +3 -2
  52. data/app/models/spree/promotion/actions/free_shipping.rb +1 -0
  53. data/app/models/spree/promotion/rules/item_total.rb +2 -2
  54. data/app/models/spree/promotion_handler/coupon.rb +10 -6
  55. data/app/models/spree/promotion_handler/page.rb +1 -1
  56. data/app/models/spree/promotion_handler/promotion_duplicator.rb +4 -4
  57. data/app/models/spree/refund.rb +1 -1
  58. data/app/models/spree/reimbursement/reimbursement_type_engine.rb +1 -0
  59. data/app/models/spree/reimbursement_tax_calculator.rb +2 -2
  60. data/app/models/spree/return_item.rb +7 -4
  61. data/app/models/spree/return_item/eligibility_validator/default.rb +6 -6
  62. data/app/models/spree/return_item/exchange_variant_eligibility/same_product.rb +1 -1
  63. data/app/models/spree/shipment.rb +27 -34
  64. data/app/models/spree/shipping_method.rb +2 -0
  65. data/app/models/spree/shipping_rate.rb +31 -16
  66. data/app/models/spree/stock/adjuster.rb +1 -0
  67. data/app/models/spree/stock/estimator.rb +2 -0
  68. data/app/models/spree/stock/inventory_unit_builder.rb +5 -5
  69. data/app/models/spree/stock/packer.rb +1 -0
  70. data/app/models/spree/stock/quantifier.rb +16 -4
  71. data/app/models/spree/stock_item.rb +1 -0
  72. data/app/models/spree/stock_location.rb +1 -1
  73. data/app/models/spree/stock_movement.rb +1 -0
  74. data/app/models/spree/stock_transfer.rb +1 -1
  75. data/app/models/spree/store_credit.rb +5 -10
  76. data/app/models/spree/tax_rate.rb +3 -0
  77. data/app/models/spree/taxon.rb +2 -2
  78. data/app/models/spree/taxon_image.rb +18 -0
  79. data/app/models/spree/{taxon_icon → taxon_image}/configuration/active_storage.rb +2 -2
  80. data/app/models/spree/{taxon_icon → taxon_image}/configuration/paperclip.rb +1 -1
  81. data/app/models/spree/variant.rb +28 -2
  82. data/app/models/spree/zone.rb +5 -5
  83. data/app/paginators/spree/shared/paginate.rb +19 -0
  84. data/app/services/spree/cart/add_item.rb +43 -0
  85. data/app/services/spree/cart/create.rb +21 -0
  86. data/app/services/spree/cart/recalculate.rb +32 -0
  87. data/app/services/spree/cart/remove_item.rb +37 -0
  88. data/app/services/spree/cart/remove_line_item.rb +16 -0
  89. data/app/services/spree/cart/set_quantity.rb +22 -0
  90. data/app/services/spree/cart/update.rb +37 -0
  91. data/app/services/spree/checkout/add_store_credit.rb +51 -0
  92. data/app/services/spree/checkout/advance.rb +18 -0
  93. data/app/services/spree/checkout/complete.rb +23 -0
  94. data/app/services/spree/checkout/get_shipping_rates.rb +48 -0
  95. data/app/services/spree/checkout/next.rb +13 -0
  96. data/app/services/spree/checkout/remove_store_credit.rb +17 -0
  97. data/app/services/spree/checkout/update.rb +13 -0
  98. data/app/services/spree/compare_line_items.rb +21 -0
  99. data/app/services/spree/generate_token.rb +20 -0
  100. data/app/sorters/spree/products/sort.rb +58 -0
  101. data/config/locales/en.yml +20 -1
  102. data/db/default/spree/countries.rb +1 -1
  103. data/db/default/spree/default_reimbursement_type.rb +1 -1
  104. data/db/default/spree/roles.rb +2 -2
  105. data/db/default/spree/states.rb +2 -1
  106. data/db/default/spree/stores.rb +1 -1
  107. data/db/default/spree/zones.rb +5 -6
  108. data/db/migrate/20120831092320_spree_one_two.rb +36 -36
  109. data/db/migrate/20120831092359_spree_promo_one_two.rb +1 -1
  110. data/db/migrate/20130211190146_create_spree_stock_items.rb +1 -1
  111. data/db/migrate/20130211191120_create_spree_stock_locations.rb +1 -1
  112. data/db/migrate/20130301162924_create_shipping_method_categories.rb +1 -1
  113. data/db/migrate/20130304162240_create_spree_shipping_rates.rb +1 -1
  114. data/db/migrate/20130305143310_create_stock_movements.rb +1 -1
  115. data/db/migrate/20130418125341_create_spree_stock_transfers.rb +1 -1
  116. data/db/migrate/20140205120320_create_spree_payment_capture_events.rb +1 -1
  117. data/db/migrate/20140309023735_migrate_old_preferences.rb +5 -1
  118. data/db/migrate/20140309024355_create_spree_stores.rb +1 -1
  119. data/db/migrate/20140625214618_create_spree_refunds.rb +1 -1
  120. data/db/migrate/20140702140656_create_spree_return_authorization_inventory_unit.rb +1 -1
  121. data/db/migrate/20140713140455_create_spree_return_authorization_reasons.rb +1 -1
  122. data/db/migrate/20140713140527_create_spree_refund_reasons.rb +1 -1
  123. data/db/migrate/20140715182625_create_spree_promotion_categories.rb +1 -1
  124. data/db/migrate/20140718133010_create_spree_customer_returns.rb +1 -1
  125. data/db/migrate/20140725131539_create_spree_reimbursements.rb +1 -1
  126. data/db/migrate/20140731150017_create_spree_reimbursement_types.rb +1 -1
  127. data/db/migrate/20150118210639_create_spree_store_credits.rb +1 -1
  128. data/db/migrate/20150118211500_create_spree_store_credit_categories.rb +1 -1
  129. data/db/migrate/20150118212051_create_spree_store_credit_events.rb +1 -1
  130. data/db/migrate/20150118212101_create_spree_store_credit_types.rb +1 -1
  131. data/db/migrate/20150309161154_ensure_payments_have_numbers.rb +6 -2
  132. data/db/migrate/20180613080857_rename_guest_token_to_token_in_orders.rb +5 -0
  133. data/db/migrate/20180915160001_add_timestamps_to_spree_prices.rb +12 -0
  134. data/db/migrate/20181024100754_add_deleted_at_to_spree_credit_cards.rb +6 -0
  135. data/lib/generators/spree/custom_user/custom_user_generator.rb +1 -3
  136. data/lib/generators/spree/dummy/dummy_generator.rb +30 -33
  137. data/lib/generators/spree/dummy/templates/rails/database.yml +6 -1
  138. data/lib/generators/spree/dummy/templates/rails/test.rb +2 -0
  139. data/lib/generators/spree/dummy_model/dummy_model_generator.rb +1 -1
  140. data/lib/generators/spree/install/install_generator.rb +2 -1
  141. data/lib/spree/core.rb +2 -4
  142. data/lib/spree/core/controller_helpers/auth.rb +15 -5
  143. data/lib/spree/core/controller_helpers/common.rb +0 -11
  144. data/lib/spree/core/controller_helpers/order.rb +6 -6
  145. data/lib/spree/core/controller_helpers/respond_with.rb +3 -1
  146. data/lib/spree/core/controller_helpers/strong_parameters.rb +1 -0
  147. data/lib/spree/core/engine.rb +9 -3
  148. data/lib/spree/core/importer/order.rb +8 -12
  149. data/lib/spree/core/product_duplicator.rb +6 -1
  150. data/lib/spree/core/product_filters.rb +15 -14
  151. data/lib/spree/core/query_filters.rb +11 -0
  152. data/lib/spree/core/query_filters/comparable.rb +46 -0
  153. data/lib/spree/core/query_filters/date.rb +8 -0
  154. data/lib/spree/core/query_filters/number.rb +8 -0
  155. data/lib/spree/core/query_filters/text.rb +32 -0
  156. data/lib/spree/core/token_generator.rb +2 -2
  157. data/lib/spree/core/version.rb +1 -1
  158. data/lib/spree/i18n.rb +1 -1
  159. data/lib/spree/migrations.rb +2 -0
  160. data/lib/spree/money.rb +12 -12
  161. data/lib/spree/permitted_attributes.rb +11 -6
  162. data/lib/spree/service_module.rb +98 -0
  163. data/lib/spree/testing_support/capybara_config.rb +20 -0
  164. data/lib/spree/testing_support/capybara_ext.rb +6 -3
  165. data/lib/spree/testing_support/factories.rb +1 -1
  166. data/lib/spree/testing_support/factories/address_factory.rb +10 -9
  167. data/lib/spree/testing_support/factories/adjustment_factory.rb +8 -6
  168. data/lib/spree/testing_support/factories/country_factory.rb +4 -4
  169. data/lib/spree/testing_support/factories/credit_card_factory.rb +7 -5
  170. data/lib/spree/testing_support/factories/customer_return_factory.rb +1 -1
  171. data/lib/spree/testing_support/factories/image_factory.rb +7 -1
  172. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +5 -4
  173. data/lib/spree/testing_support/factories/line_item_factory.rb +3 -2
  174. data/lib/spree/testing_support/factories/options_factory.rb +2 -3
  175. data/lib/spree/testing_support/factories/order_factory.rb +16 -12
  176. data/lib/spree/testing_support/factories/order_promotion_factory.rb +6 -0
  177. data/lib/spree/testing_support/factories/payment_factory.rb +9 -7
  178. data/lib/spree/testing_support/factories/payment_method_factory.rb +8 -8
  179. data/lib/spree/testing_support/factories/price_factory.rb +2 -2
  180. data/lib/spree/testing_support/factories/product_factory.rb +10 -10
  181. data/lib/spree/testing_support/factories/promotion_category_factory.rb +1 -1
  182. data/lib/spree/testing_support/factories/promotion_factory.rb +14 -4
  183. data/lib/spree/testing_support/factories/property_factory.rb +2 -2
  184. data/lib/spree/testing_support/factories/prototype_factory.rb +3 -3
  185. data/lib/spree/testing_support/factories/refund_factory.rb +6 -6
  186. data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
  187. data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +2 -2
  188. data/lib/spree/testing_support/factories/return_authorization_factory.rb +4 -3
  189. data/lib/spree/testing_support/factories/role_factory.rb +1 -1
  190. data/lib/spree/testing_support/factories/shipment_factory.rb +3 -3
  191. data/lib/spree/testing_support/factories/shipping_method_factory.rb +4 -4
  192. data/lib/spree/testing_support/factories/state_factory.rb +2 -5
  193. data/lib/spree/testing_support/factories/stock_factory.rb +3 -3
  194. data/lib/spree/testing_support/factories/stock_item_factory.rb +1 -1
  195. data/lib/spree/testing_support/factories/stock_location_factory.rb +7 -7
  196. data/lib/spree/testing_support/factories/stock_movement_factory.rb +3 -3
  197. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +2 -2
  198. data/lib/spree/testing_support/factories/store_credit_type_factory.rb +1 -1
  199. data/lib/spree/testing_support/factories/store_factory.rb +5 -4
  200. data/lib/spree/testing_support/factories/tax_rate_factory.rb +2 -1
  201. data/lib/spree/testing_support/factories/user_factory.rb +4 -4
  202. data/lib/spree/testing_support/factories/variant_factory.rb +15 -15
  203. data/lib/spree/testing_support/factories/zone_factory.rb +3 -3
  204. data/lib/spree/testing_support/image_helpers.rb +19 -0
  205. data/lib/tasks/core.rake +21 -4
  206. data/lib/tasks/exchanges.rake +4 -4
  207. data/spree_core.gemspec +3 -3
  208. data/vendor/assets/javascripts/fetch.umd.js +531 -0
  209. data/vendor/assets/javascripts/polyfill.min.js +1 -0
  210. metadata +50 -17
  211. data/app/assets/javascripts/spree.js.coffee +0 -59
  212. data/app/models/spree/taxon_icon.rb +0 -5
  213. data/lib/generators/spree/dummy/templates/initializers/custom_user.rb +0 -1
  214. data/lib/spree/core/environment.rb +0 -15
  215. data/lib/spree/core/environment/calculators.rb +0 -11
  216. data/lib/spree/core/environment_extension.rb +0 -28
  217. data/lib/spree/core/validators/email.rb +0 -8
  218. data/lib/spree/promo/environment.rb +0 -9
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7f5825aba5d81813afc792f9942d2f237efed04a35ade527cad5019bdbe80763
4
- data.tar.gz: 35b9884a0405608d7508b60565d445bea8736b471b4ffd9f8803ce82a822a89f
3
+ metadata.gz: 49eb4666a35ce5b88c3ce5bc92b0cf34503851edee70623f215bc674ea3d322f
4
+ data.tar.gz: cefaa50b133701b0572392a03c11bdf4544e9ca97aa0eaa34e5293cd2892336f
5
5
  SHA512:
6
- metadata.gz: a01961fb48f8f4337072ad64e1d63fbd8ab60b532631460d2effc5bf21d94881c000fc328bb0165c64eeca7443e6015820fd19d3d23252fcaf3b5ee028f49bb8
7
- data.tar.gz: 8a10210e4d35acc2d7a42d4e87e3885943b4172154d0ad100967cbaca1a0f5bc871c34f37b31c1a3b9e7a74c909c8ef9bc95cbbfc1e7b60d4f0f2de130fc7298
6
+ metadata.gz: 1d422e99c814605fe9cbb9ce7eaf3bedd80e93f6298446bd6a9b30cc8d1d3d8e8d870926222aa437bb6d58a0ec725bfb1192a0d28c48c1cadc9a97e0dd3d504d
7
+ data.tar.gz: caf99f8ededb70977b1e1eba5adcaff62a60108d62b469b82d885921539f8acc1f84528a9161d28f48f7f6ab7755e866eb34392df936904dc1aaaa29a59becf6
@@ -0,0 +1,60 @@
1
+ //= require jsuri
2
+ function Spree () {}
3
+
4
+ Spree.ready = function (callback) {
5
+ jQuery(callback)
6
+ return jQuery(document).on('page:load turbolinks:load', function () {
7
+ return callback(jQuery)
8
+ })
9
+ }
10
+
11
+ Spree.mountedAt = function () {
12
+ return window.SpreePaths.mounted_at
13
+ }
14
+
15
+ Spree.adminPath = function () {
16
+ return window.SpreePaths.admin
17
+ }
18
+
19
+ Spree.pathFor = function (path) {
20
+ var locationOrigin = (window.location.protocol + '//' + window.location.hostname) + (window.location.port ? ':' + window.location.port : '')
21
+ return this.url('' + locationOrigin + (this.mountedAt()) + path, this.url_params).toString()
22
+ }
23
+
24
+ Spree.adminPathFor = function (path) {
25
+ return this.pathFor('' + (this.adminPath()) + path)
26
+ }
27
+
28
+ Spree.url = function (uri, query) {
29
+ if (uri.path === void 0) {
30
+ // eslint-disable-next-line no-undef
31
+ uri = new Uri(uri)
32
+ }
33
+ if (query) {
34
+ $.each(query, function (key, value) {
35
+ return uri.addQueryParam(key, value)
36
+ })
37
+ }
38
+ return uri
39
+ }
40
+
41
+ Spree.ajax = function (urlOrSettings, settings) {
42
+ var url
43
+ if (typeof urlOrSettings === 'string') {
44
+ return $.ajax(Spree.url(urlOrSettings).toString(), settings)
45
+ } else {
46
+ url = urlOrSettings['url']
47
+ delete urlOrSettings['url']
48
+ return $.ajax(Spree.url(url).toString(), urlOrSettings)
49
+ }
50
+ }
51
+
52
+ Spree.routes = {
53
+ states_search: Spree.pathFor('api/v1/states'),
54
+ apply_coupon_code: function (orderId) {
55
+ return Spree.pathFor('api/v1/orders/' + orderId + '/apply_coupon_code')
56
+ },
57
+ cart: Spree.pathFor('cart')
58
+ }
59
+
60
+ Spree.url_params = {}
@@ -0,0 +1,31 @@
1
+ module Spree
2
+ module Countries
3
+ class Find
4
+ def initialize(scope, params)
5
+ @scope = scope
6
+
7
+ @shippable = String(params[:filter][:shippable]) unless params[:filter].nil?
8
+ end
9
+
10
+ def call
11
+ countries = by_shippability(scope)
12
+
13
+ countries
14
+ end
15
+
16
+ private
17
+
18
+ attr_reader :shippable, :scope
19
+
20
+ def shippable?
21
+ shippable.present?
22
+ end
23
+
24
+ def by_shippability(countries)
25
+ return countries unless shippable?
26
+
27
+ countries.joins(zones: :shipping_methods).distinct
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,12 @@
1
+ module Spree
2
+ module CreditCards
3
+ class Find
4
+ def execute(scope:, params:)
5
+ return scope.default.take if params[:id].eql?('default')
6
+ return scope.where(payment_method_id: params[:filter]['payment_method_id']) if params[:filter].present?
7
+
8
+ scope
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ module Spree
2
+ module LineItems
3
+ class FindByVariant
4
+ def execute(order:, variant:, options: {})
5
+ order.line_items.detect do |line_item|
6
+ next unless line_item.variant_id == variant.id
7
+
8
+ CompareLineItems.new.call(order: order, line_item: line_item, options: options).value
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,34 @@
1
+ module Spree
2
+ module Orders
3
+ class FindCurrent
4
+ def execute(user:, store:, **params)
5
+ params = params.merge(store_id: store.id)
6
+
7
+ order = incomplete_orders.find_by(params)
8
+
9
+ return order unless order.nil?
10
+ return if user.nil?
11
+
12
+ incomplete_orders.order(created_at: :desc).find_by(store: store, user: user)
13
+ end
14
+
15
+ private
16
+
17
+ def incomplete_orders
18
+ Spree::Order.incomplete.includes(scope_includes)
19
+ end
20
+
21
+ def scope_includes
22
+ {
23
+ line_items: [
24
+ variant: [
25
+ :images,
26
+ option_values: :option_type,
27
+ product: :product_properties,
28
+ ]
29
+ ]
30
+ }
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,93 @@
1
+ module Spree
2
+ module Products
3
+ class Find
4
+ def initialize(scope:, params:, current_currency:)
5
+ @scope = scope
6
+
7
+ @ids = String(params.dig(:filter, :ids)).split(',')
8
+ @price = String(params.dig(:filter, :price)).split(',')
9
+ @currency = params[:currency] || current_currency
10
+ @taxons = String(params.dig(:filter, :taxons)).split(',')
11
+ @name = params.dig(:filter, :name)
12
+ @options = params.dig(:filter, :options).try(:to_unsafe_hash)
13
+ end
14
+
15
+ def execute
16
+ products = by_ids(scope)
17
+ products = by_price(products)
18
+ products = by_taxons(products)
19
+ products = by_name(products)
20
+ products = by_options(products)
21
+
22
+ products
23
+ end
24
+
25
+ private
26
+
27
+ attr_reader :ids, :price, :currency, :taxons, :name, :options, :scope
28
+
29
+ def ids?
30
+ ids.present?
31
+ end
32
+
33
+ def price?
34
+ price.present?
35
+ end
36
+
37
+ def taxons?
38
+ taxons.present?
39
+ end
40
+
41
+ def name?
42
+ name.present?
43
+ end
44
+
45
+ def options?
46
+ options.present?
47
+ end
48
+
49
+ def name_matcher
50
+ Spree::Product.arel_table[:name].matches("%#{name}%")
51
+ end
52
+
53
+ def by_ids(products)
54
+ return products unless ids?
55
+
56
+ products.where(id: ids)
57
+ end
58
+
59
+ def by_price(products)
60
+ return products unless price?
61
+
62
+ products.joins(master: :default_price).
63
+ distinct.
64
+ where(
65
+ spree_prices: {
66
+ amount: price.min..price.max,
67
+ currency: currency
68
+ }
69
+ )
70
+ end
71
+
72
+ def by_taxons(products)
73
+ return products unless taxons?
74
+
75
+ products.joins(:taxons).distinct.where(spree_taxons: { id: taxons })
76
+ end
77
+
78
+ def by_name(products)
79
+ return products unless name?
80
+
81
+ products.where(name_matcher)
82
+ end
83
+
84
+ def by_options(products)
85
+ return products unless options?
86
+
87
+ options.map do |key, value|
88
+ products.with_option_value(key, value)
89
+ end.inject(:&)
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,79 @@
1
+ module Spree
2
+ module Taxons
3
+ class Find
4
+ def initialize(scope:, params:)
5
+ @scope = scope
6
+
7
+ @ids = String(params[:ids]).split(',')
8
+ @parent = params[:parent_id]
9
+ @taxonomy = params[:taxonomy_id]
10
+ @name = params[:name]
11
+ @roots = params[:roots]
12
+ end
13
+
14
+ def execute
15
+ taxons = by_ids(scope)
16
+ taxons = by_parent(taxons)
17
+ taxons = by_taxonomy(taxons)
18
+ taxons = by_roots(taxons)
19
+ taxons = by_name(taxons)
20
+
21
+ taxons
22
+ end
23
+
24
+ private
25
+
26
+ attr_reader :ids, :parent, :taxonomy, :roots, :name, :scope
27
+
28
+ def ids?
29
+ ids.present?
30
+ end
31
+
32
+ def parent?
33
+ parent.present?
34
+ end
35
+
36
+ def taxonomy?
37
+ taxonomy.present?
38
+ end
39
+
40
+ def roots?
41
+ roots.present?
42
+ end
43
+
44
+ def name?
45
+ name.present?
46
+ end
47
+
48
+ def by_ids(taxons)
49
+ return taxons unless ids?
50
+
51
+ taxons.where(id: ids)
52
+ end
53
+
54
+ def by_parent(taxons)
55
+ return taxons unless parent?
56
+
57
+ taxons.where(parent_id: parent)
58
+ end
59
+
60
+ def by_taxonomy(taxons)
61
+ return taxons unless taxonomy?
62
+
63
+ taxons.where(taxonomy_id: taxonomy)
64
+ end
65
+
66
+ def by_roots(taxons)
67
+ return taxons unless roots?
68
+
69
+ taxons.roots
70
+ end
71
+
72
+ def by_name(taxons)
73
+ return taxons unless name?
74
+
75
+ taxons.where(name: name)
76
+ end
77
+ end
78
+ end
79
+ end
@@ -80,8 +80,12 @@ module Spree
80
80
  end
81
81
 
82
82
  # human readable list of variant options
83
- def variant_options(v, _options = {})
84
- v.options_text
83
+ def variant_options(variant, _options = {})
84
+ ActiveSupport::Deprecation.warn(<<-DEPRECATION, caller)
85
+ BaseHelper#variant_options is deprecated and will be removed in Spree 4.0.
86
+ Please use Variant#options_text or LineItem#options_text
87
+ DEPRECATION
88
+ variant.options_text
85
89
  end
86
90
 
87
91
  def frontend_available?
@@ -91,7 +95,7 @@ module Spree
91
95
  private
92
96
 
93
97
  def create_product_image_tag(image, product, options, style)
94
- options.reverse_merge! alt: image.alt.blank? ? product.name : image.alt
98
+ options[:alt] = image.alt.blank? ? product.name : image.alt
95
99
  image_tag main_app.url_for(image.url(style)), options
96
100
  end
97
101
 
@@ -14,6 +14,7 @@ module Spree
14
14
  variant_amount = variant.amount_in(current_currency)
15
15
  product_amount = variant.product.amount_in(current_currency)
16
16
  return if variant_amount == product_amount || product_amount.nil?
17
+
17
18
  diff = variant.amount_in(current_currency) - product_amount
18
19
  amount = Spree::Money.new(diff.abs, currency: current_currency).to_html
19
20
  label = diff > 0 ? :add : :subtract
@@ -63,7 +64,7 @@ module Spree
63
64
 
64
65
  if product.available?
65
66
  Spree.t(:available)
66
- elsif product.available_on && product.available_on.future?
67
+ elsif product.available_on&.future?
67
68
  Spree.t(:pending_sale)
68
69
  else
69
70
  Spree.t(:no_available_date_set)
@@ -11,16 +11,21 @@ module Spree
11
11
 
12
12
  def create_adjustment(order, adjustable, included = false)
13
13
  amount = compute_amount(adjustable)
14
- return if amount == 0
15
- adjustments.new(order: order,
16
- adjustable: adjustable,
17
- label: label,
18
- amount: amount,
19
- included: included).save
14
+
15
+ return if amount.zero?
16
+
17
+ adjustments.new(
18
+ adjustable: adjustable,
19
+ amount: amount,
20
+ included: included,
21
+ label: label,
22
+ order: order
23
+ ).save
20
24
  end
21
25
 
22
26
  def create_unique_adjustment(order, adjustable)
23
27
  return if already_adjusted?(adjustable)
28
+
24
29
  create_adjustment(order, adjustable)
25
30
  end
26
31
 
@@ -15,14 +15,14 @@ module Spree
15
15
 
16
16
  def persist_order_address(order)
17
17
  b_address = bill_address || build_bill_address
18
- b_address.attributes = order.bill_address.attributes.except('id', 'updated_at', 'created_at')
18
+ b_address.attributes = order.bill_address.value_attributes
19
19
  b_address.save
20
20
  update_attributes(bill_address_id: b_address.id)
21
21
 
22
22
  # May not be present if delivery step has been removed
23
23
  if order.ship_address
24
24
  s_address = ship_address || build_ship_address
25
- s_address.attributes = order.ship_address.attributes.except('id', 'updated_at', 'created_at')
25
+ s_address.attributes = order.ship_address.value_attributes
26
26
  s_address.save
27
27
  update_attributes(ship_address_id: s_address.id)
28
28
  end
@@ -2,6 +2,7 @@ module Spree
2
2
  module VatPriceCalculation
3
3
  def gross_amount(amount, price_options)
4
4
  return amount unless outside_default_vat_zone?(price_options)
5
+
5
6
  round_to_two_places(add_foreign_vat_for(amount, price_options))
6
7
  end
7
8
 
@@ -41,7 +42,7 @@ module Spree
41
42
  end
42
43
 
43
44
  def round_to_two_places(amount)
44
- BigDecimal.new(amount.to_s).round(2, BigDecimal::ROUND_HALF_UP)
45
+ BigDecimal(amount.to_s).round(2, BigDecimal::ROUND_HALF_UP)
45
46
  end
46
47
  end
47
48
  end