Module: Phoney::Parser
- Extended by:
- Formatter
- Defined in:
- lib/phoney/parser.rb
Class Method Summary collapse
Methods included from Formatter
extract_country_code, extract_trunk_prefix, format, international_call_prefix_for, normalize
Class Method Details
.parse(input, options = {}) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/phoney/parser.rb', line 8 def parse(input, ={}) number = normalize(input) intl_prefix = international_call_prefix_for number country_code = extract_country_code number trunk_prefix = extract_trunk_prefix number region = [:region] || Phoney.region flags = [] if intl_prefix # Strip international prefix from number number = number[intl_prefix.count(NUMPAD_CHARS)..-1] region = Phoney::Region[country_code] flags << :c end if country_code # Strip country code from number number = number[country_code.count(DIGITS)..-1] if intl_prefix == '+' intl_prefix += country_code else intl_prefix = [intl_prefix, country_code].join(' ') end end rule = find_matching_rule_for number, region: region, flags: flags rule ||= find_matching_rule_for number, region: region return format number, rule.pattern, intl_prefix: intl_prefix if rule if trunk_prefix # Strip trunk prefix from number number = number[trunk_prefix.count(DIGITS)..-1] flags << :n if intl_prefix intl_prefix += " (#{trunk_prefix})" trunk_prefix = nil end end if country_code || intl_prefix != '+' rule = find_matching_rule_for number, region: region, flags: flags rule ||= find_matching_rule_for number, region: region pattern = '#'*number.length pattern = rule.pattern if rule format number, pattern, intl_prefix: intl_prefix, trunk_prefix: trunk_prefix else input end end |