solidus_core 2.9.6 → 2.10.0.beta1

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 (131) hide show
  1. checksums.yaml +4 -4
  2. data/app/models/concerns/spree/user_address_book.rb +2 -2
  3. data/app/models/spree/address.rb +2 -2
  4. data/app/models/spree/adjustment.rb +9 -9
  5. data/app/models/spree/asset.rb +1 -1
  6. data/app/models/spree/base.rb +0 -2
  7. data/app/models/spree/calculator.rb +1 -1
  8. data/app/models/spree/carton.rb +3 -3
  9. data/app/models/spree/classification.rb +2 -2
  10. data/app/models/spree/credit_card.rb +2 -2
  11. data/app/models/spree/customer_return.rb +1 -1
  12. data/app/models/spree/image/paperclip_attachment.rb +1 -1
  13. data/app/models/spree/inventory_unit.rb +4 -4
  14. data/app/models/spree/line_item.rb +3 -3
  15. data/app/models/spree/line_item_action.rb +2 -2
  16. data/app/models/spree/log_entry.rb +1 -1
  17. data/app/models/spree/option_value.rb +1 -1
  18. data/app/models/spree/option_values_variant.rb +2 -2
  19. data/app/models/spree/order.rb +8 -25
  20. data/app/models/spree/order_cancellations.rb +1 -1
  21. data/app/models/spree/order_contents.rb +2 -2
  22. data/app/models/spree/order_mutex.rb +1 -1
  23. data/app/models/spree/order_promotion.rb +3 -3
  24. data/app/models/spree/order_shipping.rb +1 -1
  25. data/app/models/spree/order_taxation.rb +1 -1
  26. data/app/models/spree/payment/processing.rb +1 -1
  27. data/app/models/spree/payment.rb +4 -4
  28. data/app/models/spree/payment_capture_event.rb +1 -1
  29. data/app/models/spree/payment_method/bogus_credit_card.rb +1 -1
  30. data/app/models/spree/payment_method.rb +3 -0
  31. data/app/models/spree/payment_source.rb +1 -1
  32. data/app/models/spree/price.rb +2 -2
  33. data/app/models/spree/product/scopes.rb +217 -210
  34. data/app/models/spree/product.rb +2 -2
  35. data/app/models/spree/product_option_type.rb +2 -2
  36. data/app/models/spree/product_promotion_rule.rb +2 -2
  37. data/app/models/spree/product_property.rb +2 -2
  38. data/app/models/spree/promotion.rb +1 -1
  39. data/app/models/spree/promotion_action.rb +1 -1
  40. data/app/models/spree/promotion_code.rb +2 -2
  41. data/app/models/spree/promotion_code_batch.rb +1 -1
  42. data/app/models/spree/promotion_rule.rb +1 -1
  43. data/app/models/spree/promotion_rule_role.rb +2 -2
  44. data/app/models/spree/promotion_rule_store.rb +2 -2
  45. data/app/models/spree/promotion_rule_taxon.rb +2 -2
  46. data/app/models/spree/promotion_rule_user.rb +2 -2
  47. data/app/models/spree/refund.rb +3 -3
  48. data/app/models/spree/reimbursement/credit.rb +2 -2
  49. data/app/models/spree/reimbursement.rb +2 -2
  50. data/app/models/spree/reimbursement_tax_calculator.rb +1 -1
  51. data/app/models/spree/return_authorization.rb +3 -3
  52. data/app/models/spree/return_item.rb +10 -10
  53. data/app/models/spree/role_user.rb +2 -2
  54. data/app/models/spree/shipment.rb +3 -3
  55. data/app/models/spree/shipping_manifest.rb +3 -3
  56. data/app/models/spree/shipping_method.rb +1 -1
  57. data/app/models/spree/shipping_method_category.rb +2 -2
  58. data/app/models/spree/shipping_method_stock_location.rb +2 -2
  59. data/app/models/spree/shipping_method_zone.rb +2 -2
  60. data/app/models/spree/shipping_rate.rb +2 -2
  61. data/app/models/spree/shipping_rate_tax.rb +2 -2
  62. data/app/models/spree/state.rb +1 -1
  63. data/app/models/spree/state_change.rb +2 -2
  64. data/app/models/spree/stock_item.rb +2 -2
  65. data/app/models/spree/stock_location.rb +2 -2
  66. data/app/models/spree/stock_movement.rb +2 -2
  67. data/app/models/spree/store_credit.rb +8 -8
  68. data/app/models/spree/store_credit_event.rb +3 -3
  69. data/app/models/spree/store_payment_method.rb +2 -2
  70. data/app/models/spree/store_shipping_method.rb +2 -2
  71. data/app/models/spree/tax_rate.rb +1 -1
  72. data/app/models/spree/tax_rate_tax_category.rb +2 -2
  73. data/app/models/spree/unit_cancel.rb +5 -2
  74. data/app/models/spree/user_address.rb +2 -2
  75. data/app/models/spree/user_stock_location.rb +2 -2
  76. data/app/models/spree/variant/scopes.rb +37 -29
  77. data/app/models/spree/variant.rb +1 -1
  78. data/app/models/spree/variant_property_rule.rb +1 -1
  79. data/app/models/spree/variant_property_rule_condition.rb +2 -2
  80. data/app/models/spree/variant_property_rule_value.rb +2 -2
  81. data/app/models/spree/wallet_payment_source.rb +2 -2
  82. data/app/models/spree/zone_member.rb +2 -2
  83. data/config/initializers/inflections.rb +5 -0
  84. data/config/locales/en.yml +22 -3
  85. data/lib/generators/spree/dummy/dummy_generator.rb +2 -0
  86. data/lib/generators/spree/install/install_generator.rb +0 -3
  87. data/lib/spree/core/controller_helpers/strong_parameters.rb +7 -21
  88. data/lib/spree/core/environment_extension.rb +0 -9
  89. data/lib/spree/core/importer/order.rb +3 -4
  90. data/lib/spree/core/importer/product.rb +2 -2
  91. data/lib/spree/core/version.rb +1 -1
  92. data/lib/spree/permission_sets/default_customer.rb +1 -1
  93. data/lib/spree/permitted_attributes.rb +6 -75
  94. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +6 -2
  95. data/solidus_core.gemspec +4 -4
  96. data/spec/lib/search/base_spec.rb +5 -1
  97. data/spec/lib/search/variant_spec.rb +1 -1
  98. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +1 -8
  99. data/spec/lib/spree/core/environment_extension_spec.rb +1 -12
  100. data/spec/lib/spree/event_spec.rb +15 -3
  101. data/spec/migrate/20190106184413_remove_code_from_spree_promotions_spec.rb +18 -4
  102. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +1 -1
  103. data/spec/models/spree/carton_spec.rb +2 -2
  104. data/spec/models/spree/concerns/user_methods_spec.rb +3 -3
  105. data/spec/models/spree/credit_card_spec.rb +2 -2
  106. data/spec/models/spree/customer_return_spec.rb +1 -1
  107. data/spec/models/spree/order/checkout_spec.rb +1 -1
  108. data/spec/models/spree/order/outstanding_balance_integration_spec.rb +5 -5
  109. data/spec/models/spree/order/payment_spec.rb +1 -1
  110. data/spec/models/spree/order_contents_spec.rb +1 -1
  111. data/spec/models/spree/order_inventory_spec.rb +3 -3
  112. data/spec/models/spree/order_shipping_spec.rb +1 -1
  113. data/spec/models/spree/order_spec.rb +6 -6
  114. data/spec/models/spree/payment_create_spec.rb +2 -2
  115. data/spec/models/spree/payment_spec.rb +12 -12
  116. data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +2 -2
  117. data/spec/models/spree/promotion/rules/nth_order_spec.rb +2 -2
  118. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -1
  119. data/spec/models/spree/promotion_spec.rb +0 -4
  120. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +2 -2
  121. data/spec/models/spree/return_item_spec.rb +11 -11
  122. data/spec/models/spree/shipment_spec.rb +6 -6
  123. data/spec/models/spree/stock/inventory_units_finalizer_spec.rb +4 -4
  124. data/spec/models/spree/stock/quantifier_spec.rb +2 -2
  125. data/spec/models/spree/store_credit_spec.rb +7 -7
  126. data/spec/models/spree/tax_category_spec.rb +1 -1
  127. data/spec/models/spree/taxon_spec.rb +2 -2
  128. data/spec/models/spree/unit_cancel_spec.rb +5 -0
  129. data/spec/models/spree/user_spec.rb +3 -3
  130. metadata +32 -32
  131. data/spec/lib/spree/permitted_attributes_spec.rb +0 -41
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 482b41309b1c87feff6b32679da923ed2f6077ca241fd0d1bb358647f4261bb1
4
- data.tar.gz: db5b3124cc3b7c29b916e037d0e1f16ba378aaa386282f59bb873225cee6c33d
3
+ metadata.gz: 7d36219391d7785627d0a35a8929f818350001dbe3f06149bc0f954daadaf301
4
+ data.tar.gz: 982ce1d0d2866b852b7e421361f06c81b6b4a98066093e5d6c8ae03ceb0d5866
5
5
  SHA512:
6
- metadata.gz: bc163558062f4da4c642a1946bfa1fc1d6dfc9a47dddf0fb3f3c3c44c06810e33fe02cbddca9ef007469eb594a19644ce1344d51cc5b04f6b5a039cf57dcc335
7
- data.tar.gz: e70cf50bf8049770f9fa7ad1be437969dda338298f5dd62b0a44cf545a38f24a57a7d8ccb4e536c8cae5ec899ecd9e18cf40d177adf664bf104ea5d1990e286a
6
+ metadata.gz: 1cedc37f87d1641177f28e8172b6c667da086cd3ed4c1e8081390ffb8026974dd582731c5a4a2d827ff3333495e51705c0975b3efff5e25bce7d3b030302a7b4
7
+ data.tar.gz: f577d26426c6723f1b6bba21d11c647549a6569851b286b29756dfe9b8eccd710f235452393b12f8bd3ab43666eefd7b2d519024888e737233c9a69b14a81fc5
@@ -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
@@ -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?
@@ -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
@@ -57,19 +57,19 @@ module Spree
57
57
  money_methods :amount
58
58
 
59
59
  def finalize!
60
- update_attributes!(finalized: true)
60
+ update!(finalized: true)
61
61
  end
62
62
 
63
63
  def unfinalize!
64
- update_attributes!(finalized: false)
64
+ update!(finalized: false)
65
65
  end
66
66
 
67
67
  def finalize
68
- update_attributes(finalized: true)
68
+ update(finalized: true)
69
69
  end
70
70
 
71
71
  def unfinalize
72
- update_attributes(finalized: false)
72
+ update(finalized: false)
73
73
  end
74
74
 
75
75
  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
  #
@@ -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, 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
 
@@ -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
@@ -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
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Spree
4
4
  class LineItemAction < Spree::Base
5
- belongs_to :line_item
6
- belongs_to :action, class_name: "Spree::PromotionAction"
5
+ belongs_to :line_item, optional: true
6
+ belongs_to :action, class_name: "Spree::PromotionAction", optional: true
7
7
  end
8
8
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Spree
4
4
  class LogEntry < Spree::Base
5
- belongs_to :source, polymorphic: true
5
+ belongs_to :source, polymorphic: true, optional: true
6
6
 
7
7
  def parsed_details
8
8
  @details ||= YAML.load(details)
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Spree
4
4
  class OptionValue < Spree::Base
5
- belongs_to :option_type, class_name: 'Spree::OptionType', inverse_of: :option_values
5
+ belongs_to :option_type, class_name: 'Spree::OptionType', inverse_of: :option_values, optional: true
6
6
  acts_as_list scope: :option_type
7
7
 
8
8
  has_many :option_values_variants, dependent: :destroy
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Spree
4
4
  class OptionValuesVariant < Spree::Base
5
- belongs_to :variant
6
- belongs_to :option_value
5
+ belongs_to :variant, optional: true
6
+ belongs_to :option_value, optional: true
7
7
  end
8
8
  end
@@ -55,15 +55,15 @@ module Spree
55
55
  deprecate :temporary_credit_card= => :temporary_payment_source=, deprecator: Spree::Deprecation
56
56
 
57
57
  # Customer info
58
- belongs_to :user, class_name: Spree::UserClassHandle.new
59
- belongs_to :bill_address, foreign_key: :bill_address_id, class_name: 'Spree::Address'
58
+ belongs_to :user, class_name: Spree::UserClassHandle.new, optional: true
59
+ belongs_to :bill_address, foreign_key: :bill_address_id, class_name: 'Spree::Address', optional: true
60
60
  alias_attribute :billing_address, :bill_address
61
61
 
62
- belongs_to :ship_address, foreign_key: :ship_address_id, class_name: 'Spree::Address'
62
+ belongs_to :ship_address, foreign_key: :ship_address_id, class_name: 'Spree::Address', optional: true
63
63
  alias_attribute :shipping_address, :ship_address
64
64
  alias_attribute :ship_total, :shipment_total
65
65
 
66
- belongs_to :store, class_name: 'Spree::Store'
66
+ belongs_to :store, class_name: 'Spree::Store', optional: true
67
67
 
68
68
  # Items
69
69
  has_many :line_items, -> { order(:created_at, :id) }, dependent: :destroy, inverse_of: :order
@@ -101,9 +101,9 @@ module Spree
101
101
 
102
102
  # Logging
103
103
  has_many :state_changes, as: :stateful
104
- belongs_to :created_by, class_name: Spree::UserClassHandle.new
105
- belongs_to :approver, class_name: Spree::UserClassHandle.new
106
- belongs_to :canceler, class_name: Spree::UserClassHandle.new
104
+ belongs_to :created_by, class_name: Spree::UserClassHandle.new, optional: true
105
+ belongs_to :approver, class_name: Spree::UserClassHandle.new, optional: true
106
+ belongs_to :canceler, class_name: Spree::UserClassHandle.new, optional: true
107
107
 
108
108
  accepts_nested_attributes_for :line_items
109
109
  accepts_nested_attributes_for :bill_address
@@ -435,13 +435,6 @@ module Spree
435
435
  touch :completed_at
436
436
 
437
437
  Spree::Event.fire 'order_finalized', order: self
438
-
439
- if method(:deliver_order_confirmation_email).owner != self.class
440
- Spree::Deprecation.warn \
441
- "deliver_order_confirmation_email has been deprecated and moved to " \
442
- "Spree::MailerSubscriber#order_finalized, please move there any customizations.",
443
- caller(1)
444
- end
445
438
  end
446
439
 
447
440
  def fulfill!
@@ -450,16 +443,6 @@ module Spree
450
443
  save!
451
444
  end
452
445
 
453
- def deliver_order_confirmation_email
454
- Spree::Deprecation.warn \
455
- "deliver_order_confirmation_email has been deprecated and moved to " \
456
- "Spree::MailerSubscriber#order_finalized.",
457
- caller(1)
458
-
459
- Spree::Config.order_mailer_class.confirm_email(order).deliver_later
460
- order.update_column(:confirmation_delivered, true)
461
- end
462
-
463
446
  # Helper methods for checkout steps
464
447
  def paid?
465
448
  %w(paid credit_owed).include?(payment_state)
@@ -676,7 +659,7 @@ module Spree
676
659
  if remaining_total.zero?
677
660
  other_payments.each(&:invalidate!)
678
661
  elsif other_payments.size == 1
679
- other_payments.first.update_attributes!(amount: remaining_total)
662
+ other_payments.first.update!(amount: remaining_total)
680
663
  end
681
664
 
682
665
  payments.reset
@@ -139,7 +139,7 @@ class Spree::OrderCancellations
139
139
 
140
140
  shipments.each do |shipment|
141
141
  if shipment.inventory_units.all? { |iu| iu.shipped? || iu.canceled? }
142
- shipment.update_attributes!(state: 'shipped', shipped_at: Time.current)
142
+ shipment.update!(state: 'shipped', shipped_at: Time.current)
143
143
  end
144
144
  end
145
145
  end
@@ -35,7 +35,7 @@ module Spree
35
35
  end
36
36
 
37
37
  def update_cart(params)
38
- if order.update_attributes(params)
38
+ if order.update(params)
39
39
  unless order.completed?
40
40
  order.line_items = order.line_items.select { |li| li.quantity > 0 }
41
41
  # Update totals, then check if the order is eligible for any cart promotions.
@@ -61,7 +61,7 @@ module Spree
61
61
  raise ArgumentError, 'user or name must be specified'
62
62
  end
63
63
 
64
- order.update_attributes!(
64
+ order.update!(
65
65
  approver: user,
66
66
  approver_name: name,
67
67
  approved_at: Time.current
@@ -4,7 +4,7 @@ module Spree
4
4
  class OrderMutex < Spree::Base
5
5
  class LockFailed < StandardError; end
6
6
 
7
- belongs_to :order, class_name: "Spree::Order"
7
+ belongs_to :order, class_name: "Spree::Order", optional: true
8
8
 
9
9
  scope :expired, -> { where(arel_table[:created_at].lteq(Spree::Config[:order_mutex_max_age].seconds.ago)) }
10
10
 
@@ -8,9 +8,9 @@ module Spree
8
8
  class OrderPromotion < Spree::Base
9
9
  self.table_name = 'spree_orders_promotions'
10
10
 
11
- belongs_to :order, class_name: 'Spree::Order'
12
- belongs_to :promotion, class_name: 'Spree::Promotion'
13
- belongs_to :promotion_code, class_name: 'Spree::PromotionCode'
11
+ belongs_to :order, class_name: 'Spree::Order', optional: true
12
+ belongs_to :promotion, class_name: 'Spree::Promotion', optional: true
13
+ belongs_to :promotion_code, class_name: 'Spree::PromotionCode', optional: true
14
14
 
15
15
  validates :order, presence: true
16
16
  validates :promotion, presence: true
@@ -64,7 +64,7 @@ class Spree::OrderShipping
64
64
  inventory_units.map(&:shipment).uniq.each do |shipment|
65
65
  # Temporarily propagate the tracking number to the shipment as well
66
66
  # TODO: Remove tracking numbers from shipments.
67
- shipment.update_attributes!(tracking: tracking_number)
67
+ shipment.update!(tracking: tracking_number)
68
68
 
69
69
  next unless shipment.inventory_units.reload.all? { |iu| iu.shipped? || iu.canceled? }
70
70
  # TODO: make OrderShipping#ship_shipment call Shipment#ship! rather than
@@ -74,7 +74,7 @@ module Spree
74
74
  label: tax_item.label,
75
75
  included: tax_item.included_in_price
76
76
  )
77
- tax_adjustment.update_attributes!(amount: tax_item.amount)
77
+ tax_adjustment.update!(amount: tax_item.amount)
78
78
  tax_adjustment
79
79
  end
80
80
  end
@@ -59,7 +59,7 @@ module Spree
59
59
  )
60
60
  money = ::Money.new(amount, currency)
61
61
  capture_events.create!(amount: money.to_d)
62
- update_attributes!(amount: captured_amount)
62
+ update!(amount: captured_amount)
63
63
  handle_response(response, :complete, :failure)
64
64
  end
65
65
  end
@@ -15,9 +15,9 @@ module Spree
15
15
  NON_RISKY_AVS_CODES = ['B', 'D', 'H', 'J', 'M', 'Q', 'T', 'V', 'X', 'Y'].freeze
16
16
  RISKY_AVS_CODES = ['A', 'C', 'E', 'F', 'G', 'I', 'K', 'L', 'N', 'O', 'P', 'R', 'S', 'U', 'W', 'Z'].freeze
17
17
 
18
- belongs_to :order, class_name: 'Spree::Order', touch: true, inverse_of: :payments
19
- belongs_to :source, polymorphic: true
20
- belongs_to :payment_method, -> { with_deleted }, class_name: 'Spree::PaymentMethod', inverse_of: :payments
18
+ belongs_to :order, class_name: 'Spree::Order', touch: true, inverse_of: :payments, optional: true
19
+ belongs_to :source, polymorphic: true, optional: true
20
+ belongs_to :payment_method, -> { with_deleted }, class_name: 'Spree::PaymentMethod', inverse_of: :payments, optional: true
21
21
 
22
22
  has_many :offsets, -> { offset_payment }, class_name: "Spree::Payment", foreign_key: :source_id
23
23
  has_many :log_entries, as: :source
@@ -273,7 +273,7 @@ module Spree
273
273
  # type of payment getting refunded, hence the additional check
274
274
  # if the source is a store credit.
275
275
  if store_credit? && source.is_a?(Spree::StoreCredit)
276
- source.update_attributes!({
276
+ source.update!({
277
277
  action: Spree::StoreCredit::ELIGIBLE_ACTION,
278
278
  action_amount: amount,
279
279
  action_authorization_code: response_code
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Spree
4
4
  class PaymentCaptureEvent < Spree::Base
5
- belongs_to :payment, class_name: 'Spree::Payment'
5
+ belongs_to :payment, class_name: 'Spree::Payment', optional: true
6
6
 
7
7
  def display_amount
8
8
  Spree::Money.new(amount, { currency: payment.currency })
@@ -19,7 +19,7 @@ module Spree
19
19
  return if payment.source.has_payment_profile?
20
20
  # simulate the storage of credit card profile using remote service
21
21
  if success = VALID_CCS.include?(payment.source.number)
22
- payment.source.update_attributes(gateway_customer_profile_id: generate_profile_id(success))
22
+ payment.source.update(gateway_customer_profile_id: generate_profile_id(success))
23
23
  end
24
24
  end
25
25
 
@@ -199,6 +199,9 @@ module Spree
199
199
  # 4. app/views/spree/admin/payments/source_views/_{partial_name}.html.erb
200
200
  # The view that represents your payment method on orders in the backend
201
201
  #
202
+ # 5. app/views/spree/api/payments/source_views/_{partial_name}.json.jbuilder
203
+ # The view that represents your payment method on orders through the api
204
+ #
202
205
  def partial_name
203
206
  deprecated_method_type_override || type.demodulize.underscore
204
207
  end
@@ -4,7 +4,7 @@ module Spree
4
4
  class PaymentSource < Spree::Base
5
5
  self.abstract_class = true
6
6
 
7
- belongs_to :payment_method
7
+ belongs_to :payment_method, optional: true
8
8
 
9
9
  has_many :payments, as: :source
10
10
  has_many :wallet_payment_sources, class_name: 'Spree::WalletPaymentSource', as: :payment_source, inverse_of: :payment_source
@@ -12,8 +12,8 @@ module Spree
12
12
 
13
13
  MAXIMUM_AMOUNT = BigDecimal('99_999_999.99')
14
14
 
15
- belongs_to :variant, -> { with_deleted }, class_name: 'Spree::Variant', touch: true
16
- belongs_to :country, class_name: "Spree::Country", foreign_key: "country_iso", primary_key: "iso"
15
+ belongs_to :variant, -> { with_deleted }, class_name: 'Spree::Variant', touch: true, optional: true
16
+ belongs_to :country, class_name: "Spree::Country", foreign_key: "country_iso", primary_key: "iso", optional: true
17
17
 
18
18
  delegate :product, to: :variant
19
19
  delegate :tax_rates, to: :variant