Class: MerchantSidekick::Addressable::Address

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
lib/merchant_sidekick/addressable/address.rb

Overview

Super class of all types of addresses

Constant Summary collapse

@@street_address_column =
:street
@@city_column =
:city
@@postal_code_column =
:postal_code
@@province_column =
:province
@@province_code_column =
:province_code
@@country_column =
:country
@@country_code_column =
:country_code
@@gender_column =
:gender
@@first_name_column =
:first_name
@@middle_name_column =
false
@@last_name_column =
:last_name

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.content_column_namesObject



94
95
96
# File 'lib/merchant_sidekick/addressable/address.rb', line 94

def content_column_names
  content_columns.map(&:name) - %w(kind addressable_type addressable_id updated_at created_at)
end

.find_address_for_addressable(addressable_str, addressable_id) ⇒ Object

Helper class method to look up all addresss for addressable class name and addressable id.



71
72
73
74
75
76
# File 'lib/merchant_sidekick/addressable/address.rb', line 71

def find_address_for_addressable(addressable_str, addressable_id)
  find(:all,
    :conditions => ["addressable_type = ? AND addressable_id = ?", addressable_str, addressable_id],
    :order => "created_at DESC"
  )
end

.find_addressable(addressable_str, addressable_id) ⇒ Object

Helper class method to look up a addressable object given the addressable class name and id



80
81
82
# File 'lib/merchant_sidekick/addressable/address.rb', line 80

def find_addressable(addressable_str, addressable_id)
  addressable_str.constantize.find(addressable_id)
end

.get_bindingObject

Returns the binding to be used in sub classes of Address



65
66
67
# File 'lib/merchant_sidekick/addressable/address.rb', line 65

def get_binding
  binding
end

.kindObject



60
61
62
# File 'lib/merchant_sidekick/addressable/address.rb', line 60

def kind
  name.underscore
end

.middle_name?Boolean

Returns:

  • (Boolean)


287
288
289
290
# File 'lib/merchant_sidekick/addressable/address.rb', line 287

def self.middle_name?
  return true if middle_name_column
  false
end

.province_code?Boolean

Returns:

  • (Boolean)


207
208
209
210
# File 'lib/merchant_sidekick/addressable/address.rb', line 207

def self.province_code?
  return true if province_code_column
  false
end

.translate_column_key(in_column) ⇒ Object

TODO not used



85
86
87
88
89
90
91
92
# File 'lib/merchant_sidekick/addressable/address.rb', line 85

def translate_column_key(in_column)
  out_column = class_variable_get("@@#{in_column}")
  case out_column.class.name
  when /NilClass/ then in_column
  when /FalseClass/ then nil
  else out_column
  end
end

Instance Method Details

#address_line_1Object Also known as: address1

address_line_1 getter, first line of street_address address1 alias for active merchant



166
167
168
# File 'lib/merchant_sidekick/addressable/address.rb', line 166

def address_line_1
  (self.street.gsub(/\r/, '').split(/\n/)[0] || self.street).strip if self.street
end

#address_line_1=(addr1) ⇒ Object Also known as: address1=

setter



172
173
174
# File 'lib/merchant_sidekick/addressable/address.rb', line 172

def address_line_1=(addr1)
  self.street = "#{addr1}\n#{address_line_2}"
end

#address_line_2Object Also known as: address2

address_line_2 getter, second line and following of street address2 alias for active merchant



179
180
181
# File 'lib/merchant_sidekick/addressable/address.rb', line 179

def address_line_2
  self.street.gsub(/\r/, '').split(/\n/)[1] if self.street
end

#address_line_2=(addr2) ⇒ Object Also known as: address2=

setter



185
186
187
# File 'lib/merchant_sidekick/addressable/address.rb', line 185

def address_line_2=(addr2)
  self.street = "#{address_line_1}\n#{addr2}"
end

#before_saveObject

This particular call back could be used to save geocordinates if addressable defines :before_save_address method



51
52
53
54
# File 'lib/merchant_sidekick/addressable/address.rb', line 51

def before_save
  # trigger before_save_address
  self.addressable.send(:before_save_address, self) if addressable && addressable.respond_to?(:before_save_address)
end

#content_attributesObject

return only attributes with relevant content



385
386
387
# File 'lib/merchant_sidekick/addressable/address.rb', line 385

def content_attributes
  self.attributes.reject {|k,v| !self.content_column_names.include?(k.to_s)}.symbolize_keys
end

#content_column_namesObject

returns content column name strings



390
391
392
# File 'lib/merchant_sidekick/addressable/address.rb', line 390

def content_column_names
  self.class.content_column_names
end

#countryObject

country getter



223
224
225
# File 'lib/merchant_sidekick/addressable/address.rb', line 223

def country
  self[country_column]
end

#country=(a_country) ⇒ Object

country setter



228
229
230
# File 'lib/merchant_sidekick/addressable/address.rb', line 228

def country=(a_country)
  self[country_column] = a_country
end

#country_codeObject

country code getter



233
234
235
# File 'lib/merchant_sidekick/addressable/address.rb', line 233

def country_code
  self[country_code_column] if country_code?
end

#country_code=(a_country_code) ⇒ Object

country code setter



243
244
245
# File 'lib/merchant_sidekick/addressable/address.rb', line 243

def country_code=(a_country_code)
  self[country_code_column] = a_country_code if country_code?
end

#country_code?Boolean

Returns:

  • (Boolean)


237
238
239
240
# File 'lib/merchant_sidekick/addressable/address.rb', line 237

def country_code?
  return true if country_code_column
  false
end

#country_or_country_codeObject

returns either the full country name or the country code (e.g. DE)



368
369
370
# File 'lib/merchant_sidekick/addressable/address.rb', line 368

def country_or_country_code
  self.country.to_s.empty? ? self.country_code : self.country
end

#first_nameObject Also known as: firstname

getter



248
249
250
# File 'lib/merchant_sidekick/addressable/address.rb', line 248

def first_name
  self[first_name_column] if first_name?
end

#first_name=(a_first_name) ⇒ Object Also known as: firstname=

setter



259
260
261
# File 'lib/merchant_sidekick/addressable/address.rb', line 259

def first_name=(a_first_name)
  self[first_name_column] = a_first_name if first_name?
end

#first_name?Boolean

Returns:

  • (Boolean)


253
254
255
256
# File 'lib/merchant_sidekick/addressable/address.rb', line 253

def first_name?
  return true if first_name_column
  false
end

#genderObject

gender getter



322
323
324
# File 'lib/merchant_sidekick/addressable/address.rb', line 322

def gender
  self[gender_column] if gender?
end

#gender=(a_gender) ⇒ Object

setter



303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
# File 'lib/merchant_sidekick/addressable/address.rb', line 303

def gender=(a_gender)
  if gender?
    if a_gender.is_a? Symbol
      self[gender_column] = case a_gender
      when :male then 'm'
      when :female then 'f'
      else ''
      end
    elsif a_gender.is_a? String
      self[gender_column] = case a_gender
      when 'm' then 'm'
      when 'f' then 'f'
      else ''
      end
    end
  end
end

#gender?Boolean

Returns:

  • (Boolean)


326
327
328
329
# File 'lib/merchant_sidekick/addressable/address.rb', line 326

def gender?
  return true if gender_column
  false
end

#geokit_attributesObject

geokit getter returns a hash of geokit compatible GeoKit::Location attributes



104
105
106
107
108
109
110
111
112
# File 'lib/merchant_sidekick/addressable/address.rb', line 104

def geokit_attributes
  {
    :zip => self.postal_code,
    :city => self.city,
    :street_address => self.street_address,
    :state => self.province_code || self.province,
    :country_code => self.country_code
  }
end

#geokit_attributes=(geo_attr) ⇒ Object

geokit setter



115
116
117
118
119
120
121
122
123
# File 'lib/merchant_sidekick/addressable/address.rb', line 115

def geokit_attributes=(geo_attr)
  self.attributes = {
    :postal_code => geo_attr[:zip],
    :city => geo_attr[:city],
    :street_address => geo_attr[:street_address],
    :province_code => geo_attr[:state],
    :country_code => geo_attr[:country_code]
  }
end

#is_gender_female?Boolean

Returns:

  • (Boolean)


335
336
337
# File 'lib/merchant_sidekick/addressable/address.rb', line 335

def is_gender_female?
  self.gender == 'f'
end

#is_gender_male?Boolean

Returns:

  • (Boolean)


331
332
333
# File 'lib/merchant_sidekick/addressable/address.rb', line 331

def is_gender_male?
  self.gender == 'm'
end

#kindObject

E.g. :billing_addres, :shipping_address



395
396
397
# File 'lib/merchant_sidekick/addressable/address.rb', line 395

def kind
  self.class.kind
end

#last_nameObject Also known as: lastname

getter



265
266
267
# File 'lib/merchant_sidekick/addressable/address.rb', line 265

def last_name
  self[last_name_column] if last_name?
end

#last_name=(a_last_name) ⇒ Object Also known as: lastname=

setter



276
277
278
# File 'lib/merchant_sidekick/addressable/address.rb', line 276

def last_name=(a_last_name)
  self[last_name_column] = a_last_name if last_name?
end

#last_name?Boolean

Returns:

  • (Boolean)


270
271
272
273
# File 'lib/merchant_sidekick/addressable/address.rb', line 270

def last_name?
  return true if last_name_column
  false
end

#merchant_attributes(options = {}) ⇒ Object Also known as: to_merchant_attributes

attributes for active merchant address



126
127
128
129
130
131
132
133
134
135
136
137
# File 'lib/merchant_sidekick/addressable/address.rb', line 126

def merchant_attributes(options={})
  {
    :name => self.name,
    :address1 => self.address_line_1,
    :address2 => self.address_line_2,
    :city => self.city,
    :state => (self.province_code || self.province),
    :country => (self.country_code || self.country),
    :zip => self.postal_code,
    :phone => self.phone
  }.merge(options)
end

#middle_nameObject Also known as: middlename

getter



282
283
284
# File 'lib/merchant_sidekick/addressable/address.rb', line 282

def middle_name
  self[middle_name_column] if middle_name?
end

#middle_name=(a_middle_name) ⇒ Object

setter



298
299
300
# File 'lib/merchant_sidekick/addressable/address.rb', line 298

def middle_name=(a_middle_name)
  self[middle_name_column] = a_middle_name if middle_name?
end

#middle_name?Boolean

Returns:

  • (Boolean)


292
293
294
295
# File 'lib/merchant_sidekick/addressable/address.rb', line 292

def middle_name?
  return true if middle_name_column
  false
end

#nameObject

Concatenates First-, Middle-, last_name to one string



340
341
342
343
344
345
346
347
# File 'lib/merchant_sidekick/addressable/address.rb', line 340

def name
  result = []
  result << first_name
  result << middle_name
  result << last_name
  result = result.compact.map {|m| m.to_s.strip }.reject {|i| i.empty? }
  return result.join(' ') unless result.empty?
end

#postal_codeObject Also known as: zip

postal_code reader



153
154
155
# File 'lib/merchant_sidekick/addressable/address.rb', line 153

def postal_code
  self[postal_code_column]
end

#postal_code=(a_zip) ⇒ Object Also known as: zip=

postal_code instead of ZIP



159
160
161
# File 'lib/merchant_sidekick/addressable/address.rb', line 159

def postal_code=(a_zip)
  self[postal_code_column] = a_zip
end

#provinceObject Also known as: state

province getter



191
192
193
# File 'lib/merchant_sidekick/addressable/address.rb', line 191

def province
  self[province_column]
end

#province=(a_province) ⇒ Object Also known as: state=

province setter



197
198
199
# File 'lib/merchant_sidekick/addressable/address.rb', line 197

def province=(a_province)
  self[province_column] = a_province
end

#province_codeObject

province code getter



203
204
205
# File 'lib/merchant_sidekick/addressable/address.rb', line 203

def province_code
  self[province_code_column] if province_code?
end

#province_code=(a_province_code) ⇒ Object

province code setter



218
219
220
# File 'lib/merchant_sidekick/addressable/address.rb', line 218

def province_code=(a_province_code)
  self[province_code_column] = a_province_code if province_code?
end

#province_code?Boolean

Returns:

  • (Boolean)


212
213
214
215
# File 'lib/merchant_sidekick/addressable/address.rb', line 212

def province_code?
  return true if province_code_column
  false
end

#province_or_province_codeObject

returns the province (as full text) or the province_code (e.g. CA)



363
364
365
# File 'lib/merchant_sidekick/addressable/address.rb', line 363

def province_or_province_code
  self.province.to_s.empty? ? self.province_code : self.province
end

#salutation(options = {}) ⇒ Object Also known as: salutation_display

Similar as in Person, only displays like “Mr” or “Prof. Dr.”



350
351
352
353
# File 'lib/merchant_sidekick/addressable/address.rb', line 350

def salutation(options={})
  (self.is_gender_male? ? (return "Mr") : (return "Ms")) if self.gender
  ''
end

#salutation_and_nameObject Also known as: salutation_and_name_display

Returns the salutation and name, like “Prof. Dr. Thomas Mann” or “Mr Adam Smith”



357
358
359
# File 'lib/merchant_sidekick/addressable/address.rb', line 357

def salutation_and_name
  "#{salutation} #{name}".strip
end

#streetObject Also known as: street_address

getter



141
142
143
# File 'lib/merchant_sidekick/addressable/address.rb', line 141

def street
  self[street_address_column]
end

#street=(a_street) ⇒ Object Also known as: street_address=

setter



147
148
149
# File 'lib/merchant_sidekick/addressable/address.rb', line 147

def street=(a_street)
  self[street_address_column] = a_street
end

#to_sObject

Writes the address as comma delimited string



373
374
375
376
377
378
379
380
381
382
# File 'lib/merchant_sidekick/addressable/address.rb', line 373

def to_s
  result = []
  result << self.address_line_1
  result << self.address_line_2
  result << self.city
  result << self.province_or_province_code
  result << self.postal_code
  result << self.country_or_country_code
  result.compact.map {|m| m.to_s.strip }.reject {|i| i.empty? }.join(", ")
end