Module: ActsAsAddressable

Extended by:
ActiveSupport::Concern
Defined in:
app/models/concerns/acts_as_addressable.rb

Overview

ActsAsAddressable

This module creates .billing_address, .shipping_address and .address methods it tricks a has_many relationship into singleton methods

Mark your model with ‘acts_as_addressable’

there are no additional migrations needed for this module to work.

By default, addresses are NOT required

If you want to validate presence, please mark your model acts_as_addressable :require_billing => true, :require_address => true, :require_shipping => true

Please see app/views/admin/users/_form.html.haml for an example of how to use this in a formtastic form

Defined Under Namespace

Modules: ActiveRecord, ClassMethods

Instance Method Summary collapse

Instance Method Details

#addressObject



41
42
43
# File 'app/models/concerns/acts_as_addressable.rb', line 41

def address
  single_addresses.last
end

#address=(address_atts) ⇒ Object



45
46
47
48
49
# File 'app/models/concerns/acts_as_addressable.rb', line 45

def address=(address_atts)
  add = (address_atts.kind_of?(Effective::Address) ? address_atts.dup : Effective::Address.new(address_atts))
  add.category = 'address'
  addresses << add if !add.empty? and !(add == address)
end

#billing_addressObject



69
70
71
# File 'app/models/concerns/acts_as_addressable.rb', line 69

def billing_address
  billing_addresses.last
end

#billing_address=(address_atts) ⇒ Object



73
74
75
76
77
# File 'app/models/concerns/acts_as_addressable.rb', line 73

def billing_address=(address_atts)
  add = (address_atts.kind_of?(Effective::Address) ? address_atts.dup : Effective::Address.new(address_atts))
  add.category = 'billing'
  addresses << add if !add.empty? and !(add == billing_address)
end

#billing_addressesObject



65
66
67
# File 'app/models/concerns/acts_as_addressable.rb', line 65

def billing_addresses
  addresses.select { |address| address.category == 'billing' }
end

#primary_addressObject



83
84
85
# File 'app/models/concerns/acts_as_addressable.rb', line 83

def primary_address
  primary_addresses.last
end

#primary_address=(address_atts) ⇒ Object



87
88
89
90
91
# File 'app/models/concerns/acts_as_addressable.rb', line 87

def primary_address=(address_atts)
  add = (address_atts.kind_of?(Effective::Address) ? address_atts.dup : Effective::Address.new(address_atts))
  add.category = 'primary'
  addresses << add if !add.empty? and !(add == primary_address)
end

#primary_addressesObject



79
80
81
# File 'app/models/concerns/acts_as_addressable.rb', line 79

def primary_addresses
  addresses.select { |address| address.category == 'primary' }
end

#secondary_addressObject



97
98
99
# File 'app/models/concerns/acts_as_addressable.rb', line 97

def secondary_address
  secondary_addresses.last
end

#secondary_address=(address_atts) ⇒ Object



101
102
103
104
105
# File 'app/models/concerns/acts_as_addressable.rb', line 101

def secondary_address=(address_atts)
  add = (address_atts.kind_of?(Effective::Address) ? address_atts.dup : Effective::Address.new(address_atts))
  add.category = 'secondary'
  addresses << add if !add.empty? and !(add == secondary_address)
end

#secondary_addressesObject



93
94
95
# File 'app/models/concerns/acts_as_addressable.rb', line 93

def secondary_addresses
  addresses.select { |address| address.category == 'secondary' }
end

#shipping_addressObject



55
56
57
# File 'app/models/concerns/acts_as_addressable.rb', line 55

def shipping_address
  shipping_addresses.last
end

#shipping_address=(address_atts) ⇒ Object



59
60
61
62
63
# File 'app/models/concerns/acts_as_addressable.rb', line 59

def shipping_address=(address_atts)
  add = (address_atts.kind_of?(Effective::Address) ? address_atts.dup : Effective::Address.new(address_atts))
  add.category = 'shipping'
  addresses << add if !add.empty? and !(add == shipping_address)
end

#shipping_addressesObject



51
52
53
# File 'app/models/concerns/acts_as_addressable.rb', line 51

def shipping_addresses
  addresses.select { |address| address.category == 'shipping' }
end

#single_addressesObject



37
38
39
# File 'app/models/concerns/acts_as_addressable.rb', line 37

def single_addresses
  addresses.select { |address| address.category == 'address' }
end