Class: Chef::Search::Query

Inherits:
Object show all
Defined in:
lib/chef/search/query.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(url = nil) ⇒ Query


33
34
35
# File 'lib/chef/search/query.rb', line 33

def initialize(url=nil)
  @rest = Chef::REST.new(url ||Chef::Config[:search_url])
end

Instance Attribute Details

#restObject

Returns the value of attribute rest


31
32
33
# File 'lib/chef/search/query.rb', line 31

def rest
  @rest
end

Instance Method Details

#list_indexesObject


55
56
57
# File 'lib/chef/search/query.rb', line 55

def list_indexes
  response = @rest.get_rest("search")
end

#search(type, query = "*:*", sort = 'X_CHEF_id_CHEF_X asc', start = 0, rows = 1000, &block) ⇒ Object

Search Solr for objects of a given type, for a given query. If you give it a block, it will handle the paging for you dynamically.

Raises:

  • (ArgumentError)

39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/chef/search/query.rb', line 39

def search(type, query="*:*", sort='X_CHEF_id_CHEF_X asc', start=0, rows=1000, &block)
  raise ArgumentError, "Type must be a string or a symbol!" unless (type.kind_of?(String) || type.kind_of?(Symbol))

  response = @rest.get_rest("search/#{type}?q=#{escape(query)}&sort=#{escape(sort)}&start=#{escape(start)}&rows=#{escape(rows)}")
  if block
    response["rows"].each { |o| block.call(o) unless o.nil?}
    unless (response["start"] + response["rows"].length) >= response["total"]
      nstart = response["start"] + rows
      search(type, query, sort, nstart, rows, &block)
    end
    true
  else
    [ response["rows"], response["start"], response["total"] ]
  end
end