class CSVToSqlite::Parser
Attributes
column_names[R]
db[R]
klass[R]
Public Class Methods
new(source, target, table_name=nil, column_names=nil)
click to toggle source
# File lib/csv_to_sqlite/parser.rb, line 14 def initialize(source, target, table_name=nil, column_names=nil) if File.exists?(source) @source = IO.readlines(source).to_s else @source = source end @target = target @table_name = table_name || 'item' @column_names = column_names || _name_columns(@source) _connect(@target) _create_model(@table_name, @column_names) DataMapper.finalize DataMapper.auto_migrate! end
Public Instance Methods
parse!()
click to toggle source
# File lib/csv_to_sqlite/parser.rb, line 32 def parse! _parse(@source) end
Private Instance Methods
_connect(target)
click to toggle source
# File lib/csv_to_sqlite/parser.rb, line 38 def _connect(target) @db = DataMapper.setup(:default, "sqlite:///#{File.expand_path(target)}") end
_create_model(table_name, column_names)
click to toggle source
# File lib/csv_to_sqlite/parser.rb, line 42 def _create_model(table_name, column_names) @klass = DataMapper::Model.new do property :id, DataMapper::Property::Serial column_names.each do |column| property column.to_s.to_sym, DataMapper::Property::String end end end
_name_columns(source)
click to toggle source
# File lib/csv_to_sqlite/parser.rb, line 51 def _name_columns(source) columns = [] columns_count = 0 FasterCSV.parse(source) do |row| columns_count = row.length if row.length > columns_count end (0...columns_count).each {|i| columns.push("col_#{i.to_s}")} columns end
_parse(source)
click to toggle source
# File lib/csv_to_sqlite/parser.rb, line 61 def _parse(source) FasterCSV.parse(source) do |row| item = @klass.new() row.each_with_index do |column, index| item.send("#{@column_names[index]}=", column) end item.save end end