module MainStreet::Model
Public Instance Methods
validates_address(fields:, geocode: false, country: nil, **options)
click to toggle source
# File lib/mainstreet/model.rb, line 3 def validates_address(fields:, geocode: false, country: nil, **options) fields = Array(fields.map(&:to_s)) geocode_options = {latitude: :latitude, longitude: :longitude} geocode_options = geocode_options.merge(geocode) if geocode.is_a?(Hash) options[:if] ||= -> { fields.any? { |f| changes.key?(f.to_s) } } unless options[:unless] class_eval do validate :verify_address, **options define_method :verify_address do address = fields.map { |v| send(v).presence }.compact.join(", ") if address.present? # must use a different variable than country record_country = instance_exec(&country) if country.respond_to?(:call) verifier = MainStreet::AddressVerifier.new(address, country: record_country) if verifier.success? if geocode self.send("#{geocode_options[:latitude]}=", verifier.latitude) self.send("#{geocode_options[:longitude]}=", verifier.longitude) end else errors.add(:base, verifier.failure_message) end # legacy - for standardize_address method @address_verification_result = verifier.result end end end end