solidus_core 2.9.5 → 2.10.2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of solidus_core might be problematic. Click here for more details.

Files changed (221) hide show
  1. checksums.yaml +4 -4
  2. data/app/helpers/spree/base_helper.rb +4 -4
  3. data/app/helpers/spree/products_helper.rb +2 -1
  4. data/app/jobs/spree/promotion_code_batch_job.rb +2 -2
  5. data/app/models/concerns/spree/user_address_book.rb +2 -2
  6. data/app/models/concerns/spree/user_methods.rb +2 -2
  7. data/app/models/spree/address.rb +13 -17
  8. data/app/models/spree/adjustment.rb +20 -9
  9. data/app/models/spree/asset.rb +1 -1
  10. data/app/models/spree/base.rb +0 -2
  11. data/app/models/spree/calculator.rb +1 -1
  12. data/app/models/spree/calculator/price_sack.rb +1 -1
  13. data/app/models/spree/calculator/shipping/flexi_rate.rb +2 -2
  14. data/app/models/spree/calculator/tiered_flat_rate.rb +5 -5
  15. data/app/models/spree/calculator/tiered_percent.rb +6 -6
  16. data/app/models/spree/carton.rb +3 -3
  17. data/app/models/spree/classification.rb +2 -2
  18. data/app/models/spree/credit_card.rb +4 -4
  19. data/app/models/spree/customer_return.rb +1 -1
  20. data/app/models/spree/image/paperclip_attachment.rb +1 -1
  21. data/app/models/spree/inventory_unit.rb +5 -23
  22. data/app/models/spree/line_item.rb +4 -4
  23. data/app/models/spree/line_item_action.rb +2 -2
  24. data/app/models/spree/log_entry.rb +1 -1
  25. data/app/models/spree/option_value.rb +1 -1
  26. data/app/models/spree/option_values_variant.rb +2 -2
  27. data/app/models/spree/order.rb +11 -27
  28. data/app/models/spree/order/checkout.rb +1 -1
  29. data/app/models/spree/order/payments.rb +2 -2
  30. data/app/models/spree/order_cancellations.rb +1 -1
  31. data/app/models/spree/order_capturing.rb +2 -2
  32. data/app/models/spree/order_contents.rb +2 -2
  33. data/app/models/spree/order_mutex.rb +1 -1
  34. data/app/models/spree/order_promotion.rb +3 -3
  35. data/app/models/spree/order_shipping.rb +1 -1
  36. data/app/models/spree/order_taxation.rb +3 -3
  37. data/app/models/spree/payment.rb +8 -45
  38. data/app/models/spree/payment/processing.rb +3 -3
  39. data/app/models/spree/payment_capture_event.rb +1 -1
  40. data/app/models/spree/payment_method.rb +5 -2
  41. data/app/models/spree/payment_method/bogus_credit_card.rb +1 -1
  42. data/app/models/spree/payment_source.rb +1 -1
  43. data/app/models/spree/price.rb +2 -2
  44. data/app/models/spree/product.rb +5 -5
  45. data/app/models/spree/product/scopes.rb +218 -210
  46. data/app/models/spree/product_option_type.rb +2 -2
  47. data/app/models/spree/product_promotion_rule.rb +2 -2
  48. data/app/models/spree/product_property.rb +2 -2
  49. data/app/models/spree/promotion.rb +28 -13
  50. data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +1 -1
  51. data/app/models/spree/promotion/actions/free_shipping.rb +1 -1
  52. data/app/models/spree/promotion/rules/option_value.rb +2 -2
  53. data/app/models/spree/promotion/rules/product.rb +3 -3
  54. data/app/models/spree/promotion_action.rb +2 -2
  55. data/app/models/spree/promotion_chooser.rb +2 -2
  56. data/app/models/spree/promotion_code.rb +11 -10
  57. data/app/models/spree/promotion_code/batch_builder.rb +3 -3
  58. data/app/models/spree/promotion_code_batch.rb +1 -1
  59. data/app/models/spree/promotion_rule.rb +2 -2
  60. data/app/models/spree/promotion_rule_role.rb +2 -2
  61. data/app/models/spree/promotion_rule_store.rb +2 -2
  62. data/app/models/spree/promotion_rule_taxon.rb +2 -2
  63. data/app/models/spree/promotion_rule_user.rb +2 -2
  64. data/app/models/spree/refund.rb +5 -5
  65. data/app/models/spree/reimbursement.rb +5 -13
  66. data/app/models/spree/reimbursement/credit.rb +2 -2
  67. data/app/models/spree/reimbursement/reimbursement_type_engine.rb +1 -1
  68. data/app/models/spree/reimbursement_tax_calculator.rb +1 -1
  69. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +2 -2
  70. data/app/models/spree/return_authorization.rb +4 -10
  71. data/app/models/spree/return_item.rb +13 -52
  72. data/app/models/spree/return_item/eligibility_validator/default.rb +1 -1
  73. data/app/models/spree/role_user.rb +2 -2
  74. data/app/models/spree/shipment.rb +7 -41
  75. data/app/models/spree/shipping_calculator.rb +0 -4
  76. data/app/models/spree/shipping_manifest.rb +3 -3
  77. data/app/models/spree/shipping_method.rb +2 -2
  78. data/app/models/spree/shipping_method_category.rb +2 -2
  79. data/app/models/spree/shipping_method_stock_location.rb +2 -2
  80. data/app/models/spree/shipping_method_zone.rb +2 -2
  81. data/app/models/spree/shipping_rate.rb +2 -2
  82. data/app/models/spree/shipping_rate_tax.rb +2 -2
  83. data/app/models/spree/state.rb +2 -2
  84. data/app/models/spree/state_change.rb +2 -2
  85. data/app/models/spree/stock/differentiator.rb +1 -1
  86. data/app/models/spree/stock/package.rb +1 -1
  87. data/app/models/spree/stock_item.rb +3 -3
  88. data/app/models/spree/stock_location.rb +2 -2
  89. data/app/models/spree/stock_movement.rb +2 -2
  90. data/app/models/spree/stock_quantities.rb +13 -12
  91. data/app/models/spree/store_credit.rb +8 -8
  92. data/app/models/spree/store_credit_event.rb +3 -3
  93. data/app/models/spree/store_payment_method.rb +2 -2
  94. data/app/models/spree/store_shipping_method.rb +2 -2
  95. data/app/models/spree/tax_calculator/default.rb +0 -4
  96. data/app/models/spree/tax_calculator/shipping_rate.rb +0 -3
  97. data/app/models/spree/tax_rate.rb +5 -1
  98. data/app/models/spree/tax_rate_tax_category.rb +2 -2
  99. data/app/models/spree/taxon/paperclip_attachment.rb +13 -0
  100. data/app/models/spree/unit_cancel.rb +5 -2
  101. data/app/models/spree/user_address.rb +2 -2
  102. data/app/models/spree/user_last_url_storer.rb +46 -0
  103. data/app/models/spree/user_last_url_storer/rules/authentication_rule.rb +36 -0
  104. data/app/models/spree/user_stock_location.rb +2 -2
  105. data/app/models/spree/variant.rb +10 -10
  106. data/app/models/spree/variant/scopes.rb +37 -29
  107. data/app/models/spree/variant_property_rule.rb +1 -1
  108. data/app/models/spree/variant_property_rule_condition.rb +2 -2
  109. data/app/models/spree/variant_property_rule_value.rb +2 -2
  110. data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +1 -1
  111. data/app/models/spree/wallet_payment_source.rb +2 -2
  112. data/app/models/spree/zone.rb +1 -1
  113. data/app/models/spree/zone_member.rb +2 -2
  114. data/config/initializers/inflections.rb +5 -0
  115. data/config/initializers/money.rb +2 -0
  116. data/config/locales/en.yml +34 -3
  117. data/lib/generators/spree/dummy/dummy_generator.rb +2 -0
  118. data/lib/generators/spree/install/templates/config/initializers/spree.rb.tt +8 -0
  119. data/lib/spree/app_configuration.rb +18 -3
  120. data/lib/spree/core.rb +12 -0
  121. data/lib/spree/core/controller_helpers/auth.rb +1 -13
  122. data/lib/spree/core/controller_helpers/strong_parameters.rb +21 -7
  123. data/lib/spree/core/engine.rb +2 -2
  124. data/lib/spree/core/importer/order.rb +29 -28
  125. data/lib/spree/core/importer/product.rb +2 -2
  126. data/lib/spree/core/product_filters.rb +15 -15
  127. data/lib/spree/core/role_configuration.rb +2 -2
  128. data/lib/spree/core/search/variant.rb +1 -1
  129. data/lib/spree/core/state_machines.rb +78 -0
  130. data/lib/spree/core/state_machines/inventory_unit.rb +42 -0
  131. data/lib/spree/core/state_machines/payment.rb +61 -0
  132. data/lib/spree/core/state_machines/reimbursement.rb +33 -0
  133. data/lib/spree/core/state_machines/return_authorization.rb +32 -0
  134. data/lib/spree/core/state_machines/return_item/acceptance_status.rb +51 -0
  135. data/lib/spree/core/state_machines/return_item/reception_status.rb +42 -0
  136. data/lib/spree/core/state_machines/shipment.rb +58 -0
  137. data/lib/spree/core/stock_configuration.rb +1 -0
  138. data/lib/spree/core/validators/email.rb +1 -8
  139. data/lib/spree/core/version.rb +1 -1
  140. data/lib/spree/money.rb +2 -2
  141. data/lib/spree/permission_sets/default_customer.rb +1 -1
  142. data/lib/spree/permission_sets/user_management.rb +3 -0
  143. data/lib/spree/permitted_attributes.rb +78 -9
  144. data/lib/spree/preferences/static_model_preferences.rb +2 -2
  145. data/lib/spree/testing_support/dummy_app.rb +4 -1
  146. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +6 -2
  147. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +8 -1
  148. data/lib/spree/testing_support/factories/promotion_factory.rb +7 -0
  149. data/lib/spree/testing_support/factories/stock_package_factory.rb +1 -1
  150. data/lib/spree/testing_support/factories/user_factory.rb +4 -1
  151. data/solidus_core.gemspec +6 -6
  152. data/spec/lib/search/base_spec.rb +5 -1
  153. data/spec/lib/search/variant_spec.rb +1 -1
  154. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +8 -1
  155. data/spec/lib/spree/core/stock_configuration_spec.rb +36 -0
  156. data/spec/lib/spree/core/validators/email_spec.rb +18 -18
  157. data/spec/lib/spree/event_spec.rb +15 -3
  158. data/spec/lib/spree/permitted_attributes_spec.rb +41 -0
  159. data/spec/models/spree/ability_spec.rb +1 -1
  160. data/spec/models/spree/address_spec.rb +23 -0
  161. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +1 -1
  162. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +1 -1
  163. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +1 -1
  164. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +2 -2
  165. data/spec/models/spree/calculator/shipping/per_item_spec.rb +1 -1
  166. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +24 -15
  167. data/spec/models/spree/carton_spec.rb +10 -2
  168. data/spec/models/spree/classification_spec.rb +21 -9
  169. data/spec/models/spree/concerns/user_address_book_spec.rb +4 -4
  170. data/spec/models/spree/concerns/user_methods_spec.rb +5 -4
  171. data/spec/models/spree/credit_card_spec.rb +2 -2
  172. data/spec/models/spree/customer_return_spec.rb +1 -1
  173. data/spec/models/spree/order/checkout_spec.rb +1 -1
  174. data/spec/models/spree/order/outstanding_balance_integration_spec.rb +5 -5
  175. data/spec/models/spree/order/payment_spec.rb +1 -1
  176. data/spec/models/spree/order_contents_spec.rb +1 -1
  177. data/spec/models/spree/order_inventory_spec.rb +3 -3
  178. data/spec/models/spree/order_merger_spec.rb +3 -3
  179. data/spec/models/spree/order_shipping_spec.rb +1 -1
  180. data/spec/models/spree/order_spec.rb +14 -21
  181. data/spec/models/spree/order_updater_spec.rb +4 -3
  182. data/spec/models/spree/payment_create_spec.rb +6 -16
  183. data/spec/models/spree/payment_spec.rb +12 -12
  184. data/spec/models/spree/permission_sets/user_management_spec.rb +2 -0
  185. data/spec/models/spree/preference_spec.rb +4 -4
  186. data/spec/models/spree/preferences/preferable_spec.rb +3 -3
  187. data/spec/models/spree/preferences/statically_configurable_spec.rb +2 -2
  188. data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +2 -2
  189. data/spec/models/spree/promotion/rules/nth_order_spec.rb +2 -2
  190. data/spec/models/spree/promotion/rules/taxon_spec.rb +1 -0
  191. data/spec/models/spree/promotion_rule_spec.rb +6 -6
  192. data/spec/models/spree/promotion_spec.rb +71 -54
  193. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +3 -3
  194. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +1 -1
  195. data/spec/models/spree/return_item_spec.rb +11 -11
  196. data/spec/models/spree/returns_calculator_spec.rb +2 -2
  197. data/spec/models/spree/shipment_spec.rb +6 -6
  198. data/spec/models/spree/shipping_calculator_spec.rb +1 -13
  199. data/spec/models/spree/shipping_method_spec.rb +32 -0
  200. data/spec/models/spree/stock/availability_validator_spec.rb +2 -2
  201. data/spec/models/spree/stock/differentiator_spec.rb +2 -2
  202. data/spec/models/spree/stock/estimator_spec.rb +3 -3
  203. data/spec/models/spree/stock/inventory_units_finalizer_spec.rb +4 -4
  204. data/spec/models/spree/stock/package_spec.rb +28 -28
  205. data/spec/models/spree/stock/quantifier_spec.rb +2 -2
  206. data/spec/models/spree/stock/simple_coordinator_spec.rb +11 -11
  207. data/spec/models/spree/stock/splitter/base_spec.rb +4 -4
  208. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +7 -7
  209. data/spec/models/spree/stock_quantities_spec.rb +1 -1
  210. data/spec/models/spree/store_credit_spec.rb +8 -8
  211. data/spec/models/spree/tax_category_spec.rb +1 -1
  212. data/spec/models/spree/tax_rate_spec.rb +1 -0
  213. data/spec/models/spree/taxon_spec.rb +2 -2
  214. data/spec/models/spree/taxons/paperclip_attachment_spec.rb +29 -0
  215. data/spec/models/spree/unit_cancel_spec.rb +5 -0
  216. data/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb +31 -0
  217. data/spec/models/spree/user_last_url_storer_spec.rb +60 -0
  218. data/spec/models/spree/user_spec.rb +3 -3
  219. metadata +46 -39
  220. data/spec/migrate/20190106184413_remove_code_from_spree_promotions_spec.rb +0 -148
  221. data/spec/models/spree/order/updating_spec.rb +0 -18
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9cd14f61552d6f5bd5cd26fe9d1cffbfa4cd8b0d20d05bd0e625d5f3f81292f2
4
- data.tar.gz: ca164e906fcd1d66f41d849636041cc6d95095c3a5d53ca1191599076409612c
3
+ metadata.gz: '086d861b411b9e1e18910a57fed0d2f18f375657d409a7b1135af8a33318ba67'
4
+ data.tar.gz: 73a855a124bdd7e7a4fa433d7b214746cf5dca67de4a172d5b0c3c399d63a955
5
5
  SHA512:
6
- metadata.gz: f0f858916f2a25e85c54ede40027e1290885ebb809ec4697592c48007b913bf8aee6bb64f6053aa596d1c721f6c3f1a296c4bce855c5df97262fe42464e4de62
7
- data.tar.gz: 53728500b9dcdc3e130271ad9733e80ab25468eb15f112d81fa61d1a5bf93f16e7162e0aa2bc5f662f8fcc183ee636d2f977552c756bedb85de81096e07e313e
6
+ metadata.gz: bfcdb0ec66a4e56859f14c5c0c544d51c7cc033fce8a6eaf9daf94587d10a412ee602cbc63a488a41ce521e8fd03a7adac6c91c8a379d81ef2dcad19ce913416
7
+ data.tar.gz: 932832d98cac34c0c9c873f47a70a0b97896f8e467a0f8acc5f21b49d99894b82d2d3e8168b53ae9f2147c2e42e06e585e5dd6ab8698fea096e81ff81990ef1b
@@ -79,16 +79,16 @@ module Spree
79
79
 
80
80
  crumbs << [t('spree.products'), products_path]
81
81
  if taxon
82
- crumbs += taxon.ancestors.collect { |a| [a.name, spree.nested_taxons_path(a.permalink)] } unless taxon.ancestors.empty?
82
+ crumbs += taxon.ancestors.collect { |ancestor| [ancestor.name, spree.nested_taxons_path(ancestor.permalink)] } unless taxon.ancestors.empty?
83
83
  crumbs << [taxon.name, spree.nested_taxons_path(taxon.permalink)]
84
84
  end
85
85
 
86
86
  separator = raw(separator)
87
87
 
88
- items = crumbs.each_with_index.collect do |crumb, i|
88
+ items = crumbs.each_with_index.collect do |crumb, index|
89
89
  content_tag(:li, itemprop: 'itemListElement', itemscope: '', itemtype: 'https://schema.org/ListItem') do
90
90
  link_to(crumb.last, itemprop: 'item') do
91
- content_tag(:span, crumb.first, itemprop: 'name') + tag('meta', { itemprop: 'position', content: (i + 1).to_s }, false, false)
91
+ content_tag(:span, crumb.first, itemprop: 'name') + tag('meta', { itemprop: 'position', content: (index + 1).to_s }, false, false)
92
92
  end + (crumb == crumbs.last ? '' : separator)
93
93
  end
94
94
  end
@@ -122,7 +122,7 @@ module Spree
122
122
  countries.collect do |country|
123
123
  country.name = country_names.fetch(country.iso, country.name)
124
124
  country
125
- end.sort_by { |c| c.name.parameterize }
125
+ end.sort_by { |country| country.name.parameterize }
126
126
  end
127
127
 
128
128
  def seo_url(taxon)
@@ -36,7 +36,8 @@ module Spree
36
36
  def variant_full_price(variant)
37
37
  return if variant.product.variants
38
38
  .with_prices(current_pricing_options)
39
- .all? { |v| v.price_same_as_master?(current_pricing_options) }
39
+ .all? { |variant_with_prices| variant_with_prices.price_same_as_master?(current_pricing_options) }
40
+
40
41
  variant.price_for(current_pricing_options).to_html
41
42
  end
42
43
 
@@ -14,13 +14,13 @@ module Spree
14
14
  .promotion_code_batch_finished(promotion_code_batch)
15
15
  .deliver_now
16
16
  end
17
- rescue StandardError => e
17
+ rescue StandardError => error
18
18
  if promotion_code_batch.email?
19
19
  Spree::Config.promotion_code_batch_mailer_class
20
20
  .promotion_code_batch_errored(promotion_code_batch)
21
21
  .deliver_now
22
22
  end
23
- raise e
23
+ raise error
24
24
  end
25
25
  end
26
26
  end
@@ -25,7 +25,7 @@ module Spree
25
25
  has_many :addresses, through: :user_addresses
26
26
 
27
27
  # bill_address is only minimally used now, but we can't get rid of it without a major version release
28
- belongs_to :bill_address, class_name: 'Spree::Address'
28
+ belongs_to :bill_address, class_name: 'Spree::Address', optional: true
29
29
 
30
30
  has_one :default_user_address, ->{ default }, class_name: 'Spree::UserAddress', foreign_key: 'user_id'
31
31
  has_one :default_address, through: :default_user_address, source: :address
@@ -130,7 +130,7 @@ module Spree
130
130
  def remove_from_address_book(address_id)
131
131
  user_address = user_addresses.find_by(address_id: address_id)
132
132
  if user_address
133
- user_address.update_attributes(archived: true, default: false)
133
+ user_address.update(archived: true, default: false)
134
134
  else
135
135
  false
136
136
  end
@@ -73,8 +73,8 @@ module Spree
73
73
  deprecate total_available_store_credit: :available_store_credit_total, deprecator: Spree::Deprecation
74
74
 
75
75
  def available_store_credit_total(currency:)
76
- store_credits.reload.to_a.
77
- select { |c| c.currency == currency }.
76
+ store_credits.to_a.
77
+ select { |credit| credit.currency == currency }.
78
78
  sum(&:amount_remaining)
79
79
  end
80
80
 
@@ -8,8 +8,8 @@ module Spree
8
8
  class Address < Spree::Base
9
9
  extend ActiveModel::ForbiddenAttributesProtection
10
10
 
11
- belongs_to :country, class_name: "Spree::Country"
12
- belongs_to :state, class_name: "Spree::State"
11
+ belongs_to :country, class_name: "Spree::Country", optional: true
12
+ belongs_to :state, class_name: "Spree::State", optional: true
13
13
 
14
14
  validates :firstname, :address1, :city, :country_id, presence: true
15
15
  validates :zipcode, presence: true, if: :require_zipcode?
@@ -30,8 +30,9 @@ module Spree
30
30
  where(value_attributes(attributes))
31
31
  end
32
32
 
33
- def self.build_default
34
- new(country: Spree::Country.default)
33
+ # @return [Address] an address with default attributes
34
+ def self.build_default(*args, &block)
35
+ where(country: Spree::Country.default).build(*args, &block)
35
36
  end
36
37
 
37
38
  # @return [Address] an equal address already in the database or a newly created one
@@ -58,21 +59,16 @@ module Spree
58
59
  end
59
60
 
60
61
  # @return [Hash] hash of attributes contributing to value equality with optional merge
61
- def self.value_attributes(base_attributes, merge_attributes = nil)
62
- # dup because we may modify firstname/lastname.
63
- base = base_attributes.dup
64
-
65
- base.stringify_keys!
66
-
67
- if merge_attributes
68
- base.merge!(merge_attributes.stringify_keys)
69
- end
62
+ def self.value_attributes(base_attributes, merge_attributes = {})
63
+ base = base_attributes.stringify_keys.merge(merge_attributes.stringify_keys)
70
64
 
71
65
  # TODO: Deprecate these aliased attributes
72
- base['firstname'] = base.delete('first_name') if base.key?('first_name')
73
- base['lastname'] = base.delete('last_name') if base.key?('last_name')
66
+ base['firstname'] = base['first_name'] if base.key?('first_name')
67
+ base['lastname'] = base['last_name'] if base.key?('last_name')
68
+
69
+ excluded_attributes = DB_ONLY_ATTRS + %w(first_name last_name)
74
70
 
75
- base.except!(*DB_ONLY_ATTRS)
71
+ base.except(*excluded_attributes)
76
72
  end
77
73
 
78
74
  # @return [Hash] hash of attributes contributing to value equality
@@ -121,7 +117,7 @@ module Spree
121
117
  # @deprecated Do not use this
122
118
  def empty?
123
119
  Spree::Deprecation.warn("Address#empty? is deprecated.", caller)
124
- attributes.except('id', 'created_at', 'updated_at', 'country_id').all? { |_, v| v.nil? }
120
+ attributes.except('id', 'created_at', 'updated_at', 'country_id').all? { |_, value| value.nil? }
125
121
  end
126
122
 
127
123
  # This exists because the default Object#blank?, checks empty? if it is
@@ -16,11 +16,11 @@ module Spree
16
16
  # order's adjustment total. This allows an adjustment to be preserved if
17
17
  # it becomes ineligible so it might be reinstated.
18
18
  class Adjustment < Spree::Base
19
- belongs_to :adjustable, polymorphic: true, touch: true
20
- belongs_to :source, polymorphic: true
21
- belongs_to :order, class_name: 'Spree::Order', inverse_of: :all_adjustments
22
- belongs_to :promotion_code, class_name: 'Spree::PromotionCode'
23
- belongs_to :adjustment_reason, class_name: 'Spree::AdjustmentReason', inverse_of: :adjustments
19
+ belongs_to :adjustable, polymorphic: true, touch: true, optional: true
20
+ belongs_to :source, polymorphic: true, optional: true
21
+ belongs_to :order, class_name: 'Spree::Order', inverse_of: :all_adjustments, optional: true
22
+ belongs_to :promotion_code, class_name: 'Spree::PromotionCode', optional: true
23
+ belongs_to :adjustment_reason, class_name: 'Spree::AdjustmentReason', inverse_of: :adjustments, optional: true
24
24
 
25
25
  validates :adjustable, presence: true
26
26
  validates :order, presence: true
@@ -56,20 +56,31 @@ module Spree
56
56
  extend DisplayMoney
57
57
  money_methods :amount
58
58
 
59
+ # Returns Adjustments of completed Orders.
60
+ #
61
+ # @param excluded_orders [Array<Spree::Order>] Orders to exclude from query
62
+ # @return [ActiveRecord::Relation] Scoped Adjustments
63
+ def self.in_completed_orders(excluded_orders: [])
64
+ joins(:order).
65
+ merge(Spree::Order.complete).
66
+ where.not(spree_orders: { id: excluded_orders }).
67
+ distinct
68
+ end
69
+
59
70
  def finalize!
60
- update_attributes!(finalized: true)
71
+ update!(finalized: true)
61
72
  end
62
73
 
63
74
  def unfinalize!
64
- update_attributes!(finalized: false)
75
+ update!(finalized: false)
65
76
  end
66
77
 
67
78
  def finalize
68
- update_attributes(finalized: true)
79
+ update(finalized: true)
69
80
  end
70
81
 
71
82
  def unfinalize
72
- update_attributes(finalized: false)
83
+ update(finalized: false)
73
84
  end
74
85
 
75
86
  def currency
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Spree
4
4
  class Asset < Spree::Base
5
- belongs_to :viewable, polymorphic: true, touch: true
5
+ belongs_to :viewable, polymorphic: true, touch: true, optional: true
6
6
  acts_as_list scope: [:viewable_id, :viewable_type]
7
7
  end
8
8
  end
@@ -6,8 +6,6 @@ class Spree::Base < ActiveRecord::Base
6
6
 
7
7
  include Spree::RansackableAttributes
8
8
 
9
- self.belongs_to_required_by_default = false
10
-
11
9
  def initialize_preference_defaults
12
10
  if has_attribute?(:preferences)
13
11
  self.preferences = default_preferences.merge(preferences)
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Spree
4
4
  class Calculator < Spree::Base
5
- belongs_to :calculable, polymorphic: true
5
+ belongs_to :calculable, polymorphic: true, optional: true
6
6
 
7
7
  # This method calls a compute_<computable> method. must be overriden in concrete calculator.
8
8
  #
@@ -12,7 +12,7 @@ module Spree
12
12
  # as object we always get line items, as calculable we have Coupon, ShippingMethod
13
13
  def compute(object)
14
14
  if object.is_a?(Array)
15
- base = object.map { |o| o.respond_to?(:amount) ? o.amount : BigDecimal(o.to_s) }.sum
15
+ base = object.map { |element| element.respond_to?(:amount) ? element.amount : BigDecimal(element.to_s) }.sum
16
16
  else
17
17
  base = object.respond_to?(:amount) ? object.amount : BigDecimal(object.to_s)
18
18
  end
@@ -18,9 +18,9 @@ module Spree
18
18
  def compute_from_quantity(quantity)
19
19
  sum = 0
20
20
  max = preferred_max_items.to_i
21
- quantity.times do |i|
21
+ quantity.times do |index|
22
22
  # check max value to avoid divide by 0 errors
23
- if (max == 0 && i == 0) || (max > 0) && (i % max == 0)
23
+ if (max == 0 && index == 0) || (max > 0) && (index % max == 0)
24
24
  sum += preferred_first_item.to_f
25
25
  else
26
26
  sum += preferred_additional_item.to_f
@@ -11,8 +11,8 @@ module Spree
11
11
  before_validation do
12
12
  # Convert tier values to decimals. Strings don't do us much good.
13
13
  if preferred_tiers.is_a?(Hash)
14
- self.preferred_tiers = preferred_tiers.map do |k, v|
15
- [cast_to_d(k.to_s), cast_to_d(v.to_s)]
14
+ self.preferred_tiers = preferred_tiers.map do |key, value|
15
+ [cast_to_d(key.to_s), cast_to_d(value.to_s)]
16
16
  end.to_h
17
17
  end
18
18
  end
@@ -20,8 +20,8 @@ module Spree
20
20
  validate :preferred_tiers_content
21
21
 
22
22
  def compute(object)
23
- _base, amount = preferred_tiers.sort.reverse.detect do |b, _|
24
- object.amount >= b
23
+ _base, amount = preferred_tiers.sort.reverse.detect do |value, _|
24
+ object.amount >= value
25
25
  end
26
26
 
27
27
  if preferred_currency.casecmp(object.currency).zero?
@@ -41,7 +41,7 @@ module Spree
41
41
 
42
42
  def preferred_tiers_content
43
43
  if preferred_tiers.is_a? Hash
44
- unless preferred_tiers.keys.all?{ |k| k.is_a?(Numeric) && k > 0 }
44
+ unless preferred_tiers.keys.all?{ |key| key.is_a?(Numeric) && key > 0 }
45
45
  errors.add(:base, :keys_should_be_positive_number)
46
46
  end
47
47
  else
@@ -11,8 +11,8 @@ module Spree
11
11
  before_validation do
12
12
  # Convert tier values to decimals. Strings don't do us much good.
13
13
  if preferred_tiers.is_a?(Hash)
14
- self.preferred_tiers = preferred_tiers.map do |k, v|
15
- [cast_to_d(k.to_s), cast_to_d(v.to_s)]
14
+ self.preferred_tiers = preferred_tiers.map do |key, value|
15
+ [cast_to_d(key.to_s), cast_to_d(value.to_s)]
16
16
  end.to_h
17
17
  end
18
18
  end
@@ -26,8 +26,8 @@ module Spree
26
26
  def compute(object)
27
27
  order = object.is_a?(Order) ? object : object.order
28
28
 
29
- _base, percent = preferred_tiers.sort.reverse.detect do |b, _|
30
- order.item_total >= b
29
+ _base, percent = preferred_tiers.sort.reverse.detect do |value, _|
30
+ order.item_total >= value
31
31
  end
32
32
 
33
33
  if preferred_currency.casecmp(order.currency).zero?
@@ -48,10 +48,10 @@ module Spree
48
48
 
49
49
  def preferred_tiers_content
50
50
  if preferred_tiers.is_a? Hash
51
- unless preferred_tiers.keys.all?{ |k| k.is_a?(Numeric) && k > 0 }
51
+ unless preferred_tiers.keys.all?{ |key| key.is_a?(Numeric) && key > 0 }
52
52
  errors.add(:base, :keys_should_be_positive_number)
53
53
  end
54
- unless preferred_tiers.values.all?{ |k| k.is_a?(Numeric) && k >= 0 && k <= 100 }
54
+ unless preferred_tiers.values.all?{ |key| key.is_a?(Numeric) && key >= 0 && key <= 100 }
55
55
  errors.add(:base, :values_should_be_percent)
56
56
  end
57
57
  else
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Spree::Carton < Spree::Base
4
- belongs_to :address, class_name: 'Spree::Address'
5
- belongs_to :stock_location, class_name: 'Spree::StockLocation', inverse_of: :cartons
6
- belongs_to :shipping_method, class_name: 'Spree::ShippingMethod', inverse_of: :cartons
4
+ belongs_to :address, class_name: 'Spree::Address', optional: true
5
+ belongs_to :stock_location, class_name: 'Spree::StockLocation', inverse_of: :cartons, optional: true
6
+ belongs_to :shipping_method, -> { with_discarded }, class_name: 'Spree::ShippingMethod', inverse_of: :cartons, optional: true
7
7
 
8
8
  has_many :inventory_units, class_name: "Spree::InventoryUnit", inverse_of: :carton, dependent: :nullify
9
9
  has_many :orders, -> { distinct }, through: :inventory_units
@@ -4,8 +4,8 @@ module Spree
4
4
  class Classification < Spree::Base
5
5
  self.table_name = 'spree_products_taxons'
6
6
  acts_as_list scope: :taxon
7
- belongs_to :product, class_name: "Spree::Product", inverse_of: :classifications, touch: true
8
- belongs_to :taxon, class_name: "Spree::Taxon", inverse_of: :classifications, touch: true
7
+ belongs_to :product, class_name: "Spree::Product", inverse_of: :classifications, touch: true, optional: true
8
+ belongs_to :taxon, class_name: "Spree::Taxon", inverse_of: :classifications, touch: true, optional: true
9
9
 
10
10
  # For https://github.com/spree/spree/issues/3494
11
11
  validates_uniqueness_of :taxon_id, scope: :product_id, message: :already_linked
@@ -4,8 +4,8 @@ module Spree
4
4
  # The default `source` of a `Spree::Payment`.
5
5
  #
6
6
  class CreditCard < Spree::PaymentSource
7
- belongs_to :user, class_name: Spree::UserClassHandle.new, foreign_key: 'user_id'
8
- belongs_to :address
7
+ belongs_to :user, class_name: Spree::UserClassHandle.new, foreign_key: 'user_id', optional: true
8
+ belongs_to :address, optional: true
9
9
 
10
10
  before_save :set_last_digits
11
11
 
@@ -47,13 +47,13 @@ module Spree
47
47
  }.freeze
48
48
 
49
49
  def default
50
- Spree::Deprecation.warn("CreditCard.default is deprecated. Please use user.wallet.default_wallet_payment_source instead.", caller)
50
+ Spree::Deprecation.warn("CreditCard#default is deprecated. Please use user.wallet.default_wallet_payment_source instead.", caller)
51
51
  return false if user.nil?
52
52
  user.wallet.default_wallet_payment_source.try!(:payment_source) == self
53
53
  end
54
54
 
55
55
  def default=(set_as_default)
56
- Spree::Deprecation.warn("CreditCard.default= is deprecated. Please use user.wallet.default_wallet_payment_source= instead.", caller)
56
+ Spree::Deprecation.warn("CreditCard#default= is deprecated. Please use user.wallet.default_wallet_payment_source= instead.", caller)
57
57
  if user.nil?
58
58
  raise "Cannot set 'default' on a credit card without a user"
59
59
  elsif set_as_default # setting this card as default
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Spree
4
4
  class CustomerReturn < Spree::Base
5
- belongs_to :stock_location
5
+ belongs_to :stock_location, optional: true
6
6
 
7
7
  has_many :return_items, inverse_of: :customer_return
8
8
  has_many :return_authorizations, through: :return_items
@@ -7,7 +7,7 @@ module Spree::Image::PaperclipAttachment
7
7
  validate :no_attachment_errors
8
8
 
9
9
  has_attached_file :attachment,
10
- styles: { mini: '48x48>', small: '100x100>', product: '240x240>', large: '600x600>' },
10
+ styles: { mini: '48x48>', small: '400x400>', product: '680x680>', large: '1200x1200>' },
11
11
  default_style: :product,
12
12
  default_url: 'noimage/:style.png',
13
13
  url: '/spree/products/:id/:style/:basename.:extension',
@@ -8,10 +8,10 @@ module Spree
8
8
  POST_SHIPMENT_STATES = %w(returned)
9
9
  CANCELABLE_STATES = ['on_hand', 'backordered', 'shipped']
10
10
 
11
- belongs_to :variant, -> { with_deleted }, class_name: "Spree::Variant", inverse_of: :inventory_units
12
- belongs_to :shipment, class_name: "Spree::Shipment", touch: true, inverse_of: :inventory_units
13
- belongs_to :carton, class_name: "Spree::Carton", inverse_of: :inventory_units
14
- belongs_to :line_item, class_name: "Spree::LineItem", inverse_of: :inventory_units
11
+ belongs_to :variant, -> { with_deleted }, class_name: "Spree::Variant", inverse_of: :inventory_units, optional: true
12
+ belongs_to :shipment, class_name: "Spree::Shipment", touch: true, inverse_of: :inventory_units, optional: true
13
+ belongs_to :carton, class_name: "Spree::Carton", inverse_of: :inventory_units, optional: true
14
+ belongs_to :line_item, class_name: "Spree::LineItem", inverse_of: :inventory_units, optional: true
15
15
 
16
16
  has_many :return_items, inverse_of: :inventory_unit, dependent: :destroy
17
17
  has_one :original_return_item, class_name: "Spree::ReturnItem", foreign_key: :exchange_inventory_unit_id, dependent: :destroy
@@ -58,25 +58,7 @@ module Spree
58
58
 
59
59
  scope :shippable, -> { on_hand }
60
60
 
61
- # state machine (see http://github.com/pluginaweek/state_machine/tree/master for details)
62
- state_machine initial: :on_hand do
63
- event :fill_backorder do
64
- transition to: :on_hand, from: :backordered
65
- end
66
- after_transition on: :fill_backorder, do: :fulfill_order
67
-
68
- event :ship do
69
- transition to: :shipped, if: :allow_ship?
70
- end
71
-
72
- event :return do
73
- transition to: :returned, from: :shipped
74
- end
75
-
76
- event :cancel do
77
- transition to: :canceled, from: CANCELABLE_STATES.map(&:to_sym)
78
- end
79
- end
61
+ include ::Spree::Config.state_machines.inventory_unit
80
62
 
81
63
  # Updates the given inventory units to not be pending.
82
64
  #
@@ -12,9 +12,9 @@ module Spree
12
12
  class LineItem < Spree::Base
13
13
  class CurrencyMismatch < StandardError; end
14
14
 
15
- belongs_to :order, class_name: "Spree::Order", inverse_of: :line_items, touch: true
16
- belongs_to :variant, -> { with_deleted }, class_name: "Spree::Variant", inverse_of: :line_items
17
- belongs_to :tax_category, class_name: "Spree::TaxCategory"
15
+ belongs_to :order, class_name: "Spree::Order", inverse_of: :line_items, touch: true, optional: true
16
+ belongs_to :variant, -> { with_deleted }, class_name: "Spree::Variant", inverse_of: :line_items, optional: true
17
+ belongs_to :tax_category, class_name: "Spree::TaxCategory", optional: true
18
18
 
19
19
  has_one :product, through: :variant
20
20
 
@@ -72,7 +72,7 @@ module Spree
72
72
  # @return [BigDecimal] the amount of this item, taking into consideration
73
73
  # all non-tax adjustments.
74
74
  def total_before_tax
75
- amount + adjustments.select { |a| !a.tax? && a.eligible? }.sum(&:amount)
75
+ amount + adjustments.select { |value| !value.tax? && value.eligible? }.sum(&:amount)
76
76
  end
77
77
 
78
78
  # @return [BigDecimal] the amount of this line item before VAT tax