chefspec 0.9.0 → 1.0.0.rc1

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.
data/lib/chefspec.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'chef'
2
2
  require 'chefspec/chef_runner'
3
3
  require 'chefspec/version'
4
+
4
5
  if defined?(RSpec)
5
6
  require 'chefspec/matchers/cron'
6
7
  require 'chefspec/matchers/execute'
@@ -8,14 +9,19 @@ if defined?(RSpec)
8
9
  require 'chefspec/matchers/link'
9
10
  require 'chefspec/matchers/log'
10
11
  require 'chefspec/matchers/package'
12
+ require 'chefspec/matchers/ruby_block'
11
13
  require 'chefspec/matchers/service'
12
14
  require 'chefspec/matchers/shared'
13
15
  require 'chefspec/matchers/notifications'
14
16
  require 'chefspec/matchers/file_content'
15
17
  require 'chefspec/matchers/user'
18
+ require 'chefspec/matchers/group'
16
19
  require 'chefspec/matchers/env'
17
20
  require 'chefspec/matchers/include_recipe'
21
+ require 'chefspec/matchers/script'
18
22
  end
23
+
19
24
  require 'chefspec/minitest'
20
25
  require 'chefspec/monkey_patches/hash'
26
+ require 'chefspec/monkey_patches/lwrp_base'
21
27
  require 'chefspec/monkey_patches/provider'
@@ -1,6 +1,8 @@
1
1
  require 'chef'
2
2
  require 'chef/client'
3
3
  require 'chef/cookbook_loader'
4
+ require 'fauxhai'
5
+
4
6
  require 'chefspec/matchers/shared'
5
7
 
6
8
  # ChefSpec allows you to write rspec examples for Chef recipes to gain faster feedback without the need to converge a
@@ -22,16 +24,18 @@ module ChefSpec
22
24
  # @param [Hash] options The options for the new runner
23
25
  # @option options [String] :cookbook_path The path to the chef cookbook(s) to be tested.
24
26
  # @option options [Symbol] :log_level The log level to use (default is :warn)
27
+ # @option options [String] :platform The platform to load Ohai attributes from (must be present in fauxhai)
28
+ # @option options [String] :version The version of the platform to load Ohai attributes from (must be present in fauxhai)
25
29
  # @yield [node] Configuration block for Chef::Node
26
30
  def initialize(options={})
27
31
  defaults = {:cookbook_path => default_cookbook_path, :log_level => :warn, :dry_run => false, :step_into => []}
28
32
  options = {:cookbook_path => options} unless options.respond_to?(:to_hash) # backwards-compatibility
29
- options = defaults.merge(options)
33
+ @options = defaults.merge(options)
30
34
 
31
35
  the_runner = self
32
36
  @resources = []
33
- @step_into = options[:step_into]
34
- @do_dry_run = options[:dry_run]
37
+ @step_into = @options[:step_into]
38
+ @do_dry_run = @options[:dry_run]
35
39
 
36
40
  Chef::Resource.class_eval do
37
41
  alias :old_run_action :run_action unless method_defined?(:old_run_action)
@@ -69,10 +73,10 @@ module ChefSpec
69
73
  Chef::Config[:solo] = true
70
74
  Chef::Config[:cache_type] = "Memory"
71
75
  Chef::Cookbook::FileVendor.on_create { |manifest| Chef::Cookbook::FileSystemFileVendor.new(manifest) }
72
- Chef::Config[:cookbook_path] = options[:cookbook_path]
76
+ Chef::Config[:cookbook_path] = @options[:cookbook_path]
73
77
  Chef::Config[:client_key] = nil
74
78
  Chef::Log.verbose = true if Chef::Log.respond_to?(:verbose)
75
- Chef::Log.level(options[:log_level])
79
+ Chef::Log.level(@options[:log_level])
76
80
  @client = Chef::Client.new
77
81
  fake_ohai(@client.ohai)
78
82
  @client.load_node if @client.respond_to?(:load_node) # chef >= 10.14.0
@@ -136,13 +140,13 @@ module ChefSpec
136
140
  # does conditional execution based on these values or additional attributes you can set these via
137
141
  # node.automatic_attrs.
138
142
  #
143
+ # This method now relies on fauxhai to set node attributes.
144
+ #
139
145
  # @param [Ohai::System] ohai The ohai instance to set fake attributes on
140
146
  def fake_ohai(ohai)
141
- {:os => 'chefspec', :os_version => ChefSpec::VERSION, :fqdn => 'chefspec.local', :domain => 'local',
142
- :ipaddress => '127.0.0.1', :hostname => 'chefspec', :languages => Mash.new({"ruby" => "/usr/somewhere"}),
143
- :kernel => Mash.new({:machine => 'i386'})}.each_pair do |attribute,value|
144
- ohai[attribute] = value
145
- end
147
+ ::Fauxhai::Mocker.new(:platform => @options[:platform], :version => @options[:version]).data.each_pair do |attribute, value|
148
+ ohai[attribute] = value
149
+ end
146
150
  end
147
151
 
148
152
  # Infer the default cookbook path from the location of the calling spec.
@@ -160,7 +164,6 @@ module ChefSpec
160
164
  def find_resource(type, name)
161
165
  resources.find{|resource| resource_type(resource) == type and resource.name == name}
162
166
  end
163
-
164
167
  end
165
168
 
166
169
  end
@@ -4,10 +4,30 @@ module ChefSpec
4
4
  module Matchers
5
5
  RSpec::Matchers.define :execute_command do |command|
6
6
  match do |chef_run|
7
- chef_run.resources.any? do |resource|
8
- resource_type(resource) == 'execute' and resource.command == command
7
+ if @attributes
8
+ chef_run.resources.any? do |resource|
9
+ expected_resource?(resource,command) &&
10
+ expected_attributes?(resource)
11
+ end
12
+ else
13
+ chef_run.resources.any? do |resource|
14
+ expected_resource?(resource,command)
15
+ end
9
16
  end
10
17
  end
18
+
19
+ chain :with do |attributes|
20
+ @attributes = attributes
21
+ end
22
+
23
+ def expected_resource?(resource,command)
24
+ resource_type(resource) == 'execute' &&
25
+ resource.command == command
26
+ end
27
+
28
+ def expected_attributes?(resource)
29
+ @attributes.all? { |k,v| resource.send(k) == v }
30
+ end
11
31
  end
12
32
  end
13
33
  end
@@ -4,12 +4,81 @@ module ChefSpec
4
4
  module Matchers
5
5
 
6
6
  define_resource_matchers([:create, :delete], [:file, :directory, :cookbook_file], :path)
7
- define_resource_matchers([:create], [:remote_file], :path)
8
7
 
9
8
  RSpec::Matchers.define :be_owned_by do |user, group|
10
9
  match do |file|
11
10
  file.nil? ? false : file.owner == user and file.group == group
12
11
  end
13
12
  end
13
+
14
+ RSpec::Matchers.define :create_remote_file do |path|
15
+ match do |chef_run|
16
+ if @attributes
17
+ chef_run.resources.any? do |resource|
18
+ expected_remote_file?(resource,path) &&
19
+ expected_attributes?(resource)
20
+ end
21
+ else
22
+ chef_run.resources.any? do |resource|
23
+ expected_remote_file?(resource,path)
24
+ end
25
+ end
26
+ end
27
+
28
+ chain :with do |attributes|
29
+ @attributes = attributes
30
+ end
31
+
32
+ def expected_remote_file?(resource,path)
33
+ # The resource action *might* be an array!
34
+ # (see https://tickets.opscode.com/browse/CHEF-2094)
35
+ action = resource.action.is_a?(Array) ? resource.action.first :
36
+ resource.action
37
+ resource_type(resource) == 'remote_file' &&
38
+ resource.path == path &&
39
+ action.to_sym == :create
40
+ end
41
+
42
+ def expected_attributes?(resource)
43
+ @attributes.all? do |attribute,expected|
44
+ actual = resource.send(attribute)
45
+ attribute.to_sym == :source ? equal_source?(actual, expected) :
46
+ actual == expected
47
+ end
48
+ end
49
+
50
+ # Compare two remote_file source attributes for equality.
51
+ #
52
+ # @param actual [String, Array<String>] The actual source.
53
+ # @param expected [String, Array<String>] The expected source.
54
+ # @return [Boolean] true if they are equal or false if not.
55
+ def equal_source?(actual, expected)
56
+ # NOTE: Chef stores the source attribute internally as an array since
57
+ # version 11 in order to support mirrors.
58
+ # (see http://docs.opscode.com/breaking_changes_chef_11.html#remote-file-mirror-support-may-break-subclasses)
59
+
60
+ # Handle wrong formated expectation for Chef versions >= 11.
61
+ if actual.is_a?(Array) && expected.is_a?(String)
62
+ actual == [expected]
63
+
64
+ # Handle wrong formated expectation for Chef versions < 11.
65
+ elsif actual.is_a?(String) && expected.is_a?(Array)
66
+ [actual] == expected
67
+
68
+ # Else assume the actual matches the expected type (String or Array).
69
+ else
70
+ actual == expected
71
+ end
72
+ end
73
+
74
+ failure_message_for_should do |actual|
75
+ message = "No remote_file named '#{path}' found"
76
+ message << " with:\n#{@attributes}" unless @attributes.nil?
77
+ end
78
+
79
+ failure_message_for_should_not do |actual|
80
+ "Found remote_file named '#{path}' that should not exist."
81
+ end
82
+ end
14
83
  end
15
84
  end
@@ -10,15 +10,18 @@ module ChefSpec
10
10
  case resource_type(resource)
11
11
  when 'template'
12
12
  @actual_content = render(resource, chef_run.node)
13
- @actual_content.to_s.include? content
14
13
  when 'file'
15
14
  @actual_content = resource.content
16
- @actual_content.to_s.include? content
17
15
  when 'cookbook_file'
18
16
  cookbook_name = resource.cookbook || resource.cookbook_name
19
- cookbook = chef_run.node.cookbook_collection[cookbook_name]
17
+ cookbook = chef_run.run_context.cookbook_collection[cookbook_name]
20
18
  @actual_content = File.read(cookbook.preferred_filename_on_disk_location(chef_run.node, :files, resource.source, resource.path))
21
- @actual_content.to_s.include? content
19
+ end
20
+
21
+ if content.is_a?(Regexp)
22
+ @actual_content.to_s =~ content
23
+ else
24
+ @actual_content.to_s.include? content
22
25
  end
23
26
  end
24
27
  end
@@ -29,4 +32,4 @@ module ChefSpec
29
32
  end
30
33
  end
31
34
  end
32
- end
35
+ end
@@ -0,0 +1,8 @@
1
+
2
+ require 'chefspec/matchers/shared'
3
+
4
+ module ChefSpec
5
+ module Matchers
6
+ define_resource_matchers([:create, :remove], [:group], :group_name)
7
+ end
8
+ end
@@ -4,13 +4,16 @@ module ChefSpec
4
4
  module Matchers
5
5
  RSpec::Matchers.define :include_recipe do |expected_recipe|
6
6
  match do |chef_run|
7
- actual_recipes = chef_run.node.run_state[:seen_recipes]
8
- actual_recipes.include?(expected_recipe)
7
+ if chef_run.run_context.respond_to?(:loaded_recipe?)
8
+ chef_run.run_context.loaded_recipe?(expected_recipe) # Chef 11+
9
+ else
10
+ chef_run.node.run_state[:seen_recipes].include?(expected_recipe) # Chef 10 and lower
11
+ end
9
12
  end
10
13
 
11
14
  failure_message_for_should do |chef_run|
12
15
  "expected: ['#{expected_recipe}']\n" +
13
- " got: #{chef_run.node.run_state.recipes}"
16
+ " got: #{chef_run.run_context.respond_to?(:loaded_recipes) ? chef_run.run_context.loaded_recipes : chef_run.node.run_state[:seen_recipes]}"
14
17
  end
15
18
  end
16
19
  end
@@ -6,7 +6,14 @@ module ChefSpec
6
6
  RSpec::Matchers.define :log do |message|
7
7
  match do |chef_run|
8
8
  chef_run.resources.any? do |resource|
9
- resource_type(resource) == 'log' and resource.name == message
9
+ if resource_type(resource) != 'log'
10
+ false
11
+ elsif resource.respond_to?(:message)
12
+ # Chef 10.18 added message attribute to the log resource
13
+ message === resource.message
14
+ else
15
+ message === resource.name
16
+ end
10
17
  end
11
18
  end
12
19
  end
@@ -4,7 +4,7 @@ module ChefSpec
4
4
  module Matchers
5
5
 
6
6
  CHEF_GEM_SUPPORTED = defined?(::Chef::Resource::ChefGem)
7
- PACKAGE_TYPES = [:package, :gem_package, :chef_gem]
7
+ PACKAGE_TYPES = [:package, :gem_package, :chef_gem, :yum_package]
8
8
  PACKAGE_TYPES << :chef_gem if CHEF_GEM_SUPPORTED
9
9
  define_resource_matchers([:install, :remove, :upgrade, :purge], PACKAGE_TYPES, :package_name)
10
10
 
@@ -15,6 +15,13 @@ module ChefSpec
15
15
  end
16
16
  end
17
17
  end
18
+ RSpec::Matchers.define :install_yum_package_at_version do |package_name, version|
19
+ match do |chef_run|
20
+ chef_run.resources.any? do |resource|
21
+ resource_type(resource) == 'yum_package' and resource.package_name == package_name and resource.action.to_s.include? 'install' and resource.version == version
22
+ end
23
+ end
24
+ end
18
25
  RSpec::Matchers.define :install_gem_package_at_version do |package_name, version|
19
26
  match do |chef_run|
20
27
  chef_run.resources.any? do |resource|
@@ -0,0 +1,13 @@
1
+ require 'chefspec/matchers/shared'
2
+
3
+ module ChefSpec
4
+ module Matchers
5
+ RSpec::Matchers.define :execute_ruby_block do |block_name|
6
+ match do |chef_run|
7
+ chef_run.resources.any? do |resource|
8
+ resource_type(resource) == 'ruby_block' and resource.name == block_name
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,17 @@
1
+ require 'chefspec/matchers/shared'
2
+
3
+ module ChefSpec
4
+ module Matchers
5
+ %w(bash csh perl python ruby).each do |interpreter|
6
+ RSpec::Matchers.define "execute_#{interpreter}_script".to_sym do |name|
7
+ match do |chef_run|
8
+ chef_run.resources.any? do |resource|
9
+ (resource_type(resource) == interpreter ||
10
+ (resource_type(resource) == 'script' && resource.interpreter == interpreter)) &&
11
+ resource.name == name
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -6,6 +6,14 @@ def resource_type(resource)
6
6
  resource.resource_name.to_s
7
7
  end
8
8
 
9
+ # Given a resource return an array of action strings
10
+ #
11
+ # @param [String] resource A Chef Resource
12
+ # @return [Array] An array of actions as Strings
13
+ def resource_actions(resource)
14
+ resource.action.kind_of?(Array) ? resource.action.map{ |action| action.to_s } : [ resource.action.to_s ]
15
+ end
16
+
9
17
  # Define simple RSpec matchers for the product of resource types and actions
10
18
  #
11
19
  # @param [Array] actions The valid actions - for example [:create, :delete]
@@ -19,7 +27,7 @@ def define_resource_matchers(actions, resource_types, name_attribute)
19
27
  accepted_types << 'template' if action.to_s == 'create' and resource_type.to_s == 'file'
20
28
  chef_run.resources.any? do |resource|
21
29
  accepted_types.include? resource_type(resource) and resource.send(name_attribute) == name and
22
- resource.action.to_s.include? action.to_s
30
+ resource_actions(resource).include? action.to_s
23
31
  end
24
32
  end
25
33
  failure_message_for_should do |actual|
@@ -50,6 +58,10 @@ end
50
58
  # @return [String] The path on disk
51
59
  def template_path(template, node)
52
60
  cookbook_name = template.cookbook || template.cookbook_name
53
- cookbook = node.cookbook_collection[cookbook_name]
61
+ if node.respond_to?(:run_context)
62
+ cookbook = node.run_context.cookbook_collection[cookbook_name] # Chef 11+
63
+ else
64
+ cookbook = node.cookbook_collection[cookbook_name] # Chef 10 and lower
65
+ end
54
66
  cookbook.preferred_filename_on_disk_location(node, :templates, template.source)
55
67
  end
@@ -123,6 +123,7 @@ module ChefSpec
123
123
  override_assertion :enabled, :enabled, [:disable]
124
124
  override_assertion :running, :running, [:stop]
125
125
  override_assertion :user_exists, :username, [:remove]
126
+ override_assertion :group_exists, :group_name, [:remove]
126
127
 
127
128
  def file_resources
128
129
  resources.select{|r| r.resource_name.to_s.end_with?('file')} +
@@ -0,0 +1,45 @@
1
+ if Chef::VERSION >= '11.0.0'
2
+
3
+ # Override Chef LWRP creation to remove existing class to avoid redefinition warnings.
4
+ class Chef
5
+ class Provider
6
+ # Chef provider for a resource
7
+ class LWRPBase < Provider
8
+ class << self
9
+ alias_method :old_build_from_file, :build_from_file
10
+
11
+ # Override Opscode provider to remove any existing LWRP
12
+ #
13
+ # @param [String] cookbook_name The name of the cookbook
14
+ # @param [String] filename File to load as a LWRP
15
+ # @param [Chef::RunContext] run_context Context of a Chef Run
16
+ # @return [Chef::Provider] the created provider
17
+ def build_from_file(*args)
18
+ cookbook_name, filename = args[0,2]
19
+ remove_existing_lwrp(convert_to_class_name(filename_to_qualified_string(cookbook_name, filename)))
20
+ old_build_from_file(*args)
21
+ end
22
+
23
+ # Remove any existing Chef provider or resource with the specified name.
24
+ #
25
+ # @param [String] class_name The class name. Must be a valid constant name.
26
+ def remove_existing_lwrp(class_name)
27
+ [Chef::Resource::LWRPBase, Chef::Provider::LWRPBase].each do |resource_holder|
28
+ if RUBY_VERSION < '1.9'
29
+ if resource_holder.const_defined? class_name
30
+ resource_holder.send(:remove_const, class_name)
31
+ end
32
+ else
33
+ if resource_holder.const_defined? class_name, false
34
+ resource_holder.send(:remove_const, class_name)
35
+ end
36
+ end
37
+ end
38
+ end
39
+
40
+ end
41
+ end
42
+ end
43
+
44
+ end
45
+ end
@@ -1,35 +1,43 @@
1
- # Override Chef LWRP creation to remove existing class to avoid redefinition warnings.
2
- class Chef
3
- # Chef provider for a resource
4
- class Provider
5
- class << self
6
- alias_method :old_build_from_file, :build_from_file
1
+ if Chef::VERSION < '11.0.0'
7
2
 
8
- # Override Opscode provider to remove any existing LWRP
9
- #
10
- # @param [String] cookbook_name The name of the cookbook
11
- # @param [String] filename File to load as a LWRP
12
- # @param [Chef::RunContext] run_context Context of a Chef Run
13
- # @return [Chef::Provider] the created provider
14
- def build_from_file(*args)
15
- cookbook_name, filename = args[0,2]
16
- remove_existing_lwrp(convert_to_class_name(filename_to_qualified_string(cookbook_name, filename)))
17
- old_build_from_file(*args)
18
- end
3
+ # Override Chef LWRP creation to remove existing class to avoid redefinition warnings.
4
+ class Chef
5
+ # Chef provider for a resource
6
+ class Provider
7
+ class << self
8
+ alias_method :old_build_from_file, :build_from_file
9
+
10
+ # Override Opscode provider to remove any existing LWRP
11
+ #
12
+ # @param [String] cookbook_name The name of the cookbook
13
+ # @param [String] filename File to load as a LWRP
14
+ # @param [Chef::RunContext] run_context Context of a Chef Run
15
+ # @return [Chef::Provider] the created provider
16
+ def build_from_file(*args)
17
+ cookbook_name, filename = args[0,2]
18
+ remove_existing_lwrp(convert_to_class_name(filename_to_qualified_string(cookbook_name, filename)))
19
+ old_build_from_file(*args)
20
+ end
19
21
 
20
- # Remove any existing Chef provider or resource with the specified name.
21
- #
22
- # @param [String] class_name The class name. Must be a valid constant name.
23
- def remove_existing_lwrp(class_name)
24
- [Chef::Resource, Chef::Provider].each do |resource_holder|
25
- if resource_holder.const_defined? class_name
26
- resource_holder.send(:remove_const, class_name)
22
+ # Remove any existing Chef provider or resource with the specified name.
23
+ #
24
+ # @param [String] class_name The class name. Must be a valid constant name.
25
+ def remove_existing_lwrp(class_name)
26
+ [Chef::Resource, Chef::Provider].each do |resource_holder|
27
+ if RUBY_VERSION < '1.9'
28
+ if resource_holder.const_defined? class_name
29
+ resource_holder.send(:remove_const, class_name)
30
+ end
31
+ else
32
+ if resource_holder.const_defined? class_name, false
33
+ resource_holder.send(:remove_const, class_name)
34
+ end
35
+ end
27
36
  end
28
37
  end
29
- end
30
38
 
39
+ end
31
40
  end
32
41
  end
33
- end
34
-
35
42
 
43
+ end
@@ -1,4 +1,4 @@
1
1
  module ChefSpec
2
2
  # The gem version
3
- VERSION = '0.9.0'
3
+ VERSION = '1.0.0.rc1'
4
4
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chefspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
5
- prerelease:
4
+ version: 1.0.0.rc1
5
+ prerelease: 6
6
6
  platform: ruby
7
7
  authors:
8
8
  - Andrew Crump
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-10 00:00:00.000000000 Z
12
+ date: 2013-03-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: chef
@@ -18,7 +18,7 @@ dependencies:
18
18
  requirements:
19
19
  - - ! '>='
20
20
  - !ruby/object:Gem::Version
21
- version: 0.9.12
21
+ version: '10.0'
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ! '>='
28
28
  - !ruby/object:Gem::Version
29
- version: 0.9.12
29
+ version: '10.0'
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: erubis
32
32
  requirement: !ruby/object:Gem::Requirement
@@ -43,6 +43,22 @@ dependencies:
43
43
  - - ! '>='
44
44
  - !ruby/object:Gem::Version
45
45
  version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: fauxhai
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: '0.1'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '0.1'
46
62
  - !ruby/object:Gem::Dependency
47
63
  name: minitest-chef-handler
48
64
  requirement: !ruby/object:Gem::Requirement
@@ -59,6 +75,22 @@ dependencies:
59
75
  - - ~>
60
76
  - !ruby/object:Gem::Version
61
77
  version: 0.6.0
78
+ - !ruby/object:Gem::Dependency
79
+ name: moneta
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - <
84
+ - !ruby/object:Gem::Version
85
+ version: 0.7.0
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - <
92
+ - !ruby/object:Gem::Version
93
+ version: 0.7.0
62
94
  - !ruby/object:Gem::Dependency
63
95
  name: rspec
64
96
  requirement: !ruby/object:Gem::Requirement
@@ -66,7 +98,7 @@ dependencies:
66
98
  requirements:
67
99
  - - ~>
68
100
  - !ruby/object:Gem::Version
69
- version: 2.11.0
101
+ version: 2.12.0
70
102
  type: :runtime
71
103
  prerelease: false
72
104
  version_requirements: !ruby/object:Gem::Requirement
@@ -74,7 +106,103 @@ dependencies:
74
106
  requirements:
75
107
  - - ~>
76
108
  - !ruby/object:Gem::Version
77
- version: 2.11.0
109
+ version: 2.12.0
110
+ - !ruby/object:Gem::Dependency
111
+ name: rake
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ version: 0.9.2.2
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ~>
124
+ - !ruby/object:Gem::Version
125
+ version: 0.9.2.2
126
+ - !ruby/object:Gem::Dependency
127
+ name: yard
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ~>
132
+ - !ruby/object:Gem::Version
133
+ version: 0.8.1
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ~>
140
+ - !ruby/object:Gem::Version
141
+ version: 0.8.1
142
+ - !ruby/object:Gem::Dependency
143
+ name: aruba
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ~>
148
+ - !ruby/object:Gem::Version
149
+ version: 0.4.11
150
+ type: :development
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ~>
156
+ - !ruby/object:Gem::Version
157
+ version: 0.4.11
158
+ - !ruby/object:Gem::Dependency
159
+ name: cucumber
160
+ requirement: !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - ~>
164
+ - !ruby/object:Gem::Version
165
+ version: 1.2.0
166
+ type: :development
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ~>
172
+ - !ruby/object:Gem::Version
173
+ version: 1.2.0
174
+ - !ruby/object:Gem::Dependency
175
+ name: i18n
176
+ requirement: !ruby/object:Gem::Requirement
177
+ none: false
178
+ requirements:
179
+ - - ~>
180
+ - !ruby/object:Gem::Version
181
+ version: 0.6.1
182
+ type: :development
183
+ prerelease: false
184
+ version_requirements: !ruby/object:Gem::Requirement
185
+ none: false
186
+ requirements:
187
+ - - ~>
188
+ - !ruby/object:Gem::Version
189
+ version: 0.6.1
190
+ - !ruby/object:Gem::Dependency
191
+ name: simplecov
192
+ requirement: !ruby/object:Gem::Requirement
193
+ none: false
194
+ requirements:
195
+ - - ~>
196
+ - !ruby/object:Gem::Version
197
+ version: 0.7.1
198
+ type: :development
199
+ prerelease: false
200
+ version_requirements: !ruby/object:Gem::Requirement
201
+ none: false
202
+ requirements:
203
+ - - ~>
204
+ - !ruby/object:Gem::Version
205
+ version: 0.7.1
78
206
  description: Write RSpec examples for Opscode Chef recipes
79
207
  email:
80
208
  executables: []
@@ -88,16 +216,20 @@ files:
88
216
  - lib/chefspec/matchers/execute.rb
89
217
  - lib/chefspec/matchers/file.rb
90
218
  - lib/chefspec/matchers/file_content.rb
219
+ - lib/chefspec/matchers/group.rb
91
220
  - lib/chefspec/matchers/include_recipe.rb
92
221
  - lib/chefspec/matchers/link.rb
93
222
  - lib/chefspec/matchers/log.rb
94
223
  - lib/chefspec/matchers/notifications.rb
95
224
  - lib/chefspec/matchers/package.rb
225
+ - lib/chefspec/matchers/ruby_block.rb
226
+ - lib/chefspec/matchers/script.rb
96
227
  - lib/chefspec/matchers/service.rb
97
228
  - lib/chefspec/matchers/shared.rb
98
229
  - lib/chefspec/matchers/user.rb
99
230
  - lib/chefspec/minitest.rb
100
231
  - lib/chefspec/monkey_patches/hash.rb
232
+ - lib/chefspec/monkey_patches/lwrp_base.rb
101
233
  - lib/chefspec/monkey_patches/provider.rb
102
234
  - lib/chefspec/version.rb
103
235
  - lib/chefspec.rb
@@ -116,21 +248,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
116
248
  version: '0'
117
249
  segments:
118
250
  - 0
119
- hash: -3567781514066476826
251
+ hash: 1519435046451309777
120
252
  required_rubygems_version: !ruby/object:Gem::Requirement
121
253
  none: false
122
254
  requirements:
123
- - - ! '>='
255
+ - - ! '>'
124
256
  - !ruby/object:Gem::Version
125
- version: '0'
126
- segments:
127
- - 0
128
- hash: -3567781514066476826
257
+ version: 1.3.1
129
258
  requirements: []
130
259
  rubyforge_project:
131
- rubygems_version: 1.8.24
260
+ rubygems_version: 1.8.23
132
261
  signing_key:
133
262
  specification_version: 3
134
- summary: chefspec-0.9.0
263
+ summary: chefspec-1.0.0.rc1
135
264
  test_files: []
136
265
  has_rdoc: