Class: Zn::SearchAssembler

Inherits:
Object
  • Object
show all
Defined in:
lib/zn/search_assembler.rb

Overview

Assembles search assembly from config and registered classes

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(assembly) ⇒ SearchAssembler

Returns a new instance of SearchAssembler.

Raises:

  • (ArgumentError)


10
11
12
13
14
15
16
# File 'lib/zn/search_assembler.rb', line 10

def initialize(assembly)
  raise ArgumentError, 'Assembly is nil' if assembly.nil?

  @assembly = assembly
  @repos = {}
  @associators = {}
end

Instance Attribute Details

#assemblyObject (readonly)

Returns the value of attribute assembly.



8
9
10
# File 'lib/zn/search_assembler.rb', line 8

def assembly
  @assembly
end

#config_rootObject (readonly)

Returns the value of attribute config_root.



8
9
10
# File 'lib/zn/search_assembler.rb', line 8

def config_root
  @config_root
end

Instance Method Details

#assemble(config_yml) ⇒ Object

Raises:

  • (ArgumentError)


57
58
59
60
61
62
63
64
# 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) ⇒ Object



38
39
40
41
42
# 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) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
# 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) ⇒ Object



25
26
27
28
29
# 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) ⇒ Object

Raises:

  • (ArgumentError)


31
32
33
34
35
36
# 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) ⇒ Object

Raises:

  • (ArgumentError)


18
19
20
21
22
23
# 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