Class: Swisspost::Model::Address

Inherits:
Object
  • Object
show all
Defined in:
lib/swisspost/model/address.rb

Constant Summary collapse

VALIDATOR =
Dry::Validation.Contract do
  params do
    # Define all keys and their expected base types
    required(:first_name).filled(:string)
    required(:last_name).filled(:string)
    required(:street).filled(:string)
    required(:house_number).filled(:string)
    required(:zip).value(:integer)
    required(:city).filled(:string)
  end

  # Add more specific rules for keys that pass the initial check
  rule(:zip) do
    # Swiss ZIP codes are 4 digits, from 1000 to 9999
    key.failure('must be a 4-digit Swiss ZIP code') unless value.between?(1000, 9999)
  end
end

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(attributes) ⇒ Address

Returns a new instance of Address.

Raises:



26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/swisspost/model/address.rb', line 26

def initialize(attributes)
  result = VALIDATOR.call(attributes)
  raise ValidationError, result.errors.to_h.inspect if result.failure?

  validated_data = result.to_h
  @first_name = validated_data[:first_name]
  @last_name = validated_data[:last_name]
  @street = validated_data[:street]
  @house_number = validated_data[:house_number]
  @zip = validated_data[:zip]
  @city = validated_data[:city]
end

Instance Attribute Details

#cityObject (readonly)

Returns the value of attribute city.



6
7
8
# File 'lib/swisspost/model/address.rb', line 6

def city
  @city
end

#first_nameObject (readonly)

Returns the value of attribute first_name.



6
7
8
# File 'lib/swisspost/model/address.rb', line 6

def first_name
  @first_name
end

#house_numberObject (readonly)

Returns the value of attribute house_number.



6
7
8
# File 'lib/swisspost/model/address.rb', line 6

def house_number
  @house_number
end

#last_nameObject (readonly)

Returns the value of attribute last_name.



6
7
8
# File 'lib/swisspost/model/address.rb', line 6

def last_name
  @last_name
end

#streetObject (readonly)

Returns the value of attribute street.



6
7
8
# File 'lib/swisspost/model/address.rb', line 6

def street
  @street
end

#zipObject (readonly)

Returns the value of attribute zip.



6
7
8
# File 'lib/swisspost/model/address.rb', line 6

def zip
  @zip
end

Instance Method Details

#full_nameObject



39
40
41
# File 'lib/swisspost/model/address.rb', line 39

def full_name
  [@first_name, @last_name].compact.join(" ")
end

#full_streetObject



43
44
45
# File 'lib/swisspost/model/address.rb', line 43

def full_street
  [@street, @house_number].compact.join(" ")
end