module ClassMethods
    def acts_as_address
      class_eval do <<-DELIM
        #
        # ... tu definiowane s walidatory i skojarzenia
        #

        # definicja procedury find_within_miles 
        # dla wszystkich modeli majcych zwizek z adresami
        find_within_miles = Proc.new do |zip, miles|
          z = ZipCode.find_by_zip(zip)
          !z ? [] :
          self.class.find(:all,
                          :include => :zip_code,
                          :conditions => [
                                    "miles_between_lat_long(?, ?,
                                        zip_codes.latitude, zip_codes.longitude) < ?",
                                     z.latitude, z.longitude, miles])
        end  
        self.send(:define_method 'find_widthin_miles', find_within_miles)
      end
    end
