Class: MoteSMS::NumberList

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/mote_sms/number_list.rb

Overview

List of Number instances, which transparantly is able to add new Number instances from strings, or whatever.

Implements Enumerable, thus can be used like any regular array.

Examples:

list << '+41 79 123 12 12'
list.push '044 123 12 12', cc: '41'
list.push Number.new('0800 123 12 12')
list.normalized_numbers
# => ['41791231212', '41441231212', '08001231212']

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeNumberList

Public: Create a new number list instance.



25
26
27
# File 'lib/mote_sms/number_list.rb', line 25

def initialize
  @numbers = ::Array.new
end

Instance Attribute Details

#numbersObject (readonly)

Internal numbers array.



22
23
24
# File 'lib/mote_sms/number_list.rb', line 22

def numbers
  @numbers
end

Instance Method Details

#<<(number) ⇒ Object

Public: Add number to internal list, use duck typing to detect if it appears to be a number instance or not. So everything which does not respond to ‘to_number` is converted into a Number instance.

number - The Number or String to add.

Returns nothing.



48
49
50
# File 'lib/mote_sms/number_list.rb', line 48

def <<(number)
  push(number)
end

#each(&block) ⇒ Object

Public: Yields each Number instance from this number list to the provided block. This interface is also required to be implemeneted for Enumerable support.

Returns self.



70
71
72
73
# File 'lib/mote_sms/number_list.rb', line 70

def each(&block)
  numbers.each(&block)
  self
end

#empty?Boolean Also known as: blank?

Public: Conform to arrayish behavior.

Returns:

  • (Boolean)


36
37
38
# File 'lib/mote_sms/number_list.rb', line 36

def empty?
  numbers.empty?
end

#lengthObject Also known as: size

Public: Count of numbers in the list.



30
31
32
# File 'lib/mote_sms/number_list.rb', line 30

def length
  numbers.length
end

#normalized_numbersObject

Public: Fetch numbers using to_number.

Returns Array of E164 normalized numbers.



78
79
80
# File 'lib/mote_sms/number_list.rb', line 78

def normalized_numbers
  numbers.map(&:to_number)
end

#push(*numbers) ⇒ Object

Public: Add multiple numbers, with optional options hash which can be used to set country options etc.

Returns self.



56
57
58
59
60
61
62
63
# File 'lib/mote_sms/number_list.rb', line 56

def push(*numbers)
  options = numbers.last.is_a?(Hash) ? numbers.pop : {}
  numbers.flatten.each do |number|
    number = Number.new(number, options) unless number.respond_to?(:to_number)
    self.numbers << number
  end
  self
end