Class: SwissMunicipality
- Inherits:
-
Object
show all
- Defined in:
- lib/swiss_municipality.rb
Overview
require ‘swiss_municipality’
Defined Under Namespace
Classes: MunicipalityData
Class Method Summary
collapse
Class Method Details
.all_cantons(options) ⇒ Object
35
36
37
38
39
40
41
42
43
44
|
# File 'lib/swiss_municipality.rb', line 35
def self.all_cantons(options)
options = sanitize_options(options)
validate_variant(options)
if options[:variant] == :short
MunicipalityData.canton_hash.keys.sort
elsif options[:variant] == :full
MunicipalityData.canton_hash.values.map { |canton| canton[:full_name][options[:language]] }
end
end
|
.all_municipalities(**options) ⇒ Object
57
58
59
60
61
62
63
64
65
|
# File 'lib/swiss_municipality.rb', line 57
def self.all_municipalities(**options)
options = sanitize_options(options)
if options[:canton].nil?
MunicipalityData.municipality_hash
else
MunicipalityData.canton_hash[options[:canton]][:municipalities]
end.keys.sort.map(&:to_s)
end
|
.all_zip_codes(**options) ⇒ Object
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
# File 'lib/swiss_municipality.rb', line 67
def self.all_zip_codes(**options)
options = sanitize_options(options)
zip_code_data = if !options[:municipality].nil?
MunicipalityData.municipality_hash[options[:municipality]][:zip_codes]
elsif !options[:canton].nil?
MunicipalityData.canton_hash[options[:canton]][:zip_codes]
else
MunicipalityData.zip_hash.keys
end
if options[:variant] == :with_municipality
zip_code_data.map { |zip_code| [zip_code, MunicipalityData.zip_hash[zip_code.to_sym][:municipality]].join(' ') }
else
zip_code_data.map(&:to_s)
end.sort
end
|
.canton(**options) ⇒ Object
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
# File 'lib/swiss_municipality.rb', line 10
def self.canton(**options)
options = sanitize_options(options)
validate_identifier(options)
validate_variant(options)
raise ArgumentError, 'Argument canton must not be given' unless options[:canton].nil?
if options[:municipality].nil?
zip_code_data = MunicipalityData.zip_hash[options[:zip_code]]
raise ArgumentError, "No municipality found for zip code #{options[:zip_code]}" if zip_code_data.nil?
canton_data = zip_code_data[:canton]
else
municipality_data = MunicipalityData.municipality_hash[options[:municipality]]
canton_data = municipality_data[:canton]
end
if options[:variant] == :short
canton_data[:short]
elsif options[:variant] == :full
canton_data[options[:language]]
end
end
|
.municipality(**options) ⇒ Object
46
47
48
49
50
51
52
53
54
55
|
# File 'lib/swiss_municipality.rb', line 46
def self.municipality(**options)
options = sanitize_options(options)
validate_identifier(options)
raise ArgumentError, 'Argument municipality must not be given' unless options[:municipality].nil?
raise ArgumentError, 'Argument canton must not be given' unless options[:canton].nil?
zip_code_data = MunicipalityData.zip_hash[options[:zip_code]]
zip_code_data[:municipality]
end
|
.sanitize_options(options) ⇒ Object
85
86
87
88
89
90
91
92
93
|
# File 'lib/swiss_municipality.rb', line 85
def self.sanitize_options(options)
options[:variant] = options[:variant]&.to_s&.downcase&.to_sym
options[:language] = options[:language]&.to_s&.downcase&.gsub('-ch', '')&.to_s&.to_sym
options[:zip_code] = options[:zip_code]&.to_s&.to_sym
options[:municipality] = options[:municipality]&.to_s&.to_sym
options[:canton] = options[:canton]&.to_s&.to_sym
options
end
|
.validate_identifier(options) ⇒ Object
106
107
108
109
110
|
# File 'lib/swiss_municipality.rb', line 106
def self.validate_identifier(options)
return unless [options[:zip_code], options[:municipality], options[:canton]].compact.count != 1
raise ArgumentError, 'Exactly one of the arguments zip_code, municipality or canton must be given'
end
|
.validate_variant(options) ⇒ Object
95
96
97
98
99
100
101
102
103
104
|
# File 'lib/swiss_municipality.rb', line 95
def self.validate_variant(options)
unless %i[short full].include? options[:variant]
raise ArgumentError, "'Argument variant must be provided. The allowed values are 'short' and 'full'"
end
return unless options[:variant] == :full && !%i[de fr it].include?(options[:language])
raise ArgumentError,
"Language must be provided for variant :full. The allowed values are 'de-CH', 'de', 'fr-CH', 'fr', 'it-CH', 'it'"
end
|