spree_core 2.1.3 → 2.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. checksums.yaml +4 -4
  2. data/app/helpers/spree/admin/images_helper.rb +1 -1
  3. data/app/helpers/spree/base_helper.rb +5 -2
  4. data/app/models/spree/address.rb +9 -1
  5. data/app/models/spree/adjustment.rb +2 -2
  6. data/app/models/spree/calculator/default_tax.rb +5 -1
  7. data/app/models/spree/credit_card.rb +2 -0
  8. data/app/models/spree/gateway.rb +1 -1
  9. data/app/models/spree/inventory_unit.rb +5 -4
  10. data/app/models/spree/legacy_user.rb +2 -11
  11. data/app/models/spree/line_item.rb +2 -3
  12. data/app/models/spree/log_entry.rb +4 -0
  13. data/app/models/spree/option_type.rb +6 -0
  14. data/app/models/spree/option_value.rb +12 -1
  15. data/app/models/spree/order.rb +34 -16
  16. data/app/models/spree/order/checkout.rb +4 -0
  17. data/app/models/spree/order_inventory.rb +1 -1
  18. data/app/models/spree/payment.rb +10 -2
  19. data/app/models/spree/payment/processing.rb +5 -4
  20. data/app/models/spree/payment_method.rb +2 -0
  21. data/app/models/spree/price.rb +5 -0
  22. data/app/models/spree/product.rb +6 -5
  23. data/app/models/spree/product/scopes.rb +12 -6
  24. data/app/models/spree/product_property.rb +1 -1
  25. data/app/models/spree/promotion.rb +1 -8
  26. data/app/models/spree/promotion/rules/user_logged_in.rb +1 -3
  27. data/app/models/spree/property.rb +8 -0
  28. data/app/models/spree/shipment.rb +9 -14
  29. data/app/models/spree/shipping_method.rb +3 -2
  30. data/app/models/spree/shipping_rate.rb +7 -9
  31. data/app/models/spree/stock/estimator.rb +21 -14
  32. data/app/models/spree/stock/package.rb +1 -1
  33. data/app/models/spree/stock/packer.rb +1 -1
  34. data/app/models/spree/stock/quantifier.rb +11 -2
  35. data/app/models/spree/stock_item.rb +2 -2
  36. data/app/models/spree/stock_location.rb +8 -0
  37. data/app/models/spree/stock_movement.rb +3 -1
  38. data/app/models/spree/taxon.rb +2 -2
  39. data/app/models/spree/variant.rb +19 -4
  40. data/app/models/spree/zone.rb +1 -1
  41. data/app/views/spree/shared/_routes.html.erb +1 -1
  42. data/config/locales/en.yml +15 -1
  43. data/db/default/spree/countries.rb +7 -7
  44. data/db/migrate/20130417120034_add_index_to_source_columns_on_adjustments.rb +5 -0
  45. data/db/migrate/20130802022321_migrate_tax_categories_to_line_items.rb +5 -2
  46. data/db/migrate/20131026154747_add_track_inventory_to_variant.rb +5 -0
  47. data/db/migrate/20131120234456_add_updated_at_to_variants.rb +5 -0
  48. data/db/migrate/20131211192741_unique_shipping_method_categories.rb +24 -0
  49. data/db/migrate/20140120160805_add_index_to_variant_id_and_currency_on_prices.rb +5 -0
  50. data/lib/generators/spree/dummy/dummy_generator.rb +14 -3
  51. data/lib/generators/spree/dummy/templates/rails/database.yml +10 -0
  52. data/lib/spree/core.rb +3 -0
  53. data/lib/spree/core/controller_helpers/order.rb +4 -1
  54. data/lib/spree/core/controller_helpers/ssl.rb +5 -7
  55. data/lib/spree/core/controller_helpers/strong_parameters.rb +6 -0
  56. data/lib/spree/core/delegate_belongs_to.rb +16 -10
  57. data/lib/spree/core/engine.rb +11 -2
  58. data/lib/spree/core/mail_method.rb +27 -0
  59. data/lib/spree/core/mail_settings.rb +33 -38
  60. data/lib/spree/core/permalinks.rb +5 -1
  61. data/lib/spree/core/s3_support.rb +1 -1
  62. data/lib/spree/core/user_address.rb +30 -0
  63. data/lib/spree/core/validators/email.rb +9 -3
  64. data/lib/spree/core/version.rb +1 -1
  65. data/lib/spree/i18n.rb +1 -0
  66. data/lib/spree/migrations.rb +55 -0
  67. data/lib/spree/money.rb +171 -1
  68. data/lib/spree/permitted_attributes.rb +6 -6
  69. data/lib/spree/testing_support/capybara_ext.rb +6 -5
  70. data/lib/spree/testing_support/controller_requests.rb +20 -4
  71. data/lib/spree/testing_support/factories/product_factory.rb +4 -0
  72. data/lib/spree/testing_support/factories/variant_factory.rb +15 -0
  73. metadata +158 -164
@@ -128,7 +128,7 @@ module Spree
128
128
 
129
129
  def remove_defunct_members
130
130
  if zone_members.any?
131
- zone_members.where('zoneable_id IS NULL OR zoneable_type != ?', "Spree::#{kind.capitalize}").destroy_all
131
+ zone_members.where('zoneable_id IS NULL OR zoneable_type != ?', "Spree::#{kind.classify}").destroy_all
132
132
  end
133
133
  end
134
134
 
@@ -6,5 +6,5 @@
6
6
  Spree.routes = {}
7
7
  }
8
8
  Spree.routes.states_search = "<%= spree.api_states_path(:format => 'json') %>"
9
+ Spree.routes.root = "<%= spree.root_url if spree.respond_to? :root_url %>"
9
10
  </script>
10
-
@@ -357,12 +357,15 @@ en:
357
357
  attachment_url: Attachments URL
358
358
  authorization_failure: Authorization Failure
359
359
  available_on: Available On
360
+ avs_response: AVS Response
360
361
  back: Back
361
362
  back_end: Backend
363
+ backordered: Backordered
362
364
  back_to_adjustments_list: Back To Adjustments List
363
365
  back_to_images_list: Back To Images List
364
366
  back_to_option_types_list: Back To Option Types List
365
367
  back_to_orders_list: Back To Orders List
368
+ back_to_payment: Back To Payment
366
369
  back_to_payment_methods_list: Back To Payment Methods List
367
370
  back_to_payments_list: Back To Payments List
368
371
  back_to_products_list: Back To Products List
@@ -466,6 +469,7 @@ en:
466
469
  customer_details_updated: Customer Details Updated
467
470
  customer_search: Customer Search
468
471
  cut: Cut
472
+ cvv_response: CVV Response
469
473
  dash:
470
474
  jirafe:
471
475
  app_id: App ID
@@ -550,6 +554,7 @@ en:
550
554
  count_on_hand_setter: Cannot set count_on_hand manually, as it is set automatically by the recalculate_count_on_hand callback. Please use `update_column(:count_on_hand, value)` instead.
551
555
  expiration: Expiration
552
556
  extension: Extension
557
+ failed_payment_attempts: Failed Payment Attempts
553
558
  filename: Filename
554
559
  fill_in_customer_info: Please fill in customer info
555
560
  filter_results: Filter Results
@@ -635,6 +640,8 @@ en:
635
640
  locale_changed: Locale Changed
636
641
  location: Location
637
642
  lock: Lock
643
+ log_entries: "Log Entries"
644
+ logs: "Logs"
638
645
  logged_in_as: Logged in as
639
646
  logged_in_succesfully: Logged in successfully
640
647
  logged_out: You have been logged out.
@@ -762,7 +769,7 @@ en:
762
769
  thanks: Thank you for your business.
763
770
  total: ! 'Order Total: %{total}'
764
771
  order_not_found: We couldn't find your order. Please try that action again.
765
- order_number: Order
772
+ order_number: Order %{number}
766
773
  order_populator:
767
774
  out_of_stock: ! '%{item} is out of stock.'
768
775
  selected_quantity_not_available: ! 'Selected quantity of %{item} is not available.'
@@ -917,6 +924,8 @@ en:
917
924
  return_quantity: Return Quantity
918
925
  returned: Returned
919
926
  review: Review
927
+ risk: Risk
928
+ risk_analysis: Risk Analysis
920
929
  rma_credit: RMA Credit
921
930
  rma_number: RMA Number
922
931
  rma_value: RMA Value
@@ -931,6 +940,7 @@ en:
931
940
  sales_total_description: Sales Total For All Orders
932
941
  sales_totals: Sales Totals
933
942
  save_and_continue: Save and Continue
943
+ save_my_address: Save my address
934
944
  say_no: 'No'
935
945
  say_yes: 'Yes'
936
946
  scope: Scope
@@ -964,6 +974,7 @@ en:
964
974
  shipment_state: Shipment State
965
975
  shipment_states:
966
976
  backorder: backorder
977
+ canceled: canceled
967
978
  partial: partial
968
979
  pending: pending
969
980
  ready: ready
@@ -1028,6 +1039,7 @@ en:
1028
1039
  street_address_2: Street Address (cont'd)
1029
1040
  subtotal: Subtotal
1030
1041
  subtract: Subtract
1042
+ success: Success
1031
1043
  successfully_created: ! '%{resource} has been successfully created!'
1032
1044
  successfully_removed: ! '%{resource} has been successfully removed!'
1033
1045
  successfully_signed_up_for_analytics: Successfully signed up for Spree Analytics
@@ -1062,6 +1074,8 @@ en:
1062
1074
  time: Time
1063
1075
  to_add_variants_you_must_first_define: To add variants, you must first define
1064
1076
  total: Total
1077
+ total_price: Total price
1078
+ track_inventory: Track Inventory
1065
1079
  tracking: Tracking
1066
1080
  tracking_number: Tracking Number
1067
1081
  tracking_url: Tracking URL
@@ -27,7 +27,7 @@ Spree::Country.create!([
27
27
  { name: "Jamaica", iso3: "JAM", iso: "JM", iso_name: "JAMAICA", numcode: "388" },
28
28
  { name: "Japan", iso3: "JPN", iso: "JP", iso_name: "JAPAN", numcode: "392" },
29
29
  { name: "Jordan", iso3: "JOR", iso: "JO", iso_name: "JORDAN", numcode: "400" },
30
- { name: "Belgium", iso3: "BEL", iso: "BE", iso_name: "BELGIUM", numcode: "56", states_required: true },
30
+ { name: "Belgium", iso3: "BEL", iso: "BE", iso_name: "BELGIUM", numcode: "56" },
31
31
  { name: "Belize", iso3: "BLZ", iso: "BZ", iso_name: "BELIZE", numcode: "84" },
32
32
  { name: "Kazakhstan", iso3: "KAZ", iso: "KZ", iso_name: "KAZAKHSTAN", numcode: "398" },
33
33
  { name: "Uganda", iso3: "UGA", iso: "UG", iso_name: "UGANDA", numcode: "800" },
@@ -48,7 +48,7 @@ Spree::Country.create!([
48
48
  { name: "South Korea", iso3: "KOR", iso: "KR", iso_name: "KOREA, REPUBLIC OF", numcode: "410" },
49
49
  { name: "Moldova, Republic of", iso3: "MDA", iso: "MD", iso_name: "MOLDOVA, REPUBLIC OF", numcode: "498" },
50
50
  { name: "United States", iso3: "USA", iso: "US", iso_name: "UNITED STATES", numcode: "840", states_required: true },
51
- { name: "Bosnia and Herzegovina", iso3: "BIH", iso: "BA", iso_name: "BOSNIA AND HERZEGOVINA", numcode: "70", states_required: true },
51
+ { name: "Bosnia and Herzegovina", iso3: "BIH", iso: "BA", iso_name: "BOSNIA AND HERZEGOVINA", numcode: "70" },
52
52
  { name: "Czech Republic", iso3: "CZE", iso: "CZ", iso_name: "CZECH REPUBLIC", numcode: "203" },
53
53
  { name: "Kuwait", iso3: "KWT", iso: "KW", iso_name: "KUWAIT", numcode: "414" },
54
54
  { name: "Monaco", iso3: "MCO", iso: "MC", iso_name: "MONACO", numcode: "492" },
@@ -99,7 +99,7 @@ Spree::Country.create!([
99
99
  { name: "Sweden", iso3: "SWE", iso: "SE", iso_name: "SWEDEN", numcode: "752" },
100
100
  { name: "Honduras", iso3: "HND", iso: "HN", iso_name: "HONDURAS", numcode: "340" },
101
101
  { name: "Rwanda", iso3: "RWA", iso: "RW", iso_name: "RWANDA", numcode: "646" },
102
- { name: "Switzerland", iso3: "CHE", iso: "CH", iso_name: "SWITZERLAND", numcode: "756", states_required: true },
102
+ { name: "Switzerland", iso3: "CHE", iso: "CH", iso_name: "SWITZERLAND", numcode: "756" },
103
103
  { name: "Hong Kong", iso3: "HKG", iso: "HK", iso_name: "HONG KONG", numcode: "344" },
104
104
  { name: "Syrian Arab Republic", iso3: "SYR", iso: "SY", iso_name: "SYRIAN ARAB REPUBLIC", numcode: "760" },
105
105
  { name: "Taiwan", iso3: "TWN", iso: "TW", iso_name: "TAIWAN, PROVINCE OF CHINA", numcode: "158" },
@@ -109,7 +109,7 @@ Spree::Country.create!([
109
109
  { name: "Aruba", iso3: "ABW", iso: "AW", iso_name: "ARUBA", numcode: "533" },
110
110
  { name: "Australia", iso3: "AUS", iso: "AU", iso_name: "AUSTRALIA", numcode: "36", states_required: true },
111
111
  { name: "Thailand", iso3: "THA", iso: "TH", iso_name: "THAILAND", numcode: "764" },
112
- { name: "Austria", iso3: "AUT", iso: "AT", iso_name: "AUSTRIA", numcode: "40", states_required: true },
112
+ { name: "Austria", iso3: "AUT", iso: "AT", iso_name: "AUSTRIA", numcode: "40" },
113
113
  { name: "Madagascar", iso3: "MDG", iso: "MG", iso_name: "MADAGASCAR", numcode: "450" },
114
114
  { name: "Togo", iso3: "TGO", iso: "TG", iso_name: "TOGO", numcode: "768" },
115
115
  { name: "Azerbaijan", iso3: "AZE", iso: "AZ", iso_name: "AZERBAIJAN", numcode: "31" },
@@ -118,7 +118,7 @@ Spree::Country.create!([
118
118
  { name: "Tokelau", iso3: "TKL", iso: "TK", iso_name: "TOKELAU", numcode: "772" },
119
119
  { name: "Bahamas", iso3: "BHS", iso: "BS", iso_name: "BAHAMAS", numcode: "44" },
120
120
  { name: "China", iso3: "CHN", iso: "CN", iso_name: "CHINA", numcode: "156" },
121
- { name: "Malaysia", iso3: "MYS", iso: "MY", iso_name: "MALAYSIA", numcode: "458", states_required: true },
121
+ { name: "Malaysia", iso3: "MYS", iso: "MY", iso_name: "MALAYSIA", numcode: "458" },
122
122
  { name: "Tonga", iso3: "TON", iso: "TO", iso_name: "TONGA", numcode: "776" },
123
123
  { name: "Bahrain", iso3: "BHR", iso: "BH", iso_name: "BAHRAIN", numcode: "48" },
124
124
  { name: "Colombia", iso3: "COL", iso: "CO", iso_name: "COLOMBIA", numcode: "170" },
@@ -153,7 +153,7 @@ Spree::Country.create!([
153
153
  { name: "Sierra Leone", iso3: "SLE", iso: "SL", iso_name: "SIERRA LEONE", numcode: "694" },
154
154
  { name: "Tuvalu", iso3: "TUV", iso: "TV", iso_name: "TUVALU", numcode: "798" },
155
155
  { name: "Costa Rica", iso3: "CRI", iso: "CR", iso_name: "COSTA RICA", numcode: "188" },
156
- { name: "Germany", iso3: "DEU", iso: "DE", iso_name: "GERMANY", numcode: "276", states_required: true },
156
+ { name: "Germany", iso3: "DEU", iso: "DE", iso_name: "GERMANY", numcode: "276" },
157
157
  { name: "Mauritius", iso3: "MUS", iso: "MU", iso_name: "MAURITIUS", numcode: "480" },
158
158
  { name: "Palau", iso3: "PLW", iso: "PW", iso_name: "PALAU", numcode: "585" },
159
159
  { name: "Cote D'Ivoire", iso3: "CIV", iso: "CI", iso_name: "COTE D'IVOIRE", numcode: "384" },
@@ -201,7 +201,7 @@ Spree::Country.create!([
201
201
  { name: "Nepal", iso3: "NPL", iso: "NP", iso_name: "NEPAL", numcode: "524", states_required: true },
202
202
  { name: "Wallis and Futuna", iso3: "WLF", iso: "WF", iso_name: "WALLIS AND FUTUNA", numcode: "876" },
203
203
  { name: "Western Sahara", iso3: "ESH", iso: "EH", iso_name: "WESTERN SAHARA", numcode: "732" },
204
- { name: "Argentina", iso3: "ARG", iso: "AR", iso_name: "ARGENTINA", numcode: "32", states_required: true },
204
+ { name: "Argentina", iso3: "ARG", iso: "AR", iso_name: "ARGENTINA", numcode: "32" },
205
205
  { name: "Canada", iso3: "CAN", iso: "CA", iso_name: "CANADA", numcode: "124", states_required: true },
206
206
  { name: "Eritrea", iso3: "ERI", iso: "ER", iso_name: "ERITREA", numcode: "232" },
207
207
  { name: "Lithuania", iso3: "LTU", iso: "LT", iso_name: "LITHUANIA", numcode: "440" },
@@ -0,0 +1,5 @@
1
+ class AddIndexToSourceColumnsOnAdjustments < ActiveRecord::Migration
2
+ def change
3
+ add_index :spree_adjustments, [:source_type, :source_id]
4
+ end
5
+ end
@@ -1,7 +1,10 @@
1
1
  class MigrateTaxCategoriesToLineItems < ActiveRecord::Migration
2
2
  def change
3
- Spree::LineItem.includes(:variant => { :product => :tax_category }).find_in_batches do |line_items|
4
- line_items.each do |line_item|
3
+ Spree::LineItem.includes(:variant => { :product => :tax_category }).find_in_batches do |line_items|
4
+ line_items.each do |line_item|
5
+ next if line_item.variant.nil?
6
+ next if line_item.variant.product.nil?
7
+ next if line_item.product.nil?
5
8
  line_item.update_column(:tax_category_id, line_item.product.tax_category_id)
6
9
  end
7
10
  end
@@ -0,0 +1,5 @@
1
+ class AddTrackInventoryToVariant < ActiveRecord::Migration
2
+ def change
3
+ add_column :spree_variants, :track_inventory, :boolean, :default => true
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class AddUpdatedAtToVariants < ActiveRecord::Migration
2
+ def change
3
+ add_column :spree_variants, :updated_at, :datetime
4
+ end
5
+ end
@@ -0,0 +1,24 @@
1
+ class UniqueShippingMethodCategories < ActiveRecord::Migration
2
+ def change
3
+ klass = Spree::ShippingMethodCategory
4
+ columns = %w[shipping_category_id shipping_method_id]
5
+
6
+ say "Find duplicate #{klass} records"
7
+ duplicates = klass.
8
+ select((columns + %w[COUNT(*)]).join(',')).
9
+ group(columns.join(',')).
10
+ having('COUNT(*) > 1').
11
+ map { |row| row.attributes.slice(*columns) }
12
+
13
+ say "Delete all but the oldest duplicate #{klass} record"
14
+ duplicates.each do |conditions|
15
+ klass.where(conditions).order(:created_at).drop(1).each(&:destroy)
16
+ end
17
+
18
+ say "Add unique index to #{klass.table_name} for #{columns.inspect}"
19
+ add_index klass.table_name, columns, unique: true, name: 'unique_spree_shipping_method_categories'
20
+
21
+ say "Remove redundant simple index on #{klass.table_name}"
22
+ remove_index klass.table_name, name: 'index_spree_shipping_method_categories_on_shipping_category_id'
23
+ end
24
+ end
@@ -0,0 +1,5 @@
1
+ class AddIndexToVariantIdAndCurrencyOnPrices < ActiveRecord::Migration
2
+ def change
3
+ add_index :spree_prices, [:variant_id, :currency]
4
+ end
5
+ end
@@ -53,9 +53,9 @@ module Spree
53
53
  def test_dummy_inject_extension_requirements
54
54
  if DummyGeneratorHelper.inject_extension_requirements
55
55
  inside dummy_path do
56
- %w(spree_frontend spree_backend spree_api).each do |requirement|
57
- inject_into_file 'config/application.rb', "require '#{requirement}'\n", :before => /require '#{@lib_name}'/, :verbose => true
58
- end
56
+ inject_require_for('spree_frontend')
57
+ inject_require_for('spree_backend')
58
+ inject_require_for('spree_api')
59
59
  end
60
60
  end
61
61
  end
@@ -82,6 +82,17 @@ module Spree
82
82
  attr :database
83
83
 
84
84
  protected
85
+
86
+ def inject_require_for(requirement)
87
+ inject_into_file 'config/application.rb', %Q[
88
+ begin
89
+ require '#{requirement}'
90
+ rescue LoadError
91
+ # #{requirement} is not available.
92
+ end
93
+ ], :before => /require '#{@lib_name}'/, :verbose => true
94
+ end
95
+
85
96
  def dummy_path
86
97
  ENV['DUMMY_PATH'] || 'spec/dummy'
87
98
  end
@@ -27,21 +27,31 @@ production:
27
27
  database: <%= database_prefix %>spree_production
28
28
  encoding: utf8
29
29
  <% when 'postgres' %>
30
+ <% db_host = ENV['DB_HOST'] -%>
30
31
  development:
31
32
  adapter: postgresql
32
33
  database: <%= database_prefix %>spree_development
33
34
  username: postgres
34
35
  min_messages: warning
36
+ <% unless db_host.blank? %>
37
+ host: <%= db_host %>
38
+ <% end %>
35
39
  test:
36
40
  adapter: postgresql
37
41
  database: <%= database_prefix %>spree_test
38
42
  username: postgres
39
43
  min_messages: warning
44
+ <% unless db_host.blank? %>
45
+ host: <%= db_host %>
46
+ <% end %>
40
47
  production:
41
48
  adapter: postgresql
42
49
  database: <%= database_prefix %>spree_production
43
50
  username: postgres
44
51
  min_messages: warning
52
+ <% unless db_host.blank? %>
53
+ host: <%= db_host %>
54
+ <% end %>
45
55
  <% else %>
46
56
  development:
47
57
  adapter: sqlite3
data/lib/spree/core.rb CHANGED
@@ -38,6 +38,7 @@ module Spree
38
38
  end
39
39
 
40
40
  require 'spree/core/version'
41
+ require 'spree/migrations'
41
42
  require 'spree/core/engine'
42
43
 
43
44
  require 'spree/i18n'
@@ -49,6 +50,8 @@ require 'spree/core/permalinks'
49
50
  require 'spree/core/token_resource'
50
51
  require 'spree/core/calculated_adjustments'
51
52
  require 'spree/core/product_duplicator'
53
+ require 'spree/core/mail_method'
54
+ require 'spree/core/mail_settings'
52
55
 
53
56
  ActiveRecord::Base.class_eval do
54
57
  include CollectiveIdea::Acts::NestedSet
@@ -13,10 +13,12 @@ module Spree
13
13
  # The current incomplete order from the session for use in cart and during checkout
14
14
  def current_order(create_order_if_necessary = false)
15
15
  return @current_order if @current_order
16
+
16
17
  if session[:order_id]
17
18
  current_order = Spree::Order.includes(:adjustments).find_by(id: session[:order_id], currency: current_currency)
18
19
  @current_order = current_order unless current_order.try(:completed?)
19
20
  end
21
+
20
22
  if create_order_if_necessary and (@current_order.nil? or @current_order.completed?)
21
23
  @current_order = Spree::Order.new(currency: current_currency)
22
24
  @current_order.user ||= try_spree_current_user
@@ -29,6 +31,7 @@ module Spree
29
31
  session[:access_token] = @current_order.token
30
32
  end
31
33
  end
34
+
32
35
  if @current_order
33
36
  @current_order.last_ip_address = ip_address
34
37
  session[:order_id] = @current_order.id
@@ -58,7 +61,7 @@ module Spree
58
61
  last_incomplete_order = user.last_incomplete_spree_order
59
62
  if session[:order_id].nil? && last_incomplete_order
60
63
  session[:order_id] = last_incomplete_order.id
61
- elsif current_order(true) && last_incomplete_order && current_order != last_incomplete_order
64
+ elsif current_order && last_incomplete_order && current_order != last_incomplete_order
62
65
  current_order.merge!(last_incomplete_order, user)
63
66
  end
64
67
  end
@@ -15,16 +15,14 @@ module Spree
15
15
 
16
16
  def self.ssl_required(*actions)
17
17
  ssl_allowed *actions
18
- if ssl_supported?
19
- if actions.empty? or Rails.application.config.force_ssl
20
- force_ssl
21
- else
22
- force_ssl :only => actions
23
- end
18
+ if actions.empty? or Rails.application.config.force_ssl
19
+ force_ssl :if => :ssl_supported?
20
+ else
21
+ force_ssl :if => :ssl_supported?, :only => actions
24
22
  end
25
23
  end
26
24
 
27
- def self.ssl_supported?
25
+ def ssl_supported?
28
26
  return Spree::Config[:allow_ssl_in_production] if Rails.env.production?
29
27
  return Spree::Config[:allow_ssl_in_staging] if Rails.env.staging?
30
28
  return Spree::Config[:allow_ssl_in_development_and_test] if (Rails.env.development? or Rails.env.test?)
@@ -30,6 +30,12 @@ module Spree
30
30
  :line_items_attributes => permitted_line_item_attributes
31
31
  ]
32
32
  end
33
+
34
+ def permitted_product_attributes
35
+ permitted_attributes.product_attributes + [
36
+ :product_properties_attributes => permitted_product_properties_attributes
37
+ ]
38
+ end
33
39
  end
34
40
  end
35
41
  end
@@ -38,14 +38,11 @@ module DelegateBelongsTo
38
38
  attrs.concat get_association_column_names(association) if attrs.delete :defaults
39
39
  attrs.each do |attr|
40
40
  class_def attr do |*args|
41
- if args.empty?
42
- send(:delegator_for, association).send(attr)
43
- else
44
- send(:delegator_for, association).send(attr, *args)
45
- end
41
+ send(:delegator_for, association, attr, *args)
46
42
  end
43
+
47
44
  class_def "#{attr}=" do |val|
48
- send(:delegator_for, association).send("#{attr}=", val)
45
+ send(:delegator_for_setter, association, attr, val)
49
46
  end
50
47
  end
51
48
  end
@@ -71,19 +68,28 @@ module DelegateBelongsTo
71
68
  end
72
69
 
73
70
  private
74
-
75
71
  def class_def(name, method=nil, &blk)
76
72
  class_eval { method.nil? ? define_method(name, &blk) : define_method(name, method) }
77
73
  end
74
+ end
78
75
 
76
+ def delegator_for(association, attr, *args)
77
+ return if self.class.column_names.include?(attr.to_s)
78
+ send("#{association}=", self.class.reflect_on_association(association).klass.new) if send(association).nil?
79
+ if args.empty?
80
+ send(association).send(attr)
81
+ else
82
+ send(association).send(attr, *args)
83
+ end
79
84
  end
80
85
 
81
- def delegator_for(association)
86
+ def delegator_for_setter(association, attr, val)
87
+ return if self.class.column_names.include?(attr.to_s)
82
88
  send("#{association}=", self.class.reflect_on_association(association).klass.new) if send(association).nil?
83
- send(association)
89
+ send(association).send("#{attr}=", val)
84
90
  end
85
91
  protected :delegator_for
86
-
92
+ protected :delegator_for_setter
87
93
  end
88
94
 
89
95
  ActiveRecord::Base.send :include, DelegateBelongsTo
@@ -52,6 +52,7 @@ module Spree
52
52
  end
53
53
 
54
54
  initializer "spree.mail.settings" do |app|
55
+ ActionMailer::Base.add_delivery_method :spree, Spree::Core::MailMethod
55
56
  Spree::Core::MailSettings.init
56
57
  Mail.register_interceptor(Spree::Core::MailInterceptor)
57
58
  end
@@ -76,7 +77,11 @@ module Spree
76
77
  ]
77
78
  end
78
79
 
79
- initializer 'spree.promo.register.promotion.calculators' do
80
+ # Promotion rules need to be evaluated on after initialize otherwise
81
+ # Spree.user_class would be nil and users might experience errors related
82
+ # to malformed model associations (Spree.user_class is only defined on
83
+ # the app initializer)
84
+ config.after_initialize do
80
85
  Rails.application.config.spree.promotions.rules.concat [
81
86
  Spree::Promotion::Rules::ItemTotal,
82
87
  Spree::Promotion::Rules::Product,
@@ -98,8 +103,12 @@ module Spree
98
103
  :number,
99
104
  :verification_value]
100
105
  end
106
+
107
+ initializer "spree.core.checking_migrations" do |app|
108
+ Migrations.new(config, engine_name).check
109
+ end
101
110
  end
102
111
  end
103
112
  end
104
113
 
105
- require 'spree/core/routes'
114
+ require 'spree/core/routes'