local_postal 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/.travis.yml +4 -0
- data/CODE_OF_CONDUCT.md +26 -0
- data/Gemfile +3 -0
- data/LICENSE.txt +21 -0
- data/README.md +124 -0
- data/Rakefile +13 -0
- data/bin/console +7 -0
- data/bin/setup +7 -0
- data/config/formats/AC.json +13 -0
- data/config/formats/AD.json +15 -0
- data/config/formats/AE.json +13 -0
- data/config/formats/AF.json +13 -0
- data/config/formats/AG.json +12 -0
- data/config/formats/AI.json +13 -0
- data/config/formats/AL.json +15 -0
- data/config/formats/AM.json +16 -0
- data/config/formats/AR.json +19 -0
- data/config/formats/AS.json +23 -0
- data/config/formats/AT.json +16 -0
- data/config/formats/AU.json +19 -0
- data/config/formats/AX.json +17 -0
- data/config/formats/AZ.json +16 -0
- data/config/formats/BA.json +15 -0
- data/config/formats/BB.json +15 -0
- data/config/formats/BD.json +15 -0
- data/config/formats/BE.json +16 -0
- data/config/formats/BF.json +13 -0
- data/config/formats/BG.json +15 -0
- data/config/formats/BH.json +15 -0
- data/config/formats/BJ.json +15 -0
- data/config/formats/BL.json +19 -0
- data/config/formats/BM.json +15 -0
- data/config/formats/BN.json +15 -0
- data/config/formats/BO.json +15 -0
- data/config/formats/BR.json +20 -0
- data/config/formats/BS.json +14 -0
- data/config/formats/BT.json +15 -0
- data/config/formats/BY.json +16 -0
- data/config/formats/CA.json +24 -0
- data/config/formats/CC.json +17 -0
- data/config/formats/CD.json +13 -0
- data/config/formats/CH.json +15 -0
- data/config/formats/CI.json +13 -0
- data/config/formats/CL.json +17 -0
- data/config/formats/CN.json +24 -0
- data/config/formats/CO.json +16 -0
- data/config/formats/CR.json +15 -0
- data/config/formats/CV.json +16 -0
- data/config/formats/CX.json +17 -0
- data/config/formats/CY.json +15 -0
- data/config/formats/CZ.json +15 -0
- data/config/formats/DE.json +16 -0
- data/config/formats/DK.json +16 -0
- data/config/formats/DO.json +15 -0
- data/config/formats/DZ.json +15 -0
- data/config/formats/EC.json +16 -0
- data/config/formats/EE.json +17 -0
- data/config/formats/EG.json +16 -0
- data/config/formats/EH.json +15 -0
- data/config/formats/ES.json +19 -0
- data/config/formats/ET.json +15 -0
- data/config/formats/FI.json +17 -0
- data/config/formats/FK.json +17 -0
- data/config/formats/FM.json +23 -0
- data/config/formats/FO.json +16 -0
- data/config/formats/FR.json +17 -0
- data/config/formats/GB.json +18 -0
- data/config/formats/GE.json +15 -0
- data/config/formats/GF.json +19 -0
- data/config/formats/GG.json +17 -0
- data/config/formats/GI.json +13 -0
- data/config/formats/GL.json +16 -0
- data/config/formats/GN.json +15 -0
- data/config/formats/GP.json +19 -0
- data/config/formats/GR.json +16 -0
- data/config/formats/GS.json +17 -0
- data/config/formats/GT.json +15 -0
- data/config/formats/GU.json +23 -0
- data/config/formats/GW.json +15 -0
- data/config/formats/HK.json +19 -0
- data/config/formats/HN.json +17 -0
- data/config/formats/HR.json +16 -0
- data/config/formats/HT.json +16 -0
- data/config/formats/HU.json +20 -0
- data/config/formats/ID.json +16 -0
- data/config/formats/IE.json +14 -0
- data/config/formats/IL.json +15 -0
- data/config/formats/IM.json +17 -0
- data/config/formats/IN.json +18 -0
- data/config/formats/IO.json +17 -0
- data/config/formats/IQ.json +18 -0
- data/config/formats/IR.json +17 -0
- data/config/formats/IS.json +15 -0
- data/config/formats/IT.json +19 -0
- data/config/formats/JE.json +17 -0
- data/config/formats/JM.json +15 -0
- data/config/formats/JO.json +15 -0
- data/config/formats/JP.json +23 -0
- data/config/formats/KE.json +15 -0
- data/config/formats/KG.json +15 -0
- data/config/formats/KH.json +15 -0
- data/config/formats/KI.json +19 -0
- data/config/formats/KM.json +15 -0
- data/config/formats/KN.json +15 -0
- data/config/formats/KR.json +24 -0
- data/config/formats/KW.json +15 -0
- data/config/formats/KY.json +15 -0
- data/config/formats/KZ.json +16 -0
- data/config/formats/LA.json +15 -0
- data/config/formats/LB.json +15 -0
- data/config/formats/LI.json +17 -0
- data/config/formats/LK.json +15 -0
- data/config/formats/LR.json +15 -0
- data/config/formats/LS.json +15 -0
- data/config/formats/LT.json +18 -0
- data/config/formats/LU.json +17 -0
- data/config/formats/LV.json +16 -0
- data/config/formats/MA.json +15 -0
- data/config/formats/MC.json +16 -0
- data/config/formats/MD.json +16 -0
- data/config/formats/ME.json +15 -0
- data/config/formats/MF.json +19 -0
- data/config/formats/MG.json +15 -0
- data/config/formats/MH.json +23 -0
- data/config/formats/MK.json +15 -0
- data/config/formats/MM.json +15 -0
- data/config/formats/MN.json +16 -0
- data/config/formats/MO.json +16 -0
- data/config/formats/MP.json +23 -0
- data/config/formats/MQ.json +19 -0
- data/config/formats/MR.json +15 -0
- data/config/formats/MT.json +16 -0
- data/config/formats/MU.json +16 -0
- data/config/formats/MV.json +15 -0
- data/config/formats/MW.json +13 -0
- data/config/formats/MX.json +20 -0
- data/config/formats/MY.json +19 -0
- data/config/formats/MZ.json +13 -0
- data/config/formats/NC.json +19 -0
- data/config/formats/NE.json +15 -0
- data/config/formats/NF.json +17 -0
- data/config/formats/NG.json +17 -0
- data/config/formats/NI.json +17 -0
- data/config/formats/NL.json +16 -0
- data/config/formats/NO.json +16 -0
- data/config/formats/NP.json +15 -0
- data/config/formats/NR.json +13 -0
- data/config/formats/NZ.json +17 -0
- data/config/formats/OM.json +15 -0
- data/config/formats/PA.json +15 -0
- data/config/formats/PE.json +15 -0
- data/config/formats/PF.json +19 -0
- data/config/formats/PG.json +17 -0
- data/config/formats/PH.json +17 -0
- data/config/formats/PK.json +15 -0
- data/config/formats/PL.json +16 -0
- data/config/formats/PM.json +19 -0
- data/config/formats/PN.json +17 -0
- data/config/formats/PR.json +21 -0
- data/config/formats/PT.json +16 -0
- data/config/formats/PW.json +23 -0
- data/config/formats/PY.json +15 -0
- data/config/formats/QA.json +15 -0
- data/config/formats/RE.json +19 -0
- data/config/formats/RO.json +17 -0
- data/config/formats/RS.json +15 -0
- data/config/formats/RU.json +19 -0
- data/config/formats/RW.json +15 -0
- data/config/formats/SA.json +15 -0
- data/config/formats/SC.json +14 -0
- data/config/formats/SE.json +17 -0
- data/config/formats/SG.json +14 -0
- data/config/formats/SH.json +17 -0
- data/config/formats/SI.json +16 -0
- data/config/formats/SJ.json +16 -0
- data/config/formats/SK.json +15 -0
- data/config/formats/SM.json +15 -0
- data/config/formats/SN.json +15 -0
- data/config/formats/SO.json +20 -0
- data/config/formats/SR.json +16 -0
- data/config/formats/ST.json +13 -0
- data/config/formats/SV.json +19 -0
- data/config/formats/SZ.json +18 -0
- data/config/formats/TA.json +13 -0
- data/config/formats/TC.json +17 -0
- data/config/formats/TH.json +22 -0
- data/config/formats/TJ.json +15 -0
- data/config/formats/TM.json +15 -0
- data/config/formats/TN.json +15 -0
- data/config/formats/TR.json +17 -0
- data/config/formats/TV.json +17 -0
- data/config/formats/TW.json +23 -0
- data/config/formats/TZ.json +15 -0
- data/config/formats/UA.json +17 -0
- data/config/formats/UM.json +22 -0
- data/config/formats/US.json +19 -0
- data/config/formats/UY.json +17 -0
- data/config/formats/UZ.json +17 -0
- data/config/formats/VA.json +15 -0
- data/config/formats/VC.json +15 -0
- data/config/formats/VE.json +18 -0
- data/config/formats/VG.json +14 -0
- data/config/formats/VI.json +23 -0
- data/config/formats/VN.json +16 -0
- data/config/formats/WF.json +19 -0
- data/config/formats/XK.json +15 -0
- data/config/formats/YT.json +19 -0
- data/config/formats/ZA.json +17 -0
- data/config/formats/ZM.json +15 -0
- data/config/formats/ZZ.json +13 -0
- data/lib/local_postal/address.rb +118 -0
- data/lib/local_postal/format.rb +79 -0
- data/lib/local_postal/version.rb +3 -0
- data/lib/local_postal.rb +18 -0
- data/lib/tasks/list_supported_countries.rake +21 -0
- data/lib/tasks/list_unique_format_variables.rake +12 -0
- data/lib/tasks/list_unique_formatting_rules.rake +32 -0
- data/local_postal.gemspec +36 -0
- metadata +361 -0
@@ -0,0 +1,118 @@
|
|
1
|
+
class LocalPostal::Address
|
2
|
+
include ActiveModel::Model
|
3
|
+
|
4
|
+
attr_accessor :name, :company
|
5
|
+
attr_accessor :street_address, :secondary_address, :city, :region
|
6
|
+
attr_accessor :postal_code
|
7
|
+
|
8
|
+
attr_reader :format, :country
|
9
|
+
|
10
|
+
validates :country, presence: true
|
11
|
+
|
12
|
+
validate :has_required_fields
|
13
|
+
validate :has_valid_postal_code_pattern, unless: -> { postal_code.nil? }
|
14
|
+
validate :has_valid_postal_code_prefix, unless: -> { postal_code.nil? }
|
15
|
+
|
16
|
+
# The 2-character ISO 3166 country code for this address.
|
17
|
+
#
|
18
|
+
# @return [String] The country's ISO code or nil when unavailable.
|
19
|
+
def country_code
|
20
|
+
cc = carmen_country
|
21
|
+
|
22
|
+
return if cc.nil?
|
23
|
+
|
24
|
+
cc.code.upcase if cc.code.is_a?(String)
|
25
|
+
end
|
26
|
+
|
27
|
+
# The address' lines as they should appear on the parcel.
|
28
|
+
#
|
29
|
+
# @return [Array] The address lines.
|
30
|
+
def lines
|
31
|
+
address = format.apply(formatting_values)
|
32
|
+
address.split("\n").reject {|line| line.strip.empty? } + [country.upcase]
|
33
|
+
end
|
34
|
+
|
35
|
+
# Sets the country and automatically assigns the correct format for that it
|
36
|
+
# belongs to.
|
37
|
+
#
|
38
|
+
# @param [String] value The name of the country.
|
39
|
+
# @return [String] The supplied value.
|
40
|
+
def country=(value)
|
41
|
+
@country = value
|
42
|
+
|
43
|
+
@format = case country_code
|
44
|
+
when nil, '' then nil
|
45
|
+
else LocalPostal::Format.from_country_code(country_code)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# Maps the universal fields used in the formatting rules to the more commonly
|
50
|
+
# used field names that Address uses.
|
51
|
+
#
|
52
|
+
# @return [Hash] Keys are formatting rule fields; values are Address fields.
|
53
|
+
def self.formatting_variables_lookup_table
|
54
|
+
{
|
55
|
+
:recipient => :name,
|
56
|
+
:organization => :company,
|
57
|
+
:addressLine1 => :street_address,
|
58
|
+
:addressLine2 => :secondary_address,
|
59
|
+
:postalCode => :postal_code,
|
60
|
+
:locality => :city,
|
61
|
+
:administrativeArea => :region,
|
62
|
+
:sortingCode => nil,
|
63
|
+
:dependentLocality => nil
|
64
|
+
}
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
|
69
|
+
# Validates that all the required fields are present.
|
70
|
+
def has_required_fields
|
71
|
+
return unless format.is_a?(LocalPostal::Format)
|
72
|
+
|
73
|
+
format.required_fields.each do |field|
|
74
|
+
field_name = self.class.formatting_variables_lookup_table[field.to_sym]
|
75
|
+
value = public_send(field_name)
|
76
|
+
errors.add field_name, 'is required' if "#{value}".empty?
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
# Validates that the postal code is in the correct format.
|
81
|
+
def has_valid_postal_code_pattern
|
82
|
+
return unless format.is_a?(LocalPostal::Format)
|
83
|
+
|
84
|
+
matches = Regexp.new(format.postal_code_pattern).match(postal_code)
|
85
|
+
|
86
|
+
errors.add(:postal_code, 'is invalid') unless matches.to_a.length > 0
|
87
|
+
end
|
88
|
+
|
89
|
+
# Validates that the postal code has the correct prefix, when required.
|
90
|
+
def has_valid_postal_code_prefix
|
91
|
+
return unless format.is_a?(LocalPostal::Format)
|
92
|
+
return if "#{format.postal_code_prefix}".empty?
|
93
|
+
return if postal_code.start_with?("#{format.postal_code_prefix}")
|
94
|
+
|
95
|
+
errors.add(:postal_code, 'has an invalid prefix')
|
96
|
+
end
|
97
|
+
|
98
|
+
# Maps the address fields to formatting variables.
|
99
|
+
#
|
100
|
+
# @return [Hash] Values that can be used to format the address.
|
101
|
+
def formatting_values
|
102
|
+
self.class.formatting_variables_lookup_table.map do |key, value|
|
103
|
+
value = public_send(value) unless value.nil?
|
104
|
+
|
105
|
+
[key, value]
|
106
|
+
end.to_h
|
107
|
+
end
|
108
|
+
|
109
|
+
# Looks the country up using Carmen and returns its 2-character code when
|
110
|
+
# available.
|
111
|
+
#
|
112
|
+
# @return [String] The country code or nil when unavailable.
|
113
|
+
def carmen_country
|
114
|
+
return unless country.is_a?(String)
|
115
|
+
|
116
|
+
Carmen::Country.named(country) || Carmen::Country.coded(country)
|
117
|
+
end
|
118
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
class LocalPostal::Format
|
2
|
+
include ActiveModel::Model
|
3
|
+
|
4
|
+
attr_accessor *%i[
|
5
|
+
administrative_area_type
|
6
|
+
dependent_locality_type
|
7
|
+
format
|
8
|
+
locale
|
9
|
+
locality_type
|
10
|
+
postal_code_pattern
|
11
|
+
postal_code_prefix
|
12
|
+
postal_code_type
|
13
|
+
required_fields
|
14
|
+
translations
|
15
|
+
uppercase_fields
|
16
|
+
]
|
17
|
+
|
18
|
+
# Constructs an instance of LocalPostal::Format from the supplied JSON file.
|
19
|
+
#
|
20
|
+
# @param [String] path The full pathname of the JSON file.
|
21
|
+
# @return [LocalPostal::Format] The new LocalPostal::Format instance.
|
22
|
+
def self.from_json(path)
|
23
|
+
raw_json = File.read(path)
|
24
|
+
parsed_json = JSON.parse(raw_json)
|
25
|
+
|
26
|
+
new(parsed_json)
|
27
|
+
end
|
28
|
+
|
29
|
+
# Constructs an instance of LocalPostal::Format by looking up the supplied
|
30
|
+
# country code in config/formats/*.json.
|
31
|
+
#
|
32
|
+
# @param [String] code The 2-character country code.
|
33
|
+
# @raise [ArgumentError] If the code is not exactly 2 characters.
|
34
|
+
# @raise [ArgumentError] If the supplied country code is not supported.
|
35
|
+
# @return [LocalPostal::Format] The new LocalPostal::Format instance.
|
36
|
+
def self.from_country_code(code)
|
37
|
+
code = "#{code}".upcase
|
38
|
+
|
39
|
+
fail ArgumentError, "#{code} is an invalid code", caller if code.length != 2
|
40
|
+
|
41
|
+
path = File.join(LocalPostal.root, 'config', 'formats', "#{code}.json")
|
42
|
+
|
43
|
+
fail ArgumentError, "#{code} unsupported", caller unless File.file?(path)
|
44
|
+
|
45
|
+
from_json(path)
|
46
|
+
end
|
47
|
+
|
48
|
+
# Applies the formatting to the supplied values.
|
49
|
+
#
|
50
|
+
# @param [Hash] values The address' field values.
|
51
|
+
# @return [String] The address properly formatted for its country.
|
52
|
+
def apply(values)
|
53
|
+
values = values.map do |key, value|
|
54
|
+
key = key.upcase if uppercase_fields.include?(key)
|
55
|
+
value = "#{value}".upcase if uppercase_fields.include?("#{key}")
|
56
|
+
|
57
|
+
[key, value]
|
58
|
+
end
|
59
|
+
|
60
|
+
formatted_string % values.to_h
|
61
|
+
end
|
62
|
+
|
63
|
+
# Converts the format provided in the JSON files into a valid Ruby formatted
|
64
|
+
# String that can be parsed using the modulus operator and a Hash.
|
65
|
+
#
|
66
|
+
# @return [String] A formatted string.
|
67
|
+
def formatted_string
|
68
|
+
format.dup.tap do |str|
|
69
|
+
variables.each {|v| str.gsub!("%#{v}", "%{#{v}}") }
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
# All of the variables found in the format.
|
74
|
+
#
|
75
|
+
# @return [Array] Variable names as Strings.
|
76
|
+
def variables
|
77
|
+
format.scan(/(%\w+)/).flatten.map {|v| v[1..v.length] }
|
78
|
+
end
|
79
|
+
end
|
data/lib/local_postal.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'json'
|
3
|
+
require 'carmen'
|
4
|
+
require 'active_model'
|
5
|
+
|
6
|
+
module LocalPostal
|
7
|
+
autoload :Address, 'local_postal/address'
|
8
|
+
autoload :Format, 'local_postal/format'
|
9
|
+
autoload :VERSION, 'local_postal/version'
|
10
|
+
|
11
|
+
# Gets the path that the gem was installed in. This is used mainly to read
|
12
|
+
# configuration files.
|
13
|
+
#
|
14
|
+
# @return [String] The path the gem is installed in.
|
15
|
+
def self.root
|
16
|
+
@root ||= File.expand_path(File.join('..', '..'), __FILE__)
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
desc 'Lists all the countries that are supported'
|
2
|
+
task :list_supported_countries do
|
3
|
+
require 'local_postal'
|
4
|
+
|
5
|
+
files = Dir[File.join(LocalPostal.root, 'config', 'formats', '*.json')]
|
6
|
+
|
7
|
+
countries = files.sort.map do |file|
|
8
|
+
country_code = File.basename(file, File.extname(file))
|
9
|
+
country = Carmen::Country.coded(country_code)
|
10
|
+
name = country ? country.name : nil
|
11
|
+
|
12
|
+
{ country_code => name }
|
13
|
+
end
|
14
|
+
|
15
|
+
total = Carmen::Country.all.count
|
16
|
+
|
17
|
+
print "# #{countries.count} of #{total} countries are supported as of "
|
18
|
+
puts Time.now.strftime('%B %d, %Y')
|
19
|
+
puts
|
20
|
+
puts countries.to_yaml
|
21
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
desc 'Lists all of the unique formatting variables'
|
2
|
+
task :list_unique_format_variables do
|
3
|
+
require 'local_postal'
|
4
|
+
|
5
|
+
files = Dir[File.join(LocalPostal.root, 'config', 'formats', '*.json')]
|
6
|
+
formats = files.map {|file| LocalPostal::Format.from_json(file) }
|
7
|
+
|
8
|
+
variables = formats.map {|f| f.variables }.flatten
|
9
|
+
variables = variables.compact.uniq
|
10
|
+
|
11
|
+
puts variables.to_yaml
|
12
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
desc 'Lists all of the address formatting rules that are unique'
|
2
|
+
task :list_unique_formatting_rules do
|
3
|
+
require 'local_postal'
|
4
|
+
|
5
|
+
files = Dir[File.join(LocalPostal.root, 'config', 'formats', '*.json')]
|
6
|
+
formats = files.map {|file| LocalPostal::Format.from_json(file) }
|
7
|
+
|
8
|
+
rules = {
|
9
|
+
administrative_area_type: [],
|
10
|
+
dependent_locality_type: [],
|
11
|
+
format: [],
|
12
|
+
locale: [],
|
13
|
+
locality_type: [],
|
14
|
+
postal_code_pattern: [],
|
15
|
+
postal_code_prefix: [],
|
16
|
+
postal_code_type: [],
|
17
|
+
required_fields: [],
|
18
|
+
translations: [],
|
19
|
+
uppercase_fields: []
|
20
|
+
}
|
21
|
+
|
22
|
+
formats.each do |format|
|
23
|
+
rules.keys.each do |key|
|
24
|
+
value = format.public_send(key)
|
25
|
+
rules[key] << value unless value.nil?
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
rules.keys.each {|key| rules[key] = rules[key].flatten.uniq }
|
30
|
+
|
31
|
+
puts rules.to_yaml
|
32
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
lib = File.expand_path('../lib', __FILE__)
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
+
|
6
|
+
require 'local_postal/version'
|
7
|
+
|
8
|
+
Gem::Specification.new do |spec|
|
9
|
+
spec.name = 'local_postal'
|
10
|
+
spec.version = LocalPostal::VERSION
|
11
|
+
spec.authors = ['Travis Haynes']
|
12
|
+
spec.email = ['travis@hi5dev.com']
|
13
|
+
spec.summary = 'Provides localized formating for postal addresses.'
|
14
|
+
spec.license = 'MIT'
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
17
|
+
f.match(%r{^(test|spec|features)/})
|
18
|
+
end
|
19
|
+
|
20
|
+
spec.bindir = 'exe'
|
21
|
+
|
22
|
+
spec.executables = spec.files.grep(%r{^#{spec.bindir}/}) do |f|
|
23
|
+
File.basename(f)
|
24
|
+
end
|
25
|
+
|
26
|
+
spec.require_paths = ['lib']
|
27
|
+
|
28
|
+
spec.add_dependency 'carmen', '~> 1.0.2'
|
29
|
+
spec.add_dependency 'activemodel', '~> 4.2.0'
|
30
|
+
|
31
|
+
spec.add_development_dependency 'bundler', '~> 1.10'
|
32
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
33
|
+
spec.add_development_dependency 'minitest'
|
34
|
+
spec.add_development_dependency 'faker'
|
35
|
+
spec.add_development_dependency 'byebug'
|
36
|
+
end
|
metadata
ADDED
@@ -0,0 +1,361 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: local_postal
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Travis Haynes
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-09-18 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: carmen
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.0.2
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.0.2
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activemodel
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 4.2.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 4.2.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.10'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.10'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '10.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '10.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: minitest
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: faker
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: byebug
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
description:
|
112
|
+
email:
|
113
|
+
- travis@hi5dev.com
|
114
|
+
executables: []
|
115
|
+
extensions: []
|
116
|
+
extra_rdoc_files: []
|
117
|
+
files:
|
118
|
+
- ".gitignore"
|
119
|
+
- ".travis.yml"
|
120
|
+
- CODE_OF_CONDUCT.md
|
121
|
+
- Gemfile
|
122
|
+
- LICENSE.txt
|
123
|
+
- README.md
|
124
|
+
- Rakefile
|
125
|
+
- bin/console
|
126
|
+
- bin/setup
|
127
|
+
- config/formats/AC.json
|
128
|
+
- config/formats/AD.json
|
129
|
+
- config/formats/AE.json
|
130
|
+
- config/formats/AF.json
|
131
|
+
- config/formats/AG.json
|
132
|
+
- config/formats/AI.json
|
133
|
+
- config/formats/AL.json
|
134
|
+
- config/formats/AM.json
|
135
|
+
- config/formats/AR.json
|
136
|
+
- config/formats/AS.json
|
137
|
+
- config/formats/AT.json
|
138
|
+
- config/formats/AU.json
|
139
|
+
- config/formats/AX.json
|
140
|
+
- config/formats/AZ.json
|
141
|
+
- config/formats/BA.json
|
142
|
+
- config/formats/BB.json
|
143
|
+
- config/formats/BD.json
|
144
|
+
- config/formats/BE.json
|
145
|
+
- config/formats/BF.json
|
146
|
+
- config/formats/BG.json
|
147
|
+
- config/formats/BH.json
|
148
|
+
- config/formats/BJ.json
|
149
|
+
- config/formats/BL.json
|
150
|
+
- config/formats/BM.json
|
151
|
+
- config/formats/BN.json
|
152
|
+
- config/formats/BO.json
|
153
|
+
- config/formats/BR.json
|
154
|
+
- config/formats/BS.json
|
155
|
+
- config/formats/BT.json
|
156
|
+
- config/formats/BY.json
|
157
|
+
- config/formats/CA.json
|
158
|
+
- config/formats/CC.json
|
159
|
+
- config/formats/CD.json
|
160
|
+
- config/formats/CH.json
|
161
|
+
- config/formats/CI.json
|
162
|
+
- config/formats/CL.json
|
163
|
+
- config/formats/CN.json
|
164
|
+
- config/formats/CO.json
|
165
|
+
- config/formats/CR.json
|
166
|
+
- config/formats/CV.json
|
167
|
+
- config/formats/CX.json
|
168
|
+
- config/formats/CY.json
|
169
|
+
- config/formats/CZ.json
|
170
|
+
- config/formats/DE.json
|
171
|
+
- config/formats/DK.json
|
172
|
+
- config/formats/DO.json
|
173
|
+
- config/formats/DZ.json
|
174
|
+
- config/formats/EC.json
|
175
|
+
- config/formats/EE.json
|
176
|
+
- config/formats/EG.json
|
177
|
+
- config/formats/EH.json
|
178
|
+
- config/formats/ES.json
|
179
|
+
- config/formats/ET.json
|
180
|
+
- config/formats/FI.json
|
181
|
+
- config/formats/FK.json
|
182
|
+
- config/formats/FM.json
|
183
|
+
- config/formats/FO.json
|
184
|
+
- config/formats/FR.json
|
185
|
+
- config/formats/GB.json
|
186
|
+
- config/formats/GE.json
|
187
|
+
- config/formats/GF.json
|
188
|
+
- config/formats/GG.json
|
189
|
+
- config/formats/GI.json
|
190
|
+
- config/formats/GL.json
|
191
|
+
- config/formats/GN.json
|
192
|
+
- config/formats/GP.json
|
193
|
+
- config/formats/GR.json
|
194
|
+
- config/formats/GS.json
|
195
|
+
- config/formats/GT.json
|
196
|
+
- config/formats/GU.json
|
197
|
+
- config/formats/GW.json
|
198
|
+
- config/formats/HK.json
|
199
|
+
- config/formats/HN.json
|
200
|
+
- config/formats/HR.json
|
201
|
+
- config/formats/HT.json
|
202
|
+
- config/formats/HU.json
|
203
|
+
- config/formats/ID.json
|
204
|
+
- config/formats/IE.json
|
205
|
+
- config/formats/IL.json
|
206
|
+
- config/formats/IM.json
|
207
|
+
- config/formats/IN.json
|
208
|
+
- config/formats/IO.json
|
209
|
+
- config/formats/IQ.json
|
210
|
+
- config/formats/IR.json
|
211
|
+
- config/formats/IS.json
|
212
|
+
- config/formats/IT.json
|
213
|
+
- config/formats/JE.json
|
214
|
+
- config/formats/JM.json
|
215
|
+
- config/formats/JO.json
|
216
|
+
- config/formats/JP.json
|
217
|
+
- config/formats/KE.json
|
218
|
+
- config/formats/KG.json
|
219
|
+
- config/formats/KH.json
|
220
|
+
- config/formats/KI.json
|
221
|
+
- config/formats/KM.json
|
222
|
+
- config/formats/KN.json
|
223
|
+
- config/formats/KR.json
|
224
|
+
- config/formats/KW.json
|
225
|
+
- config/formats/KY.json
|
226
|
+
- config/formats/KZ.json
|
227
|
+
- config/formats/LA.json
|
228
|
+
- config/formats/LB.json
|
229
|
+
- config/formats/LI.json
|
230
|
+
- config/formats/LK.json
|
231
|
+
- config/formats/LR.json
|
232
|
+
- config/formats/LS.json
|
233
|
+
- config/formats/LT.json
|
234
|
+
- config/formats/LU.json
|
235
|
+
- config/formats/LV.json
|
236
|
+
- config/formats/MA.json
|
237
|
+
- config/formats/MC.json
|
238
|
+
- config/formats/MD.json
|
239
|
+
- config/formats/ME.json
|
240
|
+
- config/formats/MF.json
|
241
|
+
- config/formats/MG.json
|
242
|
+
- config/formats/MH.json
|
243
|
+
- config/formats/MK.json
|
244
|
+
- config/formats/MM.json
|
245
|
+
- config/formats/MN.json
|
246
|
+
- config/formats/MO.json
|
247
|
+
- config/formats/MP.json
|
248
|
+
- config/formats/MQ.json
|
249
|
+
- config/formats/MR.json
|
250
|
+
- config/formats/MT.json
|
251
|
+
- config/formats/MU.json
|
252
|
+
- config/formats/MV.json
|
253
|
+
- config/formats/MW.json
|
254
|
+
- config/formats/MX.json
|
255
|
+
- config/formats/MY.json
|
256
|
+
- config/formats/MZ.json
|
257
|
+
- config/formats/NC.json
|
258
|
+
- config/formats/NE.json
|
259
|
+
- config/formats/NF.json
|
260
|
+
- config/formats/NG.json
|
261
|
+
- config/formats/NI.json
|
262
|
+
- config/formats/NL.json
|
263
|
+
- config/formats/NO.json
|
264
|
+
- config/formats/NP.json
|
265
|
+
- config/formats/NR.json
|
266
|
+
- config/formats/NZ.json
|
267
|
+
- config/formats/OM.json
|
268
|
+
- config/formats/PA.json
|
269
|
+
- config/formats/PE.json
|
270
|
+
- config/formats/PF.json
|
271
|
+
- config/formats/PG.json
|
272
|
+
- config/formats/PH.json
|
273
|
+
- config/formats/PK.json
|
274
|
+
- config/formats/PL.json
|
275
|
+
- config/formats/PM.json
|
276
|
+
- config/formats/PN.json
|
277
|
+
- config/formats/PR.json
|
278
|
+
- config/formats/PT.json
|
279
|
+
- config/formats/PW.json
|
280
|
+
- config/formats/PY.json
|
281
|
+
- config/formats/QA.json
|
282
|
+
- config/formats/RE.json
|
283
|
+
- config/formats/RO.json
|
284
|
+
- config/formats/RS.json
|
285
|
+
- config/formats/RU.json
|
286
|
+
- config/formats/RW.json
|
287
|
+
- config/formats/SA.json
|
288
|
+
- config/formats/SC.json
|
289
|
+
- config/formats/SE.json
|
290
|
+
- config/formats/SG.json
|
291
|
+
- config/formats/SH.json
|
292
|
+
- config/formats/SI.json
|
293
|
+
- config/formats/SJ.json
|
294
|
+
- config/formats/SK.json
|
295
|
+
- config/formats/SM.json
|
296
|
+
- config/formats/SN.json
|
297
|
+
- config/formats/SO.json
|
298
|
+
- config/formats/SR.json
|
299
|
+
- config/formats/ST.json
|
300
|
+
- config/formats/SV.json
|
301
|
+
- config/formats/SZ.json
|
302
|
+
- config/formats/TA.json
|
303
|
+
- config/formats/TC.json
|
304
|
+
- config/formats/TH.json
|
305
|
+
- config/formats/TJ.json
|
306
|
+
- config/formats/TM.json
|
307
|
+
- config/formats/TN.json
|
308
|
+
- config/formats/TR.json
|
309
|
+
- config/formats/TV.json
|
310
|
+
- config/formats/TW.json
|
311
|
+
- config/formats/TZ.json
|
312
|
+
- config/formats/UA.json
|
313
|
+
- config/formats/UM.json
|
314
|
+
- config/formats/US.json
|
315
|
+
- config/formats/UY.json
|
316
|
+
- config/formats/UZ.json
|
317
|
+
- config/formats/VA.json
|
318
|
+
- config/formats/VC.json
|
319
|
+
- config/formats/VE.json
|
320
|
+
- config/formats/VG.json
|
321
|
+
- config/formats/VI.json
|
322
|
+
- config/formats/VN.json
|
323
|
+
- config/formats/WF.json
|
324
|
+
- config/formats/XK.json
|
325
|
+
- config/formats/YT.json
|
326
|
+
- config/formats/ZA.json
|
327
|
+
- config/formats/ZM.json
|
328
|
+
- config/formats/ZZ.json
|
329
|
+
- lib/local_postal.rb
|
330
|
+
- lib/local_postal/address.rb
|
331
|
+
- lib/local_postal/format.rb
|
332
|
+
- lib/local_postal/version.rb
|
333
|
+
- lib/tasks/list_supported_countries.rake
|
334
|
+
- lib/tasks/list_unique_format_variables.rake
|
335
|
+
- lib/tasks/list_unique_formatting_rules.rake
|
336
|
+
- local_postal.gemspec
|
337
|
+
homepage:
|
338
|
+
licenses:
|
339
|
+
- MIT
|
340
|
+
metadata: {}
|
341
|
+
post_install_message:
|
342
|
+
rdoc_options: []
|
343
|
+
require_paths:
|
344
|
+
- lib
|
345
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
346
|
+
requirements:
|
347
|
+
- - ">="
|
348
|
+
- !ruby/object:Gem::Version
|
349
|
+
version: '0'
|
350
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
351
|
+
requirements:
|
352
|
+
- - ">="
|
353
|
+
- !ruby/object:Gem::Version
|
354
|
+
version: '0'
|
355
|
+
requirements: []
|
356
|
+
rubyforge_project:
|
357
|
+
rubygems_version: 2.4.8
|
358
|
+
signing_key:
|
359
|
+
specification_version: 4
|
360
|
+
summary: Provides localized formating for postal addresses.
|
361
|
+
test_files: []
|