class Zn::SearchAssembler
Assembles search assembly from config and registered classes
Attributes
assembly[R]
config_root[R]
Public Class Methods
new(assembly)
click to toggle source
# File lib/zn/search_assembler.rb, line 10 def initialize(assembly) raise ArgumentError, 'Assembly is nil' if assembly.nil? @assembly = assembly @repos = {} @associators = {} end
Public Instance Methods
assemble(config_yml)
click to toggle source
# File lib/zn/search_assembler.rb, line 57 def assemble(config_yml) raise ArgumentError, 'Config yml is empty' if config_yml.to_s.empty? config = YAML.load_file(config_yml) @config_root = File.dirname(config_yml) dataset_definitions = config.fetch('datasets') assemble_datasets(dataset_definitions) end
assemble_associator(association_params)
click to toggle source
# File lib/zn/search_assembler.rb, line 38 def assemble_associator(association_params) type = association_params.fetch('type').to_sym klass = @associators.fetch(type) klass.new(assembly.datasets, association_params) end
assemble_datasets(dataset_definitions)
click to toggle source
# File lib/zn/search_assembler.rb, line 44 def assemble_datasets(dataset_definitions) dataset_definitions.each do |dataset_name, dataset_params| repo = assemble_repo(dataset_params.fetch('repo')) dataset = Dataset.new(repo) dataset_params.fetch('associations').each do |associator_name, associator_params| dataset.add_associator(associator_name, assemble_associator(associator_params)) end @assembly.add_dataset(dataset_name, dataset) end end
assemble_repo(repo_params)
click to toggle source
# File lib/zn/search_assembler.rb, line 25 def assemble_repo(repo_params) type = repo_params.fetch('type').to_sym klass = @repos.fetch(type) klass.new(repo_params.merge('dir' => @config_root)) end
register_associator_class(name, associator_class)
click to toggle source
# File lib/zn/search_assembler.rb, line 31 def register_associator_class(name, associator_class) raise ArgumentError, 'Name is empty' if name.to_s.empty? raise ArgumentError, 'Associator class is nil' if associator_class.nil? @associators[name] = associator_class end
register_repo_class(name, repo_class)
click to toggle source
# File lib/zn/search_assembler.rb, line 18 def register_repo_class(name, repo_class) raise ArgumentError, 'Name is empty' if name.to_s.empty? raise ArgumentError, 'Repo class is nil' if repo_class.nil? @repos[name] = repo_class end