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