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.



158
159
160
# File 'lib/droonga/searcher.rb', line 158

def initialize()
  @queries = {}
end

Class Method Details

.sort(queries) ⇒ Object



137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# File 'lib/droonga/searcher.rb', line 137

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



153
154
155
# File 'lib/droonga/searcher.rb', line 153

def validate_dependencies(queries)
  sort(queries)
end

Instance Method Details

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



162
163
164
# File 'lib/droonga/searcher.rb', line 162

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

#tsort_each_child(node, &block) ⇒ Object



170
171
172
173
174
# File 'lib/droonga/searcher.rb', line 170

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

#tsort_each_node(&block) ⇒ Object



166
167
168
# File 'lib/droonga/searcher.rb', line 166

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