spree_core 2.2.14 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
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