chef-api 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2eb1855e2b759c9728d8bb855286295c5051174a
4
- data.tar.gz: e04becfd2a2fdbac4bfa2420810f4cedace3c4f4
3
+ metadata.gz: 89bca373e08eb29df75521fe78473fb1a566e9af
4
+ data.tar.gz: 4565d8fa17cfe68bbe4d204045a5f5d114ff5f92
5
5
  SHA512:
6
- metadata.gz: f6bfa54343067d1ebe47610970206ed7c55701e01d942a4774fb1e1645a7d289bfc965975ad2b4d25ba468b5da6091ee8c94b2e21c86a46f88cdae74136cf2ee
7
- data.tar.gz: 5bbfff5db04efb34eb49977bc62e89bdb3c21ba97c58194e5fb3b00aee44b271be2f33ef25919fea8db55376464bc52b39b0888f47745ee0ac6b19b3897538c7
6
+ metadata.gz: ee5206c83877648adfda095c52d688b46fd1e4a46b7745c8e9cfdf3db8e6ed4f014d353fb91e6dc38549671ff5acaa6632ee6da1edabc0b9aba9dfd77db3c0f1
7
+ data.tar.gz: 46561de5a2908f9cd2dbe6781de8c67b9b625153aad5a964b532337ea775efef99408176913e9dd6d31d7440ea7c36a74bef53b725fce019f98b412ba8924078
data/.travis.yml CHANGED
@@ -1,7 +1,7 @@
1
1
  rvm:
2
2
  - 1.9.3
3
3
  - 2.0.0
4
- - 2.1.0
4
+ - 2.1
5
5
 
6
6
  # Don't install local development gems on Travis, use parallel gem downloads
7
7
  bundler_args: --without development --jobs 7
data/CHANGELOG.md CHANGED
@@ -1,6 +1,14 @@
1
1
  ChefAPI Changelog
2
2
  =================
3
3
 
4
+
5
+ v0.3.0 (2014-06-18)
6
+ -------------------
7
+ - Add search functionality
8
+ - Add partial search
9
+ - Update testing harness
10
+
11
+
4
12
  v0.2.1 (2014-04-17)
5
13
  -------------------
6
14
  - Fix a series of typographical errors
data/Gemfile CHANGED
@@ -6,7 +6,7 @@ group :development do
6
6
  end
7
7
 
8
8
  group :test do
9
- gem 'chef-zero', '~> 2.0'
10
- gem 'rake', '~> 10.1'
11
- gem 'rspec', '~> 2.14'
9
+ gem 'chef-zero', '~> 2.0.0'
10
+ gem 'rake', '~> 10.3'
11
+ gem 'rspec', '~> 3.0'
12
12
  end
data/README.md CHANGED
@@ -1,6 +1,12 @@
1
1
  ChefAPI Client
2
2
  ==============
3
- [![Build Status](https://secure.travis-ci.org/sethvargo/chef-api.png?branch=master)](http://travis-ci.org/sethvargo/chef-api)
3
+ [![Gem Version](http://img.shields.io/gem/v/chef-api.svg)][gem]
4
+ [![Build Status](http://img.shields.io/travis/sethvargo/chef-api.svg)][travis]
5
+ [![Gittip](http://img.shields.io/gittip/sethvargo.svg)][gittip]
6
+
7
+ [gem]: https://rubygems.org/gems/chef-api
8
+ [travis]: http://travis-ci.org/sethvargo/chef-api
9
+ [gittip]: https://www.gittip.com/sethvargo
4
10
 
5
11
  **ChefAPI is currently in rapid development!** You should not consider this API stable until the official 1.0.0 release.
6
12
 
@@ -266,6 +272,27 @@ client = Client.from_file('~/.chef/bacon.pem') #=> #<Resource::Client name: "bac
266
272
  ```
267
273
 
268
274
 
275
+ Searching
276
+ ---------
277
+ ChefAPI employs both search and partial search functionality.
278
+
279
+ ```ruby
280
+ # Using regular search
281
+ results = Search.query(:node, '*:*', start: 1)
282
+ results.total #=> 5_000
283
+ results.rows.each do |result|
284
+ puts result
285
+ end
286
+
287
+ # Using partial search
288
+ results = PartialSearch.query(:node, { data: ['fqdn'] }, start: 1)
289
+ results.total #=> 2
290
+ results.rows.each do |result|
291
+ puts result
292
+ end
293
+ ```
294
+
295
+
269
296
  FAQ
270
297
  ---
271
298
  **Q: How is this different than [Ridley](https://github.com/RiotGames/ridley)?**<br>
@@ -37,14 +37,16 @@ module ChefAPI
37
37
  include Logify
38
38
  include ChefAPI::Configurable
39
39
 
40
- proxy :clients, 'Resource::Client'
41
- proxy :cookbooks, 'Resource::Cookbook'
42
- proxy :data_bags, 'Resource::DataBag'
43
- proxy :environments, 'Resource::Environment'
44
- proxy :nodes, 'Resource::Node'
45
- proxy :principals, 'Resource::Principal'
46
- proxy :roles, 'Resource::Role'
47
- proxy :users, 'Resource::User'
40
+ proxy :clients, 'Resource::Client'
41
+ proxy :cookbooks, 'Resource::Cookbook'
42
+ proxy :data_bags, 'Resource::DataBag'
43
+ proxy :environments, 'Resource::Environment'
44
+ proxy :nodes, 'Resource::Node'
45
+ proxy :partial_search, 'Resource::PartialSearch'
46
+ proxy :principals, 'Resource::Principal'
47
+ proxy :roles, 'Resource::Role'
48
+ proxy :search, 'Resource::Search'
49
+ proxy :users, 'Resource::User'
48
50
 
49
51
  #
50
52
  # Create a new ChefAPI Connection with the given options. Any options
@@ -110,12 +112,14 @@ module ChefAPI
110
112
  # @param path (see Connection#request)
111
113
  # @param [String, #read] data
112
114
  # the body to use for the request
115
+ # @param [Hash] params
116
+ # the list of query params
113
117
  #
114
118
  # @raise (see Connection#request)
115
119
  # @return (see Connection#request)
116
120
  #
117
- def post(path, data)
118
- request(:post, path, data)
121
+ def post(path, data, params = {})
122
+ request(:post, path, data, params)
119
123
  end
120
124
 
121
125
  #
@@ -123,12 +127,13 @@ module ChefAPI
123
127
  #
124
128
  # @param path (see Connection#request)
125
129
  # @param data (see Connection#post)
130
+ # @param params (see Connection#post)
126
131
  #
127
132
  # @raise (see Connection#request)
128
133
  # @return (see Connection#request)
129
134
  #
130
- def put(path, data)
131
- request(:put, path, data)
135
+ def put(path, data, params = {})
136
+ request(:put, path, data, params)
132
137
  end
133
138
 
134
139
  #
@@ -136,12 +141,13 @@ module ChefAPI
136
141
  #
137
142
  # @param path (see Connection#request)
138
143
  # @param data (see Connection#post)
144
+ # @param params (see Connection#post)
139
145
  #
140
146
  # @raise (see Connection#request)
141
147
  # @return (see Connection#request)
142
148
  #
143
- def patch(path, data)
144
- request(:patch, path, data)
149
+ def patch(path, data, params = {})
150
+ request(:patch, path, data, params)
145
151
  end
146
152
 
147
153
  #
@@ -172,16 +178,22 @@ module ChefAPI
172
178
  # request against
173
179
  # @param [#read, Hash, nil] data
174
180
  # the data to use (varies based on the +verb+)
181
+ # @param [Hash] params
182
+ # the params to use for :patch, :post, :put
175
183
  #
176
184
  # @return [String, Hash]
177
185
  # the response body
178
186
  #
179
- def request(verb, path, data = {})
187
+ def request(verb, path, data = {}, params = {})
180
188
  log.info "#{verb.to_s.upcase} #{path}..."
181
189
  log.debug "Chef flavor: #{flavor.inspect}"
182
190
 
183
191
  # Build the URI and request object from the given information
184
- uri = build_uri(verb, path, data)
192
+ if [:delete, :get].include?(verb)
193
+ uri = build_uri(verb, path, data)
194
+ else
195
+ uri = build_uri(verb, path, params)
196
+ end
185
197
  request = class_for_request(verb).new(uri.request_uri)
186
198
 
187
199
  # Add request headers
@@ -278,13 +290,11 @@ module ChefAPI
278
290
  log.info "Building URI..."
279
291
 
280
292
  # Add any query string parameters
281
- if [:delete, :get].include?(verb)
282
- if querystring = to_query_string(params)
283
- log.debug "Detected verb deserves a querystring"
284
- log.debug "Building querystring using #{params.inspect}"
285
- log.debug "Compiled querystring is #{querystring.inspect}"
286
- path = [path, querystring].compact.join('?')
287
- end
293
+ if querystring = to_query_string(params)
294
+ log.debug "Detected verb deserves a querystring"
295
+ log.debug "Building querystring using #{params.inspect}"
296
+ log.debug "Compiled querystring is #{querystring.inspect}"
297
+ path = [path, querystring].compact.join('?')
288
298
  end
289
299
 
290
300
  # Parse the URI
@@ -10,8 +10,10 @@ module ChefAPI
10
10
  autoload :Environment, 'chef-api/resources/environment'
11
11
  autoload :Node, 'chef-api/resources/node'
12
12
  autoload :Organization, 'chef-api/resources/organization'
13
+ autoload :PartialSearch, 'chef-api/resources/partial_search'
13
14
  autoload :Principal, 'chef-api/resources/principal'
14
15
  autoload :Role, 'chef-api/resources/role'
16
+ autoload :Search, 'chef-api/resources/search'
15
17
  autoload :User, 'chef-api/resources/user'
16
18
  end
17
19
  end
@@ -31,5 +31,23 @@ module ChefAPI
31
31
  id = attributes.delete(:id) || attributes.delete('id')
32
32
  super({ id: id, data: attributes }, prefix)
33
33
  end
34
+
35
+
36
+ #
37
+ # Override the to_hash method to move data to the upper scope.
38
+ #
39
+ # @see (Resource::Base#to_hash)
40
+ #
41
+ def to_hash
42
+ {}.tap do |hash|
43
+ _attributes.each do |key, value|
44
+ if key == :data
45
+ hash.merge!(value)
46
+ else
47
+ hash[key] = value.respond_to?(:to_hash) ? value.to_hash : value
48
+ end
49
+ end
50
+ end
51
+ end
34
52
  end
35
53
  end
@@ -0,0 +1,44 @@
1
+ module ChefAPI
2
+ class Resource::PartialSearch < Resource::Base
3
+ collection_path '/search/:index'
4
+
5
+ schema do
6
+ attribute :total, type: Integer
7
+ attribute :start, type: Integer
8
+ attribute :rows, type: Array
9
+ end
10
+
11
+ class << self
12
+ #
13
+ # About search : http://docs.opscode.com/essentials_search.html
14
+ #
15
+ # @param [String] index
16
+ # the name of the index to search
17
+ # @param [Hash] keys
18
+ # key paths for the attributes to be returned
19
+ # @param [String] query
20
+ # the query string
21
+ # @param [Hash] options
22
+ # the query string
23
+ #
24
+ # @return [self]
25
+ # the current resource
26
+ #
27
+ def query(index, keys, query = '*:*', options = {})
28
+ return nil if index.nil?
29
+
30
+ params = {}.tap do |o|
31
+ o[:q] = query
32
+ o[:rows] = options[:rows] || 1000
33
+ o[:sort] = options[:sort] || 'X_CHEF_id_CHEF_X'
34
+ o[:start] = options[:start] || 0
35
+ end
36
+
37
+ path = expanded_collection_path(index: index.to_s)
38
+ response = connection.post(path, keys.to_json, params)
39
+ response['rows'].map! { |row| row['data'] }
40
+ from_json(response, index: index.to_s)
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,41 @@
1
+ module ChefAPI
2
+ class Resource::Search < Resource::Base
3
+ collection_path '/search/:index'
4
+
5
+ schema do
6
+ attribute :total, type: Integer
7
+ attribute :start, type: Integer
8
+ attribute :rows, type: Array
9
+ end
10
+
11
+ class << self
12
+ #
13
+ # About search : http://docs.opscode.com/essentials_search.html
14
+ #
15
+ # @param [String] index
16
+ # the name of the index to search
17
+ # @param [String] query
18
+ # the query string
19
+ # @param [Hash] options
20
+ # the query string
21
+ #
22
+ # @return [self]
23
+ # the current resource
24
+ #
25
+ def query(index, query = '*:*', options = {})
26
+ return nil if index.nil?
27
+
28
+ params = {}.tap do |o|
29
+ o[:q] = query
30
+ o[:rows] = options[:rows] || 1000
31
+ o[:sort] = options[:sort] || 'X_CHEF_id_CHEF_X'
32
+ o[:start] = options[:start] || 0
33
+ end
34
+
35
+ path = expanded_collection_path(index: index.to_s)
36
+ response = connection.get(path, params)
37
+ from_json(response, index: index.to_s)
38
+ end
39
+ end
40
+ end
41
+ end
@@ -1,3 +1,3 @@
1
1
  module ChefAPI
2
- VERSION = '0.2.1'
2
+ VERSION = '0.3.0'
3
3
  end
@@ -41,7 +41,7 @@ module ChefAPI
41
41
  let(:client) { described_class.from_file('/path/to/bacon.pem') }
42
42
 
43
43
  before do
44
- File.stub(:read).and_return(private_key)
44
+ allow(File).to receive(:read).and_return(private_key)
45
45
  end
46
46
 
47
47
  it 'loads the client from the server' do
@@ -49,13 +49,13 @@ module ChefAPI
49
49
 
50
50
  expect(client.name).to eq('bacon')
51
51
  expect(client.private_key).to eq(private_key)
52
- expect(client.validator).to be_true
52
+ expect(client.validator).to be_truthy
53
53
  end
54
54
 
55
55
  it 'creates a new instance when the client does not exist' do
56
56
  expect(client.name).to eq('bacon')
57
- expect(client.validator).to be_false
58
- expect(client.new_resource?).to be_true
57
+ expect(client.validator).to be_falsey
58
+ expect(client.new_resource?).to be_truthy
59
59
  end
60
60
  end
61
61
  end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ module ChefAPI
4
+ describe Resource::PartialSearch do
5
+ describe '.query' do
6
+ it 'returns a partial search resource' do
7
+ chef_server.send('create_client', 'bacon')
8
+ results = described_class.query(:client, { name: ['name'] })
9
+ expect(results).to be_a(described_class)
10
+ end
11
+
12
+ it 'returns partial data' do
13
+ chef_server.send('create_node', 'bacon1', { foo: :bar })
14
+ chef_server.send('create_node', 'bacon2', { foo: :baz, bar: :foo })
15
+ keys = { data: ['bar'] }
16
+ results = described_class.query(:node, keys, '*:*', start: 1)
17
+ expect(results.total).to be == 2
18
+ expect(results.rows.size).to be == 1
19
+ expect(results.rows.first).to be == { 'data' => 'foo' }
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ module ChefAPI
4
+ describe Resource::Search do
5
+ describe '.query' do
6
+ it 'returns a search resource' do
7
+ chef_server.send('create_client', 'bacon')
8
+ results = described_class.query(:client)
9
+ expect(results).to be_a(described_class)
10
+ end
11
+
12
+ it 'options are passed to the chef-server' do
13
+ chef_server.send('create_node', 'bacon1', { foo: :bar })
14
+ chef_server.send('create_node', 'bacon2', { foo: :baz })
15
+ results = described_class.query(:node, '*:*', start: 1)
16
+ expect(results.total).to be == 2
17
+ expect(results.rows.size).to be == 1
18
+ end
19
+ end
20
+ end
21
+ end
data/spec/spec_helper.rb CHANGED
@@ -9,7 +9,6 @@ RSpec.configure do |config|
9
9
  Dir[ChefAPI.root.join('spec/support/shared/**/*.rb')].each { |file| require file }
10
10
 
11
11
  # Basic configuraiton
12
- config.treat_symbols_as_metadata_keys_with_true_values = true
13
12
  config.run_all_when_everything_filtered = true
14
13
  config.filter_run(:focus)
15
14
 
@@ -9,11 +9,94 @@ module RSpec
9
9
  end
10
10
 
11
11
  class << self
12
+ #
13
+ # Delegate all methods to the singleton instance.
14
+ #
12
15
  def method_missing(m, *args, &block)
13
16
  instance.send(m, *args, &block)
14
17
  end
18
+
19
+ #
20
+ # RSpec 3 checks +respond_to?+
21
+ #
22
+ def respond_to_missing?(m, include_private = false)
23
+ instance.respond_to?(m, include_private) || super
24
+ end
25
+
26
+ #
27
+ # @macro entity
28
+ # @method create_$1(name, data = {})
29
+ # Create a new $1 on the Chef Server
30
+ #
31
+ # @param [String] name
32
+ # the name of the $1
33
+ # @param [Hash] data
34
+ # the list of data to load
35
+ #
36
+ #
37
+ # @method $1(name)
38
+ # Find a $1 at the given name
39
+ #
40
+ # @param [String] name
41
+ # the name of the $1
42
+ #
43
+ # @return [$2, nil]
44
+ #
45
+ #
46
+ # @method $3
47
+ # The list of $1 on the Chef Server
48
+ #
49
+ # @return [Array<Hash>]
50
+ # all the $1 on the Chef Server
51
+ #
52
+ #
53
+ # @method has_$1?(name)
54
+ # Determine if the Chef Server has the given $1
55
+ #
56
+ # @param [String] name
57
+ # the name of the $1 to find
58
+ #
59
+ # @return [Boolean]
60
+ #
61
+ def entity(method, key)
62
+ class_eval <<-EOH, __FILE__, __LINE__ + 1
63
+ def create_#{method}(name, data = {})
64
+ # Automatically set the "name" if no explicit one was given
65
+ data[:name] ||= name
66
+
67
+ # Convert it to JSON
68
+ data = JSON.fast_generate(data)
69
+
70
+ load_data(name, '#{key}', data)
71
+ end
72
+
73
+ def #{method}(name)
74
+ data = get('#{key}', name)
75
+ JSON.parse(data)
76
+ rescue ChefZero::DataStore::DataNotFoundError
77
+ nil
78
+ end
79
+
80
+ def #{key}
81
+ get('#{key}')
82
+ end
83
+
84
+ def has_#{method}?(name)
85
+ !get('#{key}', name).nil?
86
+ rescue ChefZero::DataStore::DataNotFoundError
87
+ false
88
+ end
89
+ EOH
90
+ end
15
91
  end
16
92
 
93
+ entity :client, :clients
94
+ entity :data_bag, :data
95
+ entity :environment, :environments
96
+ entity :node, :nodes
97
+ entity :role, :roles
98
+ entity :user, :users
99
+
17
100
  require 'singleton'
18
101
  include Singleton
19
102
 
@@ -22,8 +105,16 @@ module RSpec
22
105
  #
23
106
  def initialize
24
107
  @server = ChefZero::Server.new({
108
+ # This uses a random port
25
109
  port: port,
110
+
111
+ # Shut up
26
112
  log_level: :fatal,
113
+
114
+ # Disable the "old" way - this is actually +multi_tenant: true+
115
+ single_org: false,
116
+
117
+ # Don't generate real keys for faster test
27
118
  generate_real_keys: false,
28
119
  })
29
120
 
@@ -55,38 +146,29 @@ module RSpec
55
146
  end
56
147
 
57
148
  #
149
+ # Get the path to an item in the data store.
58
150
  #
59
- #
60
- def load_data(key, id, data = {})
61
- @server.load_data({ key.to_s => { id => JSON.fast_generate(data) } })
151
+ def get(*args)
152
+ if args.size == 1
153
+ @server.data_store.list(args)
154
+ else
155
+ @server.data_store.get(args)
156
+ end
62
157
  end
63
158
 
64
159
  #
160
+ # Shortcut method for loading data into Chef Zero.
65
161
  #
162
+ # @param [String] name
163
+ # the name or id of the item to load
164
+ # @param [String, Symbol] key
165
+ # the key to load
166
+ # @param [Hash] data
167
+ # the data for the object, which will be converted to JSON and uploaded
168
+ # to the server
66
169
  #
67
- [
68
- ['clients', 'client'],
69
- ['cookbooks', 'cookbook'],
70
- ['environments', 'environment'],
71
- ['nodes', 'node'],
72
- ['roles', 'role'],
73
- ['users', 'user'],
74
- ].each do |plural, singular|
75
- define_method(plural) do
76
- @server.data_store.list([plural])
77
- end
78
-
79
- define_method(singular) do |id|
80
- JSON.parse(@server.data_store.get([plural, id]))
81
- end
82
-
83
- define_method("create_#{singular}") do |id, data = {}|
84
- load_data(plural, id, data)
85
- end
86
-
87
- define_method("has_#{singular}?") do |id|
88
- send(plural).include?(id)
89
- end
170
+ def load_data(name, key, data = {})
171
+ @server.load_data({ key => { name => data } })
90
172
  end
91
173
 
92
174
  private
@@ -40,12 +40,12 @@ shared_examples_for 'a Chef API resource' do |type, options = {}|
40
40
 
41
41
  describe '.exists?' do
42
42
  it 'returns false when the resource does not exist' do
43
- expect(described_class.exists?(resource_id)).to be_false
43
+ expect(described_class.exists?(resource_id)).to be_falsey
44
44
  end
45
45
 
46
46
  it 'returns true when the resource exists' do
47
47
  chef_server.send("create_#{type}", resource_id)
48
- expect(described_class.exists?(resource_id)).to be_true
48
+ expect(described_class.exists?(resource_id)).to be_truthy
49
49
  end
50
50
  end
51
51
 
@@ -36,8 +36,8 @@ module ChefAPI
36
36
 
37
37
  describe '.build' do
38
38
  it 'creates a new instance' do
39
- described_class.stub(:new)
40
- described_class.stub(:schema).and_return(double(attributes: {}))
39
+ allow(described_class).to receive(:new)
40
+ allow(described_class).to receive(:schema).and_return(double(attributes: {}))
41
41
 
42
42
  expect(described_class).to receive(:new).with({foo: 'bar'}, {})
43
43
  described_class.build(foo: 'bar')
@@ -18,13 +18,15 @@ module ChefAPI
18
18
  end
19
19
  end
20
20
 
21
- it_behaves_like 'a proxy for', :clients, 'Resource::Client'
22
- it_behaves_like 'a proxy for', :data_bags, 'Resource::DataBag'
23
- it_behaves_like 'a proxy for', :environments, 'Resource::Environment'
24
- it_behaves_like 'a proxy for', :nodes, 'Resource::Node'
25
- it_behaves_like 'a proxy for', :principals, 'Resource::Principal'
26
- it_behaves_like 'a proxy for', :roles, 'Resource::Role'
27
- it_behaves_like 'a proxy for', :users, 'Resource::User'
21
+ it_behaves_like 'a proxy for', :clients, 'Resource::Client'
22
+ it_behaves_like 'a proxy for', :data_bags, 'Resource::DataBag'
23
+ it_behaves_like 'a proxy for', :environments, 'Resource::Environment'
24
+ it_behaves_like 'a proxy for', :nodes, 'Resource::Node'
25
+ it_behaves_like 'a proxy for', :partial_search, 'Resource::PartialSearch'
26
+ it_behaves_like 'a proxy for', :principals, 'Resource::Principal'
27
+ it_behaves_like 'a proxy for', :roles, 'Resource::Role'
28
+ it_behaves_like 'a proxy for', :search, 'Resource::Search'
29
+ it_behaves_like 'a proxy for', :users, 'Resource::User'
28
30
 
29
31
  context '#initialize' do
30
32
  context 'when options are given' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chef-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Seth Vargo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-17 00:00:00.000000000 Z
11
+ date: 2014-06-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: logify
@@ -71,8 +71,10 @@ files:
71
71
  - lib/chef-api/resources/environment.rb
72
72
  - lib/chef-api/resources/node.rb
73
73
  - lib/chef-api/resources/organization.rb
74
+ - lib/chef-api/resources/partial_search.rb
74
75
  - lib/chef-api/resources/principal.rb
75
76
  - lib/chef-api/resources/role.rb
77
+ - lib/chef-api/resources/search.rb
76
78
  - lib/chef-api/resources/user.rb
77
79
  - lib/chef-api/schema.rb
78
80
  - lib/chef-api/util.rb
@@ -84,7 +86,9 @@ files:
84
86
  - spec/integration/resources/client_spec.rb
85
87
  - spec/integration/resources/environment_spec.rb
86
88
  - spec/integration/resources/node_spec.rb
89
+ - spec/integration/resources/partial_search_spec.rb
87
90
  - spec/integration/resources/role_spec.rb
91
+ - spec/integration/resources/search_spec.rb
88
92
  - spec/integration/resources/user_spec.rb
89
93
  - spec/spec_helper.rb
90
94
  - spec/support/chef_server.rb
@@ -142,7 +146,9 @@ test_files:
142
146
  - spec/integration/resources/client_spec.rb
143
147
  - spec/integration/resources/environment_spec.rb
144
148
  - spec/integration/resources/node_spec.rb
149
+ - spec/integration/resources/partial_search_spec.rb
145
150
  - spec/integration/resources/role_spec.rb
151
+ - spec/integration/resources/search_spec.rb
146
152
  - spec/integration/resources/user_spec.rb
147
153
  - spec/spec_helper.rb
148
154
  - spec/support/chef_server.rb