Class: RdbCSV::CSV

Inherits:
Object
  • Object
show all
Includes:
RdbCSVReader, RdbCSVRow
Defined in:
lib/rdb_csv.rb

Constant Summary collapse

WRITE_BUFFER_SIZE =
1000

Instance Method Summary collapse

Constructor Details

#initialize(f, mode, options) ⇒ CSV

Returns a new instance of CSV.



10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/rdb_csv.rb', line 10

def initialize(f, mode, options)
  @f = f
  @mode = options[:mode]
  @db = options[:db]
  @delimiter = options[:delimiter] || "\t"
  @escape = "\\"
  @linefeed = "\n"
  quote = options[:quote] || '"'

  # quote option is valid only mysql
  @quote = options[:db] == :mysql ? quote : '"'
end

Instance Method Details

#<<(array) ⇒ Object

Raises:

  • (IOError)


35
36
37
38
39
40
41
42
43
44
# File 'lib/rdb_csv.rb', line 35

def <<(array)
  raise IOError if @mode == 'r'

  @lines ||= []

  row = Row.new(array)
  line = row.join(@escape, @db, @delimiter)
  @lines << line + @linefeed
  buffer_write if @lines.size >= WRITE_BUFFER_SIZE
end

#buffer_writeObject



46
47
48
49
50
51
# File 'lib/rdb_csv.rb', line 46

def buffer_write
  return if @lines.nil? || @lines.size.zero?

  @f.write(@lines.join)
  @lines = []
end

#eachObject

Raises:

  • (IOError)


23
24
25
26
27
28
29
30
31
# File 'lib/rdb_csv.rb', line 23

def each
  raise IOError if @mode == 'w'

  reader = Reader.new(@f, @db, @delimiter, escape: @escape, linefeed: @linefeed, quote: @quote)

  reader.each_line do |row|
    yield row.unescape(@escape, @db, @delimiter)
  end
end