Module: Chef::Knife::PartialSearch

Included in:
Search, Ssh, Status
Defined in:
lib/chef/knife/partial_search/partial_search.rb

Instance Method Summary collapse

Instance Method Details

#define_partial_search(keys) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/chef/knife/partial_search/partial_search.rb', line 4

def define_partial_search(keys)
  Chef::Search::Query.class_eval do

    @@keys = keys

    alias_method :old_search, :search unless method_defined? :old_search

    def search(type, query="*:*", sort='X_CHEF_id_CHEF_X asc', start=0, rows=1000, &block)
      q = Chef::PartialSearch.new
      args = Hash.new
      args[:keys] = @@keys
      args[:sort] = sort
      args[:start] = start
      args[:rows] = rows
      if block_given?
        q.search(type, query, args) do |node_hash|
          n = ::Knife::PartialSearch::FakeNode.new do |h,k|
            h[k] = node_hash[k]
          end
          @@keys.each do |k,v| n[k] end

          block.call(n)
        end
      else
        res = q.search(type, query, args)
        [res.first]
      end
    end
  end
end