halite 1.0.7 → 1.0.8
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 +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +35 -0
- data/lib/halite/gem.rb +2 -0
- data/lib/halite/spec_helper.rb +19 -13
- data/lib/halite/spec_helper/patcher.rb +2 -0
- data/lib/halite/version.rb +1 -1
- data/spec/spec_helper_spec.rb +35 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f892bb4f8c0e111fef64f6116f3e2568a52ca35a
|
4
|
+
data.tar.gz: 3b71aeff4cefc32a256ad6f3b34c1b9b6cae538f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5e09f81f9f0df32a793d2bd8efd63d99a54cf24a907f14ff35635b6d771f7631539434de8ca0a23e24817690b9e4f7b2b298010f2f306165ed9b9af8b30e02ca
|
7
|
+
data.tar.gz: 87a8a9d98dff4d5864b19aab65e4f72ee10fde8240755e1f1fb0a0823e832d1f4afb7edaf5d61bbe701c4daf0d91ca4fbca5774baedc935cbf5e3f70be6061dc
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -160,6 +160,41 @@ These helper resources and providers are only available within the scope of
|
|
160
160
|
recipes defined on that example group or groups nested inside it. Helper
|
161
161
|
resources are automatically `step_into`'d.
|
162
162
|
|
163
|
+
## Using a Pre-release Version of a Cookbook
|
164
|
+
|
165
|
+
When a Halite-based cookbook is released, a converted copy is generally uploaded
|
166
|
+
to [the Supermarket](https://supermarket.chef.io/). To use unreleased versions,
|
167
|
+
you need to pull in the code from git via bundler and then tell the Berkshelf
|
168
|
+
extension to convert it for you.
|
169
|
+
|
170
|
+
To grab the pre-release gem, add a line like the following to your Gemfile:
|
171
|
+
|
172
|
+
```ruby
|
173
|
+
gem 'poise-application', github: 'poise/application'
|
174
|
+
```
|
175
|
+
|
176
|
+
You will need one `gem` line for each Halite-based cookbook you want to use,
|
177
|
+
possibly including dependencies if you want to use pre-release versions of
|
178
|
+
those as well.
|
179
|
+
|
180
|
+
Next you need to use Berkshelf to convert the gem to its cookbook form:
|
181
|
+
|
182
|
+
```ruby
|
183
|
+
source 'https://supermarket.chef.io/'
|
184
|
+
extension 'halite'
|
185
|
+
cookbook 'application', gem: 'poise-application'
|
186
|
+
```
|
187
|
+
|
188
|
+
Again you will need one `cookbook` line per Halite based cookbook you want to
|
189
|
+
use. Also make sure to check the correct names for the gem and cookbook, they
|
190
|
+
may not be the same though for other Poise cookbooks they generally follow the
|
191
|
+
same pattern.
|
192
|
+
|
193
|
+
If you are using something that integrates with Berkshelf like Test-Kitchen or
|
194
|
+
ChefSpec, this is all you need to do. You could use `berks upload` to push a
|
195
|
+
converted copy of all cookbooks to a Chef Server, though running pre-release
|
196
|
+
code in production should be done with great care.
|
197
|
+
|
163
198
|
## License
|
164
199
|
|
165
200
|
Copyright 2015, Noah Kantrowitz
|
data/lib/halite/gem.rb
CHANGED
@@ -35,6 +35,8 @@ module Halite
|
|
35
35
|
def initialize(name, version=nil)
|
36
36
|
# Allow passing a Dependency by just grabbing its spec.
|
37
37
|
name = dependency_to_spec(name) if name.is_a?(::Gem::Dependency)
|
38
|
+
# Stubs don't load enough data for us, grab the real spec. RIP IOPS.
|
39
|
+
name = name.to_spec if name.is_a?(::Gem::StubSpecification)
|
38
40
|
if name.is_a?(::Gem::Specification)
|
39
41
|
raise Error.new("Cannot pass version when using an explicit specficiation") if version
|
40
42
|
@spec = name
|
data/lib/halite/spec_helper.rb
CHANGED
@@ -261,8 +261,8 @@ module Halite
|
|
261
261
|
def resource(name, auto: true, parent: Chef::Resource, step_into: true, unwrap_notifying_block: true, defined_at: caller[0], &block)
|
262
262
|
parent = resources[parent] if parent.is_a?(Symbol)
|
263
263
|
raise Halite::Error.new("Parent class for #{name} is not a class: #{parent.inspect}") unless parent.is_a?(Class)
|
264
|
-
# Pull out the example
|
265
|
-
|
264
|
+
# Pull out the example group for use in the class.
|
265
|
+
example_group = self
|
266
266
|
# Create the resource class.
|
267
267
|
resource_class = Class.new(parent) do
|
268
268
|
# Make the anonymous class pretend to have a name.
|
@@ -276,23 +276,26 @@ module Halite
|
|
276
276
|
end
|
277
277
|
|
278
278
|
# Create magic delegators for various metadata.
|
279
|
-
|
280
|
-
|
281
|
-
|
279
|
+
{
|
280
|
+
example_group: example_group,
|
281
|
+
described_class: example_group.metadata[:described_class],
|
282
|
+
}.each do |key, value|
|
283
|
+
define_method(key) { value }
|
284
|
+
define_singleton_method(key) { value }
|
282
285
|
end
|
283
286
|
|
284
287
|
# Evaluate the class body.
|
285
288
|
class_exec(&block) if block
|
286
289
|
|
287
|
-
|
288
290
|
# Optional initialization steps. Disable for special unicorn tests.
|
289
291
|
if auto
|
290
292
|
# Fill in a :run action by default.
|
291
293
|
old_init = instance_method(:initialize)
|
292
294
|
define_method(:initialize) do |*args|
|
293
|
-
# Fill in the resource name because I know it
|
294
|
-
@resource_name = name.to_sym
|
295
295
|
old_init.bind(self).call(*args)
|
296
|
+
# Fill in the resource name because I know it, but don't
|
297
|
+
# overwrite because a parent might have done this already.
|
298
|
+
@resource_name = name.to_sym
|
296
299
|
# ChefSpec doesn't seem to work well with action :nothing
|
297
300
|
if Array(@action) == [:nothing]
|
298
301
|
@action = :run
|
@@ -358,8 +361,8 @@ module Halite
|
|
358
361
|
def provider(name, auto: true, rspec: true, parent: Chef::Provider, defined_at: caller[0], &block)
|
359
362
|
parent = providers[parent] if parent.is_a?(Symbol)
|
360
363
|
raise Halite::Error.new("Parent class for #{name} is not a class: #{options[:parent].inspect}") unless parent.is_a?(Class)
|
361
|
-
# Pull out the example
|
362
|
-
|
364
|
+
# Pull out the example group for use in the class.
|
365
|
+
example_group = self
|
363
366
|
# Create the provider class.
|
364
367
|
provider_class = Class.new(parent) do
|
365
368
|
# Pull in RSpec expectations.
|
@@ -389,9 +392,12 @@ module Halite
|
|
389
392
|
end
|
390
393
|
|
391
394
|
# Create magic delegators for various metadata.
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
+
{
|
396
|
+
example_group: example_group,
|
397
|
+
described_class: example_group.metadata[:described_class],
|
398
|
+
}.each do |key, value|
|
399
|
+
define_method(key) { value }
|
400
|
+
define_singleton_method(key) { value }
|
395
401
|
end
|
396
402
|
|
397
403
|
# Evaluate the class body.
|
@@ -59,6 +59,8 @@ module Halite
|
|
59
59
|
# @param klass [Class] Newly created class.
|
60
60
|
# @return [void]
|
61
61
|
def self.post_create_cleanup(name, klass)
|
62
|
+
# Remove from DSL.
|
63
|
+
Chef::DSL::Resources.remove_resource_dsl(name) if defined?(Chef::DSL::Resources.remove_resource_dsl)
|
62
64
|
# Remove from DescendantsTracker.
|
63
65
|
Chef::Mixin::DescendantsTracker.direct_descendants(klass.superclass).delete(klass)
|
64
66
|
# Remove from the priority and handler maps.
|
data/lib/halite/version.rb
CHANGED
data/spec/spec_helper_spec.rb
CHANGED
@@ -57,6 +57,7 @@ describe Halite::SpecHelper do
|
|
57
57
|
resource(:halite_test)
|
58
58
|
it { is_expected.to be_a(Class) }
|
59
59
|
it { is_expected.to be < Chef::Resource }
|
60
|
+
its(:resource_name) { is_expected.to eq :halite_test } if defined?(Chef::Resource.resource_name)
|
60
61
|
it { expect(subject.new(nil, nil).resource_name).to eq(:halite_test) }
|
61
62
|
it { expect(subject.new(nil, nil).action).to eq(:run) }
|
62
63
|
it { expect(subject.new(nil, nil).allowed_actions).to eq([:nothing, :run]) }
|
@@ -77,6 +78,8 @@ describe Halite::SpecHelper do
|
|
77
78
|
it { is_expected.to be_a(Class) }
|
78
79
|
it { is_expected.to be < Chef::Resource }
|
79
80
|
it { is_expected.to be < Chef::Resource::File }
|
81
|
+
its(:resource_name) { is_expected.to eq :halite_test } if defined?(Chef::Resource.resource_name)
|
82
|
+
it { expect(subject.new(nil, nil).resource_name).to eq(:halite_test) }
|
80
83
|
end # /context with a parent
|
81
84
|
|
82
85
|
context 'with a helper-defined parent' do
|
@@ -85,6 +88,8 @@ describe Halite::SpecHelper do
|
|
85
88
|
it { is_expected.to be_a(Class) }
|
86
89
|
it { is_expected.to be < Chef::Resource }
|
87
90
|
it { is_expected.to be < Chef::Resource::HaliteParent }
|
91
|
+
its(:resource_name) { is_expected.to eq :halite_test } if defined?(Chef::Resource.resource_name)
|
92
|
+
it { expect(subject.new(nil, nil).resource_name).to eq(:halite_test) }
|
88
93
|
end # /context with a helper-defined parent
|
89
94
|
|
90
95
|
context 'with a helper-defined parent in an enclosing context' do
|
@@ -142,6 +147,21 @@ describe Halite::SpecHelper do
|
|
142
147
|
it { is_expected.to run_halite_test('test') }
|
143
148
|
it { is_expected.to_not run_ruby_block('inner') }
|
144
149
|
end # /context with step_into:false
|
150
|
+
|
151
|
+
describe 'with magic helpers' do
|
152
|
+
resource(:halite_test)
|
153
|
+
|
154
|
+
context 'on the class' do
|
155
|
+
its(:example_group) { is_expected.to be_truthy }
|
156
|
+
its(:described_class) { is_expected.to eq Halite::SpecHelper }
|
157
|
+
end # /context on the class
|
158
|
+
|
159
|
+
context 'on the instance' do
|
160
|
+
subject { super().new(nil, nil) }
|
161
|
+
its(:example_group) { is_expected.to be_truthy }
|
162
|
+
its(:described_class) { is_expected.to eq Halite::SpecHelper }
|
163
|
+
end # /context on the instance
|
164
|
+
end # /describe with magic helpers
|
145
165
|
end # /describe #resource
|
146
166
|
|
147
167
|
describe '#provider' do
|
@@ -153,6 +173,21 @@ describe Halite::SpecHelper do
|
|
153
173
|
it { is_expected.to be < Chef::Provider }
|
154
174
|
its(:instance_methods) { are_expected.to include(:action_run) }
|
155
175
|
end # /context with defaults
|
176
|
+
|
177
|
+
context 'with magic helpers' do
|
178
|
+
provider(:halite_test)
|
179
|
+
|
180
|
+
context 'on the class' do
|
181
|
+
its(:example_group) { is_expected.to be_truthy }
|
182
|
+
its(:described_class) { is_expected.to eq Halite::SpecHelper }
|
183
|
+
end # /context on the class
|
184
|
+
|
185
|
+
context 'on the instance' do
|
186
|
+
subject { super().new(nil, nil) }
|
187
|
+
its(:example_group) { is_expected.to be_truthy }
|
188
|
+
its(:described_class) { is_expected.to eq Halite::SpecHelper }
|
189
|
+
end # /context on the instance
|
190
|
+
end # /describe with magic helpers
|
156
191
|
end # /describe #provider
|
157
192
|
|
158
193
|
describe '#step_into' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: halite
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Noah Kantrowitz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-08-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: chef
|