Class: AddressComposer

Inherits:
Object
  • Object
show all
Defined in:
lib/address_composer.rb,
lib/address_composer/version.rb

Defined Under Namespace

Classes: Template

Constant Summary collapse

GEM_ROOT =
Gem::Specification.find_by_name("address_composer").gem_dir
Templates =
YAML.safe_load(IO.read(File.join(GEM_ROOT, "address-formatting", "conf", "countries", "worldwide.yaml")), aliases: true)
ComponentsList =
Psych.load_stream(File.read(File.join(GEM_ROOT,"address-formatting", "conf","components.yaml")))
AllComponents =
ComponentsList.map { |h| h["name"] } + ComponentsList.flat_map { |h| h["aliases"] }.compact
StateCodes =
YAML.safe_load(IO.read(File.join(GEM_ROOT, "address-formatting", "conf", "state_codes.yaml")), aliases: true)
CountyCodes =
YAML.safe_load(IO.read(File.join(GEM_ROOT, "address-formatting", "conf", "county_codes.yaml")), aliases: true)
CountryToLanguage =
begin
  c2l = YAML.safe_load(IO.read(File.join(GEM_ROOT, "address-formatting", "conf", "country2lang.yaml")), aliases: true)
  c2l.transform_values! do |v|
    v.split(",")
  end
  c2l.freeze
end
Abbreviations =
begin
  abbr = {}
  Dir.each_child(File.join(GEM_ROOT, "address-formatting", "conf", "abbreviations")) do |file|
    country_code, = file.split(".", 2)
    abbr[country_code] = YAML.safe_load(IO.read(File.join(GEM_ROOT, "address-formatting", "conf", "abbreviations", file)), aliases: true)
  end
  abbr.freeze
end
VERSION =
"2.0.0".freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(components) ⇒ AddressComposer

Returns a new instance of AddressComposer.



43
44
45
46
47
48
# File 'lib/address_composer.rb', line 43

def initialize(components)
  self.components = components.dup
  @should_abbreviate = self.components.delete("should_abbreviate") || false

  normalize_components
end

Instance Attribute Details

#componentsObject

Returns the value of attribute components.



41
42
43
# File 'lib/address_composer.rb', line 41

def components
  @components
end

Class Method Details

.compose(components) ⇒ Object



37
38
39
# File 'lib/address_composer.rb', line 37

def self.compose(components)
  new(components).compose
end

Instance Method Details

#composeObject



50
51
52
53
54
55
56
57
58
59
# File 'lib/address_composer.rb', line 50

def compose
  if components["country_code"]
    result = Template.render(template, components).squeeze("\n").lstrip.gsub(/\s*\n\s*/, "\n")
    result = post_format_replace(result)
  else
    result = components.values.join(" ")
  end

  clean(result)
end