spree_core 2.2.14 → 2.3.0

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 (172) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/{spree.js.coffee → spree.js.coffee.erb} +11 -2
  3. data/app/controllers/spree/base_controller.rb +1 -0
  4. data/app/helpers/spree/base_helper.rb +5 -6
  5. data/app/helpers/spree/orders_helper.rb +4 -0
  6. data/app/helpers/spree/products_helper.rb +8 -7
  7. data/app/mailers/spree/base_mailer.rb +2 -2
  8. data/app/mailers/spree/order_mailer.rb +2 -2
  9. data/app/mailers/spree/shipment_mailer.rb +1 -1
  10. data/app/mailers/spree/test_mailer.rb +1 -1
  11. data/app/models/spree/ability.rb +15 -16
  12. data/app/models/spree/address.rb +3 -6
  13. data/app/models/spree/adjustment.rb +2 -2
  14. data/app/models/spree/alert.rb +1 -1
  15. data/app/models/spree/app_configuration.rb +17 -20
  16. data/app/models/spree/asset.rb +2 -2
  17. data/app/models/spree/base.rb +9 -0
  18. data/app/models/spree/calculator.rb +1 -1
  19. data/app/models/spree/calculator/flat_rate.rb +1 -1
  20. data/app/models/spree/calculator/flexi_rate.rb +1 -1
  21. data/app/models/spree/calculator/price_sack.rb +1 -3
  22. data/app/models/spree/calculator/shipping/flat_rate.rb +1 -1
  23. data/app/models/spree/calculator/shipping/flexi_rate.rb +1 -1
  24. data/app/models/spree/calculator/shipping/per_item.rb +1 -1
  25. data/app/models/spree/calculator/shipping/price_sack.rb +1 -3
  26. data/app/models/spree/classification.rb +1 -1
  27. data/app/models/spree/configuration.rb +1 -1
  28. data/app/models/spree/country.rb +1 -1
  29. data/app/models/spree/credit_card.rb +8 -12
  30. data/app/models/spree/gateway.rb +0 -3
  31. data/app/models/spree/gateway/bogus.rb +2 -3
  32. data/app/models/spree/image.rb +3 -1
  33. data/app/models/spree/inventory_unit.rb +5 -6
  34. data/app/models/spree/item_adjustments.rb +3 -4
  35. data/app/models/spree/legacy_user.rb +1 -1
  36. data/app/models/spree/line_item.rb +6 -13
  37. data/app/models/spree/log_entry.rb +1 -1
  38. data/app/models/spree/option_type.rb +1 -1
  39. data/app/models/spree/option_value.rb +1 -3
  40. data/app/models/spree/order.rb +52 -70
  41. data/app/models/spree/order/checkout.rb +17 -10
  42. data/app/models/spree/order/currency_updater.rb +1 -1
  43. data/app/models/spree/order_contents.rb +7 -4
  44. data/app/models/spree/order_populator.rb +1 -1
  45. data/app/models/spree/order_updater.rb +8 -21
  46. data/app/models/spree/payment.rb +26 -12
  47. data/app/models/spree/payment/processing.rb +5 -16
  48. data/app/models/spree/payment_capture_event.rb +1 -1
  49. data/app/models/spree/payment_method.rb +2 -2
  50. data/app/models/spree/payment_method/check.rb +0 -2
  51. data/app/models/spree/preference.rb +1 -31
  52. data/app/models/spree/preferences/configuration.rb +2 -6
  53. data/app/models/spree/preferences/preferable.rb +46 -74
  54. data/app/models/spree/preferences/preferable_class_methods.rb +11 -46
  55. data/app/models/spree/preferences/scoped_store.rb +33 -0
  56. data/app/models/spree/preferences/store.rb +8 -7
  57. data/app/models/spree/price.rb +1 -3
  58. data/app/models/spree/product.rb +59 -87
  59. data/app/models/spree/product/scopes.rb +22 -13
  60. data/app/models/spree/product_option_type.rb +1 -1
  61. data/app/models/spree/product_property.rb +1 -3
  62. data/app/models/spree/product_scope/scopes.rb +1 -1
  63. data/app/models/spree/promotion.rb +4 -5
  64. data/app/models/spree/promotion/actions/create_adjustment.rb +11 -2
  65. data/app/models/spree/promotion/actions/create_item_adjustments.rb +19 -2
  66. data/app/models/spree/promotion/actions/create_line_items.rb +2 -12
  67. data/app/models/spree/promotion/rules/user.rb +5 -1
  68. data/app/models/spree/promotion_action.rb +1 -1
  69. data/app/models/spree/promotion_action_line_item.rb +1 -1
  70. data/app/models/spree/promotion_handler/cart.rb +2 -14
  71. data/app/models/spree/promotion_handler/coupon.rb +3 -13
  72. data/app/models/spree/promotion_rule.rb +1 -1
  73. data/app/models/spree/property.rb +1 -3
  74. data/app/models/spree/prototype.rb +1 -1
  75. data/app/models/spree/return_authorization.rb +4 -10
  76. data/app/models/spree/role.rb +1 -1
  77. data/app/models/spree/shipment.rb +1 -9
  78. data/app/models/spree/shipping_category.rb +3 -3
  79. data/app/models/spree/shipping_method.rb +1 -1
  80. data/app/models/spree/shipping_method_category.rb +2 -2
  81. data/app/models/spree/shipping_rate.rb +3 -3
  82. data/app/models/spree/state.rb +1 -1
  83. data/app/models/spree/state_change.rb +1 -1
  84. data/app/models/spree/stock/availability_validator.rb +7 -3
  85. data/app/models/spree/stock/package.rb +0 -23
  86. data/app/models/spree/stock/splitter/backordered.rb +1 -1
  87. data/app/models/spree/stock/splitter/shipping_category.rb +1 -1
  88. data/app/models/spree/stock/splitter/weight.rb +1 -1
  89. data/app/models/spree/stock_item.rb +7 -10
  90. data/app/models/spree/stock_location.rb +2 -6
  91. data/app/models/spree/stock_movement.rb +1 -3
  92. data/app/models/spree/stock_transfer.rb +1 -3
  93. data/app/models/spree/store.rb +33 -0
  94. data/app/models/spree/tax_category.rb +2 -2
  95. data/app/models/spree/tax_rate.rb +21 -52
  96. data/app/models/spree/taxon.rb +9 -8
  97. data/app/models/spree/taxonomy.rb +1 -1
  98. data/app/models/spree/tracker.rb +1 -1
  99. data/app/models/spree/variant.rb +13 -15
  100. data/app/models/spree/variant/scopes.rb +1 -1
  101. data/app/models/spree/zone.rb +22 -22
  102. data/app/models/spree/zone_member.rb +2 -2
  103. data/config/initializers/user_class_extensions.rb +0 -8
  104. data/config/locales/en.yml +7 -42
  105. data/db/default/spree/countries.rb +2 -3
  106. data/db/default/spree/stores.rb +9 -0
  107. data/db/migrate/20130611054351_rename_shipping_methods_zones_to_spree_shipping_methods_zones.rb +0 -5
  108. data/db/migrate/20130807024301_upgrade_adjustments.rb +4 -5
  109. data/db/migrate/20130807024302_rename_adjustment_fields.rb +5 -2
  110. data/db/migrate/20131118183431_add_line_item_id_to_spree_inventory_units.rb +1 -1
  111. data/db/migrate/20140106065820_remove_value_type_from_spree_preferences.rb +8 -0
  112. data/db/migrate/20140227112348_add_preference_store_to_everything.rb +8 -0
  113. data/db/migrate/20140309023735_migrate_old_preferences.rb +23 -0
  114. data/db/migrate/20140309024355_create_spree_stores.rb +25 -0
  115. data/db/migrate/20140309033438_create_store_from_preferences.rb +30 -0
  116. data/db/migrate/20140315053743_add_timestamps_to_spree_assets.rb +6 -0
  117. data/db/migrate/20140331100557_add_additional_store_fields.rb +8 -0
  118. data/db/migrate/20140410141842_add_many_missing_indexes.rb +18 -0
  119. data/db/migrate/20140410150358_correct_some_polymorphic_index_and_add_more_missing.rb +66 -0
  120. data/db/migrate/20140508151342_change_spree_price_amount_precision.rb +1 -1
  121. data/db/migrate/20140518174634_add_token_to_spree_orders.rb +5 -0
  122. data/db/migrate/20140530024945_move_order_token_from_tokenized_permission.rb +29 -0
  123. data/db/migrate/20140601011216_set_shipment_total_for_users_upgrading.rb +5 -3
  124. data/db/migrate/20140604135309_drop_credit_card_first_name_and_last_name.rb +6 -0
  125. data/lib/generators/spree/dummy/dummy_generator.rb +1 -0
  126. data/lib/generators/spree/dummy/templates/initializers/devise.rb +3 -0
  127. data/lib/generators/spree/dummy/templates/rails/routes.rb +0 -1
  128. data/lib/generators/spree/install/install_generator.rb +8 -17
  129. data/lib/generators/spree/install/templates/config/initializers/spree.rb +2 -2
  130. data/lib/spree/core.rb +13 -9
  131. data/lib/spree/core/calculated_adjustments.rb +1 -1
  132. data/lib/spree/core/controller_helpers/auth.rb +27 -18
  133. data/lib/spree/core/controller_helpers/common.rb +2 -2
  134. data/lib/spree/core/controller_helpers/order.rb +15 -24
  135. data/lib/spree/core/controller_helpers/store.rb +19 -0
  136. data/lib/spree/core/delegate_belongs_to.rb +2 -2
  137. data/lib/spree/core/engine.rb +0 -10
  138. data/lib/spree/core/importer.rb +1 -0
  139. data/lib/spree/core/importer/order.rb +16 -44
  140. data/lib/spree/core/importer/product.rb +62 -0
  141. data/lib/spree/core/product_filters.rb +0 -4
  142. data/lib/spree/core/routes.rb +4 -6
  143. data/lib/spree/core/validators/email.rb +23 -1
  144. data/lib/spree/core/version.rb +1 -1
  145. data/lib/spree/money.rb +1 -169
  146. data/lib/spree/permitted_attributes.rb +6 -4
  147. data/lib/spree/testing_support/authorization_helpers.rb +23 -21
  148. data/lib/spree/testing_support/capybara_ext.rb +11 -21
  149. data/lib/spree/testing_support/common_rake.rb +3 -1
  150. data/lib/spree/testing_support/controller_requests.rb +0 -2
  151. data/lib/spree/testing_support/factories/credit_card_factory.rb +1 -1
  152. data/lib/spree/testing_support/factories/line_item_factory.rb +4 -1
  153. data/lib/spree/testing_support/factories/order_factory.rb +5 -4
  154. data/lib/spree/testing_support/factories/product_factory.rb +0 -4
  155. data/lib/spree/testing_support/factories/promotion_factory.rb +5 -7
  156. data/lib/spree/testing_support/factories/shipment_factory.rb +0 -1
  157. data/lib/spree/testing_support/factories/stock_factory.rb +2 -2
  158. data/lib/spree/testing_support/factories/store_factory.rb +8 -0
  159. data/lib/spree/testing_support/preferences.rb +3 -3
  160. data/lib/tasks/core.rake +2 -2
  161. metadata +48 -39
  162. data/app/models/spree/stock/order_counter.rb +0 -55
  163. data/app/models/spree/tokenized_permission.rb +0 -6
  164. data/app/views/spree/shared/_routes.html.erb +0 -13
  165. data/db/migrate/20140804185157_add_default_to_shipment_cost.rb +0 -10
  166. data/db/migrate/20141021194502_add_state_lock_version_to_order.rb +0 -5
  167. data/lib/spree/core/adjustment_source.rb +0 -26
  168. data/lib/spree/core/mail_interceptor.rb +0 -22
  169. data/lib/spree/core/mail_method.rb +0 -27
  170. data/lib/spree/core/mail_settings.rb +0 -55
  171. data/lib/spree/core/ransackable_attributes.rb +0 -15
  172. data/lib/spree/core/token_resource.rb +0 -27
@@ -0,0 +1,6 @@
1
+ class AddTimestampsToSpreeAssets < ActiveRecord::Migration
2
+ def change
3
+ add_column :spree_assets, :created_at, :datetime
4
+ add_column :spree_assets, :updated_at, :datetime
5
+ end
6
+ end
@@ -0,0 +1,8 @@
1
+ class AddAdditionalStoreFields < ActiveRecord::Migration
2
+ def change
3
+ add_column :spree_stores, :code, :string unless column_exists?(:spree_stores, :code)
4
+ add_column :spree_stores, :default, :boolean, default: false, null: false unless column_exists?(:spree_stores, :default)
5
+ add_index :spree_stores, :code
6
+ add_index :spree_stores, :default
7
+ end
8
+ end
@@ -0,0 +1,18 @@
1
+ class AddManyMissingIndexes < ActiveRecord::Migration
2
+ def change
3
+ add_index :spree_adjustments, [:adjustable_id, :adjustable_type]
4
+ add_index :spree_adjustments, :eligible
5
+ add_index :spree_adjustments, :order_id
6
+ add_index :spree_promotions, :code
7
+ add_index :spree_promotions, :expires_at
8
+ add_index :spree_states, :country_id
9
+ add_index :spree_stock_items, :deleted_at
10
+ add_index :spree_option_types, :position
11
+ add_index :spree_option_values, :position
12
+ add_index :spree_product_option_types, :option_type_id
13
+ add_index :spree_product_option_types, :product_id
14
+ add_index :spree_products_taxons, :position
15
+ add_index :spree_promotions, :starts_at
16
+ add_index :spree_stores, :url
17
+ end
18
+ end
@@ -0,0 +1,66 @@
1
+ class CorrectSomePolymorphicIndexAndAddMoreMissing < ActiveRecord::Migration
2
+ def change
3
+ add_index :spree_addresses, :country_id
4
+ add_index :spree_addresses, :state_id
5
+ remove_index :spree_adjustments, [:source_type, :source_id]
6
+ add_index :spree_adjustments, [:source_id, :source_type]
7
+ add_index :spree_credit_cards, :address_id
8
+ add_index :spree_gateways, :active
9
+ add_index :spree_gateways, :test_mode
10
+ add_index :spree_inventory_units, :return_authorization_id
11
+ add_index :spree_line_items, :tax_category_id
12
+ add_index :spree_log_entries, [:source_id, :source_type]
13
+ add_index :spree_orders, :approver_id
14
+ add_index :spree_orders, :bill_address_id
15
+ add_index :spree_orders, :confirmation_delivered
16
+ add_index :spree_orders, :considered_risky
17
+ add_index :spree_orders, :created_by_id
18
+ add_index :spree_orders, :ship_address_id
19
+ add_index :spree_orders, :shipping_method_id
20
+ add_index :spree_orders_promotions, [:order_id, :promotion_id]
21
+ add_index :spree_payments, [:source_id, :source_type]
22
+ add_index :spree_prices, :deleted_at
23
+ add_index :spree_product_option_types, :position
24
+ add_index :spree_product_properties, :position
25
+ add_index :spree_product_properties, :property_id
26
+ add_index :spree_products, :shipping_category_id
27
+ add_index :spree_products, :tax_category_id
28
+ add_index :spree_promotion_action_line_items, :promotion_action_id
29
+ add_index :spree_promotion_action_line_items, :variant_id
30
+ add_index :spree_promotion_rules, :promotion_id
31
+ add_index :spree_promotions, :advertise
32
+ add_index :spree_return_authorizations, :number
33
+ add_index :spree_return_authorizations, :order_id
34
+ add_index :spree_return_authorizations, :stock_location_id
35
+ add_index :spree_shipments, :address_id
36
+ add_index :spree_shipping_methods, :deleted_at
37
+ add_index :spree_shipping_methods, :tax_category_id
38
+ add_index :spree_shipping_rates, :selected
39
+ add_index :spree_shipping_rates, :tax_rate_id
40
+ add_index :spree_state_changes, [:stateful_id, :stateful_type]
41
+ add_index :spree_state_changes, :user_id
42
+ add_index :spree_stock_items, :backorderable
43
+ add_index :spree_stock_locations, :active
44
+ add_index :spree_stock_locations, :backorderable_default
45
+ add_index :spree_stock_locations, :country_id
46
+ add_index :spree_stock_locations, :propagate_all_variants
47
+ add_index :spree_stock_locations, :state_id
48
+ add_index :spree_tax_categories, :deleted_at
49
+ add_index :spree_tax_categories, :is_default
50
+ add_index :spree_tax_rates, :deleted_at
51
+ add_index :spree_tax_rates, :included_in_price
52
+ add_index :spree_tax_rates, :show_rate_in_label
53
+ add_index :spree_tax_rates, :tax_category_id
54
+ add_index :spree_tax_rates, :zone_id
55
+ add_index :spree_taxonomies, :position
56
+ add_index :spree_taxons, :position
57
+ add_index :spree_trackers, :active
58
+ add_index :spree_variants, :deleted_at
59
+ add_index :spree_variants, :is_master
60
+ add_index :spree_variants, :position
61
+ add_index :spree_variants, :track_inventory
62
+ add_index :spree_zone_members, :zone_id
63
+ add_index :spree_zone_members, [:zoneable_id, :zoneable_type]
64
+ add_index :spree_zones, :default_tax
65
+ end
66
+ end
@@ -1,7 +1,7 @@
1
1
  class ChangeSpreePriceAmountPrecision < ActiveRecord::Migration
2
2
  def change
3
3
  change_column :spree_prices, :amount, :decimal, :precision => 10, :scale => 2
4
- change_column :spree_line_items, :price, :decimal, :precision => 10, :scale => 2, :null => false
4
+ change_column :spree_line_items, :price, :decimal, :precision => 10, :scale => 2
5
5
  change_column :spree_line_items, :cost_price, :decimal, :precision => 10, :scale => 2
6
6
  change_column :spree_variants, :cost_price, :decimal, :precision => 10, :scale => 2
7
7
  end
@@ -0,0 +1,5 @@
1
+ class AddTokenToSpreeOrders < ActiveRecord::Migration
2
+ def change
3
+ add_column :spree_orders, :guest_token, :string
4
+ end
5
+ end
@@ -0,0 +1,29 @@
1
+ class MoveOrderTokenFromTokenizedPermission < ActiveRecord::Migration
2
+ class Spree::TokenizedPermission < Spree::Base
3
+ belongs_to :permissable, polymorphic: true
4
+ end
5
+
6
+ def up
7
+ case Spree::Order.connection.adapter_name
8
+ when 'SQLite'
9
+ Spree::Order.has_one :tokenized_permission, :as => :permissable
10
+ Spree::Order.includes(:tokenized_permission).each do |o|
11
+ o.update_column :guest_token, o.tokenized_permission.token
12
+ end
13
+ when 'Mysql2'
14
+ execute "UPDATE spree_orders, spree_tokenized_permissions
15
+ SET spree_orders.guest_token = spree_tokenized_permissions.token
16
+ WHERE spree_tokenized_permissions.permissable_id = spree_orders.id
17
+ AND spree_tokenized_permissions.permissable_type = 'Spree::Order'"
18
+ else
19
+ execute "UPDATE spree_orders
20
+ SET guest_token = spree_tokenized_permissions.token
21
+ FROM spree_tokenized_permissions
22
+ WHERE spree_tokenized_permissions.permissable_id = spree_orders.id
23
+ AND spree_tokenized_permissions.permissable_type = 'Spree::Order'"
24
+ end
25
+ end
26
+
27
+ def down
28
+ end
29
+ end
@@ -3,8 +3,10 @@ class SetShipmentTotalForUsersUpgrading < ActiveRecord::Migration
3
3
  # NOTE You might not need this at all unless you're upgrading from Spree 2.1.x
4
4
  # or below. For those upgrading this should populate the Order#shipment_total
5
5
  # for legacy orders
6
- Spree::Order.complete.where('shipment_total = ?', 0).includes(:shipments).find_each do |order|
7
- order.update_column(:shipment_total, order.shipments.sum(:cost))
8
- end
6
+ execute "UPDATE spree_orders
7
+ SET shipment_total = (SELECT SUM(spree_shipments.cost) AS sum_id
8
+ FROM spree_shipments
9
+ WHERE spree_shipments.order_id = spree_orders.id)
10
+ WHERE spree_orders.completed_at IS NOT NULL AND spree_orders.shipment_total = 0"
9
11
  end
10
12
  end
@@ -0,0 +1,6 @@
1
+ class DropCreditCardFirstNameAndLastName < ActiveRecord::Migration
2
+ def change
3
+ remove_column :spree_credit_cards, :first_name, :string
4
+ remove_column :spree_credit_cards, :last_name, :string
5
+ end
6
+ end
@@ -48,6 +48,7 @@ module Spree
48
48
  template "rails/test.rb", "#{dummy_path}/config/environments/test.rb", :force => true
49
49
  template "rails/script/rails", "#{dummy_path}/spec/dummy/script/rails", :force => true
50
50
  template "initializers/custom_user.rb", "#{dummy_path}/config/initializers/custom_user.rb", :force => true
51
+ template "initializers/devise.rb", "#{dummy_path}/config/initializers/devise.rb", :force => true
51
52
  end
52
53
 
53
54
  def test_dummy_inject_extension_requirements
@@ -0,0 +1,3 @@
1
+ if Object.const_defined?("Devise")
2
+ Devise.secret_key = "<%= SecureRandom.hex(50) %>"
3
+ end
@@ -1,3 +1,2 @@
1
1
  Rails.application.routes.draw do
2
- <%= 'mount Spree::Core::Engine => "/"' if defined?(Spree::Core) %>
3
2
  end
@@ -13,7 +13,6 @@ module Spree
13
13
  class_option :admin_email, :type => :string
14
14
  class_option :admin_password, :type => :string
15
15
  class_option :lib_name, :type => :string, :default => 'spree'
16
- class_option :enforce_available_locales, :type => :boolean, :default => nil
17
16
 
18
17
  def self.source_paths
19
18
  paths = self.superclass.source_paths
@@ -46,10 +45,6 @@ module Spree
46
45
  end
47
46
  end
48
47
 
49
- def remove_unneeded_files
50
- remove_file "public/index.html"
51
- end
52
-
53
48
  def additional_tweaks
54
49
  return unless File.exists? 'public/robots.txt'
55
50
  append_file "public/robots.txt", <<-ROBOTS
@@ -57,10 +52,14 @@ User-agent: *
57
52
  Disallow: /checkout
58
53
  Disallow: /cart
59
54
  Disallow: /orders
60
- Disallow: /user
55
+ Disallow: /countries
56
+ Disallow: /line_items
57
+ Disallow: /password_resets
58
+ Disallow: /states
59
+ Disallow: /user_sessions
60
+ Disallow: /user_registrations
61
+ Disallow: /users
61
62
  Disallow: /account
62
- Disallow: /api
63
- Disallow: /password
64
63
  ROBOTS
65
64
  end
66
65
 
@@ -101,13 +100,6 @@ Disallow: /password
101
100
  end
102
101
  end
103
102
  APP
104
-
105
- if !options[:enforce_available_locales].nil?
106
- application <<-APP
107
- # Prevent this deprecation message: https://github.com/svenfuchs/i18n/commit/3b6e56e
108
- I18n.enforce_available_locales = #{options[:enforce_available_locales]}
109
- APP
110
- end
111
103
  end
112
104
 
113
105
  def include_seed_data
@@ -172,7 +164,7 @@ Spree::Auth::Engine.load_seed if defined?(Spree::Auth)
172
164
  end
173
165
 
174
166
  def notify_about_routes
175
- insert_into_file File.join('config', 'routes.rb'), :after => "Application.routes.draw do\n" do
167
+ insert_into_file File.join('config', 'routes.rb'), :after => "Rails.application.routes.draw do\n" do
176
168
  %Q{
177
169
  # This line mounts Spree's routes at the root of your application.
178
170
  # This means, any requests to URLs such as /products, will go to Spree::ProductsController.
@@ -199,6 +191,5 @@ Spree::Auth::Engine.load_seed if defined?(Spree::Auth)
199
191
  puts "Enjoy!"
200
192
  end
201
193
  end
202
-
203
194
  end
204
195
  end
@@ -7,8 +7,8 @@
7
7
  # config.setting_name = 'new value'
8
8
  Spree.config do |config|
9
9
  # Example:
10
- # Uncomment to override the default site name.
11
- # config.site_name = "Spree Demo Site"
10
+ # Uncomment to stop tracking inventory levels in the application
11
+ # config.track_inventory_levels = false
12
12
  end
13
13
 
14
14
  Spree.user_class = <%= (options[:user_class].blank? ? "Spree::LegacyUser" : options[:user_class]).inspect %>
data/lib/spree/core.rb CHANGED
@@ -30,7 +30,7 @@ module Spree
30
30
  # Example:
31
31
  #
32
32
  # Spree.config do |config|
33
- # config.site_name = "An awesome Spree site"
33
+ # config.track_inventory_levels = false
34
34
  # end
35
35
  #
36
36
  # This method is defined within the core gem on purpose.
@@ -49,10 +49,6 @@ end
49
49
 
50
50
  require 'spree/core/version'
51
51
 
52
- require 'spree/core/ransackable_attributes'
53
- require 'spree/core/mail_interceptor'
54
- require 'spree/core/mail_method'
55
- require 'spree/core/mail_settings'
56
52
  require 'spree/core/environment_extension'
57
53
  require 'spree/core/environment/calculators'
58
54
  require 'spree/core/environment'
@@ -68,13 +64,21 @@ require 'spree/core/user_address'
68
64
  require 'spree/core/user_payment_source'
69
65
  require 'spree/core/delegate_belongs_to'
70
66
  require 'spree/core/permalinks'
71
- require 'spree/core/token_resource'
72
67
  require 'spree/core/calculated_adjustments'
73
- require 'spree/core/adjustment_source'
74
68
  require 'spree/core/product_duplicator'
75
69
  require 'spree/core/controller_helpers'
76
- require 'spree/core/controller_helpers/strong_parameters'
77
- require 'spree/core/controller_helpers/ssl'
78
70
  require 'spree/core/controller_helpers/search'
71
+ require 'spree/core/controller_helpers/ssl'
72
+ require 'spree/core/controller_helpers/store'
73
+ require 'spree/core/controller_helpers/strong_parameters'
79
74
 
80
75
  require 'spree/core/importer'
76
+
77
+ # Hack waiting on https://github.com/pluginaweek/state_machine/pull/275
78
+ module StateMachine
79
+ module Integrations
80
+ module ActiveModel
81
+ public :around_validation
82
+ end
83
+ end
84
+ end
@@ -3,7 +3,7 @@ module Spree
3
3
  module CalculatedAdjustments
4
4
  def self.included(klass)
5
5
  klass.class_eval do
6
- has_one :calculator, :class_name => "Spree::Calculator", :as => :calculable, :dependent => :destroy
6
+ has_one :calculator, class_name: "Spree::Calculator", as: :calculable, inverse_of: :calculable, dependent: :destroy, autosave: true
7
7
  accepts_nested_attributes_for :calculator
8
8
  validates :calculator, :presence => true
9
9
 
@@ -5,10 +5,11 @@ module Spree
5
5
  extend ActiveSupport::Concern
6
6
 
7
7
  included do
8
+ before_filter :set_guest_token
8
9
  helper_method :try_spree_current_user
9
10
 
10
11
  rescue_from CanCan::AccessDenied do |exception|
11
- redirect_unauthorized_access
12
+ unauthorized
12
13
  end
13
14
  end
14
15
 
@@ -17,20 +18,15 @@ module Spree
17
18
  @current_ability ||= Spree::Ability.new(try_spree_current_user)
18
19
  end
19
20
 
20
- # Redirect as appropriate when an access request fails. The default action is to redirect to the login screen.
21
- # Override this method in your controllers if you want to have special behavior in case the user is not authorized
22
- # to access the requested action. For example, a popup window might simply close itself.
23
- def redirect_unauthorized_access
24
- if try_spree_current_user
25
- flash[:error] = Spree.t(:authorization_failure)
26
- redirect_to '/unauthorized'
27
- else
28
- store_location
29
- if respond_to?(:spree_login_path)
30
- redirect_to spree_login_path
31
- else
32
- redirect_to spree.respond_to?(:root_path) ? spree.root_path : root_path
33
- end
21
+
22
+ def redirect_back_or_default(default)
23
+ redirect_to(session["spree_user_return_to"] || default)
24
+ session["spree_user_return_to"] = nil
25
+ end
26
+
27
+ def set_guest_token
28
+ unless cookies.signed[:guest_token].present?
29
+ cookies.permanent.signed[:guest_token] = SecureRandom.urlsafe_base64(nil, false)
34
30
  end
35
31
  end
36
32
 
@@ -65,10 +61,23 @@ module Spree
65
61
  end
66
62
  end
67
63
 
68
- def redirect_back_or_default(default)
69
- redirect_to(session["spree_user_return_to"] || default)
70
- session["spree_user_return_to"] = nil
64
+ # Redirect as appropriate when an access request fails. The default action is to redirect to the login screen.
65
+ # Override this method in your controllers if you want to have special behavior in case the user is not authorized
66
+ # to access the requested action. For example, a popup window might simply close itself.
67
+ def unauthorized
68
+ if try_spree_current_user
69
+ flash[:error] = Spree.t(:authorization_failure)
70
+ redirect_to '/unauthorized'
71
+ else
72
+ store_location
73
+ if respond_to?(:spree_login_path)
74
+ redirect_to spree_login_path
75
+ else
76
+ redirect_to spree.respond_to?(:root_path) ? spree.root_path : root_path
77
+ end
78
+ end
71
79
  end
80
+
72
81
  end
73
82
  end
74
83
  end
@@ -39,12 +39,12 @@ module Spree
39
39
  end
40
40
 
41
41
  def default_title
42
- Spree::Config[:site_name]
42
+ current_store.name
43
43
  end
44
44
 
45
45
  # this is a hook for subclasses to provide title
46
46
  def accurate_title
47
- Spree::Config[:default_seo_title]
47
+ current_store.seo_title
48
48
  end
49
49
 
50
50
  def render_404(exception = nil)
@@ -2,48 +2,41 @@ module Spree
2
2
  module Core
3
3
  module ControllerHelpers
4
4
  module Order
5
- def self.included(base)
6
- base.class_eval do
7
- helper_method :simple_current_order
8
- helper_method :current_order
9
- helper_method :current_currency
10
- before_filter :set_current_order
11
- end
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ before_filter :set_current_order
9
+
10
+ helper_method :current_currency
11
+ helper_method :current_order
12
+ helper_method :simple_current_order
12
13
  end
13
14
 
14
15
  # Used in the link_to_cart helper.
15
16
  def simple_current_order
16
- @simple_current_order ||= Spree::Order.find_by(id: session[:order_id], currency: current_currency)
17
+ @order ||= Spree::Order.find_by(completed_at: nil, currency: current_currency, guest_token: cookies.signed[:guest_token])
17
18
  end
18
19
 
19
- # The current incomplete order from the session for use in cart and during checkout
20
+ # The current incomplete order from the guest_token for use in cart and during checkout
20
21
  def current_order(options = {})
21
22
  options[:create_order_if_necessary] ||= false
22
23
  options[:lock] ||= false
23
24
 
24
25
  return @current_order if @current_order
25
26
 
26
- if session[:order_id]
27
- current_order = Spree::Order.includes(:adjustments).lock(options[:lock]).find_by(id: session[:order_id], currency: current_currency)
28
- @current_order = current_order unless current_order.try(:completed?)
29
- end
27
+ # Find any incomplete orders for the guest_token
28
+ @current_order = Spree::Order.includes(:adjustments).lock(options[:lock]).find_by(completed_at: nil, currency: current_currency, guest_token: cookies.signed[:guest_token])
30
29
 
31
30
  if options[:create_order_if_necessary] and (@current_order.nil? or @current_order.completed?)
32
- @current_order = Spree::Order.new(currency: current_currency)
31
+ @current_order = Spree::Order.new(currency: current_currency, guest_token: cookies.signed[:guest_token])
33
32
  @current_order.user ||= try_spree_current_user
34
33
  # See issue #3346 for reasons why this line is here
35
34
  @current_order.created_by ||= try_spree_current_user
36
35
  @current_order.save!
37
-
38
- # make sure the user has permission to access the order (if they are a guest)
39
- if try_spree_current_user.nil?
40
- session[:access_token] = @current_order.token
41
- end
42
36
  end
43
37
 
44
38
  if @current_order
45
39
  @current_order.last_ip_address = ip_address
46
- session[:order_id] = @current_order.id
47
40
  return @current_order
48
41
  end
49
42
  end
@@ -53,15 +46,13 @@ module Spree
53
46
  if try_spree_current_user && @order
54
47
  @order.associate_user!(try_spree_current_user) if @order.user.blank? || @order.email.blank?
55
48
  end
56
-
57
- session[:guest_token] = nil
58
49
  end
59
50
 
60
51
  def set_current_order
61
52
  if user = try_spree_current_user
62
53
  last_incomplete_order = user.last_incomplete_spree_order
63
- if session[:order_id].nil? && last_incomplete_order
64
- session[:order_id] = last_incomplete_order.id
54
+ if last_incomplete_order
55
+ cookies.permanent.signed[:guest_token] = last_incomplete_order.guest_token
65
56
  elsif current_order && last_incomplete_order && current_order != last_incomplete_order
66
57
  current_order.merge!(last_incomplete_order, user)
67
58
  end