class See5::InputFileWriter

Writes names and data files suitable for See5, Cubist, or GritBot.

Public Class Methods

new(data:, schema: nil, names_io: nil, data_io: nil) click to toggle source
# File lib/see5/input_file_writer.rb, line 13
def initialize(data:, schema: nil, names_io: nil, data_io: nil)
  @data = data
  @schema = schema # TODO: automatic schema from data objects' attributes
  @names_io = names_io
  @data_io = data_io
end
write_files(data:, schema: nil, names_io: nil, data_io: nil) click to toggle source
# File lib/see5/input_file_writer.rb, line 8
def self.write_files(data:, schema: nil, names_io: nil, data_io: nil)
  new(data: data, schema: schema, names_io: names_io, data_io: data_io)
    .write_files
end

Public Instance Methods

write_data_file() click to toggle source
# File lib/see5/input_file_writer.rb, line 32
def write_data_file
  # TODO: missing or N/A
  @data.each do |record|
    data_io.write(row(record))
    data_io.write("\n")
  end
end
write_files() click to toggle source
# File lib/see5/input_file_writer.rb, line 20
def write_files
  write_names_file
  write_data_file

  names_io.close
  data_io.close
end
write_names_file() click to toggle source
# File lib/see5/input_file_writer.rb, line 28
def write_names_file
  names_io.write(@schema.names_file_contents)
end

Private Instance Methods

data_io() click to toggle source
# File lib/see5/input_file_writer.rb, line 57
def data_io
  @data_io ||= File.open("/tmp/ruby-see5.data", "w")
end
names_io() click to toggle source
# File lib/see5/input_file_writer.rb, line 53
def names_io
  @names_io ||= File.open("/tmp/ruby-see5.names", "w")
end
row(record) click to toggle source
# File lib/see5/input_file_writer.rb, line 42
def row(record)
  @schema.attributes.map do |attr, _vals|
    if record.is_a?(Hash)
      record[attr]
    else
      # assume some kind of OpenStruct- or ActiveModel-like object
      record.send(attr)
    end
  end.join(",")
end