solidus_core 2.9.6 → 2.10.0.beta1

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 (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