Sha256: e7721b404ca4a5a7275b4d8c99cfc5a246a1763712a5a16b9e9d189ec0909828

Contents?: true

Size: 1.95 KB

Versions: 1

Compression:

Stored size: 1.95 KB

Contents

class State
  attr_accessor :raw
  attr_accessor :sym
  
  def initialize(sym)
    raise "Unsupported state" if !FORWARD.has_key?(sym)
    self.sym = sym
  end
  
  def self.parse(string)
    token = string.strip.downcase
    sym = nil
    
    if FORWARD.has_key?(token.to_sym)
      sym = token.to_sym
    elsif REVERSE.has_key?(token)
      sym = REVERSE[token]
    end
    
    raise "Unsupported Format" if !sym

    ret = State.new sym
    ret.raw = string
    ret
  end
  
  def self.format(sym, fmt)
    State.new(sym).to_s(fmt)
  end
  
  def to_s(fmt = :full)
    raise "Unsupported Format" if !OUTPUT_FORMATS.include?(fmt)
    fmt == :full ? FORWARD[self.sym].capitalize : self.sym.to_s.upcase
  end
  
  OUTPUT_FORMATS = [:abbr, :full]
  
  private

  FORWARD = {
    :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",
	}
	
	REVERSE = FORWARD.inject({}) {|r, f| r[f[1]] = f[0]; r}
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
dburkes-people_places_things-1.3.0 lib/people_places_things/state/state.rb