lib/mainstreet.rb in mainstreet-0.0.1 vs lib/mainstreet.rb in mainstreet-0.1.0
- old
+ new
@@ -19,33 +19,39 @@
def acts_as_address(_options = {})
class_eval do
serialize :original_attributes
serialize :verification_info
+ validates :street, presence: true
validate :verify_address, if: -> { address_fields_changed? }
before_save :standardize_address, if: -> { address_fields_changed? }
def verify_address
- @verification_result = Geocoder.search("#{street} #{street2} #{city}, #{state} #{zip_code}", lookup: Mainstreet.lookup).first
- if @verification_result
- if @verification_result.respond_to?(:analysis)
- case @verification_result.analysis["dpv_match_code"]
- when "N"
- errors.add(:base, "Address could not be confirmed")
- when "S"
- errors.add(:base, "Apartment or suite could not be confirmed")
- when "D"
- errors.add(:base, "Apartment or suite is missing")
+ if zip_code.blank? && (city.blank? || state.blank?)
+ errors.add(:base, "Address can't be confirmed")
+ end
+ if errors.empty?
+ @verification_result = fetch_verification_info
+ if @verification_result
+ if @verification_result.respond_to?(:analysis)
+ case @verification_result.analysis["dpv_match_code"]
+ when "N"
+ errors.add(:base, "Address can't be confirmed")
+ when "S"
+ errors.add(:base, "Apartment or suite can't be confirmed")
+ when "D"
+ errors.add(:base, "Apartment or suite is missing")
+ end
end
- end
- correct_zip_code = @verification_result.postal_code
- if zip_code != correct_zip_code
- errors.add(:base, "Did you mean #{correct_zip_code}?")
+ correct_zip_code = @verification_result.postal_code
+ if zip_code != correct_zip_code
+ errors.add(:base, "Did you mean #{correct_zip_code}?")
+ end
+ else
+ errors.add(:base, "Address can't be confirmed")
end
- else
- errors.add(:base, "Address could not be confirmed")
end
errors.full_messages
end
def standardize_address
@@ -66,9 +72,13 @@
self.zip_code = result.postal_code
self.latitude = result.latitude
self.longitude = result.longitude
end
true
+ end
+
+ def fetch_verification_info
+ Geocoder.search("#{street} #{street2} #{city}, #{state} #{zip_code}", lookup: Mainstreet.lookup).first
end
def address_fields_changed?
address_fields.any? { |f| send("#{f}_changed?") }
end