solidus_core 2.1.0.beta1 → 2.1.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.

Potentially problematic release.


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

Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/app/mailers/spree/base_mailer.rb +2 -7
  3. data/app/mailers/spree/carton_mailer.rb +3 -11
  4. data/app/mailers/spree/order_mailer.rb +3 -12
  5. data/app/models/concerns/spree/default_price.rb +2 -3
  6. data/app/models/concerns/spree/user_methods.rb +1 -1
  7. data/app/models/concerns/spree/user_payment_source.rb +0 -6
  8. data/app/models/spree/address.rb +0 -9
  9. data/app/models/spree/adjustment.rb +2 -63
  10. data/app/models/spree/app_configuration.rb +0 -22
  11. data/app/models/spree/calculator/flexi_rate.rb +7 -12
  12. data/app/models/spree/calculator/shipping/flat_percent_item_total.rb +1 -1
  13. data/app/models/spree/calculator/tiered_flat_rate.rb +3 -1
  14. data/app/models/spree/calculator/tiered_percent.rb +3 -1
  15. data/app/models/spree/country.rb +0 -7
  16. data/app/models/spree/gateway.rb +0 -9
  17. data/app/models/spree/order.rb +1 -15
  18. data/app/models/spree/order/checkout.rb +0 -41
  19. data/app/models/spree/payment.rb +0 -22
  20. data/app/models/spree/payment/processing.rb +1 -1
  21. data/app/models/spree/product/scopes.rb +1 -8
  22. data/app/models/spree/promotion/actions/create_adjustment.rb +6 -1
  23. data/app/models/spree/promotion/actions/create_item_adjustments.rb +6 -1
  24. data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +6 -1
  25. data/app/models/spree/refund.rb +1 -1
  26. data/app/models/spree/store.rb +1 -2
  27. data/app/models/spree/zone.rb +12 -10
  28. data/lib/spree/core.rb +0 -10
  29. data/lib/spree/core/engine.rb +0 -2
  30. data/lib/spree/core/version.rb +1 -6
  31. data/spec/mailers/carton_mailer_spec.rb +0 -9
  32. data/spec/mailers/order_mailer_spec.rb +0 -14
  33. data/spec/models/spree/calculator/flexi_rate_spec.rb +132 -20
  34. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +4 -0
  35. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +41 -1
  36. data/spec/models/spree/calculator/tiered_percent_spec.rb +45 -1
  37. data/spec/models/spree/gateway/bogus_spec.rb +0 -7
  38. data/spec/models/spree/order/checkout_spec.rb +0 -119
  39. data/spec/models/spree/order/payment_spec.rb +19 -10
  40. data/spec/models/spree/order_spec.rb +0 -45
  41. data/spec/models/spree/payment_spec.rb +56 -63
  42. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +2 -2
  43. data/spec/models/spree/store_spec.rb +0 -8
  44. data/spec/models/spree/user_spec.rb +0 -7
  45. data/spec/models/spree/variant_spec.rb +0 -8
  46. metadata +2 -4
  47. data/config/initializers/spree_user.rb +0 -10
  48. data/lib/spree/core/routes.rb +0 -20
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d27a7b1fb09b6aa81702049ad833916e12b1aa1b
4
- data.tar.gz: 6ece03114b6598ab2dc3bebe5469f48d442e8e2e
3
+ metadata.gz: 6c66409a6f87b3a90858c73c06bd98dc912c9dfa
4
+ data.tar.gz: '0148e46c9524d70114def79a9945127920e00289'
5
5
  SHA512:
6
- metadata.gz: c100bab17654d3fabdf7fe3534f7a98881a9a177033b576cd3fe5fa1cf575bf2610b87e8dc8348dfa616566e3e32fa5b8795484fada7dc7c3e376890fb3d3345
7
- data.tar.gz: ef65a5ccb1f92b9c9d7695db45cc98bada5b2343f70d6dc9435c9eb32e4110eea34c80dcb4db5ef0fde1bcb29f3584bbbdd0bf2e4dbb851bb0f4493aa2a121a3
6
+ metadata.gz: ae05f78d66d73feae17890ea3632d76c6712d1358cc1173613bdfd0c6fb214dbaad740fe1b9a12249397555bf3ec405b60aae833a69f3b96f76bcf86ffec1b44
7
+ data.tar.gz: 4f11abc46de577ac3aeff8cecc95e1f91fb1c8fd30c1546f3f7ad0b0da68a01161617c4a7b5ca6ec6acfe50bb4f7ede887815ae625dc86dc67142e729a436ea5
@@ -1,12 +1,7 @@
1
1
  module Spree
2
2
  class BaseMailer < ActionMailer::Base
3
- def from_address(store = nil)
4
- if store
5
- store.mail_from_address
6
- else
7
- Spree::Deprecation.warn "A Spree::Store should be provided to determine the from address.", caller
8
- Spree::Config[:mails_from]
9
- end
3
+ def from_address(store)
4
+ store.mail_from_address
10
5
  end
11
6
 
12
7
  def money(amount, currency = Spree::Config[:currency])
@@ -14,17 +14,9 @@ module Spree
14
14
  # signature is:
15
15
  # def shipped_email(carton:, order:, resend: false)
16
16
  def shipped_email(options, deprecated_options = {})
17
- if options.is_a?(Integer)
18
- Spree::Deprecation.warn "Calling shipped_email with a carton_id is DEPRECATED. Instead use CartonMailer.shipped_email(order: order, carton: carton)"
19
- @carton = Carton.find(options)
20
- @order = @carton.orders.first # assume first order
21
- @manifest = @carton.manifest # use the entire manifest, since we don't know the precise order
22
- options = deprecated_options
23
- else
24
- @order = options.fetch(:order)
25
- @carton = options.fetch(:carton)
26
- @manifest = @carton.manifest_for_order(@order)
27
- end
17
+ @order = options.fetch(:order)
18
+ @carton = options.fetch(:carton)
19
+ @manifest = @carton.manifest_for_order(@order)
28
20
  options = { resend: false }.merge(options)
29
21
  @store = @order.store
30
22
  subject = (options[:resend] ? "[#{Spree.t(:resend).upcase}] " : '')
@@ -1,7 +1,7 @@
1
1
  module Spree
2
2
  class OrderMailer < BaseMailer
3
3
  def confirm_email(order, resend = false)
4
- @order = find_order(order)
4
+ @order = order
5
5
  @store = @order.store
6
6
  subject = build_subject(Spree.t('order_mailer.confirm_email.subject'), resend)
7
7
 
@@ -9,7 +9,7 @@ module Spree
9
9
  end
10
10
 
11
11
  def cancel_email(order, resend = false)
12
- @order = find_order(order)
12
+ @order = order
13
13
  @store = @order.store
14
14
  subject = build_subject(Spree.t('order_mailer.cancel_email.subject'), resend)
15
15
 
@@ -17,7 +17,7 @@ module Spree
17
17
  end
18
18
 
19
19
  def inventory_cancellation_email(order, inventory_units, resend = false)
20
- @order, @inventory_units = find_order(order), inventory_units
20
+ @order, @inventory_units = order, inventory_units
21
21
  @store = @order.store
22
22
  subject = build_subject(Spree.t('order_mailer.inventory_cancellation.subject'), resend)
23
23
 
@@ -26,15 +26,6 @@ module Spree
26
26
 
27
27
  private
28
28
 
29
- def find_order(order)
30
- if order.respond_to?(:id)
31
- order
32
- else
33
- Spree::Deprecation.warn("Calling OrderMailer with an id is deprecated. Pass the Spree::Order object instead.")
34
- Spree::Order.find(order)
35
- end
36
- end
37
-
38
29
  def build_subject(subject_text, resend)
39
30
  resend_text = (resend ? "[#{Spree.t(:resend).upcase}] " : '')
40
31
  "#{resend_text}#{@order.store.name} #{subject_text} ##{@order.number}"
@@ -15,9 +15,8 @@ module Spree
15
15
  default_price || build_default_price(Spree::Config.default_pricing_options.desired_attributes)
16
16
  end
17
17
 
18
- delegate :display_price, :display_amount, :price, :currency, to: :find_or_build_default_price
19
- delegate :price=, :currency=, to: :find_or_build_default_price
20
- deprecate :currency=, :currency, deprecator: Spree::Deprecation
18
+ delegate :display_price, :display_amount, :price, to: :find_or_build_default_price
19
+ delegate :price=, to: :find_or_build_default_price
21
20
 
22
21
  def has_default_price?
23
22
  !default_price.nil?
@@ -11,7 +11,7 @@ module Spree
11
11
  extend Spree::DisplayMoney
12
12
 
13
13
  has_many :role_users, foreign_key: "user_id", class_name: "Spree::RoleUser", dependent: :destroy
14
- has_many :spree_roles, through: :role_users, source: :role
14
+ has_many :spree_roles, through: :role_users, source: :role, class_name: "Spree::Role"
15
15
 
16
16
  has_many :user_stock_locations, foreign_key: "user_id", class_name: "Spree::UserStockLocation"
17
17
  has_many :stock_locations, through: :user_stock_locations
@@ -13,11 +13,5 @@ module Spree
13
13
  def payment_sources
14
14
  credit_cards.with_payment_profile
15
15
  end
16
-
17
- def drop_payment_source(source)
18
- Spree::Deprecation.warn("User#drop_payment_source is deprecated", caller)
19
- gateway = source.payment_method
20
- gateway.disable_customer_profile(source)
21
- end
22
16
  end
23
17
  end
@@ -33,15 +33,6 @@ module Spree
33
33
  new(country: Spree::Country.default)
34
34
  end
35
35
 
36
- def self.default(user = nil, kind = "bill")
37
- Spree::Deprecation.warn("Address.default is deprecated. Use User.default_address or Address.build_default", caller)
38
- if user
39
- user.send(:"#{kind}_address") || build_default
40
- else
41
- build_default
42
- end
43
- end
44
-
45
36
  # @return [Address] an equal address already in the database or a newly created one
46
37
  def self.factory(attributes)
47
38
  full_attributes = value_attributes(column_defaults, new(attributes).attributes)
@@ -32,15 +32,7 @@ module Spree
32
32
  after_commit :repair_adjustments_associations_on_destroy, on: [:destroy]
33
33
 
34
34
  scope :not_finalized, -> { where(finalized: false) }
35
- scope :open, -> do
36
- Spree::Deprecation.warn "Adjustment.open is deprecated. Instead use Adjustment.not_finalized", caller
37
- where(finalized: false)
38
- end
39
35
  scope :finalized, -> { where(finalized: true) }
40
- scope :closed, -> do
41
- Spree::Deprecation.warn "Adjustment.closed is deprecated. Instead use Adjustment.finalized", caller
42
- where(finalized: true)
43
- end
44
36
  scope :cancellation, -> { where(source_type: 'Spree::UnitCancel') }
45
37
  scope :tax, -> { where(source_type: 'Spree::TaxRate') }
46
38
  scope :non_tax, -> do
@@ -78,55 +70,6 @@ module Spree
78
70
  update_attributes(finalized: false)
79
71
  end
80
72
 
81
- # Deprecated methods
82
- def state
83
- Spree::Deprecation.warn "Adjustment#state is deprecated. Instead use Adjustment#finalized?", caller
84
- finalized? ? "closed" : "open"
85
- end
86
-
87
- def state=(new_state)
88
- Spree::Deprecation.warn "Adjustment#state= is deprecated. Instead use Adjustment#finalized=", caller
89
- case new_state
90
- when "open"
91
- self.finalized = false
92
- when "closed"
93
- self.finalized = true
94
- else
95
- raise "invaliid adjustment state #{new_state}"
96
- end
97
- end
98
-
99
- def open?
100
- Spree::Deprecation.warn "Adjustment#open? is deprecated. Instead use Adjustment#finalized?", caller
101
- !closed?
102
- end
103
-
104
- def closed?
105
- Spree::Deprecation.warn "Adjustment#closed? is deprecated. Instead use Adjustment#finalized?", caller
106
- finalized?
107
- end
108
-
109
- def open
110
- Spree::Deprecation.warn "Adjustment#open is deprecated. Instead use Adjustment#unfinalize", caller
111
- unfinalize
112
- end
113
-
114
- def open!
115
- Spree::Deprecation.warn "Adjustment#open! is deprecated. Instead use Adjustment#unfinalize!", caller
116
- unfinalize!
117
- end
118
-
119
- def close
120
- Spree::Deprecation.warn "Adjustment#close is deprecated. Instead use Adjustment#finalize", caller
121
- finalize
122
- end
123
-
124
- def close!
125
- Spree::Deprecation.warn "Adjustment#close! is deprecated. Instead use Adjustment#finalize!", caller
126
- finalize!
127
- end
128
- # End deprecated methods
129
-
130
73
  def currency
131
74
  adjustable ? adjustable.currency : Spree::Config[:currency]
132
75
  end
@@ -152,18 +95,14 @@ module Spree
152
95
  # If the adjustment has no source (such as when created manually from the
153
96
  # admin) or is closed, this is a noop.
154
97
  #
155
- # @param target [Spree::LineItem,Spree::Shipment,Spree::Order] Deprecated: the target to calculate against
156
98
  # @return [BigDecimal] New amount of this adjustment
157
- def update!(target = nil)
158
- if target
159
- Spree::Deprecation.warn("Passing a target to Adjustment#update! is deprecated. The adjustment will use the correct target from it's adjustable association.", caller)
160
- end
99
+ def update!
161
100
  return amount if finalized?
162
101
 
163
102
  # If the adjustment has no source, do not attempt to re-calculate the amount.
164
103
  # Chances are likely that this was a manually created adjustment in the admin backend.
165
104
  if source.present?
166
- self.amount = source.compute_amount(target || adjustable)
105
+ self.amount = source.compute_amount(adjustable)
167
106
 
168
107
  if promotion?
169
108
  self.eligible = source.promotion.eligible?(adjustable, promotion_code: promotion_code)
@@ -404,27 +404,5 @@ module Spree
404
404
  country: Spree::Country.find_by(iso: admin_vat_country_iso)
405
405
  )
406
406
  end
407
-
408
- # all the following can be deprecated when store prefs are no longer supported
409
- # @private
410
- DEPRECATED_STORE_PREFERENCES = {
411
- site_name: :name,
412
- site_url: :url,
413
- default_meta_description: :meta_description,
414
- default_meta_keywords: :meta_keywords,
415
- default_seo_title: :seo_title
416
- }
417
-
418
- DEPRECATED_STORE_PREFERENCES.each do |old_preference_name, store_method|
419
- # Avoid warning about implementation details
420
- bc = ActiveSupport::BacktraceCleaner.new
421
- bc.add_silencer { |line| line =~ %r{spree/preferences} }
422
-
423
- # support all the old preference methods with a warning
424
- define_method "preferred_#{old_preference_name}" do
425
- Spree::Deprecation.warn("#{old_preference_name} is no longer supported on Spree::Config, please access it through #{store_method} on Spree::Store", bc.clean(caller))
426
- Spree::Store.default.send(store_method)
427
- end
428
- end
429
407
  end
430
408
  end
@@ -2,8 +2,8 @@ require_dependency 'spree/calculator'
2
2
 
3
3
  module Spree
4
4
  class Calculator::FlexiRate < Calculator
5
- preference :first_item, :decimal, default: 0.0
6
- preference :additional_item, :decimal, default: 0.0
5
+ preference :first_item, :decimal, default: 0
6
+ preference :additional_item, :decimal, default: 0
7
7
  preference :max_items, :integer, default: 0
8
8
  preference :currency, :string, default: ->{ Spree::Config[:currency] }
9
9
 
@@ -12,18 +12,13 @@ module Spree
12
12
  end
13
13
 
14
14
  def compute(object)
15
- sum = 0
16
- max = preferred_max_items.to_i
17
15
  items_count = object.quantity
18
- items_count.times do |i|
19
- if i == 0
20
- sum += preferred_first_item.to_f
21
- elsif ((max > 0) && (i <= (max - 1))) || (max == 0)
22
- sum += preferred_additional_item.to_f
23
- end
24
- end
16
+ items_count = [items_count, preferred_max_items].min unless preferred_max_items.zero?
25
17
 
26
- sum
18
+ return BigDecimal.new(0) if items_count == 0
19
+
20
+ additional_items_count = items_count - 1
21
+ preferred_first_item + preferred_additional_item * additional_items_count
27
22
  end
28
23
  end
29
24
  end
@@ -11,7 +11,7 @@ module Spree
11
11
 
12
12
  def compute_from_price(price)
13
13
  value = price * BigDecimal(preferred_flat_percent.to_s) / 100.0
14
- (value * 100).round.to_f / 100
14
+ value.round(2)
15
15
  end
16
16
  end
17
17
  end
@@ -8,7 +8,9 @@ module Spree
8
8
  before_validation do
9
9
  # Convert tier values to decimals. Strings don't do us much good.
10
10
  if preferred_tiers.is_a?(Hash)
11
- self.preferred_tiers = Hash[*preferred_tiers.flatten.map(&:to_f)]
11
+ self.preferred_tiers = preferred_tiers.map do |k, v|
12
+ [BigDecimal.new(k.to_s), BigDecimal.new(v.to_s)]
13
+ end.to_h
12
14
  end
13
15
  end
14
16
 
@@ -8,7 +8,9 @@ module Spree
8
8
  before_validation do
9
9
  # Convert tier values to decimals. Strings don't do us much good.
10
10
  if preferred_tiers.is_a?(Hash)
11
- self.preferred_tiers = Hash[*preferred_tiers.flatten.map(&:to_f)]
11
+ self.preferred_tiers = preferred_tiers.map do |k, v|
12
+ [BigDecimal.new(k.to_s), BigDecimal.new(v.to_s)]
13
+ end.to_h
12
14
  end
13
15
  end
14
16
 
@@ -6,13 +6,6 @@ module Spree
6
6
 
7
7
  validates :name, :iso_name, presence: true
8
8
 
9
- def self.states_required_by_country_id
10
- Spree::Deprecation.warn "Spree::Country.states_required_by_country_id is deprecated and will be removed from future releases, Implement it yourself.", caller
11
- states_required = Hash.new(true)
12
- all.each { |country| states_required[country.id.to_s] = country.states_required }
13
- states_required
14
- end
15
-
16
9
  def self.default
17
10
  if Spree::Config.default_country_id
18
11
  Spree::Deprecation.warn("Setting your default country via its ID is deprecated. Please set your default country via the `default_country_iso` setting.", caller)
@@ -42,15 +42,6 @@ module Spree
42
42
  source.has_payment_profile?
43
43
  end
44
44
 
45
- def disable_customer_profile(source)
46
- Spree::Deprecation.warn("Gateway#disable_customer_profile is deprecated")
47
- if source.is_a? CreditCard
48
- source.update_column :gateway_customer_profile_id, nil
49
- else
50
- raise 'You must implement disable_customer_profile method for this gateway.'
51
- end
52
- end
53
-
54
45
  def sources_by_order(order)
55
46
  source_ids = order.payments.where(payment_method_id: id).pluck(:source_id).uniq
56
47
  payment_source_class.where(id: source_ids).with_payment_profile
@@ -127,13 +127,6 @@ module Spree
127
127
  class_attribute :line_item_comparison_hooks
128
128
  self.line_item_comparison_hooks = Set.new
129
129
 
130
- class << self
131
- def by_number(number)
132
- where(number: number)
133
- end
134
- deprecate :by_number, deprecator: Spree::Deprecation
135
- end
136
-
137
130
  scope :created_between, ->(start_date, end_date) { where(created_at: start_date..end_date) }
138
131
  scope :completed_between, ->(start_date, end_date) { where(completed_at: start_date..end_date) }
139
132
 
@@ -212,7 +205,7 @@ module Spree
212
205
 
213
206
  # Is this a free order in which case the payment step should be skipped
214
207
  def payment_required?
215
- total.to_f > 0.0
208
+ total > 0
216
209
  end
217
210
 
218
211
  def confirmation_required?
@@ -605,13 +598,6 @@ module Spree
605
598
  guest_token
606
599
  end
607
600
 
608
- # @deprecated Do not use this method. Behaviour is unreliable.
609
- def fully_discounted?
610
- adjustment_total + line_items.map(&:final_amount).sum == 0.0
611
- end
612
- alias_method :fully_discounted, :fully_discounted?
613
- deprecate :fully_discounted, deprecator: Spree::Deprecation
614
-
615
601
  def unreturned_exchange?
616
602
  # created_at - 1 is a hack to ensure that this doesn't blow up on MySQL,
617
603
  # records loaded from the DB on MySQL will have a precision of 1 second,
@@ -242,47 +242,6 @@ module Spree
242
242
  checkout_step_index(state) > checkout_step_index(self.state)
243
243
  end
244
244
 
245
- define_callbacks :updating_from_params, terminator: deprecated_false_terminator
246
-
247
- set_callback :updating_from_params, :before, :update_params_payment_source
248
-
249
- # @deprecated Use {OrderUpdateAttributes} instead
250
- def update_from_params(params, permitted_params, request_env = {})
251
- Spree::Deprecation.warn "update_from_params is deprecated. Use the OrderUpdateAttributes class instead", caller
252
- success = false
253
- @updating_params = params
254
- run_callbacks :updating_from_params do
255
- attributes = @updating_params[:order] ? @updating_params[:order].permit(permitted_params).delete_if { |_k, v| v.nil? } : {}
256
-
257
- # Set existing card after setting permitted parameters because
258
- # rails would slice parameters containg ruby objects, apparently
259
- existing_card_id = @updating_params[:order] ? @updating_params[:order][:existing_card] : nil
260
-
261
- if existing_card_id.present?
262
- credit_card = CreditCard.find existing_card_id
263
- if credit_card.user_id != user_id || credit_card.user_id.blank?
264
- raise Core::GatewayError.new Spree.t(:invalid_credit_card)
265
- end
266
-
267
- credit_card.verification_value = params[:cvc_confirm] if params[:cvc_confirm].present?
268
-
269
- attributes[:payments_attributes].first[:source] = credit_card
270
- attributes[:payments_attributes].first[:payment_method_id] = credit_card.payment_method_id
271
- attributes[:payments_attributes].first.delete :source_attributes
272
- end
273
-
274
- if attributes[:payments_attributes]
275
- attributes[:payments_attributes].first[:request_env] = request_env
276
- end
277
-
278
- update = OrderUpdateAttributes.new(self, attributes, request_env: request_env)
279
- success = update.apply
280
- end
281
-
282
- @updating_params = nil
283
- success
284
- end
285
-
286
245
  def bill_address_attributes=(attributes)
287
246
  self.bill_address = Address.immutable_merge(bill_address, attributes)
288
247
  end