solidus_core 2.2.2 → 2.3.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 (175) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -7
  3. data/app/assets/javascripts/spree.js.erb +2 -2
  4. data/app/helpers/spree/base_helper.rb +3 -4
  5. data/app/models/spree/address.rb +1 -1
  6. data/app/models/spree/adjustment.rb +3 -1
  7. data/app/models/spree/app_configuration.rb +43 -0
  8. data/app/models/spree/billing_integration.rb +2 -2
  9. data/app/models/spree/calculator/default_tax.rb +3 -1
  10. data/app/models/spree/calculator/distributed_amount.rb +24 -0
  11. data/app/models/spree/calculator/free_shipping.rb +0 -1
  12. data/app/models/spree/calculator/tiered_flat_rate.rb +17 -3
  13. data/app/models/spree/calculator/tiered_percent.rb +18 -3
  14. data/app/models/spree/distributed_amounts_handler.rb +43 -0
  15. data/app/models/spree/gateway/bogus.rb +7 -83
  16. data/app/models/spree/gateway/bogus_simple.rb +7 -20
  17. data/app/models/spree/gateway.rb +8 -58
  18. data/app/models/spree/image.rb +1 -1
  19. data/app/models/spree/line_item.rb +1 -1
  20. data/app/models/spree/option_value.rb +1 -1
  21. data/app/models/spree/order/checkout.rb +1 -4
  22. data/app/models/spree/order/number_generator.rb +43 -0
  23. data/app/models/spree/order.rb +33 -38
  24. data/app/models/spree/order_contents.rb +1 -1
  25. data/app/models/spree/order_taxation.rb +79 -0
  26. data/app/models/spree/order_update_attributes.rb +0 -2
  27. data/app/models/spree/order_updater.rb +55 -33
  28. data/app/models/spree/payment.rb +0 -1
  29. data/app/models/spree/payment_method/bogus_credit_card.rb +87 -0
  30. data/app/models/spree/payment_method/check.rb +14 -6
  31. data/app/models/spree/payment_method/credit_card.rb +41 -0
  32. data/app/models/spree/payment_method/simple_bogus_credit_card.rb +24 -0
  33. data/app/models/spree/payment_method/store_credit.rb +5 -13
  34. data/app/models/spree/payment_method.rb +126 -40
  35. data/app/models/spree/preferences/preferable.rb +5 -1
  36. data/app/models/spree/preferences/store.rb +2 -2
  37. data/app/models/spree/product/scopes.rb +14 -1
  38. data/app/models/spree/product.rb +10 -4
  39. data/app/models/spree/promotion_action.rb +4 -0
  40. data/app/models/spree/promotion_code/batch_builder.rb +3 -2
  41. data/app/models/spree/promotion_rule.rb +4 -0
  42. data/app/models/spree/role.rb +2 -0
  43. data/app/models/spree/role_user.rb +2 -0
  44. data/app/models/spree/shipment.rb +4 -2
  45. data/app/models/spree/shipping_method.rb +3 -1
  46. data/app/models/spree/shipping_rate.rb +1 -1
  47. data/app/models/spree/state.rb +10 -2
  48. data/app/models/spree/stock_item.rb +3 -3
  49. data/app/models/spree/store.rb +5 -0
  50. data/app/models/spree/store_credit.rb +2 -2
  51. data/app/models/spree/store_credit_event.rb +1 -1
  52. data/app/models/spree/store_selector/by_server_name.rb +30 -0
  53. data/app/models/spree/store_selector/legacy.rb +48 -0
  54. data/app/models/spree/tax/item_tax.rb +20 -0
  55. data/app/models/spree/tax/order_adjuster.rb +2 -14
  56. data/app/models/spree/tax/order_tax.rb +18 -0
  57. data/app/models/spree/tax/shipping_rate_taxer.rb +4 -13
  58. data/app/models/spree/tax/tax_helpers.rb +5 -3
  59. data/app/models/spree/tax_calculator/default.rb +83 -0
  60. data/app/models/spree/tax_calculator/shipping_rate.rb +46 -0
  61. data/app/models/spree/tax_category.rb +9 -1
  62. data/app/models/spree/tax_rate.rb +31 -7
  63. data/app/models/spree/tax_rate_tax_category.rb +6 -0
  64. data/app/models/spree/taxon.rb +1 -1
  65. data/app/models/spree/variant.rb +1 -1
  66. data/app/views/spree/{shipment_mailer → carton_mailer}/shipped_email.html.erb +3 -3
  67. data/app/views/spree/order_mailer/cancel_email.html.erb +3 -3
  68. data/app/views/spree/order_mailer/confirm_email.html.erb +2 -2
  69. data/app/views/spree/order_mailer/inventory_cancellation_email.html.erb +26 -0
  70. data/app/views/spree/reimbursement_mailer/reimbursement_email.html.erb +2 -2
  71. data/app/views/spree/test_mailer/test_email.html.erb +2 -2
  72. data/config/locales/en.yml +66 -57
  73. data/db/default/spree/refund_reasons.rb +1 -0
  74. data/db/default/spree/shipping_categories.rb +1 -0
  75. data/db/default/spree/stock_locations.rb +2 -0
  76. data/db/default/spree/stores.rb +3 -4
  77. data/db/migrate/20170412103617_transform_tax_rate_category_relation.rb +48 -0
  78. data/db/migrate/20170422134804_add_roles_unique_constraints.rb +6 -0
  79. data/db/migrate/20170522143442_add_time_range_to_tax_rate.rb +6 -0
  80. data/db/migrate/20170608074534_rename_bogus_gateways.rb +13 -0
  81. data/lib/generators/spree/custom_user/custom_user_generator.rb +1 -1
  82. data/lib/generators/spree/dummy/dummy_generator.rb +10 -4
  83. data/lib/generators/spree/dummy/templates/rails/database.yml +12 -12
  84. data/lib/generators/spree/install/install_generator.rb +5 -5
  85. data/lib/generators/spree/install/templates/config/initializers/{spree.rb → solidus.rb} +0 -0
  86. data/lib/solidus/migrations/rename_gateways.rb +39 -0
  87. data/lib/spree/core/controller_helpers/auth.rb +1 -1
  88. data/lib/spree/core/controller_helpers/order.rb +10 -5
  89. data/lib/spree/core/controller_helpers/store.rb +1 -9
  90. data/lib/spree/core/current_store.rb +6 -14
  91. data/lib/spree/core/engine.rb +4 -3
  92. data/lib/spree/core/importer/order.rb +4 -4
  93. data/lib/spree/core/version.rb +1 -1
  94. data/lib/spree/core.rb +0 -1
  95. data/lib/spree/localized_number.rb +2 -1
  96. data/lib/spree/permitted_attributes.rb +12 -6
  97. data/lib/spree/testing_support/capybara_ext.rb +0 -1
  98. data/lib/spree/testing_support/factories/adjustment_factory.rb +5 -1
  99. data/lib/spree/testing_support/factories/order_factory.rb +26 -24
  100. data/lib/spree/testing_support/factories/payment_factory.rb +4 -0
  101. data/lib/spree/testing_support/factories/payment_method_factory.rb +3 -3
  102. data/lib/spree/testing_support/factories/shipment_factory.rb +7 -3
  103. data/lib/spree/testing_support/factories/tax_rate_factory.rb +1 -1
  104. data/lib/spree/testing_support/factories/variant_factory.rb +3 -1
  105. data/lib/tasks/migrations/copy_order_bill_address_to_credit_card.rake +0 -4
  106. data/lib/tasks/migrations/migrate_user_addresses.rake +2 -2
  107. data/lib/tasks/migrations/rename_gateways.rake +19 -0
  108. data/solidus_core.gemspec +2 -3
  109. data/spec/lib/spree/core/controller_helpers/order_spec.rb +32 -6
  110. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +0 -1
  111. data/spec/lib/spree/core/current_store_spec.rb +6 -11
  112. data/spec/lib/spree/core/price_migrator_spec.rb +4 -4
  113. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +199 -91
  114. data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +18 -0
  115. data/spec/lib/spree/localized_number_spec.rb +6 -0
  116. data/spec/mailers/carton_mailer_spec.rb +3 -3
  117. data/spec/models/spree/address_spec.rb +3 -3
  118. data/spec/models/spree/adjustment_spec.rb +71 -27
  119. data/spec/models/spree/calculator/default_tax_spec.rb +72 -1
  120. data/spec/models/spree/calculator/distributed_amount_spec.rb +32 -0
  121. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +20 -1
  122. data/spec/models/spree/calculator/tiered_percent_spec.rb +20 -1
  123. data/spec/models/spree/distributed_amounts_handler_spec.rb +79 -0
  124. data/spec/models/spree/gateway/bogus_simple.rb +7 -13
  125. data/spec/models/spree/gateway/bogus_spec.rb +8 -4
  126. data/spec/models/spree/gateway_spec.rb +6 -105
  127. data/spec/models/spree/image_spec.rb +23 -0
  128. data/spec/models/spree/order/checkout_spec.rb +3 -18
  129. data/spec/models/spree/order/number_generator_spec.rb +45 -0
  130. data/spec/models/spree/order/outstanding_balance_integration_spec.rb +135 -0
  131. data/spec/models/spree/order/payment_spec.rb +7 -2
  132. data/spec/models/spree/order/state_machine_spec.rb +4 -2
  133. data/spec/models/spree/order_capturing_spec.rb +8 -8
  134. data/spec/models/spree/order_contents_spec.rb +8 -1
  135. data/spec/models/spree/order_shipping_spec.rb +5 -1
  136. data/spec/models/spree/order_spec.rb +156 -83
  137. data/spec/models/spree/order_taxation_spec.rb +126 -0
  138. data/spec/models/spree/order_update_attributes_spec.rb +1 -5
  139. data/spec/models/spree/order_updater_spec.rb +20 -21
  140. data/spec/models/spree/payment_create_spec.rb +14 -6
  141. data/spec/models/spree/payment_method/bogus_credit_card_spec.rb +8 -0
  142. data/spec/models/spree/payment_method/check_spec.rb +78 -0
  143. data/spec/models/spree/payment_method/credit_card_spec.rb +66 -0
  144. data/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb +18 -0
  145. data/spec/models/spree/payment_method_spec.rb +47 -2
  146. data/spec/models/spree/payment_spec.rb +6 -8
  147. data/spec/models/spree/preference_spec.rb +1 -1
  148. data/spec/models/spree/price_spec.rb +1 -1
  149. data/spec/models/spree/product/scopes_spec.rb +46 -0
  150. data/spec/models/spree/promotion_action_spec.rb +4 -0
  151. data/spec/models/spree/promotion_code/batch_builder_spec.rb +25 -3
  152. data/spec/models/spree/promotion_code_batch_spec.rb +0 -6
  153. data/spec/models/spree/promotion_handler/coupon_spec.rb +1 -1
  154. data/spec/models/spree/promotion_rule_spec.rb +5 -0
  155. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +1 -1
  156. data/spec/models/spree/shipment_spec.rb +24 -3
  157. data/spec/models/spree/shipping_rate_spec.rb +5 -5
  158. data/spec/models/spree/state_spec.rb +31 -4
  159. data/spec/models/spree/stock/coordinator_spec.rb +24 -0
  160. data/spec/models/spree/stock/estimator_spec.rb +1 -1
  161. data/spec/models/spree/store_selector/by_server_name_spec.rb +26 -0
  162. data/spec/models/spree/store_selector/legacy_spec.rb +44 -0
  163. data/spec/models/spree/store_spec.rb +10 -2
  164. data/spec/models/spree/tax/order_adjuster_spec.rb +11 -21
  165. data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +10 -3
  166. data/spec/models/spree/tax/taxation_integration_spec.rb +43 -8
  167. data/spec/models/spree/tax_calculator/default_spec.rb +54 -0
  168. data/spec/models/spree/tax_rate_spec.rb +92 -0
  169. data/spec/models/spree/variant/vat_price_generator_spec.rb +4 -4
  170. data/spec/models/spree/variant_spec.rb +8 -2
  171. data/spec/spec_helper.rb +2 -1
  172. data/spec/support/test_gateway.rb +1 -1
  173. metadata +45 -24
  174. data/app/models/spree/tax/item_adjuster.rb +0 -51
  175. data/spec/models/spree/tax/item_adjuster_spec.rb +0 -82
@@ -0,0 +1,48 @@
1
+ class TransformTaxRateCategoryRelation < ActiveRecord::Migration[5.0]
2
+ class TaxRate < ActiveRecord::Base
3
+ self.table_name = "spree_tax_rates"
4
+ end
5
+
6
+ class TaxRateTaxCategory < ActiveRecord::Base
7
+ self.table_name = "spree_tax_rate_tax_categories"
8
+ end
9
+
10
+ def up
11
+ create_table :spree_tax_rate_tax_categories do |t|
12
+ t.integer :tax_category_id, index: true, null: false
13
+ t.integer :tax_rate_id, index: true, null: false
14
+ end
15
+
16
+ add_foreign_key :spree_tax_rate_tax_categories, :spree_tax_categories, column: :tax_category_id
17
+ add_foreign_key :spree_tax_rate_tax_categories, :spree_tax_rates, column: :tax_rate_id
18
+
19
+ TaxRate.where.not(tax_category_id: nil).find_each do |tax_rate|
20
+ TaxRateTaxCategory.create!(
21
+ tax_rate_id: tax_rate.id,
22
+ tax_category_id: tax_rate.tax_category_id
23
+ )
24
+ end
25
+
26
+ remove_column :spree_tax_rates, :tax_category_id
27
+ end
28
+
29
+ def down
30
+ add_column :spree_tax_rates, :tax_category_id, :integer, index: true
31
+ add_foreign_key :spree_tax_rates, :spree_tax_categories, column: :tax_category_id
32
+
33
+ TaxRate.find_each do |tax_rate|
34
+ tax_category_ids = TaxRateTaxCategory.where(tax_rate_id: tax_rate.id).pluck(:tax_category_id)
35
+
36
+ tax_category_ids.each_with_index do |category_id, i|
37
+ if i.zero?
38
+ tax_rate.update!(tax_category_id: category_id)
39
+ else
40
+ new_tax_rate = tax_rate.dup
41
+ new_tax_rate.update!(tax_category_id: category_id)
42
+ end
43
+ end
44
+ end
45
+
46
+ drop_table :spree_tax_rate_tax_categories
47
+ end
48
+ end
@@ -0,0 +1,6 @@
1
+ class AddRolesUniqueConstraints < ActiveRecord::Migration[5.0]
2
+ def change
3
+ add_index :spree_roles, :name, unique: true
4
+ add_index :spree_roles_users, [:user_id, :role_id], unique: true
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ class AddTimeRangeToTaxRate < ActiveRecord::Migration[5.0]
2
+ def change
3
+ add_column :spree_tax_rates, :starts_at, :datetime
4
+ add_column :spree_tax_rates, :expires_at, :datetime
5
+ end
6
+ end
@@ -0,0 +1,13 @@
1
+ class RenameBogusGateways < ActiveRecord::Migration[5.0]
2
+ def up
3
+ say_with_time 'Renaming bogus gateways into payment methods' do
4
+ Rake::Task['solidus:migrations:rename_gateways:up'].invoke
5
+ end
6
+ end
7
+
8
+ def down
9
+ say_with_time 'Renaming bogus payment methods into gateways' do
10
+ Rake::Task['solidus:migrations:rename_gateways:down'].invoke
11
+ end
12
+ end
13
+ end
@@ -3,7 +3,7 @@ module Spree
3
3
  include Rails::Generators::ResourceHelpers
4
4
  include Rails::Generators::Migration
5
5
 
6
- desc "Set up a Spree installation with a custom User class"
6
+ desc "Set up a Solidus installation with a custom User class"
7
7
 
8
8
  def self.source_paths
9
9
  paths = superclass.source_paths
@@ -4,7 +4,7 @@ require 'spree/core/version'
4
4
 
5
5
  module Spree
6
6
  class DummyGenerator < Rails::Generators::Base
7
- desc "Creates blank Rails application, installs Spree and all sample data"
7
+ desc "Creates blank Rails application, installs Solidus and all sample data"
8
8
 
9
9
  class_option :lib_name, default: ''
10
10
  class_option :database, default: ''
@@ -30,6 +30,15 @@ module Spree
30
30
  opts[:database] = 'sqlite3' if opts[:database].blank?
31
31
  opts[:force] = true
32
32
  opts[:skip_bundle] = true
33
+ opts[:skip_gemfile] = true
34
+ opts[:skip_git] = true
35
+ opts[:skip_keeps] = true
36
+ opts[:skip_listen] = true
37
+ opts[:skip_puma] = true
38
+ opts[:skip_rc] = true
39
+ opts[:skip_spring] = true
40
+ opts[:skip_test] = true
41
+ opts[:skip_yarn] = true
33
42
 
34
43
  puts "Generating dummy Rails application..."
35
44
  invoke Rails::Generators::AppGenerator,
@@ -46,9 +55,6 @@ module Spree
46
55
  template "rails/routes.rb", "#{dummy_path}/config/routes.rb", force: true
47
56
  template "rails/test.rb", "#{dummy_path}/config/environments/test.rb", force: true
48
57
  template "rails/script/rails", "#{dummy_path}/spec/dummy/script/rails", force: true
49
-
50
- # FIXME: We aren't ready for rails 5 defaults
51
- remove_file "#{dummy_path}/config/initializers/new_framework_defaults.rb"
52
58
  end
53
59
 
54
60
  def test_dummy_inject_extension_requirements
@@ -5,32 +5,32 @@ end %>
5
5
  when 'sqlite' %>
6
6
  development:
7
7
  adapter: sqlite3
8
- database: db/spree_development.sqlite3
8
+ database: db/solidus_development.sqlite3
9
9
  test:
10
10
  adapter: sqlite3
11
- database: db/spree_test.sqlite3
11
+ database: db/solidus_test.sqlite3
12
12
  timeout: 10000
13
13
  production:
14
14
  adapter: sqlite3
15
- database: db/spree_production.sqlite3
15
+ database: db/solidus_production.sqlite3
16
16
  <% when 'mysql' %>
17
17
  development:
18
18
  adapter: mysql2
19
- database: <%= database_prefix %><%= options[:lib_name] %>_spree_development
19
+ database: <%= database_prefix %><%= options[:lib_name] %>_solidus_development
20
20
  encoding: utf8
21
21
  test:
22
22
  adapter: mysql2
23
- database: <%= database_prefix %><%= options[:lib_name] %>_spree_test
23
+ database: <%= database_prefix %><%= options[:lib_name] %>_solidus_test
24
24
  encoding: utf8
25
25
  production:
26
26
  adapter: mysql2
27
- database: <%= database_prefix %><%= options[:lib_name] %>_spree_production
27
+ database: <%= database_prefix %><%= options[:lib_name] %>_solidus_production
28
28
  encoding: utf8
29
29
  <% when 'postgres', 'postgresql' %>
30
30
  <% db_host = ENV['DB_HOST'] -%>
31
31
  development:
32
32
  adapter: postgresql
33
- database: <%= database_prefix %><%= options[:lib_name] %>_spree_development
33
+ database: <%= database_prefix %><%= options[:lib_name] %>_solidus_development
34
34
  username: postgres
35
35
  min_messages: warning
36
36
  <% unless db_host.blank? %>
@@ -38,7 +38,7 @@ development:
38
38
  <% end %>
39
39
  test:
40
40
  adapter: postgresql
41
- database: <%= database_prefix %><%= options[:lib_name] %>_spree_test
41
+ database: <%= database_prefix %><%= options[:lib_name] %>_solidus_test
42
42
  username: postgres
43
43
  min_messages: warning
44
44
  <% unless db_host.blank? %>
@@ -46,7 +46,7 @@ test:
46
46
  <% end %>
47
47
  production:
48
48
  adapter: postgresql
49
- database: <%= database_prefix %><%= options[:lib_name] %>_spree_production
49
+ database: <%= database_prefix %><%= options[:lib_name] %>_solidus_production
50
50
  username: postgres
51
51
  min_messages: warning
52
52
  <% unless db_host.blank? %>
@@ -55,13 +55,13 @@ production:
55
55
  <% when 'sqlite', '', nil %>
56
56
  development:
57
57
  adapter: sqlite3
58
- database: db/spree_development.sqlite3
58
+ database: db/solidus_development.sqlite3
59
59
  test:
60
60
  adapter: sqlite3
61
- database: db/spree_test.sqlite3
61
+ database: db/solidus_test.sqlite3
62
62
  production:
63
63
  adapter: sqlite3
64
- database: db/spree_production.sqlite3
64
+ database: db/solidus_production.sqlite3
65
65
  <% else %>
66
66
  <% raise "Invalid DB specified: #{ENV['DB']}" %>
67
67
  <% end %>
@@ -5,7 +5,7 @@ require 'bundler/cli'
5
5
 
6
6
  module Spree
7
7
  class InstallGenerator < Rails::Generators::Base
8
- class_option :migrate, type: :boolean, default: true, banner: 'Run Spree migrations'
8
+ class_option :migrate, type: :boolean, default: true, banner: 'Run Solidus migrations'
9
9
  class_option :seed, type: :boolean, default: true, banner: 'load seed data (migrations must be run)'
10
10
  class_option :sample, type: :boolean, default: true, banner: 'load sample data (migrations must be run)'
11
11
  class_option :auto_accept, type: :boolean
@@ -35,7 +35,7 @@ module Spree
35
35
  end
36
36
 
37
37
  def add_files
38
- template 'config/initializers/spree.rb', 'config/initializers/spree.rb'
38
+ template 'config/initializers/solidus.rb', 'config/initializers/solidus.rb'
39
39
  end
40
40
 
41
41
  def additional_tweaks
@@ -152,11 +152,11 @@ Spree::Auth::Engine.load_seed if defined?(Spree::Auth)
152
152
  def install_routes
153
153
  insert_into_file File.join('config', 'routes.rb'), after: "Rails.application.routes.draw do\n" do
154
154
  <<-ROUTES
155
- # This line mounts Spree's routes at the root of your application.
155
+ # This line mounts Solidus's routes at the root of your application.
156
156
  # This means, any requests to URLs such as /products, will go to Spree::ProductsController.
157
157
  # If you would like to change where this engine is mounted, simply change the :at option to something different.
158
158
  #
159
- # We ask that you don't use the :as option here, as Spree relies on it being the default of "spree"
159
+ # We ask that you don't use the :as option here, as Solidus relies on it being the default of "spree"
160
160
  mount Spree::Core::Engine, at: '/'
161
161
 
162
162
  ROUTES
@@ -173,7 +173,7 @@ Spree::Auth::Engine.load_seed if defined?(Spree::Auth)
173
173
  def complete
174
174
  unless options[:quiet]
175
175
  puts "*" * 50
176
- puts "Spree has been installed successfully. You're all ready to go!"
176
+ puts "Solidus has been installed successfully. You're all ready to go!"
177
177
  puts " "
178
178
  puts "Enjoy!"
179
179
  end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Solidus
4
+ module Migrations
5
+ class RenameGateways
6
+ DEFAULT_MAPPING = {
7
+ 'Spree::Gateway' => 'Spree::PaymentMethod::CreditCard',
8
+ 'Spree::Gateway::Bogus' => 'Spree::PaymentMethod::BogusCreditCard',
9
+ 'Spree::Gateway::BogusSimple' => 'Spree::PaymentMethod::SimpleBogusCreditCard'
10
+ }
11
+
12
+ attr_reader :gateway_mapping
13
+
14
+ def initialize(gateway_mapping = DEFAULT_MAPPING)
15
+ @gateway_mapping = gateway_mapping
16
+ end
17
+
18
+ def up
19
+ gateway_mapping.inject(0) do |count, mapping|
20
+ count + update(from: mapping[0], to: mapping[1])
21
+ end
22
+ end
23
+
24
+ def down
25
+ gateway_mapping.inject(0) do |count, mapping|
26
+ count + update(from: mapping[1], to: mapping[0])
27
+ end
28
+ end
29
+
30
+ private
31
+
32
+ def update(from:, to:)
33
+ ActiveRecord::Base.connection.update <<-SQL.strip_heredoc
34
+ UPDATE spree_payment_methods SET type = '#{to}' WHERE type = '#{from}';
35
+ SQL
36
+ end
37
+ end
38
+ end
39
+ end
@@ -68,7 +68,7 @@ module Spree
68
68
  # This one will be defined by Devise
69
69
  elsif respond_to?(:current_spree_user)
70
70
  current_spree_user
71
- end
71
+ end
72
72
  end
73
73
  end
74
74
  end
@@ -14,7 +14,6 @@ module Spree
14
14
  helper_method :simple_current_order
15
15
  end
16
16
 
17
- # Used in the link_to_cart helper.
18
17
  def simple_current_order
19
18
  return @simple_current_order if @simple_current_order
20
19
 
@@ -24,9 +23,10 @@ module Spree
24
23
  @simple_current_order.last_ip_address = ip_address
25
24
  return @simple_current_order
26
25
  else
27
- @simple_current_order = Spree::Order.new
26
+ @simple_current_order = Spree::Order.new(current_order_params)
28
27
  end
29
28
  end
29
+ deprecate simple_current_order: :current_order, deprecator: Spree::Deprecation
30
30
 
31
31
  # The current incomplete order from the guest_token for use in cart and during checkout
32
32
  def current_order(options = {})
@@ -34,10 +34,10 @@ module Spree
34
34
 
35
35
  return @current_order if @current_order
36
36
 
37
- @current_order = find_order_by_token_or_user(options, true)
37
+ @current_order = find_order_by_token_or_user(options)
38
38
 
39
39
  if options[:create_order_if_necessary] && (@current_order.nil? || @current_order.completed?)
40
- @current_order = Spree::Order.new(current_order_params)
40
+ @current_order = Spree::Order.new(new_order_params)
41
41
  @current_order.user ||= try_spree_current_user
42
42
  # See issue https://github.com/spree/spree/issues/3346 for reasons why this line is here
43
43
  @current_order.created_by ||= try_spree_current_user
@@ -45,7 +45,7 @@ module Spree
45
45
  end
46
46
 
47
47
  if @current_order
48
- @current_order.last_ip_address = ip_address
48
+ @current_order.record_ip_address(ip_address)
49
49
  return @current_order
50
50
  end
51
51
  end
@@ -79,11 +79,16 @@ module Spree
79
79
  { currency: current_pricing_options.currency, guest_token: cookies.signed[:guest_token], store_id: current_store.id, user_id: try_spree_current_user.try(:id) }
80
80
  end
81
81
 
82
+ def new_order_params
83
+ current_order_params.merge(last_ip_address: ip_address)
84
+ end
85
+
82
86
  def find_order_by_token_or_user(options = {}, with_adjustments = false)
83
87
  options[:lock] ||= false
84
88
 
85
89
  # Find any incomplete orders for the guest_token
86
90
  if with_adjustments
91
+ Spree::Deprecation.warn "The second argument to find_order_by_token_or_user is deprecated, and will be removed in a future version."
87
92
  order = Spree::Order.incomplete.includes(:adjustments).lock(options[:lock]).find_by(current_order_params)
88
93
  else
89
94
  order = Spree::Order.incomplete.lock(options[:lock]).find_by(current_order_params)
@@ -4,20 +4,12 @@ module Spree
4
4
  module Store
5
5
  extend ActiveSupport::Concern
6
6
 
7
- # @!attribute [rw] current_store_class
8
- # @!scope class
9
- # Extension point for overriding how the current store is chosen.
10
- # Defaults to checking headers and server name
11
- # @return [#store] class used to help find the current store
12
7
  included do
13
- class_attribute :current_store_class
14
- self.current_store_class = Spree::Core::CurrentStore
15
-
16
8
  helper_method :current_store
17
9
  end
18
10
 
19
11
  def current_store
20
- @current_store ||= current_store_class.new(request).store
12
+ @current_store ||= Spree::Config.current_store_selector_class.new(request).store
21
13
  end
22
14
  end
23
15
  end
@@ -6,24 +6,16 @@ module Spree
6
6
  class CurrentStore
7
7
  def initialize(request)
8
8
  @request = request
9
+ @current_store_selector = Spree::Config.current_store_selector_class.new(request)
10
+ Spree::Deprecation.warn "Using Spree::Core::CurrentStore is deprecated. Use Spree::Config.current_store_selector_class instead", caller
9
11
  end
10
12
 
11
- # Chooses the current store based on a request.
12
- # Checks request headers for HTTP_SPREE_STORE and falls back to
13
- # looking up by the requesting server's name.
13
+ # Delegate store selection to Spree::Config.current_store_selector_class
14
+ # Using this class is deprecated.
15
+ #
14
16
  # @return [Spree::Store]
15
17
  def store
16
- if store_key
17
- Spree::Store.current(store_key)
18
- else
19
- Spree::Store.default
20
- end
21
- end
22
-
23
- private
24
-
25
- def store_key
26
- @request.headers['HTTP_SPREE_STORE'] || @request.env['SERVER_NAME']
18
+ @current_store_selector.store
27
19
  end
28
20
  end
29
21
  end
@@ -43,8 +43,8 @@ module Spree
43
43
 
44
44
  initializer "spree.register.payment_methods", before: :load_config_initializers do |app|
45
45
  app.config.spree.payment_methods = %w[
46
- Spree::Gateway::Bogus
47
- Spree::Gateway::BogusSimple
46
+ Spree::PaymentMethod::BogusCreditCard
47
+ Spree::PaymentMethod::SimpleBogusCreditCard
48
48
  Spree::PaymentMethod::StoreCredit
49
49
  Spree::PaymentMethod::Check
50
50
  ]
@@ -67,9 +67,10 @@ module Spree
67
67
  ]
68
68
 
69
69
  app.config.spree.calculators.promotion_actions_create_item_adjustments = %w[
70
- Spree::Calculator::PercentOnLineItem
70
+ Spree::Calculator::DistributedAmount
71
71
  Spree::Calculator::FlatRate
72
72
  Spree::Calculator::FlexiRate
73
+ Spree::Calculator::PercentOnLineItem
73
74
  Spree::Calculator::TieredPercent
74
75
  ]
75
76
 
@@ -54,7 +54,7 @@ module Spree
54
54
  shipments_hash.each do |s|
55
55
  shipment = Shipment.new
56
56
  shipment.tracking = s[:tracking]
57
- shipment.stock_location = Spree::StockLocation.find_by_admin_name(s[:stock_location]) || Spree::StockLocation.find_by_name!(s[:stock_location])
57
+ shipment.stock_location = Spree::StockLocation.find_by(admin_name: s[:stock_location]) || Spree::StockLocation.find_by!(name: s[:stock_location])
58
58
 
59
59
  inventory_units = s[:inventory_units] || []
60
60
  inventory_units.each do |iu|
@@ -87,7 +87,7 @@ module Spree
87
87
  order.shipments << shipment
88
88
  shipment.save!
89
89
 
90
- shipping_method = Spree::ShippingMethod.find_by_name(s[:shipping_method]) || Spree::ShippingMethod.find_by_admin_name!(s[:shipping_method])
90
+ shipping_method = Spree::ShippingMethod.find_by(name: s[:shipping_method]) || Spree::ShippingMethod.find_by!(admin_name: s[:shipping_method])
91
91
  rate = shipment.shipping_rates.create!(shipping_method: shipping_method,
92
92
  cost: s[:cost])
93
93
  shipment.selected_shipping_rate_id = rate.id
@@ -131,7 +131,7 @@ module Spree
131
131
  # Order API should be using state as that's the normal payment field.
132
132
  # spree_wombat serializes payment state as status so imported orders should fall back to status field.
133
133
  payment.state = p[:state] || p[:status] || 'completed'
134
- payment.payment_method = Spree::PaymentMethod.find_by_name!(p[:payment_method])
134
+ payment.payment_method = Spree::PaymentMethod.find_by!(name: p[:payment_method])
135
135
  payment.source = create_source_payment_from_params(p[:source], payment) if p[:source]
136
136
  payment.save!
137
137
  end
@@ -154,7 +154,7 @@ module Spree
154
154
  def self.ensure_variant_id_from_params(hash)
155
155
  sku = hash.delete(:sku)
156
156
  unless hash[:variant_id].present?
157
- hash[:variant_id] = Spree::Variant.with_prices.find_by_sku!(sku).id
157
+ hash[:variant_id] = Spree::Variant.with_prices.find_by!(sku: sku).id
158
158
  end
159
159
  hash
160
160
  end
@@ -1,6 +1,6 @@
1
1
  module Spree
2
2
  def self.solidus_version
3
- "2.2.2"
3
+ "2.3.0.beta1"
4
4
  end
5
5
 
6
6
  def self.solidus_gem_version
data/lib/spree/core.rb CHANGED
@@ -9,7 +9,6 @@ require 'mail'
9
9
  require 'monetize'
10
10
  require 'paperclip'
11
11
  require 'paranoia'
12
- require 'premailer/rails'
13
12
  require 'ransack'
14
13
  require 'state_machines-activerecord'
15
14
  require 'responders'
@@ -21,7 +21,8 @@ module Spree
21
21
  # then replace the locale-specific decimal separator with the standard separator if necessary
22
22
  number = number.gsub(separator, '.') unless separator == '.'
23
23
 
24
- number.to_d
24
+ # Handle empty string for ruby 2.4 compatibility
25
+ BigDecimal.new(number.presence || 0)
25
26
  end
26
27
  end
27
28
  end
@@ -73,7 +73,8 @@ module Spree
73
73
  :meta_keywords, :price, :sku, :deleted_at,
74
74
  :option_values_hash, :weight, :height, :width, :depth,
75
75
  :shipping_category_id, :tax_category_id,
76
- :taxon_ids, :option_type_ids, :cost_currency, :cost_price]
76
+ :taxon_ids, :option_type_ids, :cost_currency, :cost_price
77
+ ]
77
78
 
78
79
  @@property_attributes = [:name, :presentation]
79
80
 
@@ -81,7 +82,8 @@ module Spree
81
82
 
82
83
  @@shipment_attributes = [
83
84
  :special_instructions, :stock_location_id, :id, :tracking,
84
- :selected_shipping_rate_id]
85
+ :selected_shipping_rate_id
86
+ ]
85
87
 
86
88
  # month / year may be provided by some sources, or others may elect to use one field
87
89
  @@source_attributes = [
@@ -96,10 +98,12 @@ module Spree
96
98
  @@stock_location_attributes = [
97
99
  :name, :active, :address1, :address2, :city, :zipcode,
98
100
  :backorderable_default, :state_name, :state_id, :country_id, :phone,
99
- :propagate_all_variants]
101
+ :propagate_all_variants
102
+ ]
100
103
 
101
104
  @@stock_movement_attributes = [
102
- :quantity, :stock_item, :stock_item_id, :originator, :action]
105
+ :quantity, :stock_item, :stock_item_id, :originator, :action
106
+ ]
103
107
 
104
108
  @@store_attributes = [:name, :url, :seo_title, :meta_keywords,
105
109
  :meta_description, :default_currency,
@@ -109,7 +113,8 @@ module Spree
109
113
 
110
114
  @@taxon_attributes = [
111
115
  :name, :parent_id, :position, :icon, :description, :permalink, :taxonomy_id,
112
- :meta_description, :meta_keywords, :meta_title, :child_index]
116
+ :meta_description, :meta_keywords, :meta_title, :child_index
117
+ ]
113
118
 
114
119
  @@transfer_item_attributes = [:variant_id, :expected_quantity, :received_quantity]
115
120
 
@@ -123,6 +128,7 @@ module Spree
123
128
  :name, :presentation, :cost_price, :lock_version,
124
129
  :position, :track_inventory,
125
130
  :product_id, :product, :option_values_attributes, :price,
126
- :weight, :height, :width, :depth, :sku, :cost_currency, option_value_ids: [], options: [:name, :value]]
131
+ :weight, :height, :width, :depth, :sku, :cost_currency, option_value_ids: [], options: [:name, :value]
132
+ ]
127
133
  end
128
134
  end
@@ -106,7 +106,6 @@ module CapybaraExt
106
106
  end
107
107
 
108
108
  def wait_for_ajax
109
-
110
109
  Spree::Deprecation.warn <<-WARN.squish, caller
111
110
  wait_for_ajax has been deprecated.
112
111
  Please refer to the capybara documentation on how to properly wait for asyncronous behavior:
@@ -29,7 +29,11 @@ FactoryGirl.define do
29
29
  after(:create) do |adjustment|
30
30
  # Set correct tax category, so that adjustment amount is not 0
31
31
  if adjustment.adjustable.is_a?(Spree::LineItem)
32
- adjustment.source.tax_category = adjustment.adjustable.tax_category
32
+ if adjustment.adjustable.tax_category.present?
33
+ adjustment.source.tax_categories = [adjustment.adjustable.tax_category]
34
+ else
35
+ adjustment.source.tax_categories = []
36
+ end
33
37
  adjustment.source.save
34
38
  adjustment.update!
35
39
  end
@@ -18,10 +18,14 @@ FactoryGirl.define do
18
18
  line_items_price BigDecimal.new(10)
19
19
  end
20
20
 
21
+ # TODO: Improve the name of order_with_totals factory.
21
22
  factory :order_with_totals do
22
- after(:create) do |order, evaluator|
23
- create(:line_item, order: order, price: evaluator.line_items_price)
24
- order.line_items.reload # to ensure order.line_items is accessible after
23
+ after(:build) do |order, evaluator|
24
+ order.line_items << build(
25
+ :line_item,
26
+ order: order,
27
+ price: evaluator.line_items_price
28
+ )
25
29
  end
26
30
  end
27
31
 
@@ -37,7 +41,7 @@ FactoryGirl.define do
37
41
  stock_location { create(:stock_location) }
38
42
  end
39
43
 
40
- after(:create) do |order, evaluator|
44
+ after(:build) do |order, evaluator|
41
45
  evaluator.stock_location # must evaluate before creating line items
42
46
 
43
47
  evaluator.line_items_attributes.each do |attributes|
@@ -52,6 +56,24 @@ FactoryGirl.define do
52
56
  order.update!
53
57
  end
54
58
 
59
+ factory :completed_order_with_promotion do
60
+ transient do
61
+ promotion nil
62
+ end
63
+
64
+ after(:create) do |order, evaluator|
65
+ promotion = evaluator.promotion || create(:promotion, code: "test")
66
+ promotion_code = promotion.codes.first || create(:promotion_code, promotion: promotion)
67
+
68
+ promotion.activate(order: order, promotion_code: promotion_code)
69
+ order.order_promotions.create!(promotion: promotion, promotion_code: promotion_code)
70
+
71
+ # Complete the order after the promotion has been activated
72
+ order.update_column(:completed_at, Time.current)
73
+ order.update_column(:state, "complete")
74
+ end
75
+ end
76
+
55
77
  factory :order_ready_to_complete do
56
78
  state 'confirm'
57
79
  payment_state 'checkout'
@@ -75,7 +97,6 @@ FactoryGirl.define do
75
97
  state 'complete'
76
98
 
77
99
  after(:create) do |order|
78
- order.refresh_shipment_rates
79
100
  order.shipments.each do |shipment|
80
101
  shipment.inventory_units.update_all state: 'on_hand', pending: false
81
102
  end
@@ -130,23 +151,4 @@ FactoryGirl.define do
130
151
  end
131
152
  end
132
153
  end
133
-
134
- factory :completed_order_with_promotion, parent: :order_with_line_items, class: "Spree::Order" do
135
- transient do
136
- promotion nil
137
- end
138
-
139
- after(:create) do |order, evaluator|
140
- promotion = evaluator.promotion || create(:promotion, code: "test")
141
- promotion_code = promotion.codes.first || create(:promotion_code, promotion: promotion)
142
-
143
- promotion.activate(order: order, promotion_code: promotion_code)
144
- order.order_promotions.create!(promotion: promotion, promotion_code: promotion_code)
145
-
146
- # Complete the order after the promotion has been activated
147
- order.refresh_shipment_rates
148
- order.update_column(:completed_at, Time.current)
149
- order.update_column(:state, "complete")
150
- end
151
- end
152
154
  end
@@ -11,6 +11,10 @@ FactoryGirl.define do
11
11
  state 'checkout'
12
12
  response_code '12345'
13
13
 
14
+ trait :completed do
15
+ state 'completed'
16
+ end
17
+
14
18
  trait :failing do
15
19
  response_code '00000'
16
20
  association(:source, :failing, { factory: :credit_card })