forked from solidusio/solidus
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathstore.rb
83 lines (68 loc) · 2.44 KB
/
store.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# frozen_string_literal: true
module Spree
# Records store specific configuration such as store name and URL.
#
# `Spree::Store` provides the foundational ActiveRecord model for recording information
# specific to your store such as its name, URL, and tax location. This model will
# provide the foundation upon which [support for multiple stores](https://github.com/solidusio/solidus/issues/112)
# hosted by a single Solidus implementation can be built.
#
class Store < Spree::Base
has_many :store_payment_methods, inverse_of: :store
has_many :payment_methods, through: :store_payment_methods
has_many :store_shipping_methods, inverse_of: :store
has_many :shipping_methods, through: :store_shipping_methods
has_many :orders, class_name: "Spree::Order"
validates :code, presence: true, uniqueness: { allow_blank: true }
validates :name, presence: true
validates :url, presence: true
validates :mail_from_address, presence: true
before_save :ensure_default_exists_and_is_unique
before_destroy :validate_not_default
scope :by_url, lambda { |url| where("url like ?", "%#{url}%") }
class << self
deprecate by_url: "Spree::Store.by_url is DEPRECATED", deprecator: Spree::Deprecation
end
def available_locales
locales = super()
if locales
super().split(",").map(&:to_sym)
else
Spree.i18n_available_locales
end
end
def available_locales=(locales)
locales = locales.reject(&:blank?)
if locales.empty?
super(nil)
else
super(locales.map(&:to_s).join(","))
end
end
def self.current(store_key)
Spree::Deprecation.warn "Spree::Store.current is DEPRECATED"
current_store = Store.find_by(code: store_key) || Store.by_url(store_key).first if store_key
current_store || Store.default
end
def self.default
where(default: true).first || new
end
def default_cart_tax_location
@default_cart_tax_location ||=
Spree::Tax::TaxLocation.new(country: Spree::Country.find_by(iso: cart_tax_country_iso))
end
private
def ensure_default_exists_and_is_unique
if default
Spree::Store.where.not(id: id).update_all(default: false)
elsif Spree::Store.where(default: true).count == 0
self.default = true
end
end
def validate_not_default
if default
errors.add(:base, :cannot_destroy_default_store)
end
end
end
end