├── .travis.yml ├── notes.rb ├── example_data └── test1.csv ├── easypost.rb ├── normalize_csv_addresses.rb ├── address_normalizer_spec.rb ├── address_normalizer_test.rb ├── LICENSE.mkd ├── README.md └── address_normalizer.rb /.travis.yml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /notes.rb: -------------------------------------------------------------------------------- 1 | # Mike's notes 2 | - big todo: seperate all file reading/writing logic from address normalizing logic -------------------------------------------------------------------------------- /example_data/test1.csv: -------------------------------------------------------------------------------- 1 | Name,address 2 | Mike,"6687 Del Party Avenue 90045 Isla Vista, California" 3 | asf, "Here's an unclosed row 4 | -------------------------------------------------------------------------------- /easypost.rb: -------------------------------------------------------------------------------- 1 | require "easypost" 2 | 3 | EasyPost.api_key = "cueqNZUb3ldeWTNX7MU3Mel8UXtaAMUi" 4 | p EasyPost::Address.verify({ 5 | street1: "101 California St", 6 | street2: "Suite 1290", 7 | city: "San Francisco", 8 | state: "CA", 9 | zip: "94111" 10 | }) -------------------------------------------------------------------------------- /normalize_csv_addresses.rb: -------------------------------------------------------------------------------- 1 | require './address_normalizer' 2 | 3 | if ARGV.empty? 4 | puts "Please provide the name of the CSV file with addresses to normalize. Example usage:" 5 | puts "ruby normalize_csv_addresses.rb \"my_addresses.csv\"" 6 | else 7 | normalized = FileNormalizer.new(ARGV[0]) 8 | end 9 | -------------------------------------------------------------------------------- /address_normalizer_spec.rb: -------------------------------------------------------------------------------- 1 | require 'csv' 2 | require_relative 'address_normalizer' 3 | 4 | describe FileNormalizer do 5 | 6 | before :all do 7 | @timestamp = Time.now.to_s.gsub(/:|-/,"").gsub(/\s+/,"_") 8 | @filename = "test1_NormalizedAddresses_#{@timestamp}.csv" 9 | @malformed = "AddressNormalizer_MalformedRows_#{@timestamp}.txt" 10 | 11 | @normalized = FileNormalizer.new('example_data/test1.csv') 12 | end 13 | 14 | it "should create a normalized output file" do 15 | File.exists?(@filename).should be_true 16 | end 17 | 18 | it "should add an 'address_normalized' column" do 19 | rows = CSV.read(@filename) 20 | rows[0].should include('address_normalized') 21 | end 22 | 23 | it "should create a properly normalized address" do 24 | rows = CSV.read(@filename) 25 | rows[1][2].should == "6687 DEL PARTY AVENUE 90045, ISLA VISTA, CA" 26 | end 27 | 28 | # todo - write a better test (regex?) 29 | it "should catch unclosed row errors" do 30 | @normalized.errors.should include("Illegal quoting in line 1.") 31 | end 32 | 33 | it "should create file of malformed rows" do 34 | File.exists?(@malformed).should be_true 35 | end 36 | 37 | after :all do 38 | File.delete(@filename) 39 | File.delete(@malformed) 40 | end 41 | 42 | end -------------------------------------------------------------------------------- /address_normalizer_test.rb: -------------------------------------------------------------------------------- 1 | require 'test/unit' 2 | require 'csv' 3 | require_relative 'address_normalizer' 4 | 5 | class FileNormalizerTest < Test::Unit::TestCase 6 | 7 | # run and create test1_NormalizedAddresses_