class RdbCSVRow::Row

Public Instance Methods

join(escape_char, db, delimiter) click to toggle source
# File lib/rdb_csv/row.rb, line 7
def join(escape_char, db, delimiter)
  escape(escape_char, db, delimiter).to_a.join(delimiter)
end
unescape(escape_char, db, delimiter) click to toggle source
# File lib/rdb_csv/row.rb, line 3
def unescape(escape_char, db, delimiter)
  send("unescape_#{db}").map{|v|v.to_i.to_s == v ? v.to_i : v rescue v}
end

Private Instance Methods

escape(escape_char, db, delimiter) click to toggle source
# File lib/rdb_csv/row.rb, line 39
def escape(escape_char, db, delimiter)
  send("escape_#{db}", escape_char, delimiter)
end
escape_default(escape_char, delimiter) click to toggle source
# File lib/rdb_csv/row.rb, line 43
def escape_default(escape_char, delimiter)
  self
end
escape_mysql(escape_char, delimiter) click to toggle source
# File lib/rdb_csv/row.rb, line 47
def escape_mysql(escape_char, delimiter)
  case delimiter
  when "\t" # tsv
    self.map do |column|
      case column
      when nil
        "NULL"
      when String
        str = ""
        column.each_char do |char|
          case char
          when escape_char
            str += char*2
          when "\n"
            str += "#{escape_char}n"
          when "\t"
            str += "#{escape_char}t"
          when "\0"
            str += "#{escape_char}0"
          else
            str += char
          end
        end
        str
      else
        column
      end
    end
  when "," # csv
    self.map do |column|
      case column
      when nil
        "#{escape_char}N"
      when String
        str = ""
        column.each_char do |char|
          case char
          when escape_char
            str += char*2
          when "\n"
            str += "#{escape_char}\n"
          when "\0"
            str += "#{escape_char}0"
          when delimiter
            str += "#{escape_char}#{delimiter}"
          else
            str += char
          end
        end
        str
      else
        column
      end
    end
  end
end
escape_postgresql(escape_char, delimiter) click to toggle source
# File lib/rdb_csv/row.rb, line 104
def escape_postgresql(escape_char, delimiter)
  self.map do |v|
    if v == ''
      '""'
    elsif v.nil?
      ''
    elsif v.kind_of?(String)
      v = v.gsub(/\0/o, "#{escape_char}#{escape_char}0")
      v = v.gsub(/"/o, '""') if v.include?('"')
      v = "\"#{v}\"" if v.match?(/"|\r|\n|#{delimiter}/)
      v
    else
      v
    end
  end
end
unescape_default() click to toggle source
# File lib/rdb_csv/row.rb, line 13
def unescape_default
  self
end
unescape_mysql() click to toggle source
# File lib/rdb_csv/row.rb, line 17
def unescape_mysql
  row = self
  if @quote
    row = row.map{|v|v.match?(/^#{@quote}.*?#{@quote}$/m) ? v[1..-2].gsub(/#{@quote}#{@quote}/o, @quote) : v}
  end
  row.map{|v|v.nil? ? nil : v.gsub(/\\\\/o, '\\')
                              .gsub(/\\n/o, "\n")
                              .gsub(/\\\n/o, "\n")
                              .gsub(/\\r/o, "\r")
                              .gsub(/\\t/o, "\t")
                              .gsub(/\\0/o, "\0")
                              .gsub(/\\,/o, ",")
          }
      .map{|v|v=="\\N" ? nil : v}
      .map{|v|v=="NULL" ? nil : v}
end
unescape_postgresql() click to toggle source
# File lib/rdb_csv/row.rb, line 34
def unescape_postgresql
  self.map{|v|v.gsub(/\\0/o, "\0")}
      .map{|v|v.match?(/^".*?"$/om) ? v[1..-2].gsub(/""/, '"') : (v == '' ? nil : v)}
end