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.



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

def initialize()
  @queries = {}
end

Class Method Details

.sort(queries) ⇒ Object



109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# File 'lib/droonga/searcher.rb', line 109

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



125
126
127
# File 'lib/droonga/searcher.rb', line 125

def validate_dependencies(queries)
  sort(queries)
end

Instance Method Details

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



134
135
136
# File 'lib/droonga/searcher.rb', line 134

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

#tsort_each_child(node, &block) ⇒ Object



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

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

#tsort_each_node(&block) ⇒ Object



138
139
140
# File 'lib/droonga/searcher.rb', line 138

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