Skip to content
This repository was archived by the owner on Oct 14, 2020. It is now read-only.

Commit c622870

Browse files
authored
Merge pull request #543 from jhoffner/10-17/csv_importer_updates
Updates to CSV Importer
2 parents 9a4b6a6 + b734445 commit c622870

File tree

1 file changed

+24
-3
lines changed

1 file changed

+24
-3
lines changed

frameworks/ruby/sql/csv_importer.rb

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
11
require 'csv'
22
require 'chronic'
3+
require 'open-uri'
34

45
# data importer utility
56
class CsvImporter
67
attr_reader :fields, :csv, :table, :limit, :random
78

89
def initialize(file, table, fields: {}, limit: 500, random: false)
9-
@csv = CSV.read(file)
10+
# make it possible to load CSV files from either web or file system
11+
@csv = if (file =~ /^https?:\//i) == 0
12+
CSV.parse(open(file).read)
13+
else
14+
CSV.read(file)
15+
end
16+
1017
@table = table
1118
@fields = fields
1219
@limit = limit
@@ -17,8 +24,22 @@ def create_schema
1724
importer = self
1825
DB.create_table @table do
1926
importer.csv.first.each do |field|
20-
if importer.fields[field]
21-
column field, importer.fields[field]
27+
if schema_type = importer.fields[field]
28+
case schema_type
29+
when :primary_key
30+
primary_key field
31+
when Array
32+
case schema_type.first
33+
when :primary_key
34+
primary_key field, schema_type.last || {}
35+
when :foreign_key
36+
foreign_key field, schema_type[1], schema_type[2] || {}
37+
end
38+
else
39+
column field, schema_type
40+
end
41+
elsif field == 'id'
42+
primary_key :id
2243
else
2344
String field
2445
end

0 commit comments

Comments
 (0)