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