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