Class: Location::AddressNormalizer

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/location/address_normalizer.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(model) ⇒ AddressNormalizer

Returns a new instance of AddressNormalizer.



19
20
21
# File 'lib/location/address_normalizer.rb', line 19

def initialize(model)
  @model = model
end

Instance Attribute Details

#modelObject (readonly)

Returns the value of attribute model.



16
17
18
# File 'lib/location/address_normalizer.rb', line 16

def model
  @model
end

Class Method Details

.allowed_for_normalizationObject



8
9
10
# File 'lib/location/address_normalizer.rb', line 8

def self.allowed_for_normalization
  %i{state city district}
end

.default_normalizableObject



12
13
14
# File 'lib/location/address_normalizer.rb', line 12

def self.default_normalizable
  Location.configuration.normalizable_attributes
end

Instance Method Details

#attributesObject



50
51
52
53
54
55
56
# File 'lib/location/address_normalizer.rb', line 50

def attributes
  attributes = %w{postal_code street number complement latitude longitude}

  attributes.each_with_object({}) do |attr, hash|
    hash[attr] = @model.send(attr)
  end
end

#normalizableObject



39
40
41
42
43
44
# File 'lib/location/address_normalizer.rb', line 39

def normalizable
  @normalizable ||= self.class.default_normalizable
  ensure_valid_normalizable!

  @normalizable
end

#normalizable=(attributes) ⇒ Object



34
35
36
37
# File 'lib/location/address_normalizer.rb', line 34

def normalizable=(attributes)
  @normalizable = Array(attributes)
  ensure_valid_normalizable!
end

#normalizable?(attribute) ⇒ Boolean

Returns:

  • (Boolean)


46
47
48
# File 'lib/location/address_normalizer.rb', line 46

def normalizable?(attribute)
  normalizable.include?(attribute)
end

#normalize!Object



23
24
25
26
27
28
29
30
31
32
# File 'lib/location/address_normalizer.rb', line 23

def normalize!
  Finder.find(@model.postal_code) do |finder|
    return false unless finder.successful?

    normalizable.each do |a|
      value = finder.address.send(a)
      @model.send("#{a}=", value) unless value.nil?
    end
  end
end

#parameterize_attribute(attribute) ⇒ Object



58
59
60
61
62
63
# File 'lib/location/address_normalizer.rb', line 58

def parameterize_attribute(attribute)
  {
    name: @model.send(attribute),
    normalized: normalizable?(attribute)
  }
end