solidus_core 2.1.0.beta1 → 2.1.0.rc1

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