class Riddle::Configuration::Parser

Constants

INDEX_CLASSES
SOURCE_CLASSES

Public Class Methods

new(input) click to toggle source
# File lib/riddle/configuration/parser.rb, line 19
def initialize(input)
  @input   = input
end

Public Instance Methods

parse!() click to toggle source
# File lib/riddle/configuration/parser.rb, line 23
def parse!
  set_indexer
  set_searchd
  set_sources
  set_indices

  configuration
end

Private Instance Methods

configuration() click to toggle source
# File lib/riddle/configuration/parser.rb, line 38
def configuration
  @configuration ||= Riddle::Configuration.new
end
each_with_prefix(prefix) { |gsub(/^| ... } click to toggle source
# File lib/riddle/configuration/parser.rb, line 46
def each_with_prefix(prefix)
  inner.keys.select { |key| key[/^#{prefix}\s+/] }.each do |key|
    yield key.gsub(/^#{prefix}\s+/, ''), inner[key]
  end
end
inner() click to toggle source
# File lib/riddle/configuration/parser.rb, line 34
def inner
  @inner ||= InnerParser.new(@input).parse!
end
set_indexer() click to toggle source
# File lib/riddle/configuration/parser.rb, line 52
def set_indexer
  set_settings configuration.indexer, inner['indexer']
end
set_indices() click to toggle source
# File lib/riddle/configuration/parser.rb, line 73
def set_indices
  each_with_prefix 'index' do |name, settings|
    names        = name.split(/\s*:\s*/)
    type         = (settings.delete('type') || ['plain']).first
    index        = INDEX_CLASSES[type].new names.first
    index.parent = names.last if names.length > 1

    (settings.delete('source') || []).each do |source_name|
      index.sources << sources[source_name]
    end

    set_settings index, settings

    configuration.indices << index
  end
end
set_searchd() click to toggle source
# File lib/riddle/configuration/parser.rb, line 56
def set_searchd
  set_settings configuration.searchd, inner['searchd']
end
set_setting(object, key, value) click to toggle source
# File lib/riddle/configuration/parser.rb, line 98
def set_setting(object, key, value)
  if object.send(key).is_a?(Array)
    object.send(key) << value
  else
    object.send "#{key}=", value
  end
end
set_settings(object, hash) click to toggle source
# File lib/riddle/configuration/parser.rb, line 90
def set_settings(object, hash)
  hash.each do |key, values|
    values.each do |value|
      set_setting object, key, value
    end
  end
end
set_sources() click to toggle source
# File lib/riddle/configuration/parser.rb, line 60
def set_sources
  each_with_prefix 'source' do |name, settings|
    names         = name.split(/\s*:\s*/)
    type          = settings.delete('type').first
    source        = SOURCE_CLASSES[type].new names.first, type
    source.parent = names.last if names.length > 1

    set_settings source, settings

    sources[source.name] = source
  end
end
sources() click to toggle source
# File lib/riddle/configuration/parser.rb, line 42
def sources
  @sources ||= {}
end