Module: PostalCoder::Formats
- Defined in:
- lib/postalcoder/formats.rb
Defined Under Namespace
Classes: AbstractFormat, CAPostalCode, USZipCode
Constant Summary
collapse
- SYMBOLS_TO_NAMES_MAP =
{
:ca_postal_code => 'CAPostalCode',
:us_zip_code => 'USZipCode' }
Class Method Summary
collapse
Class Method Details
.auto_instantiate(postal_code, accepted_formats = Config[:accepted_formats]) ⇒ Object
42
43
44
45
46
47
48
49
50
51
52
53
|
# File 'lib/postalcoder/formats.rb', line 42
def self.auto_instantiate(postal_code, accepted_formats = Config[:accepted_formats])
results = symbols_to_classes(accepted_formats).map do |format|
begin
format.new(postal_code)
rescue Errors::MalformedPostalCodeError
nil
end
end.compact
return results[0] if results.any?
raise Errors::MalformedPostalCodeError, "The postal code: #{postal_code}" \
' did not properly map to any of the accepted formats.'
end
|
.instantiate(postal_code, format_symbol = nil) ⇒ Object
30
31
32
33
34
35
36
37
38
39
40
|
# File 'lib/postalcoder/formats.rb', line 30
def self.instantiate(postal_code, format_symbol = nil)
unless postal_code.is_a?(String)
raise Errors::MalformedPostalCodeError, 'postal_code must be a ' \
"String, not: #{postal_code.class}"
end
if format_symbol
symbol_to_class(format_symbol).new(postal_code)
else
auto_instantiate(postal_code)
end
end
|
.symbol_to_class(symbol) ⇒ Object
8
9
10
11
12
13
14
15
16
17
18
|
# File 'lib/postalcoder/formats.rb', line 8
def self.symbol_to_class(symbol)
unless symbol.is_a?(Symbol)
raise ArgumentError, "expected Symbol, not: #{symbol.class}"
end
class_name = SYMBOLS_TO_NAMES_MAP.fetch(symbol) do |sym|
raise Errors::UnknownFormatSymbolError, 'The format symbol ' \
"#{sym.inspect} is not one of the reconized symbols, which are: " \
"#{SYMBOLS_TO_NAMES_MAP.keys.inspect}"
end
eval class_name
end
|
.symbols_to_classes(symbols) ⇒ Object
20
21
22
23
24
25
26
27
28
|
# File 'lib/postalcoder/formats.rb', line 20
def self.symbols_to_classes(symbols)
unless symbols.is_a?(Array)
raise ArgumentError, "symbols must be Array, not: #{symbols.class}"
end
if symbols.empty?
raise ArgumentError, 'symbols must contain format symbols, it is empty.'
end
symbols.map { |f| symbol_to_class(f) }
end
|