lib/dialable.rb in dialable-0.1.1 vs lib/dialable.rb in dialable-0.5.0
- old
+ new
@@ -1,11 +1,11 @@
-# Copyright (c) 2008-2010 Chris Horn http://chorn.com/
+# Copyright (c) 2008-2011 Chris Horn http://chorn.com/
# See MIT-LICENSE.txt
-# TODO: Make this less sucky.
-
require "yaml"
+require "tzinfo"
+require 'rubygems'
module Dialable
class NANP
##
@@ -27,11 +27,11 @@
911 => "Emergency"
}
end
##
- # Regex's to match valid phone numbers
+ # Regexs to match valid phone numbers
module Patterns
VALID = [
/^\D*1?\D*([2-9]\d\d)\D*(\d{3})\D*(\d{4})\D*[ex]+\D*(\d{1,5})\D*$/i,
/^\D*1?\D*([2-9]\d\d)[ $\\\.-]*(\d{3})[ $\\\.-]*(\d{4})[ $\\\.\*-]*(\d{1,5})\D*$/i,
/^\D*1?\D*([2-9]\d\d)\D*(\d{3})\D*(\d{4})\D*$/,
@@ -42,14 +42,16 @@
end
##
# Valid area codes per nanpa.com
module AreaCodes
- NANP = YAML.load_file(File.dirname(__FILE__) + "/../support/nanpa.yaml")
+ data_path = Gem::datadir('dialable')
+ data_path ||= File.join(File.dirname(__FILE__), '..', 'data')
+ NANP = YAML.load_file(data_path + "/nanpa.yaml")
end
- attr_accessor :areacode, :prefix, :line, :extension, :location, :country, :timezones, :relative_timezones
+ attr_accessor :areacode, :prefix, :line, :extension, :location, :country, :timezones, :relative_timezones, :raw_timezone
def initialize(parts={})
self.areacode = parts[:areacode] ? parts[:areacode] : nil
self.prefix = parts[:prefix] ? parts[:prefix] : nil
self.line = parts[:line] ? parts[:line] : nil
@@ -60,27 +62,28 @@
code = raw_code.to_i
if AreaCodes::NANP[code]
@areacode = raw_code
self.location = AreaCodes::NANP[code][:location] if AreaCodes::NANP[code][:location]
self.country = AreaCodes::NANP[code][:country] if AreaCodes::NANP[code][:country]
+ self.raw_timezone = AreaCodes::NANP[code][:timezone] if AreaCodes::NANP[code][:timezone]
if AreaCodes::NANP[code][:timezone]
self.timezones = []
self.relative_timezones = []
tz = AreaCodes::NANP[code][:timezone]
- t = Time.now
- local_utc_offset = t.utc_offset/3600
+ now = Time.now
+ local_utc_offset = now.utc_offset/3600
if tz =~ /UTC(-\d+)/
self.timezones << tz
utc_offset = $1.to_i
self.relative_timezones << (utc_offset) - local_utc_offset
else
tz.split(//).each do |zone| # http://www.timeanddate.com/library/abbreviations/timezones/na/
zone = "HA" if zone == "H"
zone = "AK" if zone == "K"
- tz = zone + (t.dst? ? "D" : "S") + "T" # This is cludgey
+ tz = zone + (now.dst? ? "D" : "S") + "T" # This is cludgey
self.timezones << tz
delta = nil
if Time.zone_offset(tz)
delta = Time.zone_offset(tz)/3600 - local_utc_offset
else
@@ -92,11 +95,11 @@
when /A?K[SD]T/
delta = -9 - local_utc_offset
when /HA?[SD]T/
delta = -10 - local_utc_offset
end
- delta = delta - 1 if t.dst?
+ delta = delta - 1 if delta and now.dst?
end
# puts "#{delta} // #{Time.zone_offset(tz)} // #{tz} // #{local_utc_offset}"
self.relative_timezones << delta if delta
end
end
@@ -119,10 +122,9 @@
# @timezones.each do |tz|
# rt <<
# end
# rt
# end
-
def self.parse(number)
Patterns::VALID.each do |pattern|
return Dialable::NANP.new(:areacode => $1, :prefix => $2, :line => $3, :extension => $4) if number =~ pattern
end