README.md in table_importer-0.1.1 vs README.md in table_importer-0.2.1

- old
+ new

@@ -2,11 +2,11 @@ ============== Table Importer ============== -Given a file (or a string) containing a container, along with options, it will return a hash of those values. Great for importing poorly formatted CSV files. +Given a file (or a string) containing a container, along with options, it will return a hash of those values. Great for importing poorly formatted CSV files. It can handle CSV, Excel (xls and xlsx), Google Drive Spreadsheet, and a copy and pasted string. Only works for ruby versions >= 1.9.3. # Contributing to Table Importer @@ -17,5 +17,106 @@ `gem install bundler && bundle install` You should now be able to run the local tests: `bundle exec rake` + +Interact with table_importer by creating a TableImporter instance, and then calling methods on that instance. + + `importer = TableImporter::Source.new({options})` + +The options you pass in are: + +``` + # The type of the spreadsheet/input you want to import + :type => "google" # Google Drive spreadsheet + => "csv" # CSV file + => "xls" # Excel spreadsheet + => "copy_and_paste" # Copy and pasted input + + # The content to input. Either a file, a string, or google oauth keys. + :content => File.open("path/to/file") # for types csv, xls + => "Name, Email, Phone Number + Nick, nick@example.com, 6412345678" # For type copy_and_paste + => "google_access_token, spreadsheet_id" # For type google + + # Whether the first row of input contains column headers + :headers_present => true # First row of input is headers + => false # First row of input is not headers + + # Optionally you can provide mapping for the columns. (This can be incomplete). + :user_headers => { + "email"=>"0", + "organization"=>"4", + "url"=>"9" + } + # Used to separate columns. Pass in 'nil' if using Google Spreadsheet, Excel or you don't know. + :column_separator => :comma # ',' + => :space # ' ' + => :tab # '\t' + => :semicolon # ';' + + # Used to separate rows. Pass in 'nil' if using Google Spreadsheet, Excel or you don't know. + :record_separator => :newline_mac # '\n' + => :newline_windows # '\r\n' + => :old_newline_mac # '\r' (from OSX 9 days) + + # A hash of compulsory headers. At the moment only "email" is supported. + :compulsory_headers => { + :email => true, false # Does each record require an email address to be valid? + } + +``` + +There are a few ways to interact with the table importer: + +``` + importer = TableImporter::Source.new({options}) + + # get the type + puts importer.get_type + => "csv" + + # get the column separator + puts importer.get_column_separator + => "semicolon" + + # get the row separator + puts importer.get_record_separator + => "newline_mac" + + # Get the headers (either the first row if headers are provided, or else default headers + puts importer.get_headers + => "column_1, column_2, column_3" + + # Get the first 8 lines (useful for providing a matching option for the user to map their own headers, like mailchimps contact import. + puts importer.get_preview_lines + => [{:column_1 => "r1c1", :column_2 => "r1c2", :column_3 => "r1c3"}, {:column_1 => "r2c1", :column_2 => "r2c2", :column_3 => "r2c3"} etc] + + # Get input chunked in an input size (size defaults to 50) + puts importer.get_chunks + => All input chunked into 50 line blocks. + + puts importer.get_chunks(25) + => All input chunked into 25 line blocks. + + # The format for the returned chunks is not a simple array of hashes, like get_preview_lines + puts importer.get_chunks(2) + => [{:lines => [{:column_1 => "r1c1", :column_2 => "r1c2", :column_3 => "r1c3"}, {:column_1 => "r2c1", :column_2 => "r2c2", :column_3 => "r2c3"}], :errors => []}, {:lines => [{:column_1 => "r3c1", :column_2 => "r3c2", :column_3 => "r3c3"}, {:column_1 => "r4c1", :column_2 => "r4c2", :column_3 => "r4c3"}], :errors => []}] + + # The errors hash is for lines that don't contain the compulsory headers, are blank/empty, or the entire line contains no alphanumeric characters. + + # Gets lines of input returned in an array of hashes (doesn't work for CSV yet) + # Pass in start and end points + puts importer.get_lines(0, 1) + => [{:column_1 => "r1c1", :column_2 => "r1c2", :column_3 => "r1c3"}] + + # Or let it default to getting all lines + puts importer.get_lines + => All of the lines + + puts importer.get_lines(5, 25) + => Line 5 up to line 25 + + puts importer.get_lines(5, -1) + => Line 5 to the end of the input. +