class Phony::LocalSplitters::Fixed

Local splitter class to split the last part of a number, i.e. minus cc or ndc.

Countries can create new instances according to their needs.

Note: Countries should use instance_for

to avoid getting new local splitter instances.

Public Class Methods

instance_for(format = nil) click to toggle source

Get a splitter for the given format.

Caches the created splitter for the given format.

# File lib/phony/local_splitters/fixed.rb, line 20
def self.instance_for(format = nil)
  @mapping[format] ||= new(format)
end
new(format = nil) click to toggle source

Initialize with a local format, like [3, 2, 2] (also the default).

The format [3, 2, 2] splits a number like ‘3332222’ into [‘333’, ‘22’, ‘22’].

# File lib/phony/local_splitters/fixed.rb, line 28
def initialize(format = nil)
  format = format&.dup || [3, 2, 2]
  @format, @length = extract_params format
  @format << @format.pop + 10
end

Public Instance Methods

extract_params(format) click to toggle source
# File lib/phony/local_splitters/fixed.rb, line 34
def extract_params(format)
  if format.last.respond_to? :max
    last = format.pop
    length = format.sum
    length = (length + last.min..length + last.max)
    format << last.min
  else
    length = format.sum
  end
  [format, length]
end
plausible?(rest, hints = {}) click to toggle source
# File lib/phony/local_splitters/fixed.rb, line 58
def plausible?(rest, hints = {})
  return true if hints[:check_length] == false

  @length === rest.inject(0) { |total, part| total + part.size }
end
split(number) click to toggle source

Split a local number according to an assumed country specific format.

Examples

  • split ‘3643533’ # => [‘364’, ‘35’, ‘33’] # (Switzerland)

# File lib/phony/local_splitters/fixed.rb, line 51
def split(number)
  @format.each_with_object([]) do |size, result|
    result << number.slice!(0..size - 1)
    return result if number.empty?
  end
end