require 'spread2rdf/spreadsheet/coord' require 'spread2rdf/spreadsheet/element' require 'spread2rdf/spreadsheet/mapping_context' require 'spread2rdf/spreadsheet/sheet' require 'spread2rdf/spreadsheet/sub_sheet' require 'spread2rdf/spreadsheet/worksheet' require 'spread2rdf/spreadsheet/sheet_mapping_context' require 'spread2rdf/spreadsheet/sub_sheet_mapping_context' require 'spread2rdf/spreadsheet/column' require 'spread2rdf/spreadsheet/column_mapping_context' require 'spread2rdf/spreadsheet/sheet_dsl' require 'spread2rdf/spreadsheet/mapping_dsl' module Spread2RDF class Spreadsheet attr_reader :name attr_reader :worksheet attr_reader :worksheet_mapping attr_reader :input_file attr_reader :roo def initialize(name, &block) @name = name @worksheet = {} @worksheet_mapping = {} @schema_spec = block end def spreadsheet self end def worksheets @worksheet.values end def templates @template.values end def read(filename) @input_file = filename load_roo load_schema load_resources self end def graph graph = RDF::Repository.new worksheets.each { |worksheet| graph << worksheet.graph } graph end alias to_rdf graph private # TODO: make this work with other spreadsheets than Excel def load_roo options = {} options[:packed], options[:file_warning] = :zip, :ignore if File.extname(@input_file).downcase == '.xlsm' @roo = Roo::Excelx.new(@input_file, options) end def load_schema Spreadsheet::MappingDSL.new(self).instance_exec(&@schema_spec) worksheets.each { |worksheet| worksheet.init } end def load_resources worksheets.each do |worksheet| next if worksheet.column.empty? worksheet.map end end class << self def definition(*args, &block) definitions << new(*args, &block) end private :new def definitions @@definitions ||= [] end end end end