spree_core 2.1.1 → 2.1.2

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 (49) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/spree/base_controller.rb +1 -2
  3. data/app/helpers/spree/products_helper.rb +8 -3
  4. data/app/mailers/spree/base_mailer.rb +5 -0
  5. data/app/models/spree/ability.rb +0 -3
  6. data/app/models/spree/adjustment.rb +2 -1
  7. data/app/models/spree/app_configuration.rb +2 -0
  8. data/app/models/spree/classification.rb +3 -0
  9. data/app/models/spree/country.rb +2 -1
  10. data/app/models/spree/image.rb +1 -1
  11. data/app/models/spree/line_item.rb +2 -0
  12. data/app/models/spree/order.rb +33 -16
  13. data/app/models/spree/order/checkout.rb +1 -1
  14. data/app/models/spree/payment.rb +14 -2
  15. data/app/models/spree/payment/processing.rb +3 -3
  16. data/app/models/spree/preferences/configuration.rb +5 -1
  17. data/app/models/spree/preferences/preferable.rb +5 -1
  18. data/app/models/spree/preferences/store.rb +14 -15
  19. data/app/models/spree/product.rb +4 -3
  20. data/app/models/spree/product/scopes.rb +7 -14
  21. data/app/models/spree/return_authorization.rb +3 -6
  22. data/app/models/spree/shipment.rb +4 -1
  23. data/app/models/spree/state.rb +1 -0
  24. data/app/models/spree/stock/availability_validator.rb +1 -1
  25. data/app/models/spree/stock/estimator.rb +26 -26
  26. data/app/models/spree/stock/quantifier.rb +1 -1
  27. data/app/models/spree/stock_item.rb +11 -7
  28. data/app/models/spree/variant.rb +4 -3
  29. data/config/locales/en.yml +8 -2
  30. data/config/routes.rb +1 -0
  31. data/db/default/spree/countries.rb +26 -26
  32. data/db/migrate/20130213191427_create_default_stock.rb +5 -2
  33. data/db/migrate/20130830001033_add_shipping_category_to_shipping_methods_and_products.rb +15 -0
  34. data/db/migrate/20130830001159_migrate_old_shipping_calculators.rb +19 -0
  35. data/db/migrate/20130909115621_change_states_required_for_countries.rb +9 -0
  36. data/db/migrate/20131001013410_remove_unused_credit_card_fields.rb +12 -0
  37. data/lib/spree/core/controller_helpers/order.rb +1 -1
  38. data/lib/spree/core/controller_helpers/ssl.rb +22 -13
  39. data/lib/spree/core/engine.rb +2 -10
  40. data/lib/spree/core/permalinks.rb +1 -5
  41. data/lib/spree/core/preference_rescue.rb +25 -0
  42. data/lib/spree/core/product_filters.rb +34 -38
  43. data/lib/spree/core/routes.rb +48 -0
  44. data/lib/spree/core/version.rb +1 -1
  45. data/lib/spree/money.rb +4 -0
  46. data/lib/spree/permitted_attributes.rb +1 -1
  47. data/lib/spree/testing_support/factories/credit_card_factory.rb +1 -1
  48. metadata +15 -9
  49. data/app/views/spree/shared/_address.html.erb +0 -38
@@ -23,8 +23,7 @@ module Spree
23
23
  # We should not define price scopes here, as they require something slightly different
24
24
  next if name.to_s.include?("master_price")
25
25
  parts = name.to_s.match(/(.*)_by_(.*)/)
26
- order_text = "#{Product.quoted_table_name}.#{parts[2]} #{parts[1] == 'ascend' ? "ASC" : "DESC"}"
27
- self.scope(name.to_s, -> { relation.order(order_text) })
26
+ self.scope(name.to_s, -> { relation.order("#{Product.quoted_table_name}.#{parts[2]} #{parts[1] == 'ascend' ? "ASC" : "DESC"}") })
28
27
  end
29
28
  end
30
29
 
@@ -68,14 +67,11 @@ module Spree
68
67
  #
69
68
  # SELECT COUNT(*) ...
70
69
  add_search_scope :in_taxon do |taxon|
71
- if ActiveRecord::Base.connection.adapter_name == "PostgreSQL"
72
- scope = select("DISTINCT ON (spree_products.id) spree_products.*")
73
- else
74
- scope = select("DISTINCT(spree_products.id), spree_products.*")
75
- end
76
-
77
- scope.joins(:taxons).
78
- where(Taxon.table_name => { :id => taxon.self_and_descendants.map(&:id) })
70
+ select("spree_products.id, spree_products.*").
71
+ where(id: Classification.select('spree_products_taxons.product_id').
72
+ joins(:taxon).
73
+ where(Taxon.table_name => { :id => taxon.self_and_descendants.pluck(:id) })
74
+ )
79
75
  end
80
76
 
81
77
  # This scope selects products in all taxons AND all its descendants
@@ -215,10 +211,7 @@ module Spree
215
211
  # problem shown in #1247.
216
212
  def self.group_by_products_id
217
213
  if (ActiveRecord::Base.connection.adapter_name == 'PostgreSQL')
218
- # Need to check, otherwise `column_names` will fail
219
- if table_exists?
220
- group(column_names.map { |col_name| "#{table_name}.#{col_name}"})
221
- end
214
+ group(column_names.map { |col_name| "#{table_name}.#{col_name}"})
222
215
  else
223
216
  group("#{self.quoted_table_name}.id")
224
217
  end
@@ -63,19 +63,16 @@ module Spree
63
63
  end
64
64
 
65
65
  private
66
+
66
67
  def must_have_shipped_units
67
68
  errors.add(:order, Spree.t(:has_no_shipped_units)) if order.nil? || !order.shipped_shipments.any?
68
69
  end
69
70
 
70
71
  def generate_number
71
- return if number
72
-
73
- record = true
74
- while record
72
+ self.number ||= loop do
75
73
  random = "RMA#{Array.new(9){rand(9)}.join}"
76
- record = self.class.where(number: random).first
74
+ break random unless self.class.exists?(number: random)
77
75
  end
78
- self.number = random
79
76
  end
80
77
 
81
78
  def process_return
@@ -103,11 +103,14 @@ module Spree
103
103
  def refresh_rates
104
104
  return shipping_rates if shipped?
105
105
 
106
+ # StockEstimator.new assigment below will replace the current shipping_method
107
+ original_shipping_method_id = shipping_method.try(:id)
108
+
106
109
  self.shipping_rates = Stock::Estimator.new(order).shipping_rates(to_package)
107
110
 
108
111
  if shipping_method
109
112
  selected_rate = shipping_rates.detect { |rate|
110
- rate.shipping_method_id == shipping_method.id
113
+ rate.shipping_method_id == original_shipping_method_id
111
114
  }
112
115
  self.selected_shipping_rate_id = selected_rate.id if selected_rate
113
116
  end
@@ -1,6 +1,7 @@
1
1
  module Spree
2
2
  class State < ActiveRecord::Base
3
3
  belongs_to :country, class_name: 'Spree::Country'
4
+ has_many :addresses, dependent: :nullify
4
5
 
5
6
  validates :country, :name, presence: true
6
7
 
@@ -17,7 +17,7 @@ module Spree
17
17
  display_name = %Q{#{variant.name}}
18
18
  display_name += %Q{ (#{variant.options_text})} unless variant.options_text.blank?
19
19
 
20
- line_item.errors[:quantity] << Spree.t(:out_of_stock, :scope => :order_populator, :item => display_name.inspect)
20
+ line_item.errors[:quantity] << Spree.t(:selected_quantity_not_available, :scope => :order_populator, :item => display_name.inspect)
21
21
  end
22
22
  end
23
23
  end
@@ -9,41 +9,41 @@ module Spree
9
9
  end
10
10
 
11
11
  def shipping_rates(package, frontend_only = true)
12
- shipping_rates = Array.new
13
- shipping_methods = shipping_methods(package)
14
- return [] unless shipping_methods
15
-
16
- shipping_methods.each do |shipping_method|
17
- cost = calculate_cost(shipping_method, package)
18
- shipping_rates << shipping_method.shipping_rates.new(:cost => cost) unless cost.nil?
19
- end
20
-
21
- shipping_rates.sort_by! { |r| r.cost || 0 }
12
+ shipping_rates = calculate_shipping_rates(package)
22
13
 
23
14
  unless shipping_rates.empty?
24
- if frontend_only
25
- shipping_rates.each do |rate|
26
- rate.selected = true and break if rate.shipping_method.frontend?
27
- end
28
- else
29
- shipping_rates.first.selected = true
30
- end
15
+ available_rates = shipping_rates.clone
16
+ available_rates.select! { |rate| rate.shipping_method.frontend? } if frontend_only
17
+ choose_default_shipping_rate(available_rates)
31
18
  end
32
19
 
33
- shipping_rates
20
+ sort_shipping_rates(shipping_rates)
34
21
  end
35
22
 
36
23
  private
37
- def shipping_methods(package)
38
- shipping_methods = package.shipping_methods
39
- shipping_methods.delete_if { |ship_method| !ship_method.calculator.available?(package) }
40
- shipping_methods.delete_if { |ship_method| !ship_method.include?(order.ship_address) }
41
- shipping_methods.delete_if { |ship_method| !(ship_method.calculator.preferences[:currency].nil? || ship_method.calculator.preferences[:currency] == currency) }
42
- shipping_methods
24
+ def choose_default_shipping_rate(shipping_rates)
25
+ shipping_rates.min_by(&:cost).selected = true
26
+ end
27
+
28
+ def sort_shipping_rates(shipping_rates)
29
+ shipping_rates.sort_by!(&:cost)
30
+ end
31
+
32
+ def calculate_shipping_rates(package)
33
+ shipping_methods(package).map do |shipping_method|
34
+ cost = shipping_method.calculator.compute(package)
35
+ shipping_method.shipping_rates.new(cost: cost) if cost
36
+ end.compact
43
37
  end
44
38
 
45
- def calculate_cost(shipping_method, package)
46
- shipping_method.calculator.compute(package)
39
+ def shipping_methods(package)
40
+ package.shipping_methods.select do |ship_method|
41
+ calculator = ship_method.calculator
42
+ calculator.available?(package) &&
43
+ ship_method.include?(order.ship_address) &&
44
+ (calculator.preferences[:currency].nil? ||
45
+ calculator.preferences[:currency] == currency)
46
+ end
47
47
  end
48
48
  end
49
49
  end
@@ -10,7 +10,7 @@ module Spree
10
10
 
11
11
  def total_on_hand
12
12
  if Spree::Config.track_inventory_levels
13
- stock_items.to_a.sum(&:count_on_hand)
13
+ stock_items.sum(:count_on_hand)
14
14
  else
15
15
  Float::INFINITY
16
16
  end
@@ -7,7 +7,7 @@ module Spree
7
7
  has_many :stock_movements
8
8
 
9
9
  validates_presence_of :stock_location, :variant
10
- validates_uniqueness_of :variant_id, scope: :stock_location_id
10
+ validates_uniqueness_of :variant_id, scope: [:stock_location_id, :deleted_at]
11
11
 
12
12
  delegate :weight, to: :variant
13
13
 
@@ -22,7 +22,7 @@ module Spree
22
22
  def adjust_count_on_hand(value)
23
23
  self.with_lock do
24
24
  self.count_on_hand = self.count_on_hand + value
25
- process_backorders if in_stock?
25
+ process_backorders(count_on_hand - count_on_hand_was)
26
26
 
27
27
  self.save!
28
28
  end
@@ -30,7 +30,7 @@ module Spree
30
30
 
31
31
  def set_count_on_hand(value)
32
32
  self.count_on_hand = value
33
- process_backorders if in_stock?
33
+ process_backorders(count_on_hand - count_on_hand_was)
34
34
 
35
35
  self.save!
36
36
  end
@@ -49,10 +49,14 @@ module Spree
49
49
  write_attribute(:count_on_hand, value)
50
50
  end
51
51
 
52
- def process_backorders
53
- backordered_inventory_units.each do |unit|
54
- return unless in_stock?
55
- unit.fill_backorder
52
+ # Process backorders based on amount of stock received
53
+ # If stock was -20 and is now -15 (increase of 5 units), then we should process 5 inventory orders.
54
+ # If stock was -20 but then was -25 (decrease of 5 units), do nothing.
55
+ def process_backorders(number)
56
+ if number > 0
57
+ backordered_inventory_units.first(number).each do |unit|
58
+ unit.fill_backorder
59
+ end
56
60
  end
57
61
  end
58
62
  end
@@ -15,7 +15,7 @@ module Spree
15
15
  has_many :stock_locations, through: :stock_items
16
16
  has_many :stock_movements
17
17
 
18
- has_and_belongs_to_many :option_values, join_table: :spree_option_values_variants
18
+ has_and_belongs_to_many :option_values, join_table: :spree_option_values_variants, class_name: "Spree::OptionValue"
19
19
  has_many :images, -> { order(:position) }, as: :viewable, dependent: :destroy, class_name: "Spree::Image"
20
20
 
21
21
  has_one :default_price,
@@ -23,7 +23,7 @@ module Spree
23
23
  class_name: 'Spree::Price',
24
24
  dependent: :destroy
25
25
 
26
- delegate_belongs_to :default_price, :display_price, :display_amount, :price, :price=, :currency if Spree::Price.table_exists?
26
+ delegate_belongs_to :default_price, :display_price, :display_amount, :price, :price=, :currency
27
27
 
28
28
  has_many :prices,
29
29
  class_name: 'Spree::Price',
@@ -31,7 +31,8 @@ module Spree
31
31
 
32
32
  validate :check_price
33
33
  validates :price, numericality: { greater_than_or_equal_to: 0 }, presence: true, if: proc { Spree::Config[:require_master_price] }
34
- validates :cost_price, numericality: { greater_than_or_equal_to: 0, allow_nil: true } if self.table_exists? && self.column_names.include?('cost_price')
34
+
35
+ validates :cost_price, numericality: { greater_than_or_equal_to: 0, allow_nil: true }
35
36
 
36
37
  before_validation :set_cost_currency
37
38
  after_save :save_default_price
@@ -214,6 +214,10 @@ en:
214
214
  other: Zones
215
215
  errors:
216
216
  models:
217
+ spree/classification:
218
+ attributes:
219
+ taxon_id:
220
+ already_linked: "is already linked to this product"
217
221
  spree/credit_card:
218
222
  attributes:
219
223
  base:
@@ -395,6 +399,7 @@ en:
395
399
  capture: Capture
396
400
  card_code: Card Code
397
401
  card_number: Card Number
402
+ card_type: Brand
398
403
  card_type_is: Card type is
399
404
  cart: Cart
400
405
  categories: Categories
@@ -639,7 +644,6 @@ en:
639
644
  login_name: Login
640
645
  logout: Logout
641
646
  look_for_similar_items: Look for similar items
642
- maestro_or_solo_cards: Maestro/Solo cards
643
647
  mail_method_settings: Mail Method Settings
644
648
  mail_methods: Mail Methods
645
649
  make_refund: Make refund
@@ -751,6 +755,7 @@ en:
751
755
  order_number: Order
752
756
  order_populator:
753
757
  out_of_stock: ! '%{item} is out of stock.'
758
+ selected_quantity_not_available: ! 'Selected quantity of %{item} is not available.'
754
759
  please_enter_reasonable_quantity: Please enter a reasonable quantity.
755
760
  order_processed_successfully: Your order has been processed successfully
756
761
  order_state:
@@ -989,8 +994,9 @@ en:
989
994
  special_instructions: Special Instructions
990
995
  split: Split
991
996
  spree_gateway_error_flash_for_checkout: There was a problem with your payment information. Please check your information and try again.
997
+ ssl:
998
+ change_protocol: "Please switch to using HTTP (rather than HTTPS) and retry this request."
992
999
  start: Start
993
- start_date: Valid from
994
1000
  state: State
995
1001
  state_based: State Based
996
1002
  states: States
data/config/routes.rb ADDED
@@ -0,0 +1 @@
1
+ Spree::Core::Engine.draw_routes
@@ -1,7 +1,7 @@
1
1
  Spree::Country.create!([
2
2
  { name: "Chad", iso3: "TCD", iso: "TD", iso_name: "CHAD", numcode: "148" },
3
3
  { name: "Faroe Islands", iso3: "FRO", iso: "FO", iso_name: "FAROE ISLANDS", numcode: "234" },
4
- { name: "India", iso3: "IND", iso: "IN", iso_name: "INDIA", numcode: "356" },
4
+ { name: "India", iso3: "IND", iso: "IN", iso_name: "INDIA", numcode: "356", states_required: true },
5
5
  { name: "Nicaragua", iso3: "NIC", iso: "NI", iso_name: "NICARAGUA", numcode: "558" },
6
6
  { name: "Saint Lucia", iso3: "LCA", iso: "LC", iso_name: "SAINT LUCIA", numcode: "662" },
7
7
  { name: "Fiji", iso3: "FJI", iso: "FJ", iso_name: "FIJI", numcode: "242" },
@@ -9,14 +9,14 @@ Spree::Country.create!([
9
9
  { name: "Niger", iso3: "NER", iso: "NE", iso_name: "NIGER", numcode: "562" },
10
10
  { name: "Saint Pierre and Miquelon", iso3: "SPM", iso: "PM", iso_name: "SAINT PIERRE AND MIQUELON", numcode: "666" },
11
11
  { name: "Finland", iso3: "FIN", iso: "FI", iso_name: "FINLAND", numcode: "246" },
12
- { name: "Nigeria", iso3: "NGA", iso: "NG", iso_name: "NIGERIA", numcode: "566" },
12
+ { name: "Nigeria", iso3: "NGA", iso: "NG", iso_name: "NIGERIA", numcode: "566", states_required: true },
13
13
  { name: "Saint Vincent and the Grenadines", iso3: "VCT", iso: "VC", iso_name: "SAINT VINCENT AND THE GRENADINES", numcode: "670" },
14
14
  { name: "France", iso3: "FRA", iso: "FR", iso_name: "FRANCE", numcode: "250" },
15
15
  { name: "Iran, Islamic Republic of", iso3: "IRN", iso: "IR", iso_name: "IRAN, ISLAMIC REPUBLIC OF", numcode: "364" },
16
16
  { name: "Niue", iso3: "NIU", iso: "NU", iso_name: "NIUE", numcode: "570" },
17
17
  { name: "Samoa", iso3: "WSM", iso: "WS", iso_name: "SAMOA", numcode: "882" },
18
18
  { name: "French Guiana", iso3: "GUF", iso: "GF", iso_name: "FRENCH GUIANA", numcode: "254" },
19
- { name: "Iraq", iso3: "IRQ", iso: "IQ", iso_name: "IRAQ", numcode: "368" },
19
+ { name: "Iraq", iso3: "IRQ", iso: "IQ", iso_name: "IRAQ", numcode: "368", states_required: true },
20
20
  { name: "San Marino", iso3: "SMR", iso: "SM", iso_name: "SAN MARINO", numcode: "674" },
21
21
  { name: "Ireland", iso3: "IRL", iso: "IE", iso_name: "IRELAND", numcode: "372" },
22
22
  { name: "Sao Tome and Principe", iso3: "STP", iso: "ST", iso_name: "SAO TOME AND PRINCIPE", numcode: "678" },
@@ -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" },
30
+ { name: "Belgium", iso3: "BEL", iso: "BE", iso_name: "BELGIUM", numcode: "56", states_required: true },
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" },
@@ -36,19 +36,19 @@ Spree::Country.create!([
36
36
  { name: "Ukraine", iso3: "UKR", iso: "UA", iso_name: "UKRAINE", numcode: "804" },
37
37
  { name: "Bermuda", iso3: "BMU", iso: "BM", iso_name: "BERMUDA", numcode: "60" },
38
38
  { name: "Kiribati", iso3: "KIR", iso: "KI", iso_name: "KIRIBATI", numcode: "296" },
39
- { name: "Mexico", iso3: "MEX", iso: "MX", iso_name: "MEXICO", numcode: "484" },
40
- { name: "United Arab Emirates", iso3: "ARE", iso: "AE", iso_name: "UNITED ARAB EMIRATES", numcode: "784" },
39
+ { name: "Mexico", iso3: "MEX", iso: "MX", iso_name: "MEXICO", numcode: "484", states_required: true },
40
+ { name: "United Arab Emirates", iso3: "ARE", iso: "AE", iso_name: "UNITED ARAB EMIRATES", numcode: "784", states_required: true },
41
41
  { name: "Bhutan", iso3: "BTN", iso: "BT", iso_name: "BHUTAN", numcode: "64" },
42
42
  { name: "Cuba", iso3: "CUB", iso: "CU", iso_name: "CUBA", numcode: "192" },
43
43
  { name: "North Korea", iso3: "PRK", iso: "KP", iso_name: "KOREA, DEMOCRATIC PEOPLE'S REPUBLIC OF", numcode: "408" },
44
- { name: "Micronesia, Federated States of", iso3: "FSM", iso: "FM", iso_name: "MICRONESIA, FEDERATED STATES OF", numcode: "583" },
44
+ { name: "Micronesia, Federated States of", iso3: "FSM", iso: "FM", iso_name: "MICRONESIA, FEDERATED STATES OF", numcode: "583", states_required: true },
45
45
  { name: "United Kingdom", iso3: "GBR", iso: "GB", iso_name: "UNITED KINGDOM", numcode: "826" },
46
46
  { name: "Bolivia", iso3: "BOL", iso: "BO", iso_name: "BOLIVIA", numcode: "68" },
47
47
  { name: "Cyprus", iso3: "CYP", iso: "CY", iso_name: "CYPRUS", numcode: "196" },
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
- { name: "United States", iso3: "USA", iso: "US", iso_name: "UNITED STATES", numcode: "840" },
51
- { name: "Bosnia and Herzegovina", iso3: "BIH", iso: "BA", iso_name: "BOSNIA AND HERZEGOVINA", numcode: "70" },
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 },
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" },
@@ -59,7 +59,7 @@ Spree::Country.create!([
59
59
  { name: "Kyrgyzstan", iso3: "KGZ", iso: "KG", iso_name: "KYRGYZSTAN", numcode: "417" },
60
60
  { name: "Mongolia", iso3: "MNG", iso: "MN", iso_name: "MONGOLIA", numcode: "496" },
61
61
  { name: "Philippines", iso3: "PHL", iso: "PH", iso_name: "PHILIPPINES", numcode: "608" },
62
- { name: "Brazil", iso3: "BRA", iso: "BR", iso_name: "BRAZIL", numcode: "76" },
62
+ { name: "Brazil", iso3: "BRA", iso: "BR", iso_name: "BRAZIL", numcode: "76", states_required: true },
63
63
  { name: "Djibouti", iso3: "DJI", iso: "DJ", iso_name: "DJIBOUTI", numcode: "262" },
64
64
  { name: "Guam", iso3: "GUM", iso: "GU", iso_name: "GUAM", numcode: "316" },
65
65
  { name: "Lao People's Democratic Republic", iso3: "LAO", iso: "LA", iso_name: "LAO PEOPLE'S DEMOCRATIC REPUBLIC", numcode: "418" },
@@ -75,8 +75,8 @@ Spree::Country.create!([
75
75
  { name: "Dominican Republic", iso3: "DOM", iso: "DO", iso_name: "DOMINICAN REPUBLIC", numcode: "214" },
76
76
  { name: "Mozambique", iso3: "MOZ", iso: "MZ", iso_name: "MOZAMBIQUE", numcode: "508" },
77
77
  { name: "Portugal", iso3: "PRT", iso: "PT", iso_name: "PORTUGAL", numcode: "620" },
78
- { name: "Sudan", iso3: "SDN", iso: "SD", iso_name: "SUDAN", numcode: "736" },
79
- { name: "Venezuela", iso3: "VEN", iso: "VE", iso_name: "VENEZUELA", numcode: "862" },
78
+ { name: "Sudan", iso3: "SDN", iso: "SD", iso_name: "SUDAN", numcode: "736", states_required: true },
79
+ { name: "Venezuela", iso3: "VEN", iso: "VE", iso_name: "VENEZUELA", numcode: "862", states_required: true },
80
80
  { name: "Ecuador", iso3: "ECU", iso: "EC", iso_name: "ECUADOR", numcode: "218" },
81
81
  { name: "Guinea", iso3: "GIN", iso: "GN", iso_name: "GUINEA", numcode: "324" },
82
82
  { name: "Myanmar", iso3: "MMR", iso: "MM", iso_name: "MYANMAR", numcode: "104" },
@@ -95,11 +95,11 @@ Spree::Country.create!([
95
95
  { name: "Romania", iso3: "ROM", iso: "RO", iso_name: "ROMANIA", numcode: "642" },
96
96
  { name: "Swaziland", iso3: "SWZ", iso: "SZ", iso_name: "SWAZILAND", numcode: "748" },
97
97
  { name: "Holy See (Vatican City State)", iso3: "VAT", iso: "VA", iso_name: "HOLY SEE (VATICAN CITY STATE)", numcode: "336" },
98
- { name: "Russian Federation", iso3: "RUS", iso: "RU", iso_name: "RUSSIAN FEDERATION", numcode: "643" },
98
+ { name: "Russian Federation", iso3: "RUS", iso: "RU", iso_name: "RUSSIAN FEDERATION", numcode: "643", states_required: true },
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" },
102
+ { name: "Switzerland", iso3: "CHE", iso: "CH", iso_name: "SWITZERLAND", numcode: "756", states_required: true },
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" },
@@ -107,9 +107,9 @@ Spree::Country.create!([
107
107
  { name: "Tanzania, United Republic of", iso3: "TZA", iso: "TZ", iso_name: "TANZANIA, UNITED REPUBLIC OF", numcode: "834" },
108
108
  { name: "Armenia", iso3: "ARM", iso: "AM", iso_name: "ARMENIA", numcode: "51" },
109
109
  { name: "Aruba", iso3: "ABW", iso: "AW", iso_name: "ARUBA", numcode: "533" },
110
- { name: "Australia", iso3: "AUS", iso: "AU", iso_name: "AUSTRALIA", numcode: "36" },
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" },
112
+ { name: "Austria", iso3: "AUT", iso: "AT", iso_name: "AUSTRIA", numcode: "40", states_required: true },
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,14 +118,14 @@ 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" },
121
+ { name: "Malaysia", iso3: "MYS", iso: "MY", iso_name: "MALAYSIA", numcode: "458", states_required: true },
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" },
125
125
  { name: "Maldives", iso3: "MDV", iso: "MV", iso_name: "MALDIVES", numcode: "462" },
126
126
  { name: "Trinidad and Tobago", iso3: "TTO", iso: "TT", iso_name: "TRINIDAD AND TOBAGO", numcode: "780" },
127
127
  { name: "Bangladesh", iso3: "BGD", iso: "BD", iso_name: "BANGLADESH", numcode: "50" },
128
- { name: "Comoros", iso3: "COM", iso: "KM", iso_name: "COMOROS", numcode: "174" },
128
+ { name: "Comoros", iso3: "COM", iso: "KM", iso_name: "COMOROS", numcode: "174", states_required: true },
129
129
  { name: "French Polynesia", iso3: "PYF", iso: "PF", iso_name: "FRENCH POLYNESIA", numcode: "258" },
130
130
  { name: "Mali", iso3: "MLI", iso: "ML", iso_name: "MALI", numcode: "466" },
131
131
  { name: "Norfolk Island", iso3: "NFK", iso: "NF", iso_name: "NORFOLK ISLAND", numcode: "574" },
@@ -149,11 +149,11 @@ Spree::Country.create!([
149
149
  { name: "Turks and Caicos Islands", iso3: "TCA", iso: "TC", iso_name: "TURKS AND CAICOS ISLANDS", numcode: "796" },
150
150
  { name: "Georgia", iso3: "GEO", iso: "GE", iso_name: "GEORGIA", numcode: "268" },
151
151
  { name: "Mauritania", iso3: "MRT", iso: "MR", iso_name: "MAURITANIA", numcode: "478" },
152
- { name: "Pakistan", iso3: "PAK", iso: "PK", iso_name: "PAKISTAN", numcode: "586" },
152
+ { name: "Pakistan", iso3: "PAK", iso: "PK", iso_name: "PAKISTAN", numcode: "586", states_required: true },
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" },
156
+ { name: "Germany", iso3: "DEU", iso: "DE", iso_name: "GERMANY", numcode: "276", states_required: true },
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" },
@@ -170,7 +170,7 @@ Spree::Country.create!([
170
170
  { name: "Peru", iso3: "PER", iso: "PE", iso_name: "PERU", numcode: "604" },
171
171
  { name: "Solomon Islands", iso3: "SLB", iso: "SB", iso_name: "SOLOMON ISLANDS", numcode: "90" },
172
172
  { name: "Greenland", iso3: "GRL", iso: "GL", iso_name: "GREENLAND", numcode: "304" },
173
- { name: "Somalia", iso3: "SOM", iso: "SO", iso_name: "SOMALIA", numcode: "706" },
173
+ { name: "Somalia", iso3: "SOM", iso: "SO", iso_name: "SOMALIA", numcode: "706", states_required: true },
174
174
  { name: "Grenada", iso3: "GRD", iso: "GD", iso_name: "GRENADA", numcode: "308" },
175
175
  { name: "South Africa", iso3: "ZAF", iso: "ZA", iso_name: "SOUTH AFRICA", numcode: "710" },
176
176
  { name: "Spain", iso3: "ESP", iso: "ES", iso_name: "SPAIN", numcode: "724" },
@@ -198,11 +198,11 @@ Spree::Country.create!([
198
198
  { name: "Antigua and Barbuda", iso3: "ATG", iso: "AG", iso_name: "ANTIGUA AND BARBUDA", numcode: "28" },
199
199
  { name: "Cameroon", iso3: "CMR", iso: "CM", iso_name: "CAMEROON", numcode: "120" },
200
200
  { name: "Liechtenstein", iso3: "LIE", iso: "LI", iso_name: "LIECHTENSTEIN", numcode: "438" },
201
- { name: "Nepal", iso3: "NPL", iso: "NP", iso_name: "NEPAL", numcode: "524" },
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" },
205
- { name: "Canada", iso3: "CAN", iso: "CA", iso_name: "CANADA", numcode: "124" },
204
+ { name: "Argentina", iso3: "ARG", iso: "AR", iso_name: "ARGENTINA", numcode: "32", states_required: true },
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" },
208
208
  { name: "Netherlands", iso3: "NLD", iso: "NL", iso_name: "NETHERLANDS", numcode: "528" },
@@ -214,7 +214,7 @@ Spree::Country.create!([
214
214
  { name: "Saint Helena", iso3: "SHN", iso: "SH", iso_name: "SAINT HELENA", numcode: "654" },
215
215
  { name: "Zambia", iso3: "ZMB", iso: "ZM", iso_name: "ZAMBIA", numcode: "894" },
216
216
  { name: "Cayman Islands", iso3: "CYM", iso: "KY", iso_name: "CAYMAN ISLANDS", numcode: "136" },
217
- { name: "Ethiopia", iso3: "ETH", iso: "ET", iso_name: "ETHIOPIA", numcode: "231" },
217
+ { name: "Ethiopia", iso3: "ETH", iso: "ET", iso_name: "ETHIOPIA", numcode: "231", states_required: true },
218
218
  { name: "Hungary", iso3: "HUN", iso: "HU", iso_name: "HUNGARY", numcode: "348" },
219
219
  { name: "Macao", iso3: "MAC", iso: "MO", iso_name: "MACAO", numcode: "446" },
220
220
  { name: "New Caledonia", iso3: "NCL", iso: "NC", iso_name: "NEW CALEDONIA", numcode: "540" },
@@ -224,7 +224,7 @@ Spree::Country.create!([
224
224
  { name: "Iceland", iso3: "ISL", iso: "IS", iso_name: "ICELAND", numcode: "352" },
225
225
  { name: "Macedonia", iso3: "MKD", iso: "MK", iso_name: "MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF", numcode: "807" },
226
226
  { name: "New Zealand", iso3: "NZL", iso: "NZ", iso_name: "NEW ZEALAND", numcode: "554" },
227
- { name: "Saint Kitts and Nevis", iso3: "KNA", iso: "KN", iso_name: "SAINT KITTS AND NEVIS", numcode: "659" },
227
+ { name: "Saint Kitts and Nevis", iso3: "KNA", iso: "KN", iso_name: "SAINT KITTS AND NEVIS", numcode: "659", states_required: true },
228
228
  { name: "Serbia", iso3: "SRB", iso: "RS", "iso_name" => "SERBIA", numcode: "999" }
229
229
  ])
230
230
  Spree::Config[:default_country_id] = Spree::Country.find_by(name: "United States").id