Class: OpenTox::Serializer::Spreadsheets

Inherits:
Object
  • Object
show all
Defined in:
lib/serializer.rb

Overview

Serializer for spreadsheet formats

Instance Method Summary collapse

Constructor Details

#initialize(dataset) ⇒ Spreadsheets

Create a new spreadsheet serializer

Parameters:



459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
# File 'lib/serializer.rb', line 459

def initialize(dataset)
  @rows = []
  @rows << ["SMILES"]
  features = dataset.features.keys
  @rows.first << features
  @rows.first.flatten!
  dataset.data_entries.each do |compound,entries|
    cmpd = Compound.new(compound)
    smiles = cmpd.to_smiles
    inchi = URI.encode_www_form_component(cmpd.to_inchi)
    row_container = Array.new
    row = Array.new(@rows.first.size)
    row_container << row
    #row[0] = smiles
    row[0] = inchi
    entries.each do |feature, values|
      i = features.index(feature)+1
      values.each do |value|
        if row_container[0][i]
          #LOGGER.debug "Feature '#{feature}' (nr '#{i}'): '#{value}'"
          row_container << row_container.last.collect
          row_container.last[i] = value
          #LOGGER.debug "RC: #{row_container.to_yaml}"
        else
          row_container.each { |r| r[i] = value }
        end
      end
    end
    row_container.each { |r| @rows << r }
  end
end

Instance Method Details

#to_csvString

Convert to CSV string

Returns:



493
494
495
496
497
498
# File 'lib/serializer.rb', line 493

def to_csv
  rows = @rows.collect
  result = ""
  result << rows.shift.collect { |f| f.split('/').last }.join(",") << "\n" # only feature name
  result << rows.collect{ |r| r.join(",") }.join("\n")
end

#to_spreadsheet(sheetname = "sheet1") ⇒ Spreadsheet::Workbook

Convert to spreadsheet workbook

Returns:

  • (Spreadsheet::Workbook)

    Workbook object (use the spreadsheet gemc to write a file)



502
503
504
505
506
507
508
509
510
511
512
513
514
515
# File 'lib/serializer.rb', line 502

def to_spreadsheet(sheetname="sheet1")
  Spreadsheet.client_encoding = 'UTF-8'
  book = Spreadsheet::Workbook.new
  sheet = book.create_worksheet(:name => "#{sheetname}")
  sheet.column(0).width = 100
  i = 0
  @rows.each do |row|
    row.each do |c|
      sheet.row(i).push c
    end
    i+=1
  end
  book
end