54 lines
1.1 KiB
Ruby
54 lines
1.1 KiB
Ruby
class Address
|
|
attr_accessor :street1, :street2, :city, :state, :zip, :country
|
|
|
|
def initialize(street1, street2, city, state, zip, country)
|
|
@street1 = street1
|
|
@street2 = street2
|
|
@city = city
|
|
@state = state
|
|
@zip = zip
|
|
@country = country
|
|
end
|
|
|
|
def to_s(format: nil)
|
|
case format
|
|
when :full
|
|
join_with_newline(
|
|
street1,
|
|
street2,
|
|
join_with_comma(city, state_and_zip),
|
|
country
|
|
)
|
|
when :condensed
|
|
join_with_newline(
|
|
join_with_comma(street1, street2),
|
|
join_with_comma(city, state_and_zip, country),
|
|
)
|
|
else
|
|
join_with_comma(street1, street2, city, state_and_zip, country)
|
|
end
|
|
end
|
|
|
|
def present?
|
|
[street1, street2, city, state, zip, country].any?(&:present?)
|
|
end
|
|
|
|
private
|
|
|
|
def join_without_blanks(*parts, separator: ", ")
|
|
parts.reject(&:blank?).join(separator)
|
|
end
|
|
|
|
def join_with_comma(*parts)
|
|
join_without_blanks(*parts)
|
|
end
|
|
|
|
def join_with_newline(*parts)
|
|
join_without_blanks(*parts, separator: "\n")
|
|
end
|
|
|
|
def state_and_zip
|
|
join_without_blanks(state, zip, separator: " ")
|
|
end
|
|
end
|