Class: Spree::Address

Inherits:
Base
  • Object
show all
Defined in:
app/models/spree/address.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

belongs_to_required_by_default, page, spree_base_scopes

Methods included from Preferences::Preferable

#clear_preferences, #default_preferences, #defined_preferences, #get_preference, #has_preference!, #has_preference?, #preference_default, #preference_type, #set_preference

Class Method Details

.build_defaultObject


33
34
35
36
37
38
39
40
# File 'app/models/spree/address.rb', line 33

def self.build_default
  country = begin
              Spree::Country.find(Spree::Config[:default_country_id])
            rescue
              Spree::Country.first
            end
  new(country: country)
end

.default(user = nil, kind = 'bill') ⇒ Object


42
43
44
45
46
47
48
# File 'app/models/spree/address.rb', line 42

def self.default(user = nil, kind = 'bill')
  if user && user_address = user.public_send(:"#{kind}_address")
    user_address.clone
  else
    build_default
  end
end

Instance Method Details

#==(other_address) ⇒ Object


78
79
80
81
82
83
84
85
# File 'app/models/spree/address.rb', line 78

def ==(other_address)
  self_attrs = attributes
  other_attrs = other_address.respond_to?(:attributes) ? other_address.attributes : {}

  [self_attrs, other_attrs].each { |attrs| attrs.except!('id', 'created_at', 'updated_at') }

  self_attrs == other_attrs
end

#active_merchant_hashObject

Generates an ActiveMerchant compatible address hash


92
93
94
95
96
97
98
99
100
101
102
103
# File 'app/models/spree/address.rb', line 92

def active_merchant_hash
  {
    name: full_name,
    address1: address1,
    address2: address2,
    city: city,
    state: state_text,
    zip: zipcode,
    country: country.try(:iso),
    phone: phone
  }
end

#cloneObject


74
75
76
# File 'app/models/spree/address.rb', line 74

def clone
  self.class.new(attributes.except('id', 'updated_at', 'created_at'))
end

#empty?Boolean


87
88
89
# File 'app/models/spree/address.rb', line 87

def empty?
  attributes.except('id', 'created_at', 'updated_at', 'country_id').all? { |_, v| v.nil? }
end

#full_nameObject

Can modify an address if it's not been used in an order (but checkouts controller has finer control) def editable?

new_record? || (shipments.empty? && checkouts.empty?)

end


55
56
57
# File 'app/models/spree/address.rb', line 55

def full_name
  "#{firstname} #{lastname}".strip
end

#require_phone?Boolean


105
106
107
# File 'app/models/spree/address.rb', line 105

def require_phone?
  Spree::Config[:address_requires_phone]
end

#require_zipcode?Boolean


109
110
111
# File 'app/models/spree/address.rb', line 109

def require_zipcode?
  country ? country.zipcode_required? : true
end

#same_as?(other) ⇒ Boolean Also known as: same_as


63
64
65
66
# File 'app/models/spree/address.rb', line 63

def same_as?(other)
  return false if other.nil?
  attributes.except('id', 'updated_at', 'created_at') == other.attributes.except('id', 'updated_at', 'created_at')
end

#state_textObject


59
60
61
# File 'app/models/spree/address.rb', line 59

def state_text
  state.try(:abbr) || state.try(:name) || state_name
end

#to_sObject


70
71
72
# File 'app/models/spree/address.rb', line 70

def to_s
  "#{full_name}: #{address1}"
end