Class: Droonga::Searcher::QuerySorter

Inherits:
Object
  • Object
show all
Includes:
TSort
Defined in:
lib/droonga/searcher.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeQuerySorter

Returns a new instance of QuerySorter.



136
137
138
# File 'lib/droonga/searcher.rb', line 136

def initialize()
  @queries = {}
end

Class Method Details

.sort(queries) ⇒ Object



115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
# File 'lib/droonga/searcher.rb', line 115

def sort(queries)
  query_sorter = new
  queries.each do |name, query|
    source = query["source"]
    raise MissingSourceParameter.new(name, queries) unless source
    raise CyclicSource.new(queries) if name == source
    query_sorter.add(name, [source])
  end
  begin
    sorted_queries = query_sorter.tsort
  rescue TSort::Cyclic
    raise CyclicSource.new(queries)
  end
  sorted_queries
end

.validate_dependencies(queries) ⇒ Object



131
132
133
# File 'lib/droonga/searcher.rb', line 131

def validate_dependencies(queries)
  sort(queries)
end

Instance Method Details

#add(name, sources = []) ⇒ Object



140
141
142
# File 'lib/droonga/searcher.rb', line 140

def add(name, sources=[])
  @queries[name] = sources
end

#tsort_each_child(node, &block) ⇒ Object



148
149
150
151
152
# File 'lib/droonga/searcher.rb', line 148

def tsort_each_child(node, &block)
  if @queries[node]
    @queries[node].each(&block)
  end
end

#tsort_each_node(&block) ⇒ Object



144
145
146
# File 'lib/droonga/searcher.rb', line 144

def tsort_each_node(&block)
  @queries.each_key(&block)
end