class RgGen::Core::InputBase::Loader

Attributes

input_data[R]

Public Class Methods

new(extractors, ignore_values) click to toggle source
# File lib/rggen/core/input_base/loader.rb, line 12
def initialize(extractors, ignore_values)
  @extractors = extractors
  @ignore_values = ignore_values
end
support_types(types = nil) click to toggle source
# File lib/rggen/core/input_base/loader.rb, line 7
def self.support_types(types = nil)
  types && (@support_types ||= []).concat(types.map(&:to_sym))
  @support_types
end

Public Instance Methods

load_file(file, input_data, valid_value_lists) click to toggle source
# File lib/rggen/core/input_base/loader.rb, line 23
def load_file(file, input_data, valid_value_lists)
  File.readable?(file) ||
    (raise Core::LoadError.new('cannot load such file', file))
  @input_data = input_data
  @valid_value_lists = valid_value_lists
  format(read_file(file), input_data, input_data.layer, file)
end
support?(file) click to toggle source
# File lib/rggen/core/input_base/loader.rb, line 17
def support?(file)
  ext = File.ext(file).to_sym
  types = self.class.support_types
  types&.any? { |type| type.casecmp?(ext) } || false
end

Private Instance Methods

extract_value(read_data, layer, value_name) click to toggle source
# File lib/rggen/core/input_base/loader.rb, line 63
def extract_value(read_data, layer, value_name)
  value =
    @extractors
      .select { |extractor| extractor.target_value?(layer, value_name) }
      .map { |extractor| extractor.extract(read_data) }
      .compact.last
  value && [value_name, value]
end
filter_layer_data(layer_data, layer) click to toggle source
# File lib/rggen/core/input_base/loader.rb, line 72
def filter_layer_data(layer_data, layer)
  layer_data.slice(*valid_values(layer))
end
format(read_data, input_data, layer, file) click to toggle source
# File lib/rggen/core/input_base/loader.rb, line 35
def format(read_data, input_data, layer, file)
  layer_data =
    format_layer_data(read_data, layer, file) ||
    format_layer_data_by_extractors(read_data, layer)
  layer_data &&
    input_data.values(filter_layer_data(layer_data, layer), file)
  format_sub_layer(read_data, input_data, layer, file)
end
format_layer_data(_read_data, _layer, _file) click to toggle source
# File lib/rggen/core/input_base/loader.rb, line 52
def format_layer_data(_read_data, _layer, _file)
end
format_layer_data_by_extractors(read_data, layer) click to toggle source
# File lib/rggen/core/input_base/loader.rb, line 55
def format_layer_data_by_extractors(read_data, layer)
  layer_data =
    valid_values(layer)
      .map { |value_name| extract_value(read_data, layer, value_name) }
      .compact.to_h
  layer_data.empty? ? nil : layer_data
end
format_sub_layer(read_data, input_data, layer, file) click to toggle source
# File lib/rggen/core/input_base/loader.rb, line 44
def format_sub_layer(read_data, input_data, layer, file)
  format_sub_layer_data(read_data, layer, file)
    &.flat_map { |sub_layer, data_array| [sub_layer].product(data_array) }
    &.each do |(sub_layer, data)|
      format(data, input_data.child(sub_layer), sub_layer, file)
    end
end
format_sub_layer_data(_read_data, _layer, _file) click to toggle source
# File lib/rggen/core/input_base/loader.rb, line 76
def format_sub_layer_data(_read_data, _layer, _file)
end
valid_values(layer) click to toggle source
# File lib/rggen/core/input_base/loader.rb, line 79
def valid_values(layer)
  list = @valid_value_lists[layer]
  ignore_values = @ignore_values[layer]
  ignore_values && (list - ignore_values) || list
end