spree_core 2.0.13 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (149) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/spree/base_controller.rb +3 -0
  3. data/app/helpers/spree/base_helper.rb +6 -16
  4. data/app/helpers/spree/products_helper.rb +3 -8
  5. data/app/helpers/spree/taxons_helper.rb +1 -1
  6. data/app/mailers/spree/base_mailer.rb +0 -5
  7. data/app/models/spree/ability.rb +10 -7
  8. data/app/models/spree/address.rb +7 -17
  9. data/app/models/spree/adjustment.rb +15 -11
  10. data/app/models/spree/app_configuration.rb +0 -5
  11. data/app/models/spree/billing_integration.rb +0 -1
  12. data/app/models/spree/calculator/flat_percent_item_total.rb +1 -3
  13. data/app/models/spree/calculator/flat_rate.rb +2 -4
  14. data/app/models/spree/calculator/flexi_rate.rb +6 -9
  15. data/app/models/spree/calculator/per_item.rb +2 -4
  16. data/app/models/spree/calculator/percent_per_item.rb +1 -3
  17. data/app/models/spree/calculator/price_sack.rb +4 -9
  18. data/app/models/spree/calculator/shipping/flat_percent_item_total.rb +1 -2
  19. data/app/models/spree/calculator/shipping/flat_rate.rb +2 -4
  20. data/app/models/spree/calculator/shipping/flexi_rate.rb +4 -9
  21. data/app/models/spree/calculator/shipping/per_item.rb +2 -3
  22. data/app/models/spree/calculator/shipping/price_sack.rb +4 -9
  23. data/app/models/spree/classification.rb +0 -3
  24. data/app/models/spree/country.rb +1 -3
  25. data/app/models/spree/credit_card.rb +37 -38
  26. data/app/models/spree/gateway/bogus_simple.rb +0 -8
  27. data/app/models/spree/gateway.rb +1 -3
  28. data/app/models/spree/image.rb +1 -3
  29. data/app/models/spree/inventory_unit.rb +5 -8
  30. data/app/models/spree/legacy_user.rb +0 -4
  31. data/app/models/spree/line_item.rb +2 -15
  32. data/app/models/spree/option_type.rb +2 -5
  33. data/app/models/spree/option_value.rb +1 -3
  34. data/app/models/spree/order/checkout.rb +4 -13
  35. data/app/models/spree/order.rb +47 -99
  36. data/app/models/spree/order_contents.rb +4 -7
  37. data/app/models/spree/order_inventory.rb +4 -8
  38. data/app/models/spree/order_updater.rb +13 -12
  39. data/app/models/spree/payment/processing.rb +12 -19
  40. data/app/models/spree/payment.rb +17 -30
  41. data/app/models/spree/payment_method.rb +2 -3
  42. data/app/models/spree/preference.rb +1 -1
  43. data/app/models/spree/preferences/configuration.rb +1 -1
  44. data/app/models/spree/preferences/preferable.rb +1 -1
  45. data/app/models/spree/preferences/store.rb +1 -1
  46. data/app/models/spree/price.rb +0 -7
  47. data/app/models/spree/product/scopes.rb +16 -17
  48. data/app/models/spree/product.rb +27 -62
  49. data/app/models/spree/product_property.rb +3 -5
  50. data/app/models/spree/promotion/actions/create_adjustment.rb +9 -8
  51. data/app/models/spree/promotion/actions/create_line_items.rb +1 -2
  52. data/app/models/spree/promotion/rules/first_order.rb +1 -1
  53. data/app/models/spree/promotion/rules/item_total.rb +2 -4
  54. data/app/models/spree/promotion/rules/product.rb +2 -2
  55. data/app/models/spree/promotion/rules/user.rb +1 -3
  56. data/app/models/spree/promotion.rb +23 -24
  57. data/app/models/spree/promotion_action.rb +0 -2
  58. data/app/models/spree/promotion_action_line_item.rb +1 -3
  59. data/app/models/spree/promotion_rule.rb +0 -2
  60. data/app/models/spree/property.rb +2 -4
  61. data/app/models/spree/prototype.rb +0 -2
  62. data/app/models/spree/return_authorization.rb +6 -9
  63. data/app/models/spree/role.rb +0 -2
  64. data/app/models/spree/shipment.rb +19 -25
  65. data/app/models/spree/shipping_calculator.rb +0 -2
  66. data/app/models/spree/shipping_category.rb +0 -2
  67. data/app/models/spree/shipping_method.rb +6 -20
  68. data/app/models/spree/shipping_rate.rb +12 -10
  69. data/app/models/spree/state.rb +2 -4
  70. data/app/models/spree/stock/availability_validator.rb +2 -2
  71. data/app/models/spree/stock/estimator.rb +6 -20
  72. data/app/models/spree/stock/packer.rb +1 -1
  73. data/app/models/spree/stock/quantifier.rb +2 -3
  74. data/app/models/spree/stock/splitter/base.rb +1 -1
  75. data/app/models/spree/stock_item.rb +8 -18
  76. data/app/models/spree/stock_location.rb +2 -11
  77. data/app/models/spree/stock_movement.rb +2 -5
  78. data/app/models/spree/stock_transfer.rb +0 -2
  79. data/app/models/spree/tax_category.rb +0 -2
  80. data/app/models/spree/tax_rate.rb +12 -12
  81. data/app/models/spree/taxon.rb +1 -13
  82. data/app/models/spree/taxonomy.rb +3 -6
  83. data/app/models/spree/tracker.rb +0 -2
  84. data/app/models/spree/variant/scopes.rb +2 -2
  85. data/app/models/spree/variant.rb +13 -31
  86. data/app/models/spree/zone.rb +2 -7
  87. data/app/models/spree/zone_member.rb +0 -2
  88. data/app/views/spree/payments/_payment.html.erb +1 -3
  89. data/config/locales/en.yml +11 -26
  90. data/db/default/spree/countries.rb +230 -229
  91. data/db/default/spree/states.rb +57 -56
  92. data/db/default/spree/zones.rb +5 -5
  93. data/db/migrate/20130213191427_create_default_stock.rb +4 -7
  94. data/db/migrate/20130417120035_update_adjustment_states.rb +2 -2
  95. data/db/migrate/20130417123427_add_shipping_rates_to_shipments.rb +1 -1
  96. data/db/migrate/20130509115210_add_number_to_stock_transfer.rb +1 -1
  97. data/db/migrate/20130611054351_rename_shipping_methods_zones_to_spree_shipping_methods_zones.rb +0 -5
  98. data/db/migrate/20130611185927_add_user_id_index_to_spree_orders.rb +5 -0
  99. data/db/migrate/20130618041418_add_updated_at_to_spree_countries.rb +9 -0
  100. data/db/migrate/20130619012236_add_updated_at_to_spree_states.rb +9 -0
  101. data/db/migrate/20130802022321_migrate_tax_categories_to_line_items.rb +4 -5
  102. data/db/migrate/20130806145853_set_default_stock_location_on_shipments.rb +1 -1
  103. data/lib/generators/spree/dummy/dummy_generator.rb +3 -14
  104. data/lib/generators/spree/dummy/templates/rails/database.yml +0 -10
  105. data/lib/generators/spree/dummy/templates/rails/test.rb +2 -7
  106. data/lib/generators/spree/install/install_generator.rb +11 -8
  107. data/lib/spree/core/calculated_adjustments.rb +9 -8
  108. data/lib/spree/core/controller_helpers/auth.rb +2 -3
  109. data/lib/spree/core/controller_helpers/order.rb +8 -13
  110. data/lib/spree/core/controller_helpers/ssl.rb +13 -22
  111. data/lib/spree/core/controller_helpers/strong_parameters.rb +36 -0
  112. data/lib/spree/core/delegate_belongs_to.rb +0 -2
  113. data/lib/spree/core/engine.rb +1 -5
  114. data/lib/spree/core/ext/active_record.rb +2 -9
  115. data/lib/spree/core/permalinks.rb +1 -5
  116. data/lib/spree/core/product_duplicator.rb +2 -16
  117. data/lib/spree/core/product_filters.rb +37 -33
  118. data/lib/spree/core/search/base.rb +1 -1
  119. data/lib/spree/core/version.rb +1 -1
  120. data/lib/spree/core.rb +3 -31
  121. data/lib/spree/i18n.rb +0 -1
  122. data/lib/spree/money.rb +2 -177
  123. data/lib/spree/permitted_attributes.rb +95 -0
  124. data/lib/spree/promo/coupon_applicator.rb +4 -12
  125. data/lib/spree/testing_support/capybara_ext.rb +13 -17
  126. data/lib/spree/testing_support/common_rake.rb +1 -1
  127. data/lib/spree/testing_support/controller_requests.rb +3 -3
  128. data/lib/spree/testing_support/factories/credit_card_factory.rb +1 -1
  129. data/lib/spree/testing_support/factories/product_factory.rb +0 -4
  130. data/lib/spree/testing_support/factories/shipping_method_factory.rb +1 -3
  131. data/lib/spree/testing_support/factories/user_factory.rb +1 -1
  132. data/lib/spree/testing_support/factories/variant_factory.rb +0 -15
  133. data/lib/spree/testing_support/factories.rb +1 -1
  134. data/lib/spree/testing_support/order_walkthrough.rb +1 -1
  135. data/lib/tasks/core.rake +2 -2
  136. data/vendor/assets/javascripts/jquery.payment.js +497 -0
  137. metadata +166 -172
  138. data/app/views/spree/admin/shared/_report_order_criteria.html.erb +0 -17
  139. data/db/migrate/20130417120034_add_index_to_source_columns_on_adjustments.rb +0 -5
  140. data/db/migrate/20130830001033_add_shipping_category_to_shipping_methods_and_products.rb +0 -15
  141. data/db/migrate/20130830001159_migrate_old_shipping_calculators.rb +0 -19
  142. data/db/migrate/20130909115621_change_states_required_for_countries.rb +0 -9
  143. data/db/migrate/20131001013410_remove_unused_credit_card_fields.rb +0 -12
  144. data/db/migrate/20131026154747_add_track_inventory_to_variant.rb +0 -5
  145. data/db/migrate/20131113035136_add_channel_to_spree_orders.rb +0 -5
  146. data/db/migrate/20140120160805_add_index_to_variant_id_and_currency_on_prices.rb +0 -5
  147. data/db/migrate/20140205181631_default_variant_weight_to_zero.rb +0 -11
  148. data/db/migrate/20140415041315_add_user_id_created_by_id_index_to_order.rb +0 -5
  149. data/lib/spree/core/preference_rescue.rb +0 -25
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6a7abff523eebb24d6e7573a1276b2c68eac15b2
4
- data.tar.gz: 59dd2a80a97247e186725cb8f0be540bf816ddf7
3
+ metadata.gz: 9cba2b6dea5945419319d944c119f1a1c74de1a8
4
+ data.tar.gz: b8f83cbeb8810e3436fcbe3221f671c8e60c95fc
5
5
  SHA512:
6
- metadata.gz: 45e619b3362386a0fa401f357190c61d60c740064e68dc5a46802b60ddd41a0fe459d156eb59148e821d7573184a269260a838c16f045df11c5ae85c7a18c11a
7
- data.tar.gz: 21e099c966c74e43758a2e3ef8c0864eefd5543f79c586d0d6354bcf923e695c7250d31d03b6bed10042800340634c1a0de657ffc1d9959aa198bd8bfa070bfa
6
+ metadata.gz: e83e8be4a6963a38ce47a7812363f43616ab10487d579dff3919480a9471df507bd8b2ee2434bbca5e1310eda105250d1c971f5132319504d13c588639c49532
7
+ data.tar.gz: eaf05a02e45b23144edbc3b478593b4263196147c2c19981a0208e80f66695486ebe07deb5068b8a6ffad7c4418820ec1e9e89bb41f09eb80d35673eabc74a79
@@ -1,4 +1,5 @@
1
1
  require 'cancan'
2
+ require_dependency 'spree/core/controller_helpers/strong_parameters'
2
3
 
3
4
  class Spree::BaseController < ApplicationController
4
5
  include Spree::Core::ControllerHelpers::Auth
@@ -6,6 +7,8 @@ class Spree::BaseController < ApplicationController
6
7
  include Spree::Core::ControllerHelpers::SSL
7
8
  include Spree::Core::ControllerHelpers::Common
8
9
  include Spree::Core::ControllerHelpers::Search
10
+ include Spree::Core::ControllerHelpers::StrongParameters
11
+ include Spree::Core::ControllerHelpers::Search
9
12
 
10
13
  respond_to :html
11
14
  end
@@ -18,7 +18,7 @@ module Spree
18
18
  text = text ? h(text) : Spree.t('cart')
19
19
  css_class = nil
20
20
 
21
- if current_order.nil? or current_order.line_items.empty?
21
+ if current_order.nil? or current_order.item_count.zero?
22
22
  text = "#{text}: (#{Spree.t('empty')})"
23
23
  css_class = 'empty'
24
24
  else
@@ -34,7 +34,7 @@ module Spree
34
34
  v.options_text
35
35
  end
36
36
 
37
- def meta_data
37
+ def meta_data_tags
38
38
  object = instance_variable_get('@'+controller_name.singularize)
39
39
  meta = {}
40
40
 
@@ -51,11 +51,8 @@ module Spree
51
51
  keywords: Spree::Config[:default_meta_keywords],
52
52
  description: Spree::Config[:default_meta_description]
53
53
  })
54
- meta
55
- end
56
54
 
57
- def meta_data_tags
58
- meta_data.map do |name, content|
55
+ meta.map do |name, content|
59
56
  tag('meta', name: name, content: content)
60
57
  end.join("\n")
61
58
  end
@@ -109,7 +106,7 @@ module Spree
109
106
  end
110
107
 
111
108
  def available_countries
112
- checkout_zone = Zone.find_by_name(Spree::Config[:checkout_zone])
109
+ checkout_zone = Zone.find_by(name: Spree::Config[:checkout_zone])
113
110
 
114
111
  if checkout_zone && checkout_zone.kind == 'country'
115
112
  countries = checkout_zone.country_list
@@ -120,7 +117,7 @@ module Spree
120
117
  countries.collect do |country|
121
118
  country.name = Spree.t(country.iso, scope: 'country_names', default: country.name)
122
119
  country
123
- end.sort_by { |c| c.name.parameterize }
120
+ end.sort { |a, b| a.name <=> b.name }
124
121
  end
125
122
 
126
123
  def seo_url(taxon)
@@ -135,11 +132,6 @@ module Spree
135
132
  Gem.available?(name)
136
133
  end
137
134
 
138
- def money(amount)
139
- ActiveSupport::Deprecation.warn("[SPREE] Spree::BaseHelper#money will be deprecated. It relies upon a single master currency. You can instead create a Spree::Money.new(amount, { :currency => your_currency}) or see if the object you're working with returns a Spree::Money object to use.")
140
- Spree::Money.new(amount)
141
- end
142
-
143
135
  def display_price(product_or_variant)
144
136
  product_or_variant.price_in(current_currency).display_price.to_html
145
137
  end
@@ -169,10 +161,9 @@ module Spree
169
161
  end
170
162
 
171
163
  private
172
-
173
164
  # Returns style of image or nil
174
165
  def image_style_from_method_name(method_name)
175
- if method_name.to_s.match(/_image$/) && style = method_name.to_s.sub(/_image$/, '')
166
+ if style = method_name.to_s.sub(/_image$/, '')
176
167
  possible_styles = Spree::Image.attachment_definitions[:attachment][:styles]
177
168
  style if style.in? possible_styles.with_indifferent_access
178
169
  end
@@ -201,6 +192,5 @@ module Spree
201
192
  end
202
193
  end
203
194
  end
204
-
205
195
  end
206
196
  end
@@ -40,14 +40,9 @@ module Spree
40
40
  end
41
41
 
42
42
  def line_item_description(variant)
43
- ActiveSupport::Deprecation.warn "line_item_description(variant) is deprecated and may be removed from future releases, use line_item_description_text(line_item.description) instead.", caller
44
-
45
- line_item_description_text(variant.product.description)
46
- end
47
-
48
- def line_item_description_text description_text
49
- if description_text.present?
50
- truncate(strip_tags(description_text.gsub('&nbsp;', ' ')), length: 100)
43
+ description = variant.product.description
44
+ if description.present?
45
+ truncate(strip_tags(description.gsub('&nbsp;', ' ')), length: 100)
51
46
  else
52
47
  Spree.t(:product_has_no_description)
53
48
  end
@@ -5,7 +5,7 @@ module Spree
5
5
  # to show the most popular products for a particular taxon (that is an exercise left to the developer.)
6
6
  def taxon_preview(taxon, max=4)
7
7
  products = taxon.active_products.limit(max)
8
- if (products.size < max) && Spree::Config[:show_descendents]
8
+ if (products.size < max)
9
9
  taxon.descendants.each do |taxon|
10
10
  to_get = max - products.length
11
11
  products += taxon.active_products.limit(to_get)
@@ -8,10 +8,5 @@ module Spree
8
8
  Spree::Money.new(amount).to_s
9
9
  end
10
10
  helper_method :money
11
-
12
- def mail(headers={}, &block)
13
- super if Spree::Config[:send_core_emails]
14
- end
15
-
16
11
  end
17
12
  end
@@ -26,40 +26,43 @@ module Spree
26
26
  self.clear_aliased_actions
27
27
 
28
28
  # override cancan default aliasing (we don't want to differentiate between read and index)
29
+ alias_action :delete, to: :destroy
29
30
  alias_action :edit, to: :update
30
31
  alias_action :new, to: :create
31
32
  alias_action :new_action, to: :create
32
33
  alias_action :show, to: :read
33
- alias_action :delete, to: :destroy
34
34
 
35
35
  user ||= Spree.user_class.new
36
+
36
37
  if user.respond_to?(:has_spree_role?) && user.has_spree_role?('admin')
37
38
  can :manage, :all
38
39
  else
39
- #############################
40
- can [:read,:update,:destroy], Spree.user_class, id: user.id
41
- can :create, Spree.user_class
42
- #############################
40
+ can [:index, :read], Country
41
+ can [:index, :read], OptionType
42
+ can [:index, :read], OptionValue
43
+ can :create, Order
43
44
  can :read, Order do |order, token|
44
45
  order.user == user || order.token && token == order.token
45
46
  end
46
47
  can :update, Order do |order, token|
47
48
  order.user == user || order.token && token == order.token
48
49
  end
49
- can :create, Order
50
50
  can [:index, :read], Product
51
51
  can [:index, :read], ProductProperty
52
52
  can [:index, :read], Property
53
53
  can :create, Spree.user_class
54
54
  can [:read, :update, :destroy], Spree.user_class, id: user.id
55
55
  can [:index, :read], State
56
+ can [:index, :read], StockItem
57
+ can [:index, :read], StockLocation
58
+ can [:index, :read], StockMovement
56
59
  can [:index, :read], Taxon
57
60
  can [:index, :read], Taxonomy
58
61
  can [:index, :read], Variant
59
62
  can [:index, :read], Zone
60
63
  end
61
64
 
62
- #include any abilities registered by extensions, etc.
65
+ # Include any abilities registered by extensions, etc.
63
66
  Ability.abilities.each do |clazz|
64
67
  ability = clazz.send(:new, user)
65
68
  @rules = rules + ability.send(:rules)
@@ -5,30 +5,18 @@ module Spree
5
5
 
6
6
  has_many :shipments
7
7
 
8
- validates :firstname, :lastname, :address1, :city, :zipcode, :country, presence: true
8
+ validates :firstname, :lastname, :address1, :city, :country, presence: true
9
+ validates :zipcode, presence: true, if: :require_zipcode?
9
10
  validates :phone, presence: true, if: :require_phone?
10
11
 
11
12
  validate :state_validate
12
13
 
13
- attr_accessible :firstname, :lastname, :address1, :address2,
14
- :city, :zipcode, :country_id, :state_id,
15
- :country, :state, :phone, :state_name,
16
- :company, :alternative_phone
17
-
18
14
  alias_attribute :first_name, :firstname
19
15
  alias_attribute :last_name, :lastname
20
16
 
21
- # Disconnected since there's no code to display error messages yet OR matching client-side validation
22
- def phone_validate
23
- return if phone.blank?
24
- n_digits = phone.scan(/[0-9]/).size
25
- valid_chars = (phone =~ /^[-+()\/\s\d]+$/)
26
- errors.add :phone, :invalid unless (n_digits > 5 && valid_chars)
27
- end
28
-
29
17
  def self.default
30
18
  country = Spree::Country.find(Spree::Config[:default_country_id]) rescue Spree::Country.first
31
- new({ country: country }, without_protection: true)
19
+ new(country: country)
32
20
  end
33
21
 
34
22
  # Can modify an address if it's not been used in an order (but checkouts controller has finer control)
@@ -87,11 +75,14 @@ module Spree
87
75
  end
88
76
 
89
77
  private
90
-
91
78
  def require_phone?
92
79
  true
93
80
  end
94
81
 
82
+ def require_zipcode?
83
+ true
84
+ end
85
+
95
86
  def state_validate
96
87
  # Skip state validation without country (also required)
97
88
  # or when disabled by preference
@@ -128,6 +119,5 @@ module Spree
128
119
  # ensure at least one state field is populated
129
120
  errors.add :state, :blank if state.blank? && state_name.blank?
130
121
  end
131
-
132
122
  end
133
123
  end
@@ -24,8 +24,6 @@
24
24
  # it might be reinstated.
25
25
  module Spree
26
26
  class Adjustment < ActiveRecord::Base
27
- attr_accessible :amount, :label
28
-
29
27
  belongs_to :adjustable, polymorphic: true
30
28
  belongs_to :source, polymorphic: true
31
29
  belongs_to :originator, polymorphic: true
@@ -55,8 +53,8 @@ module Spree
55
53
  scope :shipping, -> { where(originator_type: 'Spree::ShippingMethod') }
56
54
  scope :optional, -> { where(mandatory: false) }
57
55
  scope :eligible, -> { where(eligible: true) }
58
- scope :charge, -> { where("#{quoted_table_name}.amount >= 0") }
59
- scope :credit, -> { where("#{quoted_table_name}.amount < 0") }
56
+ scope :charge, -> { where('amount >= 0') }
57
+ scope :credit, -> { where('amount < 0') }
60
58
  scope :promotion, -> { where(originator_type: 'Spree::PromotionAction') }
61
59
  scope :return_authorization, -> { where(source_type: "Spree::ReturnAuthorization") }
62
60
 
@@ -68,7 +66,7 @@ module Spree
68
66
  # count towards the order's adjustment_total.
69
67
  def set_eligibility
70
68
  result = mandatory || ((amount != 0 || promotion?) && eligible_for_originator?)
71
- update_attribute_without_callbacks(:eligible, result)
69
+ update_column(:eligible, result)
72
70
  end
73
71
 
74
72
  # Allow originator of the adjustment to perform an additional eligibility of the adjustment
@@ -82,17 +80,23 @@ module Spree
82
80
  # delegate updating of amount to their Originator when present, but only if
83
81
  # +locked+ is false. Adjustments that are +locked+ will never change their amount.
84
82
  #
85
- # order#update_adjustments passes self as the src, this is so calculations can
86
- # be performed on the # current values. If we used source it would load the old
87
- # record from db for the association
88
- def update!(calculable=nil)
83
+ # Adjustments delegate updating of amount to their Originator when present,
84
+ # but only if when they're in "open" state, closed or finalized adjustments
85
+ # are not recalculated.
86
+ #
87
+ # It receives +calculable+ as the updated source here so calculations can be
88
+ # performed on the current values of that source. If we used +source+ it
89
+ # could load the old record from db for the association. e.g. when updating
90
+ # more than on line items at once via accepted_nested_attributes the order
91
+ # object on the association would be in a old state and therefore the
92
+ # adjustment calculations would not performed on proper values
93
+ def update!(calculable = nil)
89
94
  return if immutable?
90
95
  # Fix for #3381
91
96
  # If we attempt to call 'source' before the reload, then source is currently
92
97
  # the order object. After calling a reload, the source is the Shipment.
93
98
  reload
94
- calculable = source unless calculable == source
95
- originator.update_adjustment(self, calculable) if originator.present?
99
+ originator.update_adjustment(self, calculable || source) if originator.present?
96
100
  set_eligibility
97
101
  end
98
102
 
@@ -32,17 +32,14 @@ module Spree
32
32
  preference :allow_ssl_in_staging, :boolean, default: true
33
33
  preference :alternative_billing_phone, :boolean, default: false # Request extra phone for bill addr
34
34
  preference :alternative_shipping_phone, :boolean, default: false # Request extra phone for ship addr
35
- preference :always_include_confirm_step, :boolean, default: false # Ensures confirmation step is always in checkout_progress bar, but does not force a confirm step if your payment methods do not support it.
36
35
  preference :always_put_site_name_in_title, :boolean, default: true
37
36
  preference :auto_capture, :boolean, default: false # automatically capture the credit card (as opposed to just authorize and capture later)
38
- preference :cache_static_content, :boolean, default: true
39
37
  preference :check_for_spree_alerts, :boolean, default: true
40
38
  preference :checkout_zone, :string, default: nil # replace with the name of a zone if you would like to limit the countries
41
39
  preference :company, :boolean, default: false # Request company field for billing and shipping addr
42
40
  preference :currency, :string, default: "USD"
43
41
  preference :currency_decimal_mark, :string, default: "."
44
42
  preference :currency_symbol_position, :string, default: "before"
45
- preference :currency_sign_before_symbol, :boolean, default: true
46
43
  preference :currency_thousands_separator, :string, default: ","
47
44
  preference :display_currency, :boolean, default: false
48
45
  preference :default_country_id, :integer
@@ -62,7 +59,6 @@ module Spree
62
59
  preference :require_master_price, :boolean, default: true
63
60
  preference :shipment_inc_vat, :boolean, default: false
64
61
  preference :shipping_instructions, :boolean, default: false # Request instructions/info for shipping
65
- preference :show_descendents, :boolean, default: true
66
62
  preference :show_only_complete_orders_by_default, :boolean, default: true
67
63
  preference :show_variant_full_price, :boolean, default: false #Displays variant full price or difference with product price. Default false to be compatible with older behavior
68
64
  preference :show_products_without_price, :boolean, default: false
@@ -88,7 +84,6 @@ module Spree
88
84
 
89
85
  # Default mail headers settings
90
86
  preference :enable_mail_delivery, :boolean, :default => false
91
- preference :send_core_emails, :boolean, :default => true
92
87
  preference :mails_from, :string, :default => 'spree@example.com'
93
88
  preference :mail_bcc, :string, :default => 'spree@example.com'
94
89
  preference :intercept_email, :string, :default => nil
@@ -8,7 +8,6 @@ module Spree
8
8
  def provider
9
9
  integration_options = options
10
10
  ActiveMerchant::Billing::Base.integration_mode = integration_options[:server].to_sym
11
- integration_options = options
12
11
  integration_options[:test] = true if integration_options[:test_mode]
13
12
  @provider ||= provider_class.new(integration_options)
14
13
  end
@@ -2,9 +2,7 @@ require_dependency 'spree/calculator'
2
2
 
3
3
  module Spree
4
4
  class Calculator::FlatPercentItemTotal < Calculator
5
- preference :flat_percent, :decimal, :default => 0
6
-
7
- attr_accessible :preferred_flat_percent
5
+ preference :flat_percent, :decimal, default: 0
8
6
 
9
7
  def self.description
10
8
  Spree.t(:flat_percent)
@@ -2,10 +2,8 @@ require_dependency 'spree/calculator'
2
2
 
3
3
  module Spree
4
4
  class Calculator::FlatRate < Calculator
5
- preference :amount, :decimal, :default => 0
6
- preference :currency, :string, :default => Spree::Config[:currency]
7
-
8
- attr_accessible :preferred_amount, :preferred_currency
5
+ preference :amount, :decimal, default: 0
6
+ preference :currency, :string, default: Spree::Config[:currency]
9
7
 
10
8
  def self.description
11
9
  Spree.t(:flat_rate_per_order)
@@ -2,12 +2,10 @@ require_dependency 'spree/calculator'
2
2
 
3
3
  module Spree
4
4
  class Calculator::FlexiRate < Calculator
5
- preference :first_item, :decimal, :default => 0.0
6
- preference :additional_item, :decimal, :default => 0.0
7
- preference :max_items, :integer, :default => 0
8
- preference :currency, :string, :default => Spree::Config[:currency]
9
-
10
- attr_accessible :preferred_first_item, :preferred_additional_item, :preferred_max_items, :preferred_currency
5
+ preference :first_item, :decimal, default: 0.0
6
+ preference :additional_item, :decimal, default: 0.0
7
+ preference :max_items, :integer, default: 0
8
+ preference :currency, :string, default: Spree::Config[:currency]
11
9
 
12
10
  def self.description
13
11
  Spree.t(:flexible_rate)
@@ -22,10 +20,9 @@ module Spree
22
20
  max = self.preferred_max_items.to_i
23
21
  items_count = object.line_items.map(&:quantity).sum
24
22
  items_count.times do |i|
25
- # check max value to avoid divide by 0 errors
26
- if (max == 0 && i == 0) || (max > 0) && (i % max == 0)
23
+ if i == 0
27
24
  sum += self.preferred_first_item.to_f
28
- else
25
+ elsif ((max > 0) && (i <= (max - 1))) || (max == 0)
29
26
  sum += self.preferred_additional_item.to_f
30
27
  end
31
28
  end
@@ -2,10 +2,8 @@ require_dependency 'spree/calculator'
2
2
 
3
3
  module Spree
4
4
  class Calculator::PerItem < Calculator
5
- preference :amount, :decimal, :default => 0
6
- preference :currency, :string, :default => Spree::Config[:currency]
7
-
8
- attr_accessible :preferred_amount, :preferred_currency
5
+ preference :amount, :decimal, default: 0
6
+ preference :currency, :string, default: Spree::Config[:currency]
9
7
 
10
8
  def self.description
11
9
  Spree.t(:flat_rate_per_item)
@@ -6,9 +6,7 @@ module Spree
6
6
  # off the entire order.
7
7
 
8
8
  class Calculator::PercentPerItem < Calculator
9
- preference :percent, :decimal, :default => 0
10
-
11
- attr_accessible :preferred_percent
9
+ preference :percent, :decimal, default: 0
12
10
 
13
11
  def self.description
14
12
  Spree.t(:percent_per_item)
@@ -4,15 +4,10 @@ require 'bigdecimal/util'
4
4
 
5
5
  module Spree
6
6
  class Calculator::PriceSack < Calculator
7
- preference :minimal_amount, :decimal, :default => 0
8
- preference :normal_amount, :decimal, :default => 0
9
- preference :discount_amount, :decimal, :default => 0
10
- preference :currency, :string, :default => Spree::Config[:currency]
11
-
12
- attr_accessible :preferred_minimal_amount,
13
- :preferred_normal_amount,
14
- :preferred_discount_amount,
15
- :preferred_currency
7
+ preference :minimal_amount, :decimal, default: 0
8
+ preference :normal_amount, :decimal, default: 0
9
+ preference :discount_amount, :decimal, default: 0
10
+ preference :currency, :string, default: Spree::Config[:currency]
16
11
 
17
12
  def self.description
18
13
  Spree.t(:price_sack)
@@ -3,8 +3,7 @@ require_dependency 'spree/shipping_calculator'
3
3
  module Spree
4
4
  module Calculator::Shipping
5
5
  class FlatPercentItemTotal < ShippingCalculator
6
- preference :flat_percent, :decimal, :default => 0
7
- attr_accessible :preferred_flat_percent
6
+ preference :flat_percent, :decimal, default: 0
8
7
 
9
8
  def self.description
10
9
  Spree.t(:flat_percent)
@@ -3,10 +3,8 @@ require_dependency 'spree/shipping_calculator'
3
3
  module Spree
4
4
  module Calculator::Shipping
5
5
  class FlatRate < ShippingCalculator
6
- preference :amount, :decimal, :default => 0
7
- preference :currency, :string, :default => Spree::Config[:currency]
8
-
9
- attr_accessible :preferred_amount, :preferred_currency
6
+ preference :amount, :decimal, default: 0
7
+ preference :currency, :string, default: Spree::Config[:currency]
10
8
 
11
9
  def self.description
12
10
  Spree.t(:shipping_flat_rate_per_order)
@@ -3,15 +3,10 @@ require_dependency 'spree/shipping_calculator'
3
3
  module Spree
4
4
  module Calculator::Shipping
5
5
  class FlexiRate < ShippingCalculator
6
- preference :first_item, :decimal, :default => 0.0
7
- preference :additional_item, :decimal, :default => 0.0
8
- preference :max_items, :integer, :default => 0
9
- preference :currency, :string, :default => Spree::Config[:currency]
10
-
11
- attr_accessible :preferred_first_item,
12
- :preferred_additional_item,
13
- :preferred_max_items,
14
- :preferred_currency
6
+ preference :first_item, :decimal, default: 0.0
7
+ preference :additional_item, :decimal, default: 0.0
8
+ preference :max_items, :integer, default: 0
9
+ preference :currency, :string, default: Spree::Config[:currency]
15
10
 
16
11
  def self.description
17
12
  Spree.t(:shipping_flexible_rate)
@@ -3,9 +3,8 @@ require_dependency 'spree/shipping_calculator'
3
3
  module Spree
4
4
  module Calculator::Shipping
5
5
  class PerItem < ShippingCalculator
6
- preference :amount, :decimal, :default => 0
7
- preference :currency, :string, :default => Spree::Config[:currency]
8
- attr_accessible :preferred_amount, :preferred_currency
6
+ preference :amount, :decimal, default: 0
7
+ preference :currency, :string, default: Spree::Config[:currency]
9
8
 
10
9
  def self.description
11
10
  Spree.t(:shipping_flat_rate_per_item)
@@ -5,15 +5,10 @@ require 'bigdecimal/util'
5
5
  module Spree
6
6
  module Calculator::Shipping
7
7
  class PriceSack < ShippingCalculator
8
- preference :minimal_amount, :decimal, :default => 0
9
- preference :normal_amount, :decimal, :default => 0
10
- preference :discount_amount, :decimal, :default => 0
11
- preference :currency, :string, :default => Spree::Config[:currency]
12
-
13
- attr_accessible :preferred_minimal_amount,
14
- :preferred_normal_amount,
15
- :preferred_discount_amount,
16
- :preferred_currency
8
+ preference :minimal_amount, :decimal, default: 0
9
+ preference :normal_amount, :decimal, default: 0
10
+ preference :discount_amount, :decimal, default: 0
11
+ preference :currency, :string, default: Spree::Config[:currency]
17
12
 
18
13
  def self.description
19
14
  Spree.t(:shipping_price_sack)
@@ -3,8 +3,5 @@ module Spree
3
3
  self.table_name = 'spree_products_taxons'
4
4
  belongs_to :product, class_name: "Spree::Product"
5
5
  belongs_to :taxon, class_name: "Spree::Taxon"
6
-
7
- # For #3494
8
- validates_uniqueness_of :taxon_id, :scope => :product_id, :message => :already_linked
9
6
  end
10
7
  end
@@ -1,11 +1,9 @@
1
1
  module Spree
2
2
  class Country < ActiveRecord::Base
3
- has_many :states, order: "#{Spree::State.quoted_table_name}.name ASC"
3
+ has_many :states, -> { order('name ASC') }
4
4
 
5
5
  validates :name, :iso_name, presence: true
6
6
 
7
- attr_accessible :name, :iso_name, :states_required
8
-
9
7
  def self.states_required_by_country_id
10
8
  states_required = Hash.new(true)
11
9
  all.each { |country| states_required[country.id.to_s]= country.states_required }