class Libis::Metadata::Mapper
New style parsers and converters for metadata. New, not finished and untested.
Attributes
format_parser[R]
mapping[R]
selection_parser[R]
tables[R]
target_parser[R]
Public Class Methods
new(selection_parser, target_parser, format_parser, config_xlsx)
click to toggle source
# File lib/libis/metadata/mapper.rb, line 18 def initialize(selection_parser, target_parser, format_parser, config_xlsx) @selection_parser = selection_parser @target_parser = target_parser @format_parser = format_parser @mapping = [] @tables = {} doc = SimpleXlsxReader.open(config_xlsx) doc.sheets.each do |sheet| if sheet.name == 'Mapping' mapping = sheet_to_hash(sheet) mapping.each do |rule| # noinspection RubyStringKeysInHashInspection @mapping << { 'Selection' => begin selection_parser.parse(rule['Selection']) rescue Parslet::ParseFailed => error puts "Error parsing '#{rule['Selection']}'" puts error.cause.ascii_tree end, 'Target' => begin target_parser.parse(rule['Target']) rescue Parslet::ParseFailed => error puts "Error parsing '#{rule['Target']}'" puts error.cause.ascii_tree end, 'Format' => begin format_parser.parse(rule['Format']) rescue Parslet::ParseFailed => error puts "Error parsing '#{rule['Format']}'" puts error.cause.ascii_tree end, } end else @tables[sheet.name] = sheet_to_hash(sheet) end end if @mapping.empty? raise RuntimeError, "Failure: config file '#{config_xlsx}' does not contain a 'Mapping' sheet." end end
Private Instance Methods
lookup(table, key, constraints = {})
click to toggle source
# File lib/libis/metadata/mapper.rb, line 74 def lookup(table, key, constraints = {}) @tables[table].select {|value| constraints.map {|k, v| value[k] == v}.all?}.map {|v| v[key]} end
sheet_to_hash(sheet)
click to toggle source
# File lib/libis/metadata/mapper.rb, line 62 def sheet_to_hash(sheet) data = sheet.rows header = data.shift result = [] data.each do |row| x = {} header.each_with_index {|col_name, col_index| x[col_name] = row[col_index]} result << x end result end