app/models/address.rb
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