mattvanhorn/BJJLife

View on GitHub
app/models/address.rb

Summary

Maintainability
A
35 mins
Test Coverage
class Address
  STATE_NAMES ={
    "AL" => "Alabama",
    "AK" => "Alaska",
    "AZ" => "Arizona",
    "AR" => "Arkansas",
    "CA" => "California",
    "CO" => "Colorado",
    "CT" => "Connecticut",
    "DE" => "Delaware",
    "DC" => "District of Columbia",
    "FL" => "Florida",
    "GA" => "Georgia",
    "HI" => "Hawaii",
    "ID" => "Idaho",
    "IL" => "Illinois",
    "IN" => "Indiana",
    "IA" => "Iowa",
    "KS" => "Kansas",
    "KY" => "Kentucky",
    "LA" => "Louisiana",
    "ME" => "Maine",
    "MD" => "Maryland",
    "MA" => "Massachusetts",
    "MI" => "Michigan",
    "MN" => "Minnesota",
    "MS" => "Mississippi",
    "MO" => "Missouri",
    "MT" => "Montana",
    "NE" => "Nebraska",
    "NV" => "Nevada",
    "NH" => "New Hampshire",
    "NJ" => "New Jersey",
    "NM" => "New Mexico",
    "NY" => "New York",
    "NC" => "North Carolina",
    "ND" => "North Dakota",
    "OH" => "Ohio",
    "OK" => "Oklahoma",
    "OR" => "Oregon",
    "PA" => "Pennsylvania",
    "RI" => "Rhode Island",
    "SC" => "South Carolina",
    "SD" => "South Dakota",
    "TN" => "Tennessee",
    "TX" => "Texas",
    "UT" => "Utah",
    "VT" => "Vermont",
    "VA" => "Virginia",
    "WA" => "Washington",
    "WV" => "West Virginia",
    "WI" => "Wisconsin",
    "WY" => "Wyoming",
    "AS" => "American Samoa",
    "GU" => "Guam",
    "MP" => "Northern Mariana Islands",
    "PR" => "Puerto Rico",
    "VI" => "US Virgin Islanda"
  }
  attr_reader :street, :unit, :city, :us_state, :postal_code

  def initialize(street, unit, city, us_state, postal_code)
    @street, @unit, @city, @us_state, @postal_code = street, unit, city, us_state, postal_code
  end

  def blank?
    [@street, @unit, @city, @us_state, @postal_code].join('').blank?
  end

  def street_address
    [street, unit].deblankify.clean_join(', ').presence
  end

  def city_state_zip
    "#{[city, us_state].deblankify.clean_join(', ')} #{postal_code}".strip.presence
  end

  def to_s
    [street_address, city_state_zip].compact.join(', ')
  end

  def inspect
    vars = self.instance_variables.
    map{|var| "#{var}=#{instance_variable_get(var).inspect}"}.join(", ")
    "<#{self.class}: #{vars}>"
  end
end