Skip to content

Instantly share code, notes, and snippets.

@ashaw
Created March 15, 2012 17:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ashaw/2045456 to your computer and use it in GitHub Desktop.
Save ashaw/2045456 to your computer and use it in GitHub Desktop.
module ApIzer
class State
attr_reader :to_fips_index, :to_full_index, :to_usps_index, :to_ap_index
# >> ApIzer::State.find('Alabama').usps
# AL
# >> ApIzer::State.find('AL').ap
# Ala.
STATES = [
["Alabama", "AL", "Ala.", 1],
['Alaska', "AK", "Alaska", 2],
["Arizona", "AZ", "Ariz.", 4],
["Arkansas", 'AR', "Ark.", 5],
["California", "CA", "Calif.", 6],
["Colorado", "CO", "Colo.", 8],
["Connecticut", "CT", "Conn.", 9],
["Delaware", "DE", "Del.", "10"],
["District of Columbia", "DC", "D.C.", 11],
["Florida", "FL", "Fla.", 12],
["Georgia", "GA", "Ga.", 13],
["Hawaii", "HI", "Hawaii", 15],
["Idaho", 'ID', "Idaho", 16],
["Illinois", "IL", "Ill.", 17],
["Indiana", "IN", "Ind.", 18],
["Iowa", "IA", "Iowa", 19],
["Kansas", "KS", "Kan.", 20],
["Kentucky", "KY", "Ky.", 21],
["Louisiana", "LA", "La.", 22],
["Maine", "ME", "Maine", 23],
["Maryland", "MD", "Md.", 24],
["Massachusetts", "MA", "Mass.", 25],
["Michigan", "MI", "Mich.", 26],
["Minnesota", "MN", "Minn.", 27],
["Mississippi", "MS", "Miss.", 28],
["Missouri", "MO", "Mo.", 29],
["Montana", "MT", "Mont.", 30],
["Nebraska", "NE", "Neb.", 31],
["Nevada", "NV", "Nev.", 32],
["New Hampshire", "NH", "N.H.", 33],
["New Jersey", "NJ", "N.J.", 34],
["New Mexico", "NM", "N.M.", 35],
["New York", "NY", "N.Y.", 36],
["North Carolina", "NC", "N.C.", 37],
["North Dakota", "ND", "N.D.", 38],
["Ohio", "OH", "Ohio", 39],
["Oklahoma", "OK", "Okla.", 40],
["Oregon", "OR", "Ore.", 41],
["Pennsylvania", "PA", "Pa.", 42],
["Rhode Island", "RI", "R.I.", 44],
["South Carolina", "SC", "S.C.", 45],
["South Dakota", "SD", "S.D.", 46],
["Tennessee", "TN", "Tenn.", 47],
["Texas", "TX", "Texas", 48],
["Utah", "UT", "Utah", 49],
["Vermont", "VT", "Vt.", 50],
["Virginia", "VA", "Va.", 51],
["Washington", "WA", "Wash.", 53],
["West Virginia", "WV", "W.Va.", 54],
["Wisconsin", "WI", "Wis.", 55],
["Wyoming", "WY", "Wyo.", 56],
["Puerto Rico", "PR", "P.R.", 72],
["Virgin Islands", "VI", "V.I.", 78],
["Guam", "GU","Guam", 66],
["American Samoa","AS","A.S.",60],
["Northern Mariana Islands","MP", "M.P.", 69]
]
STATEFACE = {"VA"=>"s", "ND"=>"b", "AL"=>"B", "NY"=>"h", "NE"=>"c", "MD"=>"T", "DE"=>"H", "MN"=>"W", "CO"=>"F", "RI"=>"m", "HI"=>"K", "ME"=>"U", "WY"=>"x", "MO"=>"X", "IA"=>"L", "AZ"=>"D", "OH"=>"i", "IL"=>"N", "KY"=>"Q", "OR"=>"k", "GA"=>"J", "NH"=>"d", "TN"=>"p", "TX"=>"q", "IN"=>"O", "SC"=>"n", "ID"=>"M", "NJ"=>"e", "AR"=>"C", "FL"=>"I", "MS"=>"Y", "SD"=>"o", "OK"=>"j", "CT"=>"G", "PA"=>"l", "MI"=>"V", "MT"=>"Z", "WI"=>"v", "KS"=>"P", "CA"=>"E", "VT"=>"t", "NV"=>"g", "UT"=>"r", "NM"=>"f", "MA"=>"S", "WV"=>"w", "AK"=>"A", "LA"=>"R", "NC"=>"a", "WA"=>"u"}
def initialize(s)
@to_fips_index = 3
@to_full_index = 0
@to_usps_index = 1
@to_ap_index = 2
@state = STATES.detect { |x|
x if x.include?(s)
}
end
def to_stateface
STATEFACE[@state[1]]
end
def method_missing(method, *args)
if respond_to?("#{method.to_s}_index")
return @state[send("#{method.to_s}_index")] unless
@state[send("#{method.to_s}_index")].nil?
else
super
end
end
class << self
# return a state from a string
def find(s)
State.new(s)
end
end
end
end
class Date
AP_MONTHNAMES = [nil] + %w(Jan. Feb. March April May June July Aug. Sep. Oct. Nov. Dec.)
def to_ap
zeroless_day = self.strftime("%d").gsub(/^0/, '')
ap_month = AP_MONTHNAMES[self.strftime("%m").to_i]
ap_year = self.strftime("%Y")
return "#{ap_month} #{zeroless_day}, #{ap_year}"
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment