chefspec 0.7.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -10,10 +10,10 @@ module ChefSpec
10
10
  # The main entry point for running recipes within RSpec.
11
11
  class ChefRunner
12
12
 
13
- @step_into = []
14
13
  @resources = []
15
14
 
16
15
  attr_accessor :resources
16
+ attr_reader :step_into
17
17
  attr_reader :run_context
18
18
  attr_reader :node
19
19
 
@@ -24,16 +24,17 @@ module ChefSpec
24
24
  # @option options [Symbol] :log_level The log level to use (default is :warn)
25
25
  # @yield [node] Configuration block for Chef::Node
26
26
  def initialize(options={})
27
- defaults = {:cookbook_path => default_cookbook_path, :log_level => :warn, :dry_run => false}
27
+ defaults = {:cookbook_path => default_cookbook_path, :log_level => :warn, :dry_run => false, :step_into => []}
28
28
  options = {:cookbook_path => options} unless options.respond_to?(:to_hash) # backwards-compatibility
29
29
  options = defaults.merge(options)
30
30
 
31
31
  the_runner = self
32
32
  @resources = []
33
+ @step_into = options[:step_into]
33
34
  @do_dry_run = options[:dry_run]
34
35
 
35
36
  Chef::Resource.class_eval do
36
- alias :old_run_action :run_action
37
+ alias :old_run_action :run_action unless method_defined?(:old_run_action)
37
38
 
38
39
  if self.class.methods.include?(:class_variable_set)
39
40
  self.class_variable_set :@@runner, the_runner
@@ -41,13 +42,27 @@ module ChefSpec
41
42
  @@runner = the_runner
42
43
  end
43
44
 
44
- def run_action(action)
45
- Chef::Log.info("Processing #{self} action #{action} (#{defined_at})") if self.respond_to? :defined_at
46
- if self.class.methods.include?(:class_variable_get)
47
- self.class.class_variable_get(:@@runner).resources << self
45
+ def run_action(*args)
46
+ action = args.first
47
+ runner = if self.class.methods.include?(:class_variable_get)
48
+ self.class.class_variable_get(:@@runner)
48
49
  else
49
- @@runner.resources << self
50
+ @@runner
51
+ end
52
+
53
+ if runner.step_into.include?(self.resource_name.to_s)
54
+ # Ignore not_if / only_if guards
55
+ if self.only_if.is_a?(Array) # 0.10.x
56
+ self.instance_eval { @not_if = []; @only_if = [] }
57
+ else # 0.9.x
58
+ self.only_if { true }
59
+ self.not_if { false }
60
+ end
61
+ self.old_run_action(action)
50
62
  end
63
+
64
+ Chef::Log.info("Processing #{self} action #{action} (#{defined_at})") if self.respond_to? :defined_at
65
+ runner.resources << self
51
66
  end
52
67
  end
53
68
 
@@ -60,6 +75,7 @@ module ChefSpec
60
75
  Chef::Log.level(options[:log_level])
61
76
  @client = Chef::Client.new
62
77
  fake_ohai(@client.ohai)
78
+ @client.load_node if @client.respond_to?(:load_node) # chef >= 10.14.0
63
79
  @node = @client.build_node
64
80
  if block_given?
65
81
  yield @node
@@ -170,7 +186,7 @@ module ChefSpec
170
186
  #
171
187
  # @return [String] The path to the cookbooks directory
172
188
  def default_cookbook_path
173
- Pathname.new(File.join(caller(2).first.split(':').slice(0..-3).join(':'), '..', '..', '..')).cleanpath
189
+ Pathname.new(File.join(caller(2).first.split(':').slice(0..-3).join(':'), '..', '..', '..')).cleanpath.to_s
174
190
  end
175
191
 
176
192
  # Find the resource with the declared type and name
@@ -41,13 +41,15 @@ def render(template, node)
41
41
  # Duplicates functionality in the Chef Template provider
42
42
  context = {}; context.merge!(template.variables)
43
43
  context[:node] = node
44
- Erubis::Eruby.new(IO.read(template_path(template))).evaluate(context)
44
+ Erubis::Eruby.new(IO.read(template_path(template, node))).evaluate(context)
45
45
  end
46
46
 
47
47
  # Given a template, return the path on disk.
48
48
  #
49
49
  # @param [Chef::Resource::Template] template The template
50
50
  # @return [String] The path on disk
51
- def template_path(template)
52
- File.join("cookbooks/#{template.cookbook || template.cookbook_name}/templates/default", template.source)
51
+ def template_path(template, node)
52
+ cookbook_name = template.cookbook || template.cookbook_name
53
+ cookbook = node.cookbook_collection[cookbook_name]
54
+ cookbook.preferred_filename_on_disk_location(node, :templates, template.source, template.path)
53
55
  end
@@ -11,9 +11,10 @@ class Chef
11
11
  # @param [String] filename File to load as a LWRP
12
12
  # @param [Chef::RunContext] run_context Context of a Chef Run
13
13
  # @return [Chef::Provider] the created provider
14
- def build_from_file(cookbook_name, filename, run_context)
14
+ def build_from_file(*args)
15
+ cookbook_name, filename = args[0,2]
15
16
  remove_existing_lwrp(convert_to_class_name(filename_to_qualified_string(cookbook_name, filename)))
16
- old_build_from_file(cookbook_name, filename, run_context)
17
+ old_build_from_file(*args)
17
18
  end
18
19
 
19
20
  # Remove any existing Chef provider or resource with the specified name.
@@ -1,4 +1,4 @@
1
1
  module ChefSpec
2
2
  # The gem version
3
- VERSION = '0.7.0'
3
+ VERSION = '0.8.0'
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chefspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-27 00:00:00.000000000 Z
12
+ date: 2012-09-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: chef
@@ -112,7 +112,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
112
112
  version: '0'
113
113
  segments:
114
114
  - 0
115
- hash: -516424648685498603
115
+ hash: -1887236234485155709
116
116
  required_rubygems_version: !ruby/object:Gem::Requirement
117
117
  none: false
118
118
  requirements:
@@ -121,12 +121,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
121
121
  version: '0'
122
122
  segments:
123
123
  - 0
124
- hash: -516424648685498603
124
+ hash: -1887236234485155709
125
125
  requirements: []
126
126
  rubyforge_project:
127
127
  rubygems_version: 1.8.19
128
128
  signing_key:
129
129
  specification_version: 3
130
- summary: chefspec-0.7.0
130
+ summary: chefspec-0.8.0
131
131
  test_files: []
132
132
  has_rdoc: