[DRE-commits] [foodcritic] 03/10: Imported Upstream version 3.0.3

Stefano Rivera stefano at rivera.za.net
Wed Jan 15 15:57:27 UTC 2014


This is an automated email from the git hooks/post-receive script.

stefanor pushed a commit to branch master
in repository foodcritic.

commit 9367cb41be91a0dca2c9767d7da613b1653c47b5
Author: Stefano Rivera <stefanor at debian.org>
Date:   Fri Jan 10 14:34:40 2014 +0200

    Imported Upstream version 3.0.3
---
 .gitignore                                         |  14 -
 .travis.yml                                        |   4 -
 CHANGELOG.md                                       | 116 +++
 Gemfile                                            |  17 -
 Rakefile                                           |  33 -
 checksums.yaml.gz                                  | Bin 0 -> 426 bytes
 chef_dsl_metadata/Appraisals                       |  21 -
 chef_dsl_metadata/Gemfile                          |   5 -
 chef_dsl_metadata/Rakefile                         |  82 --
 chef_dsl_metadata/chef_0.10.0.json                 |   5 +-
 chef_dsl_metadata/chef_0.10.10.json                |   5 +-
 chef_dsl_metadata/chef_0.10.2.json                 |   5 +-
 chef_dsl_metadata/chef_0.10.4.json                 |   5 +-
 chef_dsl_metadata/chef_0.10.6.json                 |   5 +-
 chef_dsl_metadata/chef_0.10.8.json                 |   5 +-
 chef_dsl_metadata/chef_0.8.14.json                 |   5 +-
 chef_dsl_metadata/chef_0.8.16.json                 |   5 +-
 chef_dsl_metadata/chef_0.9.0.json                  |   5 +-
 chef_dsl_metadata/chef_0.9.10.json                 |   5 +-
 chef_dsl_metadata/chef_0.9.12.json                 |   5 +-
 chef_dsl_metadata/chef_0.9.14.json                 |   5 +-
 chef_dsl_metadata/chef_0.9.16.json                 |   5 +-
 chef_dsl_metadata/chef_0.9.18.json                 |   5 +-
 chef_dsl_metadata/chef_0.9.2.json                  |   5 +-
 chef_dsl_metadata/chef_0.9.4.json                  |   5 +-
 chef_dsl_metadata/chef_0.9.6.json                  |   5 +-
 chef_dsl_metadata/chef_0.9.8.json                  |   5 +-
 chef_dsl_metadata/chef_10.12.0.json                |   5 +-
 chef_dsl_metadata/chef_10.14.0.json                |   5 +-
 chef_dsl_metadata/chef_10.14.2.json                |   5 +-
 chef_dsl_metadata/chef_10.14.4.json                |   5 +-
 chef_dsl_metadata/chef_10.16.0.json                |   5 +-
 chef_dsl_metadata/chef_10.16.2.json                |   5 +-
 chef_dsl_metadata/chef_10.16.4.json                |   5 +-
 chef_dsl_metadata/chef_10.16.6.json                |   5 +-
 chef_dsl_metadata/chef_10.18.0.json                |   5 +-
 chef_dsl_metadata/chef_10.18.2.json                |   5 +-
 chef_dsl_metadata/chef_10.20.0.json                |   5 +-
 chef_dsl_metadata/chef_10.22.0.json                |   5 +-
 chef_dsl_metadata/chef_10.24.0.json                |   5 +-
 chef_dsl_metadata/chef_10.24.4.json                |   5 +-
 chef_dsl_metadata/chef_10.26.0.json                |   5 +-
 chef_dsl_metadata/chef_11.0.0.json                 |   5 +-
 chef_dsl_metadata/chef_11.2.0.json                 |   5 +-
 chef_dsl_metadata/chef_11.4.0.json                 |   5 +-
 chef_dsl_metadata/chef_11.4.2.json                 |   5 +-
 chef_dsl_metadata/chef_11.4.4.json                 |   5 +-
 .../{chef_11.0.0.json => chef_11.6.0.json}         | 946 ++++++++++++++++++++-
 chef_dsl_metadata/gemfiles/chef_0.10.0.gemfile     |   9 -
 .../gemfiles/chef_0.10.0.gemfile.lock              |  96 ---
 chef_dsl_metadata/gemfiles/chef_0.10.10.gemfile    |   9 -
 .../gemfiles/chef_0.10.10.gemfile.lock             |  82 --
 chef_dsl_metadata/gemfiles/chef_0.10.2.gemfile     |   9 -
 .../gemfiles/chef_0.10.2.gemfile.lock              |  82 --
 chef_dsl_metadata/gemfiles/chef_0.10.4.gemfile     |   9 -
 .../gemfiles/chef_0.10.4.gemfile.lock              |  82 --
 chef_dsl_metadata/gemfiles/chef_0.10.6.gemfile     |   9 -
 .../gemfiles/chef_0.10.6.gemfile.lock              |  80 --
 chef_dsl_metadata/gemfiles/chef_0.10.8.gemfile     |   9 -
 .../gemfiles/chef_0.10.8.gemfile.lock              |  80 --
 chef_dsl_metadata/gemfiles/chef_0.7.10.gemfile     |   8 -
 .../gemfiles/chef_0.7.10.gemfile.lock              |  45 -
 chef_dsl_metadata/gemfiles/chef_0.7.12.gemfile     |  13 -
 .../gemfiles/chef_0.7.12.gemfile.lock              |  98 ---
 chef_dsl_metadata/gemfiles/chef_0.7.16.gemfile     |   8 -
 .../gemfiles/chef_0.7.16.gemfile.lock              |  45 -
 chef_dsl_metadata/gemfiles/chef_0.8.10.gemfile     |   8 -
 .../gemfiles/chef_0.8.10.gemfile.lock              |  48 --
 chef_dsl_metadata/gemfiles/chef_0.8.14.gemfile     |   9 -
 .../gemfiles/chef_0.8.14.gemfile.lock              |  49 --
 chef_dsl_metadata/gemfiles/chef_0.8.16.gemfile     |   9 -
 .../gemfiles/chef_0.8.16.gemfile.lock              |  49 --
 chef_dsl_metadata/gemfiles/chef_0.8.2.gemfile      |   8 -
 chef_dsl_metadata/gemfiles/chef_0.8.2.gemfile.lock |  60 --
 chef_dsl_metadata/gemfiles/chef_0.8.4.gemfile      |  13 -
 chef_dsl_metadata/gemfiles/chef_0.8.4.gemfile.lock | 113 ---
 chef_dsl_metadata/gemfiles/chef_0.9.0.gemfile      |   9 -
 chef_dsl_metadata/gemfiles/chef_0.9.0.gemfile.lock |  58 --
 chef_dsl_metadata/gemfiles/chef_0.9.10.gemfile     |   9 -
 .../gemfiles/chef_0.9.10.gemfile.lock              |  59 --
 chef_dsl_metadata/gemfiles/chef_0.9.12.gemfile     |   9 -
 .../gemfiles/chef_0.9.12.gemfile.lock              |  59 --
 chef_dsl_metadata/gemfiles/chef_0.9.14.gemfile     |   9 -
 .../gemfiles/chef_0.9.14.gemfile.lock              |  59 --
 chef_dsl_metadata/gemfiles/chef_0.9.16.gemfile     |   9 -
 .../gemfiles/chef_0.9.16.gemfile.lock              |  59 --
 chef_dsl_metadata/gemfiles/chef_0.9.18.gemfile     |   9 -
 .../gemfiles/chef_0.9.18.gemfile.lock              |  59 --
 chef_dsl_metadata/gemfiles/chef_0.9.2.gemfile      |   9 -
 chef_dsl_metadata/gemfiles/chef_0.9.2.gemfile.lock |  58 --
 chef_dsl_metadata/gemfiles/chef_0.9.4.gemfile      |   9 -
 chef_dsl_metadata/gemfiles/chef_0.9.4.gemfile.lock |  58 --
 chef_dsl_metadata/gemfiles/chef_0.9.6.gemfile      |   9 -
 chef_dsl_metadata/gemfiles/chef_0.9.6.gemfile.lock |  58 --
 chef_dsl_metadata/gemfiles/chef_0.9.8.gemfile      |   9 -
 chef_dsl_metadata/gemfiles/chef_0.9.8.gemfile.lock |  58 --
 chef_dsl_metadata/gemfiles/chef_10.12.0.gemfile    |   9 -
 .../gemfiles/chef_10.12.0.gemfile.lock             |  82 --
 chef_dsl_metadata/gemfiles/chef_10.14.0.gemfile    |   9 -
 .../gemfiles/chef_10.14.0.gemfile.lock             |  82 --
 chef_dsl_metadata/gemfiles/chef_10.14.2.gemfile    |   9 -
 .../gemfiles/chef_10.14.2.gemfile.lock             |  82 --
 chef_dsl_metadata/gemfiles/chef_10.14.4.gemfile    |   9 -
 .../gemfiles/chef_10.14.4.gemfile.lock             |  82 --
 chef_dsl_metadata/gemfiles/chef_10.16.0.gemfile    |   9 -
 .../gemfiles/chef_10.16.0.gemfile.lock             |  82 --
 chef_dsl_metadata/gemfiles/chef_10.16.2.gemfile    |   9 -
 .../gemfiles/chef_10.16.2.gemfile.lock             |  82 --
 chef_dsl_metadata/gemfiles/chef_10.16.4.gemfile    |   9 -
 .../gemfiles/chef_10.16.4.gemfile.lock             |  82 --
 chef_dsl_metadata/gemfiles/chef_10.16.6.gemfile    |   9 -
 .../gemfiles/chef_10.16.6.gemfile.lock             |  82 --
 chef_dsl_metadata/gemfiles/chef_10.18.0.gemfile    |   9 -
 .../gemfiles/chef_10.18.0.gemfile.lock             |  82 --
 chef_dsl_metadata/gemfiles/chef_10.18.2.gemfile    |   9 -
 .../gemfiles/chef_10.18.2.gemfile.lock             |  82 --
 chef_dsl_metadata/gemfiles/chef_10.20.0.gemfile    |   9 -
 .../gemfiles/chef_10.20.0.gemfile.lock             |  82 --
 chef_dsl_metadata/gemfiles/chef_10.22.0.gemfile    |   9 -
 .../gemfiles/chef_10.22.0.gemfile.lock             |  82 --
 chef_dsl_metadata/gemfiles/chef_10.24.0.gemfile    |   9 -
 .../gemfiles/chef_10.24.0.gemfile.lock             |  82 --
 chef_dsl_metadata/gemfiles/chef_10.24.4.gemfile    |   9 -
 .../gemfiles/chef_10.24.4.gemfile.lock             |  82 --
 chef_dsl_metadata/gemfiles/chef_10.26.0.gemfile    |   9 -
 .../gemfiles/chef_10.26.0.gemfile.lock             |  82 --
 chef_dsl_metadata/gemfiles/chef_11.0.0.gemfile     |   9 -
 .../gemfiles/chef_11.0.0.gemfile.lock              |  71 --
 chef_dsl_metadata/gemfiles/chef_11.0.1.gemfile     |   8 -
 chef_dsl_metadata/gemfiles/chef_11.2.0.gemfile     |   9 -
 .../gemfiles/chef_11.2.0.gemfile.lock              |  71 --
 chef_dsl_metadata/gemfiles/chef_11.4.0.gemfile     |   9 -
 .../gemfiles/chef_11.4.0.gemfile.lock              |  71 --
 chef_dsl_metadata/gemfiles/chef_11.4.2.gemfile     |   9 -
 .../gemfiles/chef_11.4.2.gemfile.lock              |  71 --
 chef_dsl_metadata/gemfiles/chef_11.4.4.gemfile     |   9 -
 .../gemfiles/chef_11.4.4.gemfile.lock              |  71 --
 chef_dsl_metadata/windows.rb                       |   7 -
 ...heck_for_undeclared_recipe_dependencies.feature |  52 +-
 .../017_check_for_no_lwrp_notifications.feature    |  25 +
 .../019_check_for_consistent_node_access.feature   |   1 +
 ..._check_for_dodgy_conditions_within_loop.feature |   5 +
 features/033_check_for_missing_template.feature    |  84 +-
 ...034_check_for_unused_template_variables.feature |  44 +
 ...attribute_assignment_without_precedence.feature |  47 +
 features/048_check_for_shellout.feature            |  34 +
 ...k_for_role_name_mismatch_with_file_name.feature |  31 +
 features/050_check_for_invalid_name.feature        |  33 +
 .../051_check_for_template_partial_loops.feature   |  43 +
 features/command_line_help.feature                 |  15 +
 features/ignore_via_line_comments.feature          |  18 +
 features/individual_file.feature                   |  18 +-
 features/multiple_paths.feature                    |  28 +-
 features/step_definitions/cookbook_steps.rb        | 377 +++++++-
 features/support/command_helpers.rb                |  81 +-
 features/support/cookbook_helpers.rb               |  94 +-
 foodcritic.gemspec                                 |  22 -
 lib/foodcritic/api.rb                              | 116 ++-
 lib/foodcritic/command_line.rb                     |  82 +-
 lib/foodcritic/domain.rb                           |  33 +-
 lib/foodcritic/dsl.rb                              |   3 +
 lib/foodcritic/linter.rb                           | 154 ++--
 lib/foodcritic/rake_task.rb                        |   5 +-
 lib/foodcritic/rules.rb                            | 121 ++-
 lib/foodcritic/template.rb                         |  35 +-
 lib/foodcritic/version.rb                          |   2 +-
 man/foodcritic.1                                   |  70 ++
 man/foodcritic.1.ronn                              |   9 +
 metadata.yml                                       | 264 ++++++
 spec/foodcritic/api_spec.rb                        | 211 ++++-
 spec/foodcritic/command_line_spec.rb               |  13 +
 spec/foodcritic/domain_spec.rb                     |  45 +-
 spec/foodcritic/linter_spec.rb                     |  41 +-
 spec/foodcritic/template_spec.rb                   |  12 +-
 spec/regression/expected-output.txt                | 199 +++--
 175 files changed, 3238 insertions(+), 4251 deletions(-)

diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index a094132..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,14 +0,0 @@
-.idea
-.yardoc
-*.html
-chef_dsl_metadata.json
-coverage
-doc
-man/*.1.html
-man/*.1
-pkg
-*.swp
-tmp
-Gemfile.lock
-.DS_Store
-.rvmrc
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 368278f..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-rvm:
-  - 1.9.2
-  - 1.9.3
-  - 2.0.0
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 580a47d..04d051b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,119 @@
+## 3.0.3 (13th October, 2013)
+
+Bugfixes:
+
+  - [FC051: Template partials loop indefinitely](http://foodcritic.io/#FC051)
+    would cause an error for partials included from a subdirectory or where the
+    partial did not exist
+    ([related issue](https://github.com/acrmp/foodcritic/issues/176)). Thanks
+    @claco, @michaelglass.
+
+## 3.0.2 (5th October, 2013)
+
+Bugfixes:
+
+  - [FC051: Template partials loop indefinitely](http://foodcritic.io/#FC051)
+    can cause foodcritic to exit with an error on encountering a file that
+    cannot be read as UTF-8. We now explicitly exclude `.DS_Store` and `*.swp`
+    as a workaround
+    ([related issue](https://github.com/acrmp/foodcritic/issues/172)). Thanks
+    @tmatilai, @claco.
+  - [FC022: Resource condition within loop may not behave as expected](http://foodcritic.io/#FC022)
+    would warn incorrectly against loops where the block accepts more than one
+    argument
+    ([related issue](https://github.com/acrmp/foodcritic/issues/69)). Thanks
+    @Ips1975, @jaymzh.
+
+## 3.0.1 (25th September, 2013)
+
+Other:
+
+  - Rake version constraint removed to make packaging easier for users who
+    deploy foodcritic alongside Omnibus Chef.
+
+## 3.0.0 (14th September, 2013)
+
+Features:
+
+  - [FC047: Attribute assignment does not specify precedence](http://foodcritic.io/#FC047)
+    rule added
+    ([related issue](https://github.com/acrmp/foodcritic/issues/81)). Thanks
+    @jtimberman, @miketheman.
+  - [FC048: Prefer Mixlib::ShellOut](http://foodcritic.io/#FC048)
+    rule added
+    ([related issue](https://github.com/acrmp/foodcritic/issues/111)). Thanks
+    @jaymzh.
+  - [FC049: Role name does not match containing file name](http://foodcritic.io/#FC049)
+    rule added
+    ([related issue](https://github.com/acrmp/foodcritic/issues/19)). Thanks
+    @jaymzh.
+  - [FC050: Name includes invalid characters](http://foodcritic.io/#FC050)
+    rule added.
+  - [FC051: Template partials loop indefinitely](http://foodcritic.io/#FC051)
+    rule added.
+  - Added support for checking Chef environment and role files
+    ([related issue](https://github.com/acrmp/foodcritic/issues/19)). Thanks
+    @jaymzh.
+  - Added metadata for Chef 11.6.0.
+  - API methods `#field`, `#field_value` and `#templates_included` added.
+  - The API now exposes access to whether individual warnings should be viewed
+    as failures
+    ([related issue](https://github.com/acrmp/foodcritic/issues/150)). Thanks
+    @jamesdburgess.
+
+Bugfixes:
+
+  - [FC007: Ensure recipe dependencies are reflected in cookbook metadata](http://foodcritic.io/#FC007)
+    would warn if specifying dependencies in a multi-line word list with leading whitespace
+    ([related issue](https://github.com/acrmp/foodcritic/issues/160)). Thanks to
+    @philk for identifying and fixing this issue.
+  - [FC007: Ensure recipe dependencies are reflected in cookbook metadata](http://foodcritic.io/#FC007)
+    would not warn if `include_recipe` used parentheses
+    ([related issue](https://github.com/acrmp/foodcritic/issues/155)). Thanks
+    @jamesdburgess.
+  - [FC017: LWRP does not notify when updated](http://foodcritic.io/#FC017)
+    would warn even if `converge_by` or `use_inline_resources` was used
+    ([related issue](https://github.com/acrmp/foodcritic/issues/90)). Thanks
+    @stevendanna, @nevir.
+  - [FC017: LWRP does not notify when updated](http://foodcritic.io/#FC017)
+    would not warn if any action within the provider notified. Updated to report
+    against actions individually
+    ([related issue](https://github.com/acrmp/foodcritic/issues/90)).
+  - [FC019: Access node attributes in a consistent manner](http://foodcritic.io/#FC019)
+    would warn incorrectly against `node.run_state`
+    ([related issue](https://github.com/acrmp/foodcritic/issues/66)). Thanks
+    @jtimberman.
+  - [FC033: Missing template](http://foodcritic.io/#FC033)
+    would warn if the template filename began with a dot
+    ([related issue](https://github.com/acrmp/foodcritic/issues/165)). Thanks
+    @eherot.
+  - [FC034: Unused template variables](http://foodcritic.io/#FC034)
+    would warn incorrectly if variables were used by partials
+    ([related issue](https://github.com/acrmp/foodcritic/issues/140)). Thanks to
+    @v-a for implementing initial support for partials.
+  - [FC034: Unused template variables](http://foodcritic.io/#FC034)
+    would not be shown against inferred templates.
+  - [FC038: Invalid resource action](http://foodcritic.io/#FC038)
+    would warn incorrectly for log resources that specified a `write` action
+    ([related issue](https://github.com/acrmp/foodcritic/issues/154)). Thanks
+    @sethvargo.
+  - The foodcritic gem was missing a dependency on rake which broke
+    thor-foodcritic
+    ([related issue](https://github.com/acrmp/foodcritic/issues/157)). Thanks
+    @douglaswth.
+  - Template warnings should now be shown against the correct line number.
+    Previously warnings were always shown against line 1
+    ([related issue](https://github.com/acrmp/foodcritic/issues/102)). Thanks
+    @juliandunn.
+  - The `#declared_dependencies` API method could return duplicates for old
+    versions of LibXML.
+    ([related issue](https://github.com/acrmp/foodcritic/issues/163)). Thanks
+    @danleyden.
+
+Other:
+
+  - This release introduces breaking changes to programmatic use of foodcritic.
+
 ## 2.2.0 (10th July, 2013)
 
 Features:
diff --git a/Gemfile b/Gemfile
deleted file mode 100644
index 4261119..0000000
--- a/Gemfile
+++ /dev/null
@@ -1,17 +0,0 @@
-source "https://rubygems.org"
-
-gem 'foodcritic', :path => '.'
-
-group :test do
-  gem 'aruba', '~> 0.4.11'
-  gem 'cucumber', '~> 1.2.1'
-  gem 'minitest', '~> 3.3.0'
-  gem 'simplecov', '~> 0.6.4'
-end
-
-group :development do
-  gem 'chef', '~> 10.24.0'
-  gem "rake", '~> 0.9.2.2'
-  gem 'rdiscount', '~> 1.6.8'
-  gem 'ronn', '~> 0.7.0'
-end
diff --git a/Rakefile b/Rakefile
deleted file mode 100644
index 2a7f7ba..0000000
--- a/Rakefile
+++ /dev/null
@@ -1,33 +0,0 @@
-require 'rubygems'
-require 'bundler'
-require 'rake/testtask'
-require 'cucumber'
-require 'cucumber/rake/task'
-
-task :default => [:man, :install, :test, :features]
-
-Bundler.setup
-Bundler::GemHelper.install_tasks
-
-Rake::TestTask.new do |t|
-  t.pattern = 'spec/foodcritic/*_spec.rb'
-end
-
-Rake::TestTask.new do |t|
-  t.name = 'regressions'
-  t.pattern = 'spec/regression/*_spec.rb'
-end
-
-Cucumber::Rake::Task.new(:features) do |t|
-  t.cucumber_opts = ['-f', 'progress', '--strict']
-  unless ENV.has_key?('FC_FORK_PROCESS') and ENV['FC_FORK_PROCESS'] == true.to_s
-    t.cucumber_opts += ['-t', '~@build']
-    t.cucumber_opts += ['-t', '~@context']
-  end
-  t.cucumber_opts += ['features']
-end
-
-desc 'Build the manpage'
-task :man do
-  sh 'ronn -w --roff man/*.ronn'
-end
diff --git a/checksums.yaml.gz b/checksums.yaml.gz
new file mode 100644
index 0000000..ed47ae2
Binary files /dev/null and b/checksums.yaml.gz differ
diff --git a/chef_dsl_metadata/Appraisals b/chef_dsl_metadata/Appraisals
deleted file mode 100644
index 68e30db..0000000
--- a/chef_dsl_metadata/Appraisals
+++ /dev/null
@@ -1,21 +0,0 @@
-require './windows'
-
-chef_versions = [
-  '0.8.14', '0.8.16', '0.9.0', '0.9.2', '0.9.4', '0.9.6', '0.9.8', '0.9.10',
-  '0.9.12', '0.9.14', '0.9.16', '0.9.18', '0.10.0', '0.10.2', '0.10.4',
-  '0.10.6', '0.10.8', '0.10.10', '10.12.0', '10.14.0', '10.14.2', '10.14.4',
-  '10.16.0', '10.16.2', '10.16.4', '10.16.6', '10.18.0', '10.18.2', '10.20.0',
-  '10.22.0', '10.24.0', '10.24.4', '10.26.0', '11.0.0', '11.2.0', '11.4.0',
-  '11.4.2', '11.4.4'
-]
-
-chef_versions.select{|v| ! windows? || has_windows_rights?(v)}.each do |version|
-  appraise "chef_#{version}" do
-    gem 'chef', version
-    if windows?
-      gem 'ffi'
-      gem 'ruby-wmi'
-      gem 'win32-service'
-    end
-  end
-end
diff --git a/chef_dsl_metadata/Gemfile b/chef_dsl_metadata/Gemfile
deleted file mode 100644
index ad247b4..0000000
--- a/chef_dsl_metadata/Gemfile
+++ /dev/null
@@ -1,5 +0,0 @@
-source 'https://rubygems.org/'
-
-gem 'appraisal', '~> 0.5.1'
-gem 'rake', '~> 0.9.2.2'
-gem 'yajl-ruby', '~> 1.1.0'
diff --git a/chef_dsl_metadata/Rakefile b/chef_dsl_metadata/Rakefile
deleted file mode 100644
index dcc1916..0000000
--- a/chef_dsl_metadata/Rakefile
+++ /dev/null
@@ -1,82 +0,0 @@
-require 'appraisal'
-require 'fileutils'
-require 'yajl'
-
-task :generate_chef_metadata do
-  require_chef
-  chef_dsl_metadata = {:dsl_methods => chef_dsl_methods,
-                       :node_methods => chef_node_methods,
-                       :actions => chef_resource_actions,
-                       :attributes => chef_resource_attributes}
-  json = Yajl::Encoder.encode(chef_dsl_metadata, :pretty => true)
-  File.open("chef_#{Chef::VERSION}.json", 'w'){|f| f.write(json)}
-end
-
-def require_chef
-  require 'chef'
-  require 'chef/mixin/convert_to_class_name'
-  include Chef::Mixin::ConvertToClassName
-end
-
-def chef_dsl_methods
-  (Chef::Node.public_instance_methods +
-   chef_dsl_module.included_modules.map do |mixin|
-     mixin.public_instance_methods
-   end).flatten.sort.uniq
-end
-
-def chef_node_methods
-  Chef::Node.public_instance_methods.flatten.sort.uniq
-end
-
-def chef_resource_actions
-  chef_resources do |resource_klazz,resource|
-    instance = resource.new('dsl')
-    if instance.respond_to?(:allowed_actions)
-      [convert_to_snake_case(resource_klazz.to_s),
-        instance.allowed_actions.sort]
-    end
-  end
-end
-
-def chef_resource_attributes
-  chef_resources do |resource_klazz,resource|
-    resource_name = convert_to_snake_case(resource_klazz.to_s)
-    attributes = resource.public_instance_methods(true)
-
-    if (!windows?) and has_windows_rights?(::Chef::VERSION) and
-      resource.ancestors.include?(Chef::Mixin::Securable)
-        attributes = add_windows_securable_attributes(resource_name, attributes)
-    end
-
-    [resource_name, attributes.sort]
-  end
-end
-
-private
-
-def add_windows_securable_attributes(resource_name, attributes)
-  atts = [:rights, :deny_rights, :inherits] + attributes
-  atts << :files_rights if resource_name == 'remote_directory'
-  atts
-end
-
-def chef_dsl_module
-  if Chef.const_defined?('DSL')
-    Chef::DSL::Recipe
-  else
-    Chef::Mixin::RecipeDefinitionDSLCore
-  end
-end
-
-def chef_resources
-  resources = Chef::Resource.constants.sort.map do |resource_klazz|
-    resource = Chef::Resource.const_get(resource_klazz)
-    if resource.respond_to?(:public_instance_methods) and
-       resource.ancestors.include?(Chef::Resource) and
-       resource.name != 'Chef::Resource::LWRPBase'
-      yield resource_klazz, resource
-    end
-  end
-  Hash[resources]
-end
diff --git a/chef_dsl_metadata/chef_0.10.0.json b/chef_dsl_metadata/chef_0.10.0.json
index b0c10e4..854a11f 100644
--- a/chef_dsl_metadata/chef_0.10.0.json
+++ b/chef_dsl_metadata/chef_0.10.0.json
@@ -447,7 +447,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -505,10 +506,8 @@
     ],
     "remote_directory": [
       "create",
-      "create",
       "create_if_missing",
       "delete",
-      "delete",
       "nothing"
     ],
     "remote_file": [
diff --git a/chef_dsl_metadata/chef_0.10.10.json b/chef_dsl_metadata/chef_0.10.10.json
index ba1db19..fcae443 100644
--- a/chef_dsl_metadata/chef_0.10.10.json
+++ b/chef_dsl_metadata/chef_0.10.10.json
@@ -464,7 +464,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -526,10 +527,8 @@
     ],
     "remote_directory": [
       "create",
-      "create",
       "create_if_missing",
       "delete",
-      "delete",
       "nothing"
     ],
     "remote_file": [
diff --git a/chef_dsl_metadata/chef_0.10.2.json b/chef_dsl_metadata/chef_0.10.2.json
index b0c10e4..854a11f 100644
--- a/chef_dsl_metadata/chef_0.10.2.json
+++ b/chef_dsl_metadata/chef_0.10.2.json
@@ -447,7 +447,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -505,10 +506,8 @@
     ],
     "remote_directory": [
       "create",
-      "create",
       "create_if_missing",
       "delete",
-      "delete",
       "nothing"
     ],
     "remote_file": [
diff --git a/chef_dsl_metadata/chef_0.10.4.json b/chef_dsl_metadata/chef_0.10.4.json
index 9811668..a29e92c 100644
--- a/chef_dsl_metadata/chef_0.10.4.json
+++ b/chef_dsl_metadata/chef_0.10.4.json
@@ -447,7 +447,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -505,10 +506,8 @@
     ],
     "remote_directory": [
       "create",
-      "create",
       "create_if_missing",
       "delete",
-      "delete",
       "nothing"
     ],
     "remote_file": [
diff --git a/chef_dsl_metadata/chef_0.10.6.json b/chef_dsl_metadata/chef_0.10.6.json
index 43ef70c..c969cdf 100644
--- a/chef_dsl_metadata/chef_0.10.6.json
+++ b/chef_dsl_metadata/chef_0.10.6.json
@@ -454,7 +454,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -516,10 +517,8 @@
     ],
     "remote_directory": [
       "create",
-      "create",
       "create_if_missing",
       "delete",
-      "delete",
       "nothing"
     ],
     "remote_file": [
diff --git a/chef_dsl_metadata/chef_0.10.8.json b/chef_dsl_metadata/chef_0.10.8.json
index 43ef70c..c969cdf 100644
--- a/chef_dsl_metadata/chef_0.10.8.json
+++ b/chef_dsl_metadata/chef_0.10.8.json
@@ -454,7 +454,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -516,10 +517,8 @@
     ],
     "remote_directory": [
       "create",
-      "create",
       "create_if_missing",
       "delete",
-      "delete",
       "nothing"
     ],
     "remote_file": [
diff --git a/chef_dsl_metadata/chef_0.8.14.json b/chef_dsl_metadata/chef_0.8.14.json
index c3f468c..f65b61e 100644
--- a/chef_dsl_metadata/chef_0.8.14.json
+++ b/chef_dsl_metadata/chef_0.8.14.json
@@ -400,7 +400,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -454,8 +455,6 @@
     ],
     "remote_directory": [
       "create",
-      "create",
-      "delete",
       "delete",
       "nothing"
     ],
diff --git a/chef_dsl_metadata/chef_0.8.16.json b/chef_dsl_metadata/chef_0.8.16.json
index c3f468c..f65b61e 100644
--- a/chef_dsl_metadata/chef_0.8.16.json
+++ b/chef_dsl_metadata/chef_0.8.16.json
@@ -400,7 +400,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -454,8 +455,6 @@
     ],
     "remote_directory": [
       "create",
-      "create",
-      "delete",
       "delete",
       "nothing"
     ],
diff --git a/chef_dsl_metadata/chef_0.9.0.json b/chef_dsl_metadata/chef_0.9.0.json
index 4c1d73d..6b8ff36 100644
--- a/chef_dsl_metadata/chef_0.9.0.json
+++ b/chef_dsl_metadata/chef_0.9.0.json
@@ -442,7 +442,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -496,8 +497,6 @@
     ],
     "remote_directory": [
       "create",
-      "create",
-      "delete",
       "delete",
       "nothing"
     ],
diff --git a/chef_dsl_metadata/chef_0.9.10.json b/chef_dsl_metadata/chef_0.9.10.json
index 99f406a..dc62338 100644
--- a/chef_dsl_metadata/chef_0.9.10.json
+++ b/chef_dsl_metadata/chef_0.9.10.json
@@ -446,7 +446,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -504,10 +505,8 @@
     ],
     "remote_directory": [
       "create",
-      "create",
       "create_if_missing",
       "delete",
-      "delete",
       "nothing"
     ],
     "remote_file": [
diff --git a/chef_dsl_metadata/chef_0.9.12.json b/chef_dsl_metadata/chef_0.9.12.json
index 99f406a..dc62338 100644
--- a/chef_dsl_metadata/chef_0.9.12.json
+++ b/chef_dsl_metadata/chef_0.9.12.json
@@ -446,7 +446,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -504,10 +505,8 @@
     ],
     "remote_directory": [
       "create",
-      "create",
       "create_if_missing",
       "delete",
-      "delete",
       "nothing"
     ],
     "remote_file": [
diff --git a/chef_dsl_metadata/chef_0.9.14.json b/chef_dsl_metadata/chef_0.9.14.json
index 32c1b27..207c966 100644
--- a/chef_dsl_metadata/chef_0.9.14.json
+++ b/chef_dsl_metadata/chef_0.9.14.json
@@ -448,7 +448,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -506,10 +507,8 @@
     ],
     "remote_directory": [
       "create",
-      "create",
       "create_if_missing",
       "delete",
-      "delete",
       "nothing"
     ],
     "remote_file": [
diff --git a/chef_dsl_metadata/chef_0.9.16.json b/chef_dsl_metadata/chef_0.9.16.json
index 32c1b27..207c966 100644
--- a/chef_dsl_metadata/chef_0.9.16.json
+++ b/chef_dsl_metadata/chef_0.9.16.json
@@ -448,7 +448,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -506,10 +507,8 @@
     ],
     "remote_directory": [
       "create",
-      "create",
       "create_if_missing",
       "delete",
-      "delete",
       "nothing"
     ],
     "remote_file": [
diff --git a/chef_dsl_metadata/chef_0.9.18.json b/chef_dsl_metadata/chef_0.9.18.json
index 32c1b27..207c966 100644
--- a/chef_dsl_metadata/chef_0.9.18.json
+++ b/chef_dsl_metadata/chef_0.9.18.json
@@ -448,7 +448,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -506,10 +507,8 @@
     ],
     "remote_directory": [
       "create",
-      "create",
       "create_if_missing",
       "delete",
-      "delete",
       "nothing"
     ],
     "remote_file": [
diff --git a/chef_dsl_metadata/chef_0.9.2.json b/chef_dsl_metadata/chef_0.9.2.json
index 4c1d73d..6b8ff36 100644
--- a/chef_dsl_metadata/chef_0.9.2.json
+++ b/chef_dsl_metadata/chef_0.9.2.json
@@ -442,7 +442,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -496,8 +497,6 @@
     ],
     "remote_directory": [
       "create",
-      "create",
-      "delete",
       "delete",
       "nothing"
     ],
diff --git a/chef_dsl_metadata/chef_0.9.4.json b/chef_dsl_metadata/chef_0.9.4.json
index 1968237..7836c23 100644
--- a/chef_dsl_metadata/chef_0.9.4.json
+++ b/chef_dsl_metadata/chef_0.9.4.json
@@ -442,7 +442,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -496,8 +497,6 @@
     ],
     "remote_directory": [
       "create",
-      "create",
-      "delete",
       "delete",
       "nothing"
     ],
diff --git a/chef_dsl_metadata/chef_0.9.6.json b/chef_dsl_metadata/chef_0.9.6.json
index 1968237..7836c23 100644
--- a/chef_dsl_metadata/chef_0.9.6.json
+++ b/chef_dsl_metadata/chef_0.9.6.json
@@ -442,7 +442,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -496,8 +497,6 @@
     ],
     "remote_directory": [
       "create",
-      "create",
-      "delete",
       "delete",
       "nothing"
     ],
diff --git a/chef_dsl_metadata/chef_0.9.8.json b/chef_dsl_metadata/chef_0.9.8.json
index c568d42..7b5bfd0 100644
--- a/chef_dsl_metadata/chef_0.9.8.json
+++ b/chef_dsl_metadata/chef_0.9.8.json
@@ -444,7 +444,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -498,8 +499,6 @@
     ],
     "remote_directory": [
       "create",
-      "create",
-      "delete",
       "delete",
       "nothing"
     ],
diff --git a/chef_dsl_metadata/chef_10.12.0.json b/chef_dsl_metadata/chef_10.12.0.json
index ba1db19..fcae443 100644
--- a/chef_dsl_metadata/chef_10.12.0.json
+++ b/chef_dsl_metadata/chef_10.12.0.json
@@ -464,7 +464,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -526,10 +527,8 @@
     ],
     "remote_directory": [
       "create",
-      "create",
       "create_if_missing",
       "delete",
-      "delete",
       "nothing"
     ],
     "remote_file": [
diff --git a/chef_dsl_metadata/chef_10.14.0.json b/chef_dsl_metadata/chef_10.14.0.json
index 8798b82..fb4e9ed 100644
--- a/chef_dsl_metadata/chef_10.14.0.json
+++ b/chef_dsl_metadata/chef_10.14.0.json
@@ -469,7 +469,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -531,10 +532,8 @@
     ],
     "remote_directory": [
       "create",
-      "create",
       "create_if_missing",
       "delete",
-      "delete",
       "nothing"
     ],
     "remote_file": [
diff --git a/chef_dsl_metadata/chef_10.14.2.json b/chef_dsl_metadata/chef_10.14.2.json
index 8798b82..fb4e9ed 100644
--- a/chef_dsl_metadata/chef_10.14.2.json
+++ b/chef_dsl_metadata/chef_10.14.2.json
@@ -469,7 +469,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -531,10 +532,8 @@
     ],
     "remote_directory": [
       "create",
-      "create",
       "create_if_missing",
       "delete",
-      "delete",
       "nothing"
     ],
     "remote_file": [
diff --git a/chef_dsl_metadata/chef_10.14.4.json b/chef_dsl_metadata/chef_10.14.4.json
index 8798b82..fb4e9ed 100644
--- a/chef_dsl_metadata/chef_10.14.4.json
+++ b/chef_dsl_metadata/chef_10.14.4.json
@@ -469,7 +469,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -531,10 +532,8 @@
     ],
     "remote_directory": [
       "create",
-      "create",
       "create_if_missing",
       "delete",
-      "delete",
       "nothing"
     ],
     "remote_file": [
diff --git a/chef_dsl_metadata/chef_10.16.0.json b/chef_dsl_metadata/chef_10.16.0.json
index 8f8a08e..74685d9 100644
--- a/chef_dsl_metadata/chef_10.16.0.json
+++ b/chef_dsl_metadata/chef_10.16.0.json
@@ -469,7 +469,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -531,10 +532,8 @@
     ],
     "remote_directory": [
       "create",
-      "create",
       "create_if_missing",
       "delete",
-      "delete",
       "nothing"
     ],
     "remote_file": [
diff --git a/chef_dsl_metadata/chef_10.16.2.json b/chef_dsl_metadata/chef_10.16.2.json
index 8f8a08e..74685d9 100644
--- a/chef_dsl_metadata/chef_10.16.2.json
+++ b/chef_dsl_metadata/chef_10.16.2.json
@@ -469,7 +469,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -531,10 +532,8 @@
     ],
     "remote_directory": [
       "create",
-      "create",
       "create_if_missing",
       "delete",
-      "delete",
       "nothing"
     ],
     "remote_file": [
diff --git a/chef_dsl_metadata/chef_10.16.4.json b/chef_dsl_metadata/chef_10.16.4.json
index 8f8a08e..74685d9 100644
--- a/chef_dsl_metadata/chef_10.16.4.json
+++ b/chef_dsl_metadata/chef_10.16.4.json
@@ -469,7 +469,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -531,10 +532,8 @@
     ],
     "remote_directory": [
       "create",
-      "create",
       "create_if_missing",
       "delete",
-      "delete",
       "nothing"
     ],
     "remote_file": [
diff --git a/chef_dsl_metadata/chef_10.16.6.json b/chef_dsl_metadata/chef_10.16.6.json
index 8f8a08e..74685d9 100644
--- a/chef_dsl_metadata/chef_10.16.6.json
+++ b/chef_dsl_metadata/chef_10.16.6.json
@@ -469,7 +469,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -531,10 +532,8 @@
     ],
     "remote_directory": [
       "create",
-      "create",
       "create_if_missing",
       "delete",
-      "delete",
       "nothing"
     ],
     "remote_file": [
diff --git a/chef_dsl_metadata/chef_10.18.0.json b/chef_dsl_metadata/chef_10.18.0.json
index da85af6..900ee4d 100644
--- a/chef_dsl_metadata/chef_10.18.0.json
+++ b/chef_dsl_metadata/chef_10.18.0.json
@@ -469,7 +469,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -531,10 +532,8 @@
     ],
     "remote_directory": [
       "create",
-      "create",
       "create_if_missing",
       "delete",
-      "delete",
       "nothing"
     ],
     "remote_file": [
diff --git a/chef_dsl_metadata/chef_10.18.2.json b/chef_dsl_metadata/chef_10.18.2.json
index da85af6..900ee4d 100644
--- a/chef_dsl_metadata/chef_10.18.2.json
+++ b/chef_dsl_metadata/chef_10.18.2.json
@@ -469,7 +469,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -531,10 +532,8 @@
     ],
     "remote_directory": [
       "create",
-      "create",
       "create_if_missing",
       "delete",
-      "delete",
       "nothing"
     ],
     "remote_file": [
diff --git a/chef_dsl_metadata/chef_10.20.0.json b/chef_dsl_metadata/chef_10.20.0.json
index da85af6..900ee4d 100644
--- a/chef_dsl_metadata/chef_10.20.0.json
+++ b/chef_dsl_metadata/chef_10.20.0.json
@@ -469,7 +469,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -531,10 +532,8 @@
     ],
     "remote_directory": [
       "create",
-      "create",
       "create_if_missing",
       "delete",
-      "delete",
       "nothing"
     ],
     "remote_file": [
diff --git a/chef_dsl_metadata/chef_10.22.0.json b/chef_dsl_metadata/chef_10.22.0.json
index da85af6..900ee4d 100644
--- a/chef_dsl_metadata/chef_10.22.0.json
+++ b/chef_dsl_metadata/chef_10.22.0.json
@@ -469,7 +469,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -531,10 +532,8 @@
     ],
     "remote_directory": [
       "create",
-      "create",
       "create_if_missing",
       "delete",
-      "delete",
       "nothing"
     ],
     "remote_file": [
diff --git a/chef_dsl_metadata/chef_10.24.0.json b/chef_dsl_metadata/chef_10.24.0.json
index da85af6..900ee4d 100644
--- a/chef_dsl_metadata/chef_10.24.0.json
+++ b/chef_dsl_metadata/chef_10.24.0.json
@@ -469,7 +469,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -531,10 +532,8 @@
     ],
     "remote_directory": [
       "create",
-      "create",
       "create_if_missing",
       "delete",
-      "delete",
       "nothing"
     ],
     "remote_file": [
diff --git a/chef_dsl_metadata/chef_10.24.4.json b/chef_dsl_metadata/chef_10.24.4.json
index da85af6..900ee4d 100644
--- a/chef_dsl_metadata/chef_10.24.4.json
+++ b/chef_dsl_metadata/chef_10.24.4.json
@@ -469,7 +469,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -531,10 +532,8 @@
     ],
     "remote_directory": [
       "create",
-      "create",
       "create_if_missing",
       "delete",
-      "delete",
       "nothing"
     ],
     "remote_file": [
diff --git a/chef_dsl_metadata/chef_10.26.0.json b/chef_dsl_metadata/chef_10.26.0.json
index da85af6..900ee4d 100644
--- a/chef_dsl_metadata/chef_10.26.0.json
+++ b/chef_dsl_metadata/chef_10.26.0.json
@@ -469,7 +469,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -531,10 +532,8 @@
     ],
     "remote_directory": [
       "create",
-      "create",
       "create_if_missing",
       "delete",
-      "delete",
       "nothing"
     ],
     "remote_file": [
diff --git a/chef_dsl_metadata/chef_11.0.0.json b/chef_dsl_metadata/chef_11.0.0.json
index 3316e1e..8166652 100644
--- a/chef_dsl_metadata/chef_11.0.0.json
+++ b/chef_dsl_metadata/chef_11.0.0.json
@@ -442,7 +442,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -511,10 +512,8 @@
     ],
     "remote_directory": [
       "create",
-      "create",
       "create_if_missing",
       "delete",
-      "delete",
       "nothing"
     ],
     "remote_file": [
diff --git a/chef_dsl_metadata/chef_11.2.0.json b/chef_dsl_metadata/chef_11.2.0.json
index 3316e1e..8166652 100644
--- a/chef_dsl_metadata/chef_11.2.0.json
+++ b/chef_dsl_metadata/chef_11.2.0.json
@@ -442,7 +442,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -511,10 +512,8 @@
     ],
     "remote_directory": [
       "create",
-      "create",
       "create_if_missing",
       "delete",
-      "delete",
       "nothing"
     ],
     "remote_file": [
diff --git a/chef_dsl_metadata/chef_11.4.0.json b/chef_dsl_metadata/chef_11.4.0.json
index 3316e1e..8166652 100644
--- a/chef_dsl_metadata/chef_11.4.0.json
+++ b/chef_dsl_metadata/chef_11.4.0.json
@@ -442,7 +442,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -511,10 +512,8 @@
     ],
     "remote_directory": [
       "create",
-      "create",
       "create_if_missing",
       "delete",
-      "delete",
       "nothing"
     ],
     "remote_file": [
diff --git a/chef_dsl_metadata/chef_11.4.2.json b/chef_dsl_metadata/chef_11.4.2.json
index 3316e1e..8166652 100644
--- a/chef_dsl_metadata/chef_11.4.2.json
+++ b/chef_dsl_metadata/chef_11.4.2.json
@@ -442,7 +442,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -511,10 +512,8 @@
     ],
     "remote_directory": [
       "create",
-      "create",
       "create_if_missing",
       "delete",
-      "delete",
       "nothing"
     ],
     "remote_file": [
diff --git a/chef_dsl_metadata/chef_11.4.4.json b/chef_dsl_metadata/chef_11.4.4.json
index 3316e1e..8166652 100644
--- a/chef_dsl_metadata/chef_11.4.4.json
+++ b/chef_dsl_metadata/chef_11.4.4.json
@@ -442,7 +442,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -511,10 +512,8 @@
     ],
     "remote_directory": [
       "create",
-      "create",
       "create_if_missing",
       "delete",
-      "delete",
       "nothing"
     ],
     "remote_file": [
diff --git a/chef_dsl_metadata/chef_11.0.0.json b/chef_dsl_metadata/chef_11.6.0.json
similarity index 88%
copy from chef_dsl_metadata/chef_11.0.0.json
copy to chef_dsl_metadata/chef_11.6.0.json
index 3316e1e..e673241 100644
--- a/chef_dsl_metadata/chef_11.0.0.json
+++ b/chef_dsl_metadata/chef_11.6.0.json
@@ -72,6 +72,7 @@
     "key?",
     "keys",
     "kind_of?",
+    "lazy",
     "method",
     "method_missing",
     "methods",
@@ -91,6 +92,11 @@
     "parse_attribute_file_spec",
     "platform?",
     "platform_family?",
+    "pretty_inspect",
+    "pretty_print",
+    "pretty_print_cycle",
+    "pretty_print_inspect",
+    "pretty_print_instance_variables",
     "private_methods",
     "protected_methods",
     "psych_to_yaml",
@@ -214,6 +220,7 @@
     "key?",
     "keys",
     "kind_of?",
+    "lazy",
     "method",
     "method_missing",
     "methods",
@@ -233,6 +240,11 @@
     "parse_attribute_file_spec",
     "platform?",
     "platform_family?",
+    "pretty_inspect",
+    "pretty_print",
+    "pretty_print_cycle",
+    "pretty_print_inspect",
+    "pretty_print_instance_variables",
     "private_methods",
     "protected_methods",
     "psych_to_yaml",
@@ -296,6 +308,10 @@
       "nothing",
       "run"
     ],
+    "batch": [
+      "nothing",
+      "run"
+    ],
     "breakpoint": [
       "break",
       "nothing"
@@ -442,7 +458,8 @@
       "nothing"
     ],
     "log": [
-      "nothing"
+      "nothing",
+      "write"
     ],
     "macports_package": [
       "install",
@@ -498,6 +515,10 @@
       "remove",
       "upgrade"
     ],
+    "powershell_script": [
+      "nothing",
+      "run"
+    ],
     "python": [
       "nothing",
       "run"
@@ -511,10 +532,8 @@
     ],
     "remote_directory": [
       "create",
-      "create",
       "create_if_missing",
       "delete",
-      "delete",
       "nothing"
     ],
     "remote_file": [
@@ -678,6 +697,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -700,6 +720,11 @@
       "params=",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -766,6 +791,7 @@
       "updated_by_last_action?",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "version",
@@ -841,6 +867,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -862,6 +889,186 @@
       "path",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
+      "private_methods",
+      "protected_methods",
+      "provider",
+      "provider=",
+      "provider_for_action",
+      "psych_to_yaml",
+      "psych_y",
+      "public_method",
+      "public_methods",
+      "public_send",
+      "recipe_name",
+      "recipe_name=",
+      "registry_data_exists?",
+      "registry_get_subkeys",
+      "registry_get_values",
+      "registry_has_subkeys?",
+      "registry_key_exists?",
+      "registry_value_exists?",
+      "resolve_notification_references",
+      "resource_name",
+      "resources",
+      "respond_to?",
+      "respond_to_missing?",
+      "retries",
+      "retries=",
+      "retry_delay",
+      "retry_delay=",
+      "returns",
+      "run_action",
+      "run_context",
+      "run_context=",
+      "search",
+      "send",
+      "set_or_return",
+      "should_skip?",
+      "singleton_class",
+      "singleton_methods",
+      "snake_case_basename",
+      "source_line",
+      "source_line=",
+      "state",
+      "subscribes",
+      "supports",
+      "systemu",
+      "taint",
+      "tainted?",
+      "tap",
+      "timeout",
+      "to_enum",
+      "to_hash",
+      "to_json",
+      "to_s",
+      "to_text",
+      "to_yaml",
+      "to_yaml_properties",
+      "trust",
+      "umask",
+      "untaint",
+      "untrust",
+      "untrusted?",
+      "updated",
+      "updated=",
+      "updated?",
+      "updated_by_last_action",
+      "updated_by_last_action?",
+      "user",
+      "validate",
+      "validate_action",
+      "validate_resource_spec!",
+      "value_for_platform",
+      "value_for_platform_family",
+      "y"
+    ],
+    "batch": [
+      "!",
+      "!=",
+      "!~",
+      "<=>",
+      "==",
+      "===",
+      "=~",
+      "__id__",
+      "__send__",
+      "action",
+      "after_created",
+      "allowed_actions",
+      "allowed_actions=",
+      "architecture",
+      "as_json",
+      "assert_valid_windows_architecture!",
+      "class",
+      "clone",
+      "code",
+      "command",
+      "convert_to_class_name",
+      "convert_to_snake_case",
+      "cookbook_name",
+      "cookbook_name=",
+      "cookbook_version",
+      "creates",
+      "customize_exception",
+      "cwd",
+      "data_bag",
+      "data_bag_item",
+      "define_singleton_method",
+      "defined_at",
+      "delayed_notifications",
+      "deprecated_ivar",
+      "disable_wow64_file_redirection",
+      "display",
+      "dup",
+      "elapsed_time",
+      "enclosing_provider",
+      "enclosing_provider=",
+      "enum_for",
+      "env",
+      "environment",
+      "epic_fail",
+      "eql?",
+      "equal?",
+      "events",
+      "extend",
+      "filename_to_qualified_string",
+      "flags",
+      "freeze",
+      "frozen?",
+      "gem",
+      "group",
+      "hash",
+      "identity",
+      "ignore_failure",
+      "immediate_notifications",
+      "initialize_clone",
+      "initialize_dup",
+      "inspect",
+      "instance_eval",
+      "instance_exec",
+      "instance_of?",
+      "instance_variable_defined?",
+      "instance_variable_get",
+      "instance_variable_set",
+      "instance_variables",
+      "interpreter",
+      "is",
+      "is_a?",
+      "is_i386_windows_process?",
+      "kind_of?",
+      "lazy",
+      "load_prior_resource",
+      "method",
+      "method_missing",
+      "methods",
+      "name",
+      "nil?",
+      "node_supports_windows_architecture?",
+      "node_windows_architecture",
+      "noop",
+      "not_if",
+      "not_if_args",
+      "notifies",
+      "notifies_delayed",
+      "notifies_immediately",
+      "object_id",
+      "only_if",
+      "only_if_args",
+      "params",
+      "params=",
+      "path",
+      "platform?",
+      "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -885,6 +1092,7 @@
       "resources",
       "respond_to?",
       "respond_to_missing?",
+      "restore_wow64_file_redirection",
       "retries",
       "retries=",
       "retry_delay",
@@ -928,10 +1136,13 @@
       "updated_by_last_action",
       "updated_by_last_action?",
       "user",
+      "valid_windows_architecture?",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
+      "wow64_architecture_override_required?",
       "y"
     ],
     "breakpoint": [
@@ -995,6 +1206,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -1015,6 +1227,11 @@
       "params=",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -1079,6 +1296,7 @@
       "updated_by_last_action?",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "y"
@@ -1145,6 +1363,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -1167,6 +1386,11 @@
       "params=",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -1233,6 +1457,7 @@
       "updated_by_last_action?",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "version",
@@ -1253,8 +1478,10 @@
       "allowed_actions",
       "allowed_actions=",
       "as_json",
+      "atomic_update",
       "backup",
       "checksum",
+      "checksum=",
       "class",
       "clone",
       "content",
@@ -1285,6 +1512,7 @@
       "events",
       "extend",
       "filename_to_qualified_string",
+      "force_unlink",
       "freeze",
       "frozen?",
       "gem",
@@ -1307,7 +1535,9 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
+      "manage_symlink_source",
       "method",
       "method_missing",
       "methods",
@@ -1330,6 +1560,11 @@
       "path",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -1397,6 +1632,7 @@
       "user",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "y"
@@ -1467,6 +1703,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "mailto",
       "method",
@@ -1491,6 +1728,11 @@
       "path",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -1557,6 +1799,7 @@
       "user",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "weekday",
@@ -1632,6 +1875,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -1653,6 +1897,11 @@
       "path",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -1721,6 +1970,7 @@
       "user",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "y"
@@ -1803,6 +2053,7 @@
       "is_a?",
       "keep_releases",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -1825,6 +2076,11 @@
       "params=",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -1911,6 +2167,7 @@
       "user",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "y"
@@ -1993,6 +2250,7 @@
       "is_a?",
       "keep_releases",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -2015,6 +2273,11 @@
       "params=",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -2101,6 +2364,7 @@
       "user",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "y"
@@ -2183,6 +2447,7 @@
       "is_a?",
       "keep_releases",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -2205,6 +2470,11 @@
       "params=",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -2291,6 +2561,7 @@
       "user",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "y"
@@ -2359,6 +2630,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -2382,6 +2654,11 @@
       "path",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -2449,6 +2726,7 @@
       "user",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "y"
@@ -2514,6 +2792,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -2536,6 +2815,11 @@
       "params=",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -2602,6 +2886,7 @@
       "updated_by_last_action?",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "version",
@@ -2669,6 +2954,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -2692,6 +2978,11 @@
       "params=",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -2759,6 +3050,7 @@
       "updated_by_last_action?",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "version",
@@ -2827,6 +3119,7 @@
       "is_a?",
       "key_name",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -2847,6 +3140,11 @@
       "params=",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -2911,6 +3209,7 @@
       "updated_by_last_action?",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value",
       "value_for_platform",
       "value_for_platform_family",
@@ -2980,6 +3279,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -3002,6 +3302,11 @@
       "params=",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -3066,6 +3371,7 @@
       "updated_by_last_action?",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "y"
@@ -3137,6 +3443,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -3158,6 +3465,11 @@
       "path",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -3226,6 +3538,7 @@
       "user",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "y"
@@ -3245,8 +3558,10 @@
       "allowed_actions",
       "allowed_actions=",
       "as_json",
+      "atomic_update",
       "backup",
       "checksum",
+      "checksum=",
       "class",
       "clone",
       "content",
@@ -3276,6 +3591,7 @@
       "events",
       "extend",
       "filename_to_qualified_string",
+      "force_unlink",
       "freeze",
       "frozen?",
       "gem",
@@ -3298,7 +3614,9 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
+      "manage_symlink_source",
       "method",
       "method_missing",
       "methods",
@@ -3321,6 +3639,11 @@
       "path",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -3387,6 +3710,7 @@
       "user",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "y"
@@ -3452,6 +3776,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -3474,6 +3799,11 @@
       "params=",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -3540,6 +3870,7 @@
       "updated_by_last_action?",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "version",
@@ -3607,6 +3938,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -3629,6 +3961,11 @@
       "params=",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -3695,6 +4032,7 @@
       "updated_by_last_action?",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "version",
@@ -3767,6 +4105,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -3787,6 +4126,11 @@
       "params=",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -3862,6 +4206,7 @@
       "user",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "y"
@@ -3930,6 +4275,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "members",
       "method",
@@ -3951,6 +4297,11 @@
       "params=",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -4017,6 +4368,7 @@
       "users",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "y"
@@ -4083,6 +4435,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "message",
       "method",
@@ -4104,6 +4457,11 @@
       "params=",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -4169,6 +4527,7 @@
       "url",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "y"
@@ -4239,6 +4598,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "mask",
       "method",
@@ -4265,6 +4625,11 @@
       "params=",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -4330,6 +4695,7 @@
       "updated_by_last_action?",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "y"
@@ -4396,6 +4762,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -4418,6 +4785,11 @@
       "params=",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -4484,6 +4856,7 @@
       "updated_by_last_action?",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "version",
@@ -4553,6 +4926,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "link_type",
       "load_prior_resource",
       "method",
@@ -4577,6 +4951,11 @@
       "path",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -4645,6 +5024,7 @@
       "user",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "y"
@@ -4710,6 +5090,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "level",
       "load_prior_resource",
       "message",
@@ -4732,6 +5113,11 @@
       "params=",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -4796,6 +5182,7 @@
       "updated_by_last_action?",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "y"
@@ -4861,6 +5248,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -4883,6 +5271,11 @@
       "params=",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -4949,6 +5342,7 @@
       "updated_by_last_action?",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "version",
@@ -5019,6 +5413,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "level",
       "load_prior_resource",
       "metadata",
@@ -5041,6 +5436,11 @@
       "params=",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -5106,6 +5506,7 @@
       "updated_by_last_action?",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "y"
@@ -5142,6 +5543,7 @@
       "device",
       "device_type",
       "display",
+      "domain",
       "dump",
       "dup",
       "elapsed_time",
@@ -5176,6 +5578,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -5198,8 +5601,14 @@
       "params",
       "params=",
       "pass",
+      "password",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -5262,8 +5671,10 @@
       "updated?",
       "updated_by_last_action",
       "updated_by_last_action?",
+      "username",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "y"
@@ -5329,6 +5740,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -5350,6 +5762,11 @@
       "platform?",
       "platform_family?",
       "plugin",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -5414,6 +5831,7 @@
       "updated_by_last_action?",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "y"
@@ -5479,6 +5897,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -5501,6 +5920,11 @@
       "params=",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -5567,6 +5991,7 @@
       "updated_by_last_action?",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "version",
@@ -5633,6 +6058,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -5655,6 +6081,11 @@
       "params=",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -5721,6 +6152,7 @@
       "updated_by_last_action?",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "version",
@@ -5796,6 +6228,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -5817,6 +6250,11 @@
       "path",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -5885,6 +6323,7 @@
       "user",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "y"
@@ -5950,6 +6389,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -5972,6 +6412,11 @@
       "params=",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -6038,11 +6483,190 @@
       "updated_by_last_action?",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "version",
       "y"
     ],
+    "powershell_script": [
+      "!",
+      "!=",
+      "!~",
+      "<=>",
+      "==",
+      "===",
+      "=~",
+      "__id__",
+      "__send__",
+      "action",
+      "after_created",
+      "allowed_actions",
+      "allowed_actions=",
+      "architecture",
+      "as_json",
+      "assert_valid_windows_architecture!",
+      "class",
+      "clone",
+      "code",
+      "command",
+      "convert_to_class_name",
+      "convert_to_snake_case",
+      "cookbook_name",
+      "cookbook_name=",
+      "cookbook_version",
+      "creates",
+      "customize_exception",
+      "cwd",
+      "data_bag",
+      "data_bag_item",
+      "define_singleton_method",
+      "defined_at",
+      "delayed_notifications",
+      "deprecated_ivar",
+      "disable_wow64_file_redirection",
+      "display",
+      "dup",
+      "elapsed_time",
+      "enclosing_provider",
+      "enclosing_provider=",
+      "enum_for",
+      "env",
+      "environment",
+      "epic_fail",
+      "eql?",
+      "equal?",
+      "events",
+      "extend",
+      "filename_to_qualified_string",
+      "flags",
+      "freeze",
+      "frozen?",
+      "gem",
+      "group",
+      "hash",
+      "identity",
+      "ignore_failure",
+      "immediate_notifications",
+      "initialize_clone",
+      "initialize_dup",
+      "inspect",
+      "instance_eval",
+      "instance_exec",
+      "instance_of?",
+      "instance_variable_defined?",
+      "instance_variable_get",
+      "instance_variable_set",
+      "instance_variables",
+      "interpreter",
+      "is",
+      "is_a?",
+      "is_i386_windows_process?",
+      "kind_of?",
+      "lazy",
+      "load_prior_resource",
+      "method",
+      "method_missing",
+      "methods",
+      "name",
+      "nil?",
+      "node_supports_windows_architecture?",
+      "node_windows_architecture",
+      "noop",
+      "not_if",
+      "not_if_args",
+      "notifies",
+      "notifies_delayed",
+      "notifies_immediately",
+      "object_id",
+      "only_if",
+      "only_if_args",
+      "params",
+      "params=",
+      "path",
+      "platform?",
+      "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
+      "private_methods",
+      "protected_methods",
+      "provider",
+      "provider=",
+      "provider_for_action",
+      "psych_to_yaml",
+      "psych_y",
+      "public_method",
+      "public_methods",
+      "public_send",
+      "recipe_name",
+      "recipe_name=",
+      "registry_data_exists?",
+      "registry_get_subkeys",
+      "registry_get_values",
+      "registry_has_subkeys?",
+      "registry_key_exists?",
+      "registry_value_exists?",
+      "resolve_notification_references",
+      "resource_name",
+      "resources",
+      "respond_to?",
+      "respond_to_missing?",
+      "restore_wow64_file_redirection",
+      "retries",
+      "retries=",
+      "retry_delay",
+      "retry_delay=",
+      "returns",
+      "run_action",
+      "run_context",
+      "run_context=",
+      "search",
+      "send",
+      "set_or_return",
+      "should_skip?",
+      "singleton_class",
+      "singleton_methods",
+      "snake_case_basename",
+      "source_line",
+      "source_line=",
+      "state",
+      "subscribes",
+      "supports",
+      "systemu",
+      "taint",
+      "tainted?",
+      "tap",
+      "timeout",
+      "to_enum",
+      "to_hash",
+      "to_json",
+      "to_s",
+      "to_text",
+      "to_yaml",
+      "to_yaml_properties",
+      "trust",
+      "umask",
+      "untaint",
+      "untrust",
+      "untrusted?",
+      "updated",
+      "updated=",
+      "updated?",
+      "updated_by_last_action",
+      "updated_by_last_action?",
+      "user",
+      "valid_windows_architecture?",
+      "validate",
+      "validate_action",
+      "validate_resource_spec!",
+      "value_for_platform",
+      "value_for_platform_family",
+      "wow64_architecture_override_required?",
+      "y"
+    ],
     "python": [
       "!",
       "!=",
@@ -6113,6 +6737,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -6134,6 +6759,11 @@
       "path",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -6202,6 +6832,7 @@
       "user",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "y"
@@ -6269,6 +6900,7 @@
       "is_a?",
       "key",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -6289,6 +6921,11 @@
       "params=",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -6354,6 +6991,7 @@
       "updated_by_last_action?",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "values",
@@ -6429,6 +7067,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -6453,6 +7092,11 @@
       "path",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -6522,6 +7166,7 @@
       "user",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "y"
@@ -6541,8 +7186,10 @@
       "allowed_actions",
       "allowed_actions=",
       "as_json",
+      "atomic_update",
       "backup",
       "checksum",
+      "checksum=",
       "class",
       "clone",
       "content",
@@ -6572,11 +7219,14 @@
       "events",
       "extend",
       "filename_to_qualified_string",
+      "force_unlink",
       "freeze",
       "frozen?",
+      "ftp_active_mode",
       "gem",
       "group",
       "hash",
+      "headers",
       "identity",
       "ignore_failure",
       "immediate_notifications",
@@ -6594,7 +7244,9 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
+      "manage_symlink_source",
       "method",
       "method_missing",
       "methods",
@@ -6617,6 +7269,11 @@
       "path",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -6681,9 +7338,14 @@
       "updated?",
       "updated_by_last_action",
       "updated_by_last_action?",
+      "use_conditional_get",
+      "use_etag",
+      "use_etags",
+      "use_last_modified",
       "user",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "y"
@@ -6754,6 +7416,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -6778,6 +7441,11 @@
       "params=",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -6844,6 +7512,7 @@
       "updated_by_last_action?",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "y"
@@ -6909,6 +7578,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -6931,6 +7601,11 @@
       "params=",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -6997,6 +7672,7 @@
       "updated_by_last_action?",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "version",
@@ -7072,6 +7748,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -7093,6 +7770,11 @@
       "path",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -7161,6 +7843,7 @@
       "user",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "y"
@@ -7228,6 +7911,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -7248,6 +7932,11 @@
       "params=",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -7312,6 +8001,7 @@
       "updated_by_last_action?",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "y"
@@ -7381,6 +8071,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -7401,6 +8092,11 @@
       "params=",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -7474,6 +8170,7 @@
       "user",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "y"
@@ -7548,6 +8245,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -7569,6 +8267,11 @@
       "path",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -7637,6 +8340,7 @@
       "user",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "y"
@@ -7704,6 +8408,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -7726,6 +8431,11 @@
       "pattern",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "priority",
       "private_methods",
       "protected_methods",
@@ -7798,6 +8508,7 @@
       "updated_by_last_action?",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "y"
@@ -7863,6 +8574,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -7885,6 +8597,11 @@
       "params=",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -7951,6 +8668,7 @@
       "updated_by_last_action?",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "version",
@@ -8021,6 +8739,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -8041,6 +8760,11 @@
       "params=",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -8114,6 +8838,7 @@
       "user",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "y"
@@ -8133,8 +8858,10 @@
       "allowed_actions",
       "allowed_actions=",
       "as_json",
+      "atomic_update",
       "backup",
       "checksum",
+      "checksum=",
       "class",
       "clone",
       "content",
@@ -8165,17 +8892,23 @@
       "events",
       "extend",
       "filename_to_qualified_string",
+      "force_unlink",
       "freeze",
       "frozen?",
       "gem",
       "group",
       "hash",
+      "helper",
+      "helper_modules",
+      "helpers",
       "identity",
       "ignore_failure",
       "immediate_notifications",
       "inherits",
       "initialize_clone",
       "initialize_dup",
+      "inline_helper_blocks",
+      "inline_helper_modules",
       "inspect",
       "instance_eval",
       "instance_exec",
@@ -8187,8 +8920,10 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "local",
+      "manage_symlink_source",
       "method",
       "method_missing",
       "methods",
@@ -8211,6 +8946,11 @@
       "path",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -8278,6 +9018,7 @@
       "user",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "variables",
@@ -8361,6 +9102,7 @@
       "is_a?",
       "keep_releases",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -8383,6 +9125,11 @@
       "params=",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -8469,6 +9216,7 @@
       "user",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "y"
@@ -8538,6 +9286,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "manage_home",
       "method",
@@ -8561,6 +9310,11 @@
       "password",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -8629,8 +9383,187 @@
       "username",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
+      "value_for_platform",
+      "value_for_platform_family",
+      "y"
+    ],
+    "windows_script": [
+      "!",
+      "!=",
+      "!~",
+      "<=>",
+      "==",
+      "===",
+      "=~",
+      "__id__",
+      "__send__",
+      "action",
+      "after_created",
+      "allowed_actions",
+      "allowed_actions=",
+      "architecture",
+      "as_json",
+      "assert_valid_windows_architecture!",
+      "class",
+      "clone",
+      "code",
+      "command",
+      "convert_to_class_name",
+      "convert_to_snake_case",
+      "cookbook_name",
+      "cookbook_name=",
+      "cookbook_version",
+      "creates",
+      "customize_exception",
+      "cwd",
+      "data_bag",
+      "data_bag_item",
+      "define_singleton_method",
+      "defined_at",
+      "delayed_notifications",
+      "deprecated_ivar",
+      "disable_wow64_file_redirection",
+      "display",
+      "dup",
+      "elapsed_time",
+      "enclosing_provider",
+      "enclosing_provider=",
+      "enum_for",
+      "env",
+      "environment",
+      "epic_fail",
+      "eql?",
+      "equal?",
+      "events",
+      "extend",
+      "filename_to_qualified_string",
+      "flags",
+      "freeze",
+      "frozen?",
+      "gem",
+      "group",
+      "hash",
+      "identity",
+      "ignore_failure",
+      "immediate_notifications",
+      "initialize_clone",
+      "initialize_dup",
+      "inspect",
+      "instance_eval",
+      "instance_exec",
+      "instance_of?",
+      "instance_variable_defined?",
+      "instance_variable_get",
+      "instance_variable_set",
+      "instance_variables",
+      "interpreter",
+      "is",
+      "is_a?",
+      "is_i386_windows_process?",
+      "kind_of?",
+      "lazy",
+      "load_prior_resource",
+      "method",
+      "method_missing",
+      "methods",
+      "name",
+      "nil?",
+      "node_supports_windows_architecture?",
+      "node_windows_architecture",
+      "noop",
+      "not_if",
+      "not_if_args",
+      "notifies",
+      "notifies_delayed",
+      "notifies_immediately",
+      "object_id",
+      "only_if",
+      "only_if_args",
+      "params",
+      "params=",
+      "path",
+      "platform?",
+      "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
+      "private_methods",
+      "protected_methods",
+      "provider",
+      "provider=",
+      "provider_for_action",
+      "psych_to_yaml",
+      "psych_y",
+      "public_method",
+      "public_methods",
+      "public_send",
+      "recipe_name",
+      "recipe_name=",
+      "registry_data_exists?",
+      "registry_get_subkeys",
+      "registry_get_values",
+      "registry_has_subkeys?",
+      "registry_key_exists?",
+      "registry_value_exists?",
+      "resolve_notification_references",
+      "resource_name",
+      "resources",
+      "respond_to?",
+      "respond_to_missing?",
+      "restore_wow64_file_redirection",
+      "retries",
+      "retries=",
+      "retry_delay",
+      "retry_delay=",
+      "returns",
+      "run_action",
+      "run_context",
+      "run_context=",
+      "search",
+      "send",
+      "set_or_return",
+      "should_skip?",
+      "singleton_class",
+      "singleton_methods",
+      "snake_case_basename",
+      "source_line",
+      "source_line=",
+      "state",
+      "subscribes",
+      "supports",
+      "systemu",
+      "taint",
+      "tainted?",
+      "tap",
+      "timeout",
+      "to_enum",
+      "to_hash",
+      "to_json",
+      "to_s",
+      "to_text",
+      "to_yaml",
+      "to_yaml_properties",
+      "trust",
+      "umask",
+      "untaint",
+      "untrust",
+      "untrusted?",
+      "updated",
+      "updated=",
+      "updated?",
+      "updated_by_last_action",
+      "updated_by_last_action?",
+      "user",
+      "valid_windows_architecture?",
+      "validate",
+      "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
+      "wow64_architecture_override_required?",
       "y"
     ],
     "yum_package": [
@@ -8697,6 +9630,7 @@
       "is",
       "is_a?",
       "kind_of?",
+      "lazy",
       "load_prior_resource",
       "method",
       "method_missing",
@@ -8719,6 +9653,11 @@
       "params=",
       "platform?",
       "platform_family?",
+      "pretty_inspect",
+      "pretty_print",
+      "pretty_print_cycle",
+      "pretty_print_inspect",
+      "pretty_print_instance_variables",
       "private_methods",
       "protected_methods",
       "provider",
@@ -8785,6 +9724,7 @@
       "updated_by_last_action?",
       "validate",
       "validate_action",
+      "validate_resource_spec!",
       "value_for_platform",
       "value_for_platform_family",
       "version",
diff --git a/chef_dsl_metadata/gemfiles/chef_0.10.0.gemfile b/chef_dsl_metadata/gemfiles/chef_0.10.0.gemfile
deleted file mode 100644
index 3b64c78..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.10.0.gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file was generated by Appraisal
-
-source "https://rubygems.org/"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "yajl-ruby", "~> 1.1.0"
-gem "chef", "0.10.0"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_0.10.0.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_0.10.0.gemfile.lock
deleted file mode 100644
index a024d01..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.10.0.gemfile.lock
+++ /dev/null
@@ -1,96 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    allison (2.0.3)
-    appraisal (0.5.1)
-      bundler
-      rake
-    bunny (0.8.0)
-    chef (0.10.0)
-      bunny (>= 0.6.0)
-      erubis
-      highline
-      json (>= 1.4.4, <= 1.5.2)
-      json (>= 1.4.4, <= 1.5.2)
-      mixlib-authentication (>= 1.1.0)
-      mixlib-cli (>= 1.1.0)
-      mixlib-config (>= 1.1.2)
-      mixlib-log (>= 1.3.0)
-      moneta
-      net-ssh (~> 2.1.3)
-      net-ssh-multi (~> 1.0.1)
-      ohai (>= 0.6.0)
-      rest-client (>= 1.0.4, < 1.7.0)
-      rest-client (>= 1.0.4, < 1.7.0)
-      treetop (~> 1.4.9)
-      uuidtools
-    echoe (4.6.3)
-      allison (>= 2.0.3)
-      gemcutter (>= 0.7.0)
-      rake (>= 0.9.2)
-      rdoc (>= 3.6.1)
-      rubyforge (>= 2.0.4)
-    erubis (2.7.0)
-    gemcutter (0.7.1)
-    highline (1.6.16)
-    ipaddress (0.8.0)
-    json (1.5.2)
-    json_pure (1.7.7)
-    mime-types (1.21)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    mixlib-shellout (1.1.0-x86-mingw32)
-      win32-process (~> 0.6.5)
-    moneta (0.7.14)
-    net-ssh (2.1.4)
-    net-ssh-gateway (1.1.0)
-      net-ssh (>= 1.99.1)
-    net-ssh-multi (1.0.1)
-      echoe
-      net-ssh (>= 1.99.2)
-      net-ssh-gateway (>= 0.99.0)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    polyglot (0.3.3)
-    rake (0.9.2.2)
-    rdoc (4.0.1)
-      json (~> 1.4)
-    rest-client (1.6.7)
-      mime-types (>= 1.16)
-    rubyforge (2.0.4)
-      json_pure (>= 1.1.7)
-    systemu (2.5.2)
-    treetop (1.4.12)
-      polyglot
-      polyglot (>= 0.3.1)
-    uuidtools (2.1.3)
-    win32-api (1.4.8-x86-mingw32)
-    win32-process (0.6.6)
-      windows-pr (>= 1.2.2)
-    windows-api (0.4.2)
-      win32-api (>= 1.4.5)
-    windows-pr (1.2.2)
-      win32-api (>= 1.4.5)
-      windows-api (>= 0.3.0)
-    yajl-ruby (1.1.0)
-    yajl-ruby (1.1.0-x86-mingw32)
-
-PLATFORMS
-  ruby
-  x86-mingw32
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 0.10.0)
-  rake (~> 0.9.2.2)
-  yajl-ruby (~> 1.1.0)
diff --git a/chef_dsl_metadata/gemfiles/chef_0.10.10.gemfile b/chef_dsl_metadata/gemfiles/chef_0.10.10.gemfile
deleted file mode 100644
index af0d9e7..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.10.10.gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file was generated by Appraisal
-
-source "https://rubygems.org/"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "yajl-ruby", "~> 1.1.0"
-gem "chef", "0.10.10"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_0.10.10.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_0.10.10.gemfile.lock
deleted file mode 100644
index a4eb762..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.10.10.gemfile.lock
+++ /dev/null
@@ -1,82 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    appraisal (0.5.1)
-      bundler
-      rake
-    bunny (0.8.0)
-    chef (0.10.10)
-      bunny (>= 0.6.0)
-      erubis
-      highline (>= 1.6.9)
-      json (>= 1.4.4, <= 1.6.1)
-      mixlib-authentication (>= 1.1.0)
-      mixlib-cli (>= 1.1.0)
-      mixlib-config (>= 1.1.2)
-      mixlib-log (>= 1.3.0)
-      mixlib-shellout (~> 1.0.0.rc)
-      moneta
-      net-ssh (~> 2.2.2)
-      net-ssh-multi (~> 1.1.0)
-      ohai (>= 0.6.0)
-      rest-client (>= 1.0.4, < 1.7.0)
-      treetop (~> 1.4.9)
-      uuidtools
-      yajl-ruby (>= 1.1.0)
-    erubis (2.7.0)
-    highline (1.6.16)
-    ipaddress (0.8.0)
-    json (1.6.1)
-    mime-types (1.21)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.0.0)
-    mixlib-shellout (1.0.0-x86-mingw32)
-      win32-process (~> 0.6.5)
-    moneta (0.7.14)
-    net-ssh (2.2.2)
-    net-ssh-gateway (1.1.0)
-      net-ssh (>= 1.99.1)
-    net-ssh-multi (1.1)
-      net-ssh (>= 2.1.4)
-      net-ssh-gateway (>= 0.99.0)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    polyglot (0.3.3)
-    rake (0.9.2.2)
-    rest-client (1.6.7)
-      mime-types (>= 1.16)
-    systemu (2.5.2)
-    treetop (1.4.12)
-      polyglot
-      polyglot (>= 0.3.1)
-    uuidtools (2.1.3)
-    win32-api (1.4.8-x86-mingw32)
-    win32-process (0.6.6)
-      windows-pr (>= 1.2.2)
-    windows-api (0.4.2)
-      win32-api (>= 1.4.5)
-    windows-pr (1.2.2)
-      win32-api (>= 1.4.5)
-      windows-api (>= 0.3.0)
-    yajl-ruby (1.1.0)
-    yajl-ruby (1.1.0-x86-mingw32)
-
-PLATFORMS
-  ruby
-  x86-mingw32
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 0.10.10)
-  rake (~> 0.9.2.2)
-  yajl-ruby (~> 1.1.0)
diff --git a/chef_dsl_metadata/gemfiles/chef_0.10.2.gemfile b/chef_dsl_metadata/gemfiles/chef_0.10.2.gemfile
deleted file mode 100644
index b636be2..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.10.2.gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file was generated by Appraisal
-
-source "https://rubygems.org/"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "yajl-ruby", "~> 1.1.0"
-gem "chef", "0.10.2"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_0.10.2.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_0.10.2.gemfile.lock
deleted file mode 100644
index 15515ce..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.10.2.gemfile.lock
+++ /dev/null
@@ -1,82 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    appraisal (0.5.1)
-      bundler
-      rake
-    bunny (0.8.0)
-    chef (0.10.2)
-      bunny (>= 0.6.0)
-      erubis
-      highline
-      json (>= 1.4.4, <= 1.5.2)
-      json (>= 1.4.4, <= 1.5.2)
-      mixlib-authentication (>= 1.1.0)
-      mixlib-cli (>= 1.1.0)
-      mixlib-config (>= 1.1.2)
-      mixlib-log (>= 1.3.0)
-      moneta
-      net-ssh (~> 2.1.3)
-      net-ssh-multi (~> 1.0.1)
-      ohai (>= 0.6.0)
-      rest-client (>= 1.0.4, < 1.7.0)
-      rest-client (>= 1.0.4, < 1.7.0)
-      treetop (~> 1.4.9)
-      uuidtools
-    erubis (2.7.0)
-    highline (1.6.16)
-    ipaddress (0.8.0)
-    json (1.5.2)
-    mime-types (1.21)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    mixlib-shellout (1.1.0-x86-mingw32)
-      win32-process (~> 0.6.5)
-    moneta (0.7.14)
-    net-ssh (2.1.4)
-    net-ssh-gateway (1.1.0)
-      net-ssh (>= 1.99.1)
-    net-ssh-multi (1.0.1)
-      net-ssh (>= 1.99.2)
-      net-ssh-gateway (>= 0.99.0)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    polyglot (0.3.3)
-    rake (0.9.2.2)
-    rest-client (1.6.7)
-      mime-types (>= 1.16)
-    systemu (2.5.2)
-    treetop (1.4.12)
-      polyglot
-      polyglot (>= 0.3.1)
-    uuidtools (2.1.3)
-    win32-api (1.4.8-x86-mingw32)
-    win32-process (0.6.6)
-      windows-pr (>= 1.2.2)
-    windows-api (0.4.2)
-      win32-api (>= 1.4.5)
-    windows-pr (1.2.2)
-      win32-api (>= 1.4.5)
-      windows-api (>= 0.3.0)
-    yajl-ruby (1.1.0)
-    yajl-ruby (1.1.0-x86-mingw32)
-
-PLATFORMS
-  ruby
-  x86-mingw32
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 0.10.2)
-  rake (~> 0.9.2.2)
-  yajl-ruby (~> 1.1.0)
diff --git a/chef_dsl_metadata/gemfiles/chef_0.10.4.gemfile b/chef_dsl_metadata/gemfiles/chef_0.10.4.gemfile
deleted file mode 100644
index 526c7c4..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.10.4.gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file was generated by Appraisal
-
-source "https://rubygems.org/"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "yajl-ruby", "~> 1.1.0"
-gem "chef", "0.10.4"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_0.10.4.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_0.10.4.gemfile.lock
deleted file mode 100644
index 5de6acc..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.10.4.gemfile.lock
+++ /dev/null
@@ -1,82 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    appraisal (0.5.1)
-      bundler
-      rake
-    bunny (0.8.0)
-    chef (0.10.4)
-      bunny (>= 0.6.0)
-      erubis
-      highline
-      json (>= 1.4.4, <= 1.5.2)
-      json (>= 1.4.4, <= 1.5.2)
-      mixlib-authentication (>= 1.1.0)
-      mixlib-cli (>= 1.1.0)
-      mixlib-config (>= 1.1.2)
-      mixlib-log (>= 1.3.0)
-      moneta
-      net-ssh (~> 2.1.3)
-      net-ssh-multi (~> 1.1.0)
-      ohai (>= 0.6.0)
-      rest-client (>= 1.0.4, < 1.7.0)
-      rest-client (>= 1.0.4, < 1.7.0)
-      treetop (~> 1.4.9)
-      uuidtools
-    erubis (2.7.0)
-    highline (1.6.16)
-    ipaddress (0.8.0)
-    json (1.5.2)
-    mime-types (1.21)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    mixlib-shellout (1.1.0-x86-mingw32)
-      win32-process (~> 0.6.5)
-    moneta (0.7.14)
-    net-ssh (2.1.4)
-    net-ssh-gateway (1.1.0)
-      net-ssh (>= 1.99.1)
-    net-ssh-multi (1.1)
-      net-ssh (>= 2.1.4)
-      net-ssh-gateway (>= 0.99.0)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    polyglot (0.3.3)
-    rake (0.9.2.2)
-    rest-client (1.6.7)
-      mime-types (>= 1.16)
-    systemu (2.5.2)
-    treetop (1.4.12)
-      polyglot
-      polyglot (>= 0.3.1)
-    uuidtools (2.1.3)
-    win32-api (1.4.8-x86-mingw32)
-    win32-process (0.6.6)
-      windows-pr (>= 1.2.2)
-    windows-api (0.4.2)
-      win32-api (>= 1.4.5)
-    windows-pr (1.2.2)
-      win32-api (>= 1.4.5)
-      windows-api (>= 0.3.0)
-    yajl-ruby (1.1.0)
-    yajl-ruby (1.1.0-x86-mingw32)
-
-PLATFORMS
-  ruby
-  x86-mingw32
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 0.10.4)
-  rake (~> 0.9.2.2)
-  yajl-ruby (~> 1.1.0)
diff --git a/chef_dsl_metadata/gemfiles/chef_0.10.6.gemfile b/chef_dsl_metadata/gemfiles/chef_0.10.6.gemfile
deleted file mode 100644
index 3a035a9..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.10.6.gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file was generated by Appraisal
-
-source "https://rubygems.org/"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "yajl-ruby", "~> 1.1.0"
-gem "chef", "0.10.6"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_0.10.6.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_0.10.6.gemfile.lock
deleted file mode 100644
index 35be742..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.10.6.gemfile.lock
+++ /dev/null
@@ -1,80 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    appraisal (0.5.1)
-      bundler
-      rake
-    bunny (0.8.0)
-    chef (0.10.6)
-      bunny (>= 0.6.0)
-      erubis
-      highline
-      json (>= 1.4.4, <= 1.6.1)
-      mixlib-authentication (>= 1.1.0)
-      mixlib-cli (>= 1.1.0)
-      mixlib-config (>= 1.1.2)
-      mixlib-log (>= 1.3.0)
-      moneta
-      net-ssh (~> 2.1.3)
-      net-ssh-multi (~> 1.1.0)
-      ohai (>= 0.6.0)
-      rest-client (>= 1.0.4, < 1.7.0)
-      treetop (~> 1.4.9)
-      uuidtools
-    erubis (2.7.0)
-    highline (1.6.16)
-    ipaddress (0.8.0)
-    json (1.6.1)
-    mime-types (1.21)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    mixlib-shellout (1.1.0-x86-mingw32)
-      win32-process (~> 0.6.5)
-    moneta (0.7.14)
-    net-ssh (2.1.4)
-    net-ssh-gateway (1.1.0)
-      net-ssh (>= 1.99.1)
-    net-ssh-multi (1.1)
-      net-ssh (>= 2.1.4)
-      net-ssh-gateway (>= 0.99.0)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    polyglot (0.3.3)
-    rake (0.9.2.2)
-    rest-client (1.6.7)
-      mime-types (>= 1.16)
-    systemu (2.5.2)
-    treetop (1.4.12)
-      polyglot
-      polyglot (>= 0.3.1)
-    uuidtools (2.1.3)
-    win32-api (1.4.8-x86-mingw32)
-    win32-process (0.6.6)
-      windows-pr (>= 1.2.2)
-    windows-api (0.4.2)
-      win32-api (>= 1.4.5)
-    windows-pr (1.2.2)
-      win32-api (>= 1.4.5)
-      windows-api (>= 0.3.0)
-    yajl-ruby (1.1.0)
-    yajl-ruby (1.1.0-x86-mingw32)
-
-PLATFORMS
-  ruby
-  x86-mingw32
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 0.10.6)
-  rake (~> 0.9.2.2)
-  yajl-ruby (~> 1.1.0)
diff --git a/chef_dsl_metadata/gemfiles/chef_0.10.8.gemfile b/chef_dsl_metadata/gemfiles/chef_0.10.8.gemfile
deleted file mode 100644
index 9b3d39d..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.10.8.gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file was generated by Appraisal
-
-source "https://rubygems.org/"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "yajl-ruby", "~> 1.1.0"
-gem "chef", "0.10.8"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_0.10.8.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_0.10.8.gemfile.lock
deleted file mode 100644
index b4abc6e..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.10.8.gemfile.lock
+++ /dev/null
@@ -1,80 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    appraisal (0.5.1)
-      bundler
-      rake
-    bunny (0.8.0)
-    chef (0.10.8)
-      bunny (>= 0.6.0)
-      erubis
-      highline
-      json (>= 1.4.4, <= 1.6.1)
-      mixlib-authentication (>= 1.1.0)
-      mixlib-cli (>= 1.1.0)
-      mixlib-config (>= 1.1.2)
-      mixlib-log (>= 1.3.0)
-      moneta
-      net-ssh (~> 2.1.3)
-      net-ssh-multi (~> 1.1.0)
-      ohai (>= 0.6.0)
-      rest-client (>= 1.0.4, < 1.7.0)
-      treetop (~> 1.4.9)
-      uuidtools
-    erubis (2.7.0)
-    highline (1.6.16)
-    ipaddress (0.8.0)
-    json (1.6.1)
-    mime-types (1.21)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    mixlib-shellout (1.1.0-x86-mingw32)
-      win32-process (~> 0.6.5)
-    moneta (0.7.14)
-    net-ssh (2.1.4)
-    net-ssh-gateway (1.1.0)
-      net-ssh (>= 1.99.1)
-    net-ssh-multi (1.1)
-      net-ssh (>= 2.1.4)
-      net-ssh-gateway (>= 0.99.0)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    polyglot (0.3.3)
-    rake (0.9.2.2)
-    rest-client (1.6.7)
-      mime-types (>= 1.16)
-    systemu (2.5.2)
-    treetop (1.4.12)
-      polyglot
-      polyglot (>= 0.3.1)
-    uuidtools (2.1.3)
-    win32-api (1.4.8-x86-mingw32)
-    win32-process (0.6.6)
-      windows-pr (>= 1.2.2)
-    windows-api (0.4.2)
-      win32-api (>= 1.4.5)
-    windows-pr (1.2.2)
-      win32-api (>= 1.4.5)
-      windows-api (>= 0.3.0)
-    yajl-ruby (1.1.0)
-    yajl-ruby (1.1.0-x86-mingw32)
-
-PLATFORMS
-  ruby
-  x86-mingw32
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 0.10.8)
-  rake (~> 0.9.2.2)
-  yajl-ruby (~> 1.1.0)
diff --git a/chef_dsl_metadata/gemfiles/chef_0.7.10.gemfile b/chef_dsl_metadata/gemfiles/chef_0.7.10.gemfile
deleted file mode 100644
index 1ce87d7..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.7.10.gemfile
+++ /dev/null
@@ -1,8 +0,0 @@
-# This file was generated by Appraisal
-
-source "http://rubygems.org"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "chef", "0.7.10"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_0.7.10.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_0.7.10.gemfile.lock
deleted file mode 100644
index 3f1c39d..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.7.10.gemfile.lock
+++ /dev/null
@@ -1,45 +0,0 @@
-GEM
-  remote: http://rubygems.org/
-  specs:
-    appraisal (0.5.1)
-      bundler
-      rake
-    chef (0.7.10)
-      erubis
-      extlib
-      json
-      mixlib-cli
-      mixlib-config (>= 1.0.12)
-      mixlib-log
-      ohai
-      ruby-openid
-      stomp
-    erubis (2.7.0)
-    extlib (0.9.16)
-    ipaddress (0.8.0)
-    json (1.7.7)
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    rake (0.9.2.2)
-    ruby-openid (2.2.3)
-    stomp (1.2.9)
-    systemu (2.5.2)
-    yajl-ruby (1.1.0)
-
-PLATFORMS
-  ruby
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 0.7.10)
-  rake (~> 0.9.2.2)
diff --git a/chef_dsl_metadata/gemfiles/chef_0.7.12.gemfile b/chef_dsl_metadata/gemfiles/chef_0.7.12.gemfile
deleted file mode 100644
index ae1cd2a..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.7.12.gemfile
+++ /dev/null
@@ -1,13 +0,0 @@
-# This file was generated by Appraisal
-
-source "http://rubygems.org"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "aruba", "~> 0.4.11"
-gem "cucumber", "~> 1.2.1"
-gem "minitest", "~> 3.3.0"
-gem "simplecov", "~> 0.6.4"
-gem "chef", "0.7.12"
-
-gemspec :path=>"../"
\ No newline at end of file
diff --git a/chef_dsl_metadata/gemfiles/chef_0.7.12.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_0.7.12.gemfile.lock
deleted file mode 100644
index 14d0143..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.7.12.gemfile.lock
+++ /dev/null
@@ -1,98 +0,0 @@
-PATH
-  remote: /home/acrmp/code/foodcritic
-  specs:
-    foodcritic (2.0.0)
-      erubis
-      gherkin (~> 2.11.1)
-      nokogiri (~> 1.5.4)
-      rak (~> 1.4)
-      treetop (~> 1.4.10)
-      yajl-ruby (~> 1.1.0)
-
-GEM
-  remote: http://rubygems.org/
-  specs:
-    appraisal (0.5.1)
-      bundler
-      rake
-    aruba (0.4.11)
-      childprocess (>= 0.2.3)
-      cucumber (>= 1.1.1)
-      ffi (>= 1.0.11)
-      rspec (>= 2.7.0)
-    builder (3.2.0)
-    chef (0.7.12)
-      erubis
-      extlib
-      json
-      mixlib-cli
-      mixlib-config (>= 1.0.12)
-      mixlib-log
-      ohai (>= 0.3.4)
-      ruby-openid
-      stomp
-    childprocess (0.3.9)
-      ffi (~> 1.0, >= 1.0.11)
-    cucumber (1.2.3)
-      builder (>= 2.1.2)
-      diff-lcs (>= 1.1.3)
-      gherkin (~> 2.11.6)
-      multi_json (~> 1.3)
-    diff-lcs (1.2.1)
-    erubis (2.7.0)
-    extlib (0.9.16)
-    ffi (1.6.0)
-    gherkin (2.11.6)
-      json (>= 1.7.6)
-    ipaddress (0.8.0)
-    json (1.7.7)
-    minitest (3.3.0)
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    multi_json (1.7.2)
-    nokogiri (1.5.9)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    polyglot (0.3.3)
-    rak (1.4)
-    rake (0.9.2.2)
-    rspec (2.13.0)
-      rspec-core (~> 2.13.0)
-      rspec-expectations (~> 2.13.0)
-      rspec-mocks (~> 2.13.0)
-    rspec-core (2.13.1)
-    rspec-expectations (2.13.0)
-      diff-lcs (>= 1.1.3, < 2.0)
-    rspec-mocks (2.13.0)
-    ruby-openid (2.2.3)
-    simplecov (0.6.4)
-      multi_json (~> 1.0)
-      simplecov-html (~> 0.5.3)
-    simplecov-html (0.5.3)
-    stomp (1.2.9)
-    systemu (2.5.2)
-    treetop (1.4.12)
-      polyglot
-      polyglot (>= 0.3.1)
-    yajl-ruby (1.1.0)
-
-PLATFORMS
-  ruby
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  aruba (~> 0.4.11)
-  chef (= 0.7.12)
-  cucumber (~> 1.2.1)
-  foodcritic!
-  minitest (~> 3.3.0)
-  rake (~> 0.9.2.2)
-  simplecov (~> 0.6.4)
diff --git a/chef_dsl_metadata/gemfiles/chef_0.7.16.gemfile b/chef_dsl_metadata/gemfiles/chef_0.7.16.gemfile
deleted file mode 100644
index 08bec5b..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.7.16.gemfile
+++ /dev/null
@@ -1,8 +0,0 @@
-# This file was generated by Appraisal
-
-source "http://rubygems.org"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "chef", "0.7.16"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_0.7.16.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_0.7.16.gemfile.lock
deleted file mode 100644
index 2394042..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.7.16.gemfile.lock
+++ /dev/null
@@ -1,45 +0,0 @@
-GEM
-  remote: http://rubygems.org/
-  specs:
-    appraisal (0.5.1)
-      bundler
-      rake
-    chef (0.7.16)
-      erubis
-      extlib
-      json
-      mixlib-cli
-      mixlib-config (>= 1.0.12)
-      mixlib-log
-      ohai (>= 0.3.6)
-      ruby-openid
-      stomp
-    erubis (2.7.0)
-    extlib (0.9.16)
-    ipaddress (0.8.0)
-    json (1.7.7)
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    rake (0.9.2.2)
-    ruby-openid (2.2.3)
-    stomp (1.2.9)
-    systemu (2.5.2)
-    yajl-ruby (1.1.0)
-
-PLATFORMS
-  ruby
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 0.7.16)
-  rake (~> 0.9.2.2)
diff --git a/chef_dsl_metadata/gemfiles/chef_0.8.10.gemfile b/chef_dsl_metadata/gemfiles/chef_0.8.10.gemfile
deleted file mode 100644
index 2c32d23..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.8.10.gemfile
+++ /dev/null
@@ -1,8 +0,0 @@
-# This file was generated by Appraisal
-
-source "http://rubygems.org"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "chef", "0.8.10"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_0.8.10.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_0.8.10.gemfile.lock
deleted file mode 100644
index 00b8715..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.8.10.gemfile.lock
+++ /dev/null
@@ -1,48 +0,0 @@
-GEM
-  remote: http://rubygems.org/
-  specs:
-    appraisal (0.5.1)
-      bundler
-      rake
-    bunny (0.8.0)
-    chef (0.8.10)
-      bunny (>= 0.6.0)
-      erubis
-      extlib
-      json
-      mixlib-authentication (>= 1.1.0)
-      mixlib-cli (>= 1.1.0)
-      mixlib-config (>= 1.1.0)
-      mixlib-log (>= 1.1.0)
-      moneta
-      ohai (>= 0.5.0)
-    erubis (2.7.0)
-    extlib (0.9.16)
-    ipaddress (0.8.0)
-    json (1.7.7)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    moneta (0.7.14)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    rake (0.9.2.2)
-    systemu (2.5.2)
-    yajl-ruby (1.1.0)
-
-PLATFORMS
-  ruby
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 0.8.10)
-  rake (~> 0.9.2.2)
diff --git a/chef_dsl_metadata/gemfiles/chef_0.8.14.gemfile b/chef_dsl_metadata/gemfiles/chef_0.8.14.gemfile
deleted file mode 100644
index 0bdf4db..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.8.14.gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file was generated by Appraisal
-
-source "https://rubygems.org/"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "yajl-ruby", "~> 1.1.0"
-gem "chef", "0.8.14"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_0.8.14.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_0.8.14.gemfile.lock
deleted file mode 100644
index f33f430..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.8.14.gemfile.lock
+++ /dev/null
@@ -1,49 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    appraisal (0.5.1)
-      bundler
-      rake
-    bunny (0.8.0)
-    chef (0.8.14)
-      bunny (>= 0.6.0)
-      erubis
-      extlib
-      json (<= 1.4.2)
-      mixlib-authentication (>= 1.1.0)
-      mixlib-cli (>= 1.1.0)
-      mixlib-config (>= 1.1.0)
-      mixlib-log (>= 1.1.0)
-      moneta
-      ohai (>= 0.5.0)
-    erubis (2.7.0)
-    extlib (0.9.16)
-    ipaddress (0.8.0)
-    json (1.4.2)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    moneta (0.7.14)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    rake (0.9.2.2)
-    systemu (2.5.2)
-    yajl-ruby (1.1.0)
-
-PLATFORMS
-  ruby
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 0.8.14)
-  rake (~> 0.9.2.2)
-  yajl-ruby (~> 1.1.0)
diff --git a/chef_dsl_metadata/gemfiles/chef_0.8.16.gemfile b/chef_dsl_metadata/gemfiles/chef_0.8.16.gemfile
deleted file mode 100644
index 2b3904d..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.8.16.gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file was generated by Appraisal
-
-source "https://rubygems.org/"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "yajl-ruby", "~> 1.1.0"
-gem "chef", "0.8.16"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_0.8.16.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_0.8.16.gemfile.lock
deleted file mode 100644
index c250ffe..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.8.16.gemfile.lock
+++ /dev/null
@@ -1,49 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    appraisal (0.5.1)
-      bundler
-      rake
-    bunny (0.8.0)
-    chef (0.8.16)
-      bunny (>= 0.6.0)
-      erubis
-      extlib
-      json (<= 1.4.2)
-      mixlib-authentication (>= 1.1.0)
-      mixlib-cli (>= 1.1.0)
-      mixlib-config (>= 1.1.0)
-      mixlib-log (>= 1.1.0)
-      moneta
-      ohai (>= 0.5.0)
-    erubis (2.7.0)
-    extlib (0.9.16)
-    ipaddress (0.8.0)
-    json (1.4.2)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    moneta (0.7.14)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    rake (0.9.2.2)
-    systemu (2.5.2)
-    yajl-ruby (1.1.0)
-
-PLATFORMS
-  ruby
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 0.8.16)
-  rake (~> 0.9.2.2)
-  yajl-ruby (~> 1.1.0)
diff --git a/chef_dsl_metadata/gemfiles/chef_0.8.2.gemfile b/chef_dsl_metadata/gemfiles/chef_0.8.2.gemfile
deleted file mode 100644
index 15db529..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.8.2.gemfile
+++ /dev/null
@@ -1,8 +0,0 @@
-# This file was generated by Appraisal
-
-source "http://rubygems.org"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "chef", "0.8.2"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_0.8.2.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_0.8.2.gemfile.lock
deleted file mode 100644
index 3800d5f..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.8.2.gemfile.lock
+++ /dev/null
@@ -1,60 +0,0 @@
-GEM
-  remote: http://rubygems.org/
-  specs:
-    amq-client (1.0.0)
-      amq-protocol (>= 1.2.0)
-      eventmachine
-    amq-protocol (1.2.0)
-    amqp (1.0.0)
-      amq-client (~> 1.0.0)
-      amq-protocol (~> 1.2.0)
-      eventmachine
-    appraisal (0.5.1)
-      bundler
-      rake
-    bunny (0.8.0)
-    chef (0.8.2)
-      amqp
-      bunny (>= 0.6.0)
-      erubis
-      extlib
-      json
-      mixlib-authentication (>= 1.1.0)
-      mixlib-cli (>= 1.1.0)
-      mixlib-config (>= 1.1.0)
-      mixlib-log (>= 1.1.0)
-      moneta
-      ohai (>= 0.4.0)
-      ruby-hmac
-    erubis (2.7.0)
-    eventmachine (1.0.3)
-    extlib (0.9.16)
-    ipaddress (0.8.0)
-    json (1.7.7)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    moneta (0.7.14)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    rake (0.9.2.2)
-    ruby-hmac (0.4.0)
-    systemu (2.5.2)
-    yajl-ruby (1.1.0)
-
-PLATFORMS
-  ruby
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 0.8.2)
-  rake (~> 0.9.2.2)
diff --git a/chef_dsl_metadata/gemfiles/chef_0.8.4.gemfile b/chef_dsl_metadata/gemfiles/chef_0.8.4.gemfile
deleted file mode 100644
index abeabbd..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.8.4.gemfile
+++ /dev/null
@@ -1,13 +0,0 @@
-# This file was generated by Appraisal
-
-source "http://rubygems.org"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "aruba", "~> 0.4.11"
-gem "cucumber", "~> 1.2.1"
-gem "minitest", "~> 3.3.0"
-gem "simplecov", "~> 0.6.4"
-gem "chef", "0.8.4"
-
-gemspec :path=>"../"
\ No newline at end of file
diff --git a/chef_dsl_metadata/gemfiles/chef_0.8.4.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_0.8.4.gemfile.lock
deleted file mode 100644
index 5494a23..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.8.4.gemfile.lock
+++ /dev/null
@@ -1,113 +0,0 @@
-PATH
-  remote: /home/acrmp/code/foodcritic
-  specs:
-    foodcritic (2.0.0)
-      erubis
-      gherkin (~> 2.11.1)
-      nokogiri (~> 1.5.4)
-      rak (~> 1.4)
-      treetop (~> 1.4.10)
-      yajl-ruby (~> 1.1.0)
-
-GEM
-  remote: http://rubygems.org/
-  specs:
-    amq-client (1.0.0)
-      amq-protocol (>= 1.2.0)
-      eventmachine
-    amq-protocol (1.2.0)
-    amqp (1.0.0)
-      amq-client (~> 1.0.0)
-      amq-protocol (~> 1.2.0)
-      eventmachine
-    appraisal (0.5.1)
-      bundler
-      rake
-    aruba (0.4.11)
-      childprocess (>= 0.2.3)
-      cucumber (>= 1.1.1)
-      ffi (>= 1.0.11)
-      rspec (>= 2.7.0)
-    builder (3.2.0)
-    bunny (0.8.0)
-    chef (0.8.4)
-      amqp
-      bunny (>= 0.6.0)
-      erubis
-      extlib
-      json
-      mixlib-authentication (>= 1.1.0)
-      mixlib-cli (>= 1.1.0)
-      mixlib-config (>= 1.1.0)
-      mixlib-log (>= 1.1.0)
-      moneta
-      ohai (>= 0.4.0)
-      ruby-hmac
-    childprocess (0.3.9)
-      ffi (~> 1.0, >= 1.0.11)
-    cucumber (1.2.3)
-      builder (>= 2.1.2)
-      diff-lcs (>= 1.1.3)
-      gherkin (~> 2.11.6)
-      multi_json (~> 1.3)
-    diff-lcs (1.2.1)
-    erubis (2.7.0)
-    eventmachine (1.0.3)
-    extlib (0.9.16)
-    ffi (1.6.0)
-    gherkin (2.11.6)
-      json (>= 1.7.6)
-    ipaddress (0.8.0)
-    json (1.7.7)
-    minitest (3.3.0)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    moneta (0.7.14)
-    multi_json (1.7.2)
-    nokogiri (1.5.9)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    polyglot (0.3.3)
-    rak (1.4)
-    rake (0.9.2.2)
-    rspec (2.13.0)
-      rspec-core (~> 2.13.0)
-      rspec-expectations (~> 2.13.0)
-      rspec-mocks (~> 2.13.0)
-    rspec-core (2.13.1)
-    rspec-expectations (2.13.0)
-      diff-lcs (>= 1.1.3, < 2.0)
-    rspec-mocks (2.13.0)
-    ruby-hmac (0.4.0)
-    simplecov (0.6.4)
-      multi_json (~> 1.0)
-      simplecov-html (~> 0.5.3)
-    simplecov-html (0.5.3)
-    systemu (2.5.2)
-    treetop (1.4.12)
-      polyglot
-      polyglot (>= 0.3.1)
-    yajl-ruby (1.1.0)
-
-PLATFORMS
-  ruby
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  aruba (~> 0.4.11)
-  chef (= 0.8.4)
-  cucumber (~> 1.2.1)
-  foodcritic!
-  minitest (~> 3.3.0)
-  rake (~> 0.9.2.2)
-  simplecov (~> 0.6.4)
diff --git a/chef_dsl_metadata/gemfiles/chef_0.9.0.gemfile b/chef_dsl_metadata/gemfiles/chef_0.9.0.gemfile
deleted file mode 100644
index 51e1306..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.9.0.gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file was generated by Appraisal
-
-source "https://rubygems.org/"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "yajl-ruby", "~> 1.1.0"
-gem "chef", "0.9.0"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_0.9.0.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_0.9.0.gemfile.lock
deleted file mode 100644
index e7cc1a8..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.9.0.gemfile.lock
+++ /dev/null
@@ -1,58 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    appraisal (0.5.1)
-      bundler
-      rake
-    bunny (0.8.0)
-    chef (0.9.0)
-      bunny (>= 0.6.0)
-      erubis
-      extlib
-      highline
-      json (<= 1.4.2)
-      mixlib-authentication (>= 1.1.0)
-      mixlib-cli (>= 1.1.0)
-      mixlib-config (>= 1.1.0)
-      mixlib-log (>= 1.1.0)
-      moneta
-      ohai (>= 0.5.0)
-      rest-client (>= 1.0.4, <= 1.5.1)
-      rest-client (>= 1.0.4, <= 1.5.1)
-      uuidtools
-    erubis (2.7.0)
-    extlib (0.9.16)
-    highline (1.6.16)
-    ipaddress (0.8.0)
-    json (1.4.2)
-    mime-types (1.21)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    moneta (0.7.14)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    rake (0.9.2.2)
-    rest-client (1.5.1)
-      mime-types (>= 1.16)
-    systemu (2.5.2)
-    uuidtools (2.1.3)
-    yajl-ruby (1.1.0)
-
-PLATFORMS
-  ruby
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 0.9.0)
-  rake (~> 0.9.2.2)
-  yajl-ruby (~> 1.1.0)
diff --git a/chef_dsl_metadata/gemfiles/chef_0.9.10.gemfile b/chef_dsl_metadata/gemfiles/chef_0.9.10.gemfile
deleted file mode 100644
index e075f6e..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.9.10.gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file was generated by Appraisal
-
-source "https://rubygems.org/"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "yajl-ruby", "~> 1.1.0"
-gem "chef", "0.9.10"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_0.9.10.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_0.9.10.gemfile.lock
deleted file mode 100644
index 047b8fd..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.9.10.gemfile.lock
+++ /dev/null
@@ -1,59 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    appraisal (0.5.1)
-      bundler
-      rake
-    bunny (0.8.0)
-    chef (0.9.10)
-      bunny (>= 0.6.0)
-      erubis
-      extlib
-      highline
-      json (>= 1.4.4, <= 1.4.6)
-      json (>= 1.4.4, <= 1.4.6)
-      mixlib-authentication (>= 1.1.0)
-      mixlib-cli (>= 1.1.0)
-      mixlib-config (>= 1.1.2)
-      mixlib-log (>= 1.2.0)
-      moneta
-      ohai (>= 0.5.7)
-      rest-client (>= 1.0.4, < 1.7.0)
-      rest-client (>= 1.0.4, < 1.7.0)
-      uuidtools
-    erubis (2.7.0)
-    extlib (0.9.16)
-    highline (1.6.16)
-    ipaddress (0.8.0)
-    json (1.4.6)
-    mime-types (1.21)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    moneta (0.7.14)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    rake (0.9.2.2)
-    rest-client (1.6.7)
-      mime-types (>= 1.16)
-    systemu (2.5.2)
-    uuidtools (2.1.3)
-    yajl-ruby (1.1.0)
-
-PLATFORMS
-  ruby
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 0.9.10)
-  rake (~> 0.9.2.2)
-  yajl-ruby (~> 1.1.0)
diff --git a/chef_dsl_metadata/gemfiles/chef_0.9.12.gemfile b/chef_dsl_metadata/gemfiles/chef_0.9.12.gemfile
deleted file mode 100644
index 5701a08..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.9.12.gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file was generated by Appraisal
-
-source "https://rubygems.org/"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "yajl-ruby", "~> 1.1.0"
-gem "chef", "0.9.12"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_0.9.12.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_0.9.12.gemfile.lock
deleted file mode 100644
index 81e1c54..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.9.12.gemfile.lock
+++ /dev/null
@@ -1,59 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    appraisal (0.5.1)
-      bundler
-      rake
-    bunny (0.8.0)
-    chef (0.9.12)
-      bunny (>= 0.6.0)
-      erubis
-      extlib
-      highline
-      json (>= 1.4.4, <= 1.4.6)
-      json (>= 1.4.4, <= 1.4.6)
-      mixlib-authentication (>= 1.1.0)
-      mixlib-cli (>= 1.1.0)
-      mixlib-config (>= 1.1.2)
-      mixlib-log (>= 1.2.0)
-      moneta
-      ohai (>= 0.5.7)
-      rest-client (>= 1.0.4, < 1.7.0)
-      rest-client (>= 1.0.4, < 1.7.0)
-      uuidtools
-    erubis (2.7.0)
-    extlib (0.9.16)
-    highline (1.6.16)
-    ipaddress (0.8.0)
-    json (1.4.6)
-    mime-types (1.21)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    moneta (0.7.14)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    rake (0.9.2.2)
-    rest-client (1.6.7)
-      mime-types (>= 1.16)
-    systemu (2.5.2)
-    uuidtools (2.1.3)
-    yajl-ruby (1.1.0)
-
-PLATFORMS
-  ruby
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 0.9.12)
-  rake (~> 0.9.2.2)
-  yajl-ruby (~> 1.1.0)
diff --git a/chef_dsl_metadata/gemfiles/chef_0.9.14.gemfile b/chef_dsl_metadata/gemfiles/chef_0.9.14.gemfile
deleted file mode 100644
index e07d146..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.9.14.gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file was generated by Appraisal
-
-source "https://rubygems.org/"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "yajl-ruby", "~> 1.1.0"
-gem "chef", "0.9.14"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_0.9.14.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_0.9.14.gemfile.lock
deleted file mode 100644
index ddce833..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.9.14.gemfile.lock
+++ /dev/null
@@ -1,59 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    appraisal (0.5.1)
-      bundler
-      rake
-    bunny (0.8.0)
-    chef (0.9.14)
-      bunny (>= 0.6.0)
-      erubis
-      extlib
-      highline
-      json (>= 1.4.4, <= 1.4.6)
-      json (>= 1.4.4, <= 1.4.6)
-      mixlib-authentication (>= 1.1.0)
-      mixlib-cli (>= 1.1.0)
-      mixlib-config (>= 1.1.2)
-      mixlib-log (>= 1.2.0)
-      moneta
-      ohai (>= 0.5.7)
-      rest-client (>= 1.0.4, < 1.7.0)
-      rest-client (>= 1.0.4, < 1.7.0)
-      uuidtools
-    erubis (2.7.0)
-    extlib (0.9.16)
-    highline (1.6.16)
-    ipaddress (0.8.0)
-    json (1.4.6)
-    mime-types (1.21)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    moneta (0.7.14)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    rake (0.9.2.2)
-    rest-client (1.6.7)
-      mime-types (>= 1.16)
-    systemu (2.5.2)
-    uuidtools (2.1.3)
-    yajl-ruby (1.1.0)
-
-PLATFORMS
-  ruby
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 0.9.14)
-  rake (~> 0.9.2.2)
-  yajl-ruby (~> 1.1.0)
diff --git a/chef_dsl_metadata/gemfiles/chef_0.9.16.gemfile b/chef_dsl_metadata/gemfiles/chef_0.9.16.gemfile
deleted file mode 100644
index 9f22d4f..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.9.16.gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file was generated by Appraisal
-
-source "https://rubygems.org/"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "yajl-ruby", "~> 1.1.0"
-gem "chef", "0.9.16"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_0.9.16.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_0.9.16.gemfile.lock
deleted file mode 100644
index b875d74..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.9.16.gemfile.lock
+++ /dev/null
@@ -1,59 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    appraisal (0.5.1)
-      bundler
-      rake
-    bunny (0.8.0)
-    chef (0.9.16)
-      bunny (>= 0.6.0)
-      erubis
-      extlib
-      highline
-      json (>= 1.4.4, <= 1.4.6)
-      json (>= 1.4.4, <= 1.4.6)
-      mixlib-authentication (>= 1.1.0)
-      mixlib-cli (>= 1.1.0)
-      mixlib-config (>= 1.1.2)
-      mixlib-log (>= 1.2.0)
-      moneta
-      ohai (>= 0.5.7)
-      rest-client (>= 1.0.4, < 1.7.0)
-      rest-client (>= 1.0.4, < 1.7.0)
-      uuidtools
-    erubis (2.7.0)
-    extlib (0.9.16)
-    highline (1.6.16)
-    ipaddress (0.8.0)
-    json (1.4.6)
-    mime-types (1.21)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    moneta (0.7.14)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    rake (0.9.2.2)
-    rest-client (1.6.7)
-      mime-types (>= 1.16)
-    systemu (2.5.2)
-    uuidtools (2.1.3)
-    yajl-ruby (1.1.0)
-
-PLATFORMS
-  ruby
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 0.9.16)
-  rake (~> 0.9.2.2)
-  yajl-ruby (~> 1.1.0)
diff --git a/chef_dsl_metadata/gemfiles/chef_0.9.18.gemfile b/chef_dsl_metadata/gemfiles/chef_0.9.18.gemfile
deleted file mode 100644
index 8455a9c..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.9.18.gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file was generated by Appraisal
-
-source "https://rubygems.org/"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "yajl-ruby", "~> 1.1.0"
-gem "chef", "0.9.18"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_0.9.18.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_0.9.18.gemfile.lock
deleted file mode 100644
index 9c6bb5d..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.9.18.gemfile.lock
+++ /dev/null
@@ -1,59 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    appraisal (0.5.1)
-      bundler
-      rake
-    bunny (0.8.0)
-    chef (0.9.18)
-      bunny (>= 0.6.0)
-      erubis
-      extlib
-      highline
-      json (>= 1.4.4, <= 1.4.6)
-      json (>= 1.4.4, <= 1.4.6)
-      mixlib-authentication (>= 1.1.0)
-      mixlib-cli (>= 1.1.0)
-      mixlib-config (>= 1.1.2)
-      mixlib-log (>= 1.2.0)
-      moneta
-      ohai (>= 0.5.7)
-      rest-client (>= 1.0.4, < 1.7.0)
-      rest-client (>= 1.0.4, < 1.7.0)
-      uuidtools
-    erubis (2.7.0)
-    extlib (0.9.16)
-    highline (1.6.16)
-    ipaddress (0.8.0)
-    json (1.4.6)
-    mime-types (1.21)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    moneta (0.7.14)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    rake (0.9.2.2)
-    rest-client (1.6.7)
-      mime-types (>= 1.16)
-    systemu (2.5.2)
-    uuidtools (2.1.3)
-    yajl-ruby (1.1.0)
-
-PLATFORMS
-  ruby
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 0.9.18)
-  rake (~> 0.9.2.2)
-  yajl-ruby (~> 1.1.0)
diff --git a/chef_dsl_metadata/gemfiles/chef_0.9.2.gemfile b/chef_dsl_metadata/gemfiles/chef_0.9.2.gemfile
deleted file mode 100644
index f681e68..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.9.2.gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file was generated by Appraisal
-
-source "https://rubygems.org/"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "yajl-ruby", "~> 1.1.0"
-gem "chef", "0.9.2"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_0.9.2.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_0.9.2.gemfile.lock
deleted file mode 100644
index 4e0f46c..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.9.2.gemfile.lock
+++ /dev/null
@@ -1,58 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    appraisal (0.5.1)
-      bundler
-      rake
-    bunny (0.8.0)
-    chef (0.9.2)
-      bunny (>= 0.6.0)
-      erubis
-      extlib
-      highline
-      json (<= 1.4.2)
-      mixlib-authentication (>= 1.1.0)
-      mixlib-cli (>= 1.1.0)
-      mixlib-config (>= 1.1.0)
-      mixlib-log (>= 1.1.0)
-      moneta
-      ohai (>= 0.5.0)
-      rest-client (>= 1.0.4, <= 1.5.1)
-      rest-client (>= 1.0.4, <= 1.5.1)
-      uuidtools
-    erubis (2.7.0)
-    extlib (0.9.16)
-    highline (1.6.16)
-    ipaddress (0.8.0)
-    json (1.4.2)
-    mime-types (1.21)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    moneta (0.7.14)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    rake (0.9.2.2)
-    rest-client (1.5.1)
-      mime-types (>= 1.16)
-    systemu (2.5.2)
-    uuidtools (2.1.3)
-    yajl-ruby (1.1.0)
-
-PLATFORMS
-  ruby
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 0.9.2)
-  rake (~> 0.9.2.2)
-  yajl-ruby (~> 1.1.0)
diff --git a/chef_dsl_metadata/gemfiles/chef_0.9.4.gemfile b/chef_dsl_metadata/gemfiles/chef_0.9.4.gemfile
deleted file mode 100644
index bda1fff..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.9.4.gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file was generated by Appraisal
-
-source "https://rubygems.org/"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "yajl-ruby", "~> 1.1.0"
-gem "chef", "0.9.4"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_0.9.4.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_0.9.4.gemfile.lock
deleted file mode 100644
index ac4afe8..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.9.4.gemfile.lock
+++ /dev/null
@@ -1,58 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    appraisal (0.5.1)
-      bundler
-      rake
-    bunny (0.8.0)
-    chef (0.9.4)
-      bunny (>= 0.6.0)
-      erubis
-      extlib
-      highline
-      json (<= 1.4.2)
-      mixlib-authentication (>= 1.1.0)
-      mixlib-cli (>= 1.1.0)
-      mixlib-config (>= 1.1.0)
-      mixlib-log (>= 1.1.0)
-      moneta
-      ohai (>= 0.5.0)
-      rest-client (>= 1.0.4, <= 1.5.1)
-      rest-client (>= 1.0.4, <= 1.5.1)
-      uuidtools
-    erubis (2.7.0)
-    extlib (0.9.16)
-    highline (1.6.16)
-    ipaddress (0.8.0)
-    json (1.4.2)
-    mime-types (1.21)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    moneta (0.7.14)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    rake (0.9.2.2)
-    rest-client (1.5.1)
-      mime-types (>= 1.16)
-    systemu (2.5.2)
-    uuidtools (2.1.3)
-    yajl-ruby (1.1.0)
-
-PLATFORMS
-  ruby
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 0.9.4)
-  rake (~> 0.9.2.2)
-  yajl-ruby (~> 1.1.0)
diff --git a/chef_dsl_metadata/gemfiles/chef_0.9.6.gemfile b/chef_dsl_metadata/gemfiles/chef_0.9.6.gemfile
deleted file mode 100644
index ffd9ce6..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.9.6.gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file was generated by Appraisal
-
-source "https://rubygems.org/"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "yajl-ruby", "~> 1.1.0"
-gem "chef", "0.9.6"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_0.9.6.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_0.9.6.gemfile.lock
deleted file mode 100644
index 3c573d1..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.9.6.gemfile.lock
+++ /dev/null
@@ -1,58 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    appraisal (0.5.1)
-      bundler
-      rake
-    bunny (0.8.0)
-    chef (0.9.6)
-      bunny (>= 0.6.0)
-      erubis
-      extlib
-      highline
-      json (<= 1.4.2)
-      mixlib-authentication (>= 1.1.0)
-      mixlib-cli (>= 1.1.0)
-      mixlib-config (>= 1.1.0)
-      mixlib-log (>= 1.1.0)
-      moneta
-      ohai (>= 0.5.0)
-      rest-client (>= 1.0.4, <= 1.5.1)
-      rest-client (>= 1.0.4, <= 1.5.1)
-      uuidtools
-    erubis (2.7.0)
-    extlib (0.9.16)
-    highline (1.6.16)
-    ipaddress (0.8.0)
-    json (1.4.2)
-    mime-types (1.21)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    moneta (0.7.14)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    rake (0.9.2.2)
-    rest-client (1.5.1)
-      mime-types (>= 1.16)
-    systemu (2.5.2)
-    uuidtools (2.1.3)
-    yajl-ruby (1.1.0)
-
-PLATFORMS
-  ruby
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 0.9.6)
-  rake (~> 0.9.2.2)
-  yajl-ruby (~> 1.1.0)
diff --git a/chef_dsl_metadata/gemfiles/chef_0.9.8.gemfile b/chef_dsl_metadata/gemfiles/chef_0.9.8.gemfile
deleted file mode 100644
index 02048db..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.9.8.gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file was generated by Appraisal
-
-source "https://rubygems.org/"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "yajl-ruby", "~> 1.1.0"
-gem "chef", "0.9.8"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_0.9.8.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_0.9.8.gemfile.lock
deleted file mode 100644
index 620ab7a..0000000
--- a/chef_dsl_metadata/gemfiles/chef_0.9.8.gemfile.lock
+++ /dev/null
@@ -1,58 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    appraisal (0.5.1)
-      bundler
-      rake
-    bunny (0.8.0)
-    chef (0.9.8)
-      bunny (>= 0.6.0)
-      erubis
-      extlib
-      highline
-      json (<= 1.4.2)
-      mixlib-authentication (>= 1.1.0)
-      mixlib-cli (>= 1.1.0)
-      mixlib-config (>= 1.1.0)
-      mixlib-log (>= 1.1.0)
-      moneta
-      ohai (>= 0.5.6)
-      rest-client (>= 1.0.4, <= 1.5.1)
-      rest-client (>= 1.0.4, <= 1.5.1)
-      uuidtools
-    erubis (2.7.0)
-    extlib (0.9.16)
-    highline (1.6.16)
-    ipaddress (0.8.0)
-    json (1.4.2)
-    mime-types (1.21)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    moneta (0.7.14)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    rake (0.9.2.2)
-    rest-client (1.5.1)
-      mime-types (>= 1.16)
-    systemu (2.5.2)
-    uuidtools (2.1.3)
-    yajl-ruby (1.1.0)
-
-PLATFORMS
-  ruby
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 0.9.8)
-  rake (~> 0.9.2.2)
-  yajl-ruby (~> 1.1.0)
diff --git a/chef_dsl_metadata/gemfiles/chef_10.12.0.gemfile b/chef_dsl_metadata/gemfiles/chef_10.12.0.gemfile
deleted file mode 100644
index ca0c526..0000000
--- a/chef_dsl_metadata/gemfiles/chef_10.12.0.gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file was generated by Appraisal
-
-source "https://rubygems.org/"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "yajl-ruby", "~> 1.1.0"
-gem "chef", "10.12.0"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_10.12.0.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_10.12.0.gemfile.lock
deleted file mode 100644
index ff062f0..0000000
--- a/chef_dsl_metadata/gemfiles/chef_10.12.0.gemfile.lock
+++ /dev/null
@@ -1,82 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    appraisal (0.5.1)
-      bundler
-      rake
-    bunny (0.8.0)
-    chef (10.12.0)
-      bunny (>= 0.6.0)
-      erubis
-      highline (>= 1.6.9)
-      json (>= 1.4.4, <= 1.6.1)
-      mixlib-authentication (>= 1.1.0)
-      mixlib-cli (>= 1.1.0)
-      mixlib-config (>= 1.1.2)
-      mixlib-log (>= 1.3.0)
-      mixlib-shellout
-      moneta
-      net-ssh (~> 2.2.2)
-      net-ssh-multi (~> 1.1.0)
-      ohai (>= 0.6.0)
-      rest-client (>= 1.0.4, < 1.7.0)
-      treetop (~> 1.4.9)
-      uuidtools
-      yajl-ruby (~> 1.1)
-    erubis (2.7.0)
-    highline (1.6.16)
-    ipaddress (0.8.0)
-    json (1.6.1)
-    mime-types (1.21)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    mixlib-shellout (1.1.0-x86-mingw32)
-      win32-process (~> 0.6.5)
-    moneta (0.7.14)
-    net-ssh (2.2.2)
-    net-ssh-gateway (1.1.0)
-      net-ssh (>= 1.99.1)
-    net-ssh-multi (1.1)
-      net-ssh (>= 2.1.4)
-      net-ssh-gateway (>= 0.99.0)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    polyglot (0.3.3)
-    rake (0.9.2.2)
-    rest-client (1.6.7)
-      mime-types (>= 1.16)
-    systemu (2.5.2)
-    treetop (1.4.12)
-      polyglot
-      polyglot (>= 0.3.1)
-    uuidtools (2.1.3)
-    win32-api (1.4.8-x86-mingw32)
-    win32-process (0.6.6)
-      windows-pr (>= 1.2.2)
-    windows-api (0.4.2)
-      win32-api (>= 1.4.5)
-    windows-pr (1.2.2)
-      win32-api (>= 1.4.5)
-      windows-api (>= 0.3.0)
-    yajl-ruby (1.1.0)
-    yajl-ruby (1.1.0-x86-mingw32)
-
-PLATFORMS
-  ruby
-  x86-mingw32
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 10.12.0)
-  rake (~> 0.9.2.2)
-  yajl-ruby (~> 1.1.0)
diff --git a/chef_dsl_metadata/gemfiles/chef_10.14.0.gemfile b/chef_dsl_metadata/gemfiles/chef_10.14.0.gemfile
deleted file mode 100644
index 11e5a64..0000000
--- a/chef_dsl_metadata/gemfiles/chef_10.14.0.gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file was generated by Appraisal
-
-source "https://rubygems.org/"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "yajl-ruby", "~> 1.1.0"
-gem "chef", "10.14.0"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_10.14.0.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_10.14.0.gemfile.lock
deleted file mode 100644
index a33b83c..0000000
--- a/chef_dsl_metadata/gemfiles/chef_10.14.0.gemfile.lock
+++ /dev/null
@@ -1,82 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    appraisal (0.5.1)
-      bundler
-      rake
-    bunny (0.7.9)
-    chef (10.14.0)
-      bunny (>= 0.6.0, < 0.8.0)
-      erubis
-      highline (>= 1.6.9)
-      json (>= 1.4.4, <= 1.6.1)
-      mixlib-authentication (>= 1.3.0)
-      mixlib-cli (>= 1.1.0)
-      mixlib-config (>= 1.1.2)
-      mixlib-log (>= 1.3.0)
-      mixlib-shellout
-      moneta
-      net-ssh (~> 2.2.2)
-      net-ssh-multi (~> 1.1.0)
-      ohai (>= 0.6.0)
-      rest-client (>= 1.0.4, < 1.7.0)
-      treetop (~> 1.4.9)
-      uuidtools
-      yajl-ruby (~> 1.1)
-    erubis (2.7.0)
-    highline (1.6.16)
-    ipaddress (0.8.0)
-    json (1.6.1)
-    mime-types (1.21)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    mixlib-shellout (1.1.0-x86-mingw32)
-      win32-process (~> 0.6.5)
-    moneta (0.7.14)
-    net-ssh (2.2.2)
-    net-ssh-gateway (1.1.0)
-      net-ssh (>= 1.99.1)
-    net-ssh-multi (1.1)
-      net-ssh (>= 2.1.4)
-      net-ssh-gateway (>= 0.99.0)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    polyglot (0.3.3)
-    rake (0.9.2.2)
-    rest-client (1.6.7)
-      mime-types (>= 1.16)
-    systemu (2.5.2)
-    treetop (1.4.12)
-      polyglot
-      polyglot (>= 0.3.1)
-    uuidtools (2.1.3)
-    win32-api (1.4.8-x86-mingw32)
-    win32-process (0.6.6)
-      windows-pr (>= 1.2.2)
-    windows-api (0.4.2)
-      win32-api (>= 1.4.5)
-    windows-pr (1.2.2)
-      win32-api (>= 1.4.5)
-      windows-api (>= 0.3.0)
-    yajl-ruby (1.1.0)
-    yajl-ruby (1.1.0-x86-mingw32)
-
-PLATFORMS
-  ruby
-  x86-mingw32
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 10.14.0)
-  rake (~> 0.9.2.2)
-  yajl-ruby (~> 1.1.0)
diff --git a/chef_dsl_metadata/gemfiles/chef_10.14.2.gemfile b/chef_dsl_metadata/gemfiles/chef_10.14.2.gemfile
deleted file mode 100644
index f65ce18..0000000
--- a/chef_dsl_metadata/gemfiles/chef_10.14.2.gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file was generated by Appraisal
-
-source "https://rubygems.org/"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "yajl-ruby", "~> 1.1.0"
-gem "chef", "10.14.2"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_10.14.2.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_10.14.2.gemfile.lock
deleted file mode 100644
index 0d8239e..0000000
--- a/chef_dsl_metadata/gemfiles/chef_10.14.2.gemfile.lock
+++ /dev/null
@@ -1,82 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    appraisal (0.5.1)
-      bundler
-      rake
-    bunny (0.7.9)
-    chef (10.14.2)
-      bunny (>= 0.6.0, < 0.8.0)
-      erubis
-      highline (>= 1.6.9)
-      json (>= 1.4.4, <= 1.6.1)
-      mixlib-authentication (>= 1.3.0)
-      mixlib-cli (>= 1.1.0)
-      mixlib-config (>= 1.1.2)
-      mixlib-log (>= 1.3.0)
-      mixlib-shellout
-      moneta
-      net-ssh (~> 2.2.2)
-      net-ssh-multi (~> 1.1.0)
-      ohai (>= 0.6.0)
-      rest-client (>= 1.0.4, < 1.7.0)
-      treetop (~> 1.4.9)
-      uuidtools
-      yajl-ruby (~> 1.1)
-    erubis (2.7.0)
-    highline (1.6.16)
-    ipaddress (0.8.0)
-    json (1.6.1)
-    mime-types (1.21)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    mixlib-shellout (1.1.0-x86-mingw32)
-      win32-process (~> 0.6.5)
-    moneta (0.7.14)
-    net-ssh (2.2.2)
-    net-ssh-gateway (1.1.0)
-      net-ssh (>= 1.99.1)
-    net-ssh-multi (1.1)
-      net-ssh (>= 2.1.4)
-      net-ssh-gateway (>= 0.99.0)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    polyglot (0.3.3)
-    rake (0.9.2.2)
-    rest-client (1.6.7)
-      mime-types (>= 1.16)
-    systemu (2.5.2)
-    treetop (1.4.12)
-      polyglot
-      polyglot (>= 0.3.1)
-    uuidtools (2.1.3)
-    win32-api (1.4.8-x86-mingw32)
-    win32-process (0.6.6)
-      windows-pr (>= 1.2.2)
-    windows-api (0.4.2)
-      win32-api (>= 1.4.5)
-    windows-pr (1.2.2)
-      win32-api (>= 1.4.5)
-      windows-api (>= 0.3.0)
-    yajl-ruby (1.1.0)
-    yajl-ruby (1.1.0-x86-mingw32)
-
-PLATFORMS
-  ruby
-  x86-mingw32
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 10.14.2)
-  rake (~> 0.9.2.2)
-  yajl-ruby (~> 1.1.0)
diff --git a/chef_dsl_metadata/gemfiles/chef_10.14.4.gemfile b/chef_dsl_metadata/gemfiles/chef_10.14.4.gemfile
deleted file mode 100644
index 51701d5..0000000
--- a/chef_dsl_metadata/gemfiles/chef_10.14.4.gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file was generated by Appraisal
-
-source "https://rubygems.org/"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "yajl-ruby", "~> 1.1.0"
-gem "chef", "10.14.4"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_10.14.4.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_10.14.4.gemfile.lock
deleted file mode 100644
index 982e35b..0000000
--- a/chef_dsl_metadata/gemfiles/chef_10.14.4.gemfile.lock
+++ /dev/null
@@ -1,82 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    appraisal (0.5.1)
-      bundler
-      rake
-    bunny (0.7.9)
-    chef (10.14.4)
-      bunny (>= 0.6.0, < 0.8.0)
-      erubis
-      highline (>= 1.6.9)
-      json (>= 1.4.4, <= 1.6.1)
-      mixlib-authentication (>= 1.3.0)
-      mixlib-cli (>= 1.1.0)
-      mixlib-config (>= 1.1.2)
-      mixlib-log (>= 1.3.0)
-      mixlib-shellout
-      moneta
-      net-ssh (~> 2.2.2)
-      net-ssh-multi (~> 1.1.0)
-      ohai (>= 0.6.0)
-      rest-client (>= 1.0.4, < 1.7.0)
-      treetop (~> 1.4.9)
-      uuidtools
-      yajl-ruby (~> 1.1)
-    erubis (2.7.0)
-    highline (1.6.16)
-    ipaddress (0.8.0)
-    json (1.6.1)
-    mime-types (1.21)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    mixlib-shellout (1.1.0-x86-mingw32)
-      win32-process (~> 0.6.5)
-    moneta (0.7.14)
-    net-ssh (2.2.2)
-    net-ssh-gateway (1.1.0)
-      net-ssh (>= 1.99.1)
-    net-ssh-multi (1.1)
-      net-ssh (>= 2.1.4)
-      net-ssh-gateway (>= 0.99.0)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    polyglot (0.3.3)
-    rake (0.9.2.2)
-    rest-client (1.6.7)
-      mime-types (>= 1.16)
-    systemu (2.5.2)
-    treetop (1.4.12)
-      polyglot
-      polyglot (>= 0.3.1)
-    uuidtools (2.1.3)
-    win32-api (1.4.8-x86-mingw32)
-    win32-process (0.6.6)
-      windows-pr (>= 1.2.2)
-    windows-api (0.4.2)
-      win32-api (>= 1.4.5)
-    windows-pr (1.2.2)
-      win32-api (>= 1.4.5)
-      windows-api (>= 0.3.0)
-    yajl-ruby (1.1.0)
-    yajl-ruby (1.1.0-x86-mingw32)
-
-PLATFORMS
-  ruby
-  x86-mingw32
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 10.14.4)
-  rake (~> 0.9.2.2)
-  yajl-ruby (~> 1.1.0)
diff --git a/chef_dsl_metadata/gemfiles/chef_10.16.0.gemfile b/chef_dsl_metadata/gemfiles/chef_10.16.0.gemfile
deleted file mode 100644
index 71321a3..0000000
--- a/chef_dsl_metadata/gemfiles/chef_10.16.0.gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file was generated by Appraisal
-
-source "https://rubygems.org/"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "yajl-ruby", "~> 1.1.0"
-gem "chef", "10.16.0"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_10.16.0.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_10.16.0.gemfile.lock
deleted file mode 100644
index 9b727b1..0000000
--- a/chef_dsl_metadata/gemfiles/chef_10.16.0.gemfile.lock
+++ /dev/null
@@ -1,82 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    appraisal (0.5.1)
-      bundler
-      rake
-    bunny (0.7.9)
-    chef (10.16.0)
-      bunny (>= 0.6.0, < 0.8.0)
-      erubis
-      highline (>= 1.6.9)
-      json (>= 1.4.4, <= 1.6.1)
-      mixlib-authentication (>= 1.3.0)
-      mixlib-cli (>= 1.1.0)
-      mixlib-config (>= 1.1.2)
-      mixlib-log (>= 1.3.0)
-      mixlib-shellout
-      moneta
-      net-ssh (~> 2.2.2)
-      net-ssh-multi (~> 1.1.0)
-      ohai (>= 0.6.0)
-      rest-client (>= 1.0.4, < 1.7.0)
-      treetop (~> 1.4.9)
-      uuidtools
-      yajl-ruby (~> 1.1)
-    erubis (2.7.0)
-    highline (1.6.16)
-    ipaddress (0.8.0)
-    json (1.6.1)
-    mime-types (1.21)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    mixlib-shellout (1.1.0-x86-mingw32)
-      win32-process (~> 0.6.5)
-    moneta (0.7.14)
-    net-ssh (2.2.2)
-    net-ssh-gateway (1.1.0)
-      net-ssh (>= 1.99.1)
-    net-ssh-multi (1.1)
-      net-ssh (>= 2.1.4)
-      net-ssh-gateway (>= 0.99.0)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    polyglot (0.3.3)
-    rake (0.9.2.2)
-    rest-client (1.6.7)
-      mime-types (>= 1.16)
-    systemu (2.5.2)
-    treetop (1.4.12)
-      polyglot
-      polyglot (>= 0.3.1)
-    uuidtools (2.1.3)
-    win32-api (1.4.8-x86-mingw32)
-    win32-process (0.6.6)
-      windows-pr (>= 1.2.2)
-    windows-api (0.4.2)
-      win32-api (>= 1.4.5)
-    windows-pr (1.2.2)
-      win32-api (>= 1.4.5)
-      windows-api (>= 0.3.0)
-    yajl-ruby (1.1.0)
-    yajl-ruby (1.1.0-x86-mingw32)
-
-PLATFORMS
-  ruby
-  x86-mingw32
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 10.16.0)
-  rake (~> 0.9.2.2)
-  yajl-ruby (~> 1.1.0)
diff --git a/chef_dsl_metadata/gemfiles/chef_10.16.2.gemfile b/chef_dsl_metadata/gemfiles/chef_10.16.2.gemfile
deleted file mode 100644
index bf1e6c2..0000000
--- a/chef_dsl_metadata/gemfiles/chef_10.16.2.gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file was generated by Appraisal
-
-source "https://rubygems.org/"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "yajl-ruby", "~> 1.1.0"
-gem "chef", "10.16.2"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_10.16.2.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_10.16.2.gemfile.lock
deleted file mode 100644
index 4ac7e07..0000000
--- a/chef_dsl_metadata/gemfiles/chef_10.16.2.gemfile.lock
+++ /dev/null
@@ -1,82 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    appraisal (0.5.1)
-      bundler
-      rake
-    bunny (0.7.9)
-    chef (10.16.2)
-      bunny (>= 0.6.0, < 0.8.0)
-      erubis
-      highline (>= 1.6.9)
-      json (>= 1.4.4, <= 1.6.1)
-      mixlib-authentication (>= 1.3.0)
-      mixlib-cli (>= 1.1.0)
-      mixlib-config (>= 1.1.2)
-      mixlib-log (>= 1.3.0)
-      mixlib-shellout
-      moneta
-      net-ssh (~> 2.2.2)
-      net-ssh-multi (~> 1.1.0)
-      ohai (>= 0.6.0)
-      rest-client (>= 1.0.4, < 1.7.0)
-      treetop (~> 1.4.9)
-      uuidtools
-      yajl-ruby (~> 1.1)
-    erubis (2.7.0)
-    highline (1.6.16)
-    ipaddress (0.8.0)
-    json (1.6.1)
-    mime-types (1.21)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    mixlib-shellout (1.1.0-x86-mingw32)
-      win32-process (~> 0.6.5)
-    moneta (0.7.14)
-    net-ssh (2.2.2)
-    net-ssh-gateway (1.1.0)
-      net-ssh (>= 1.99.1)
-    net-ssh-multi (1.1)
-      net-ssh (>= 2.1.4)
-      net-ssh-gateway (>= 0.99.0)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    polyglot (0.3.3)
-    rake (0.9.2.2)
-    rest-client (1.6.7)
-      mime-types (>= 1.16)
-    systemu (2.5.2)
-    treetop (1.4.12)
-      polyglot
-      polyglot (>= 0.3.1)
-    uuidtools (2.1.3)
-    win32-api (1.4.8-x86-mingw32)
-    win32-process (0.6.6)
-      windows-pr (>= 1.2.2)
-    windows-api (0.4.2)
-      win32-api (>= 1.4.5)
-    windows-pr (1.2.2)
-      win32-api (>= 1.4.5)
-      windows-api (>= 0.3.0)
-    yajl-ruby (1.1.0)
-    yajl-ruby (1.1.0-x86-mingw32)
-
-PLATFORMS
-  ruby
-  x86-mingw32
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 10.16.2)
-  rake (~> 0.9.2.2)
-  yajl-ruby (~> 1.1.0)
diff --git a/chef_dsl_metadata/gemfiles/chef_10.16.4.gemfile b/chef_dsl_metadata/gemfiles/chef_10.16.4.gemfile
deleted file mode 100644
index 112a6e5..0000000
--- a/chef_dsl_metadata/gemfiles/chef_10.16.4.gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file was generated by Appraisal
-
-source "https://rubygems.org/"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "yajl-ruby", "~> 1.1.0"
-gem "chef", "10.16.4"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_10.16.4.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_10.16.4.gemfile.lock
deleted file mode 100644
index b2ea263..0000000
--- a/chef_dsl_metadata/gemfiles/chef_10.16.4.gemfile.lock
+++ /dev/null
@@ -1,82 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    appraisal (0.5.1)
-      bundler
-      rake
-    bunny (0.7.9)
-    chef (10.16.4)
-      bunny (>= 0.6.0, < 0.8.0)
-      erubis
-      highline (>= 1.6.9)
-      json (>= 1.4.4, <= 1.6.1)
-      mixlib-authentication (>= 1.3.0)
-      mixlib-cli (>= 1.1.0)
-      mixlib-config (>= 1.1.2)
-      mixlib-log (>= 1.3.0)
-      mixlib-shellout
-      moneta (< 0.7.0)
-      net-ssh (~> 2.2.2)
-      net-ssh-multi (~> 1.1.0)
-      ohai (>= 0.6.0)
-      rest-client (>= 1.0.4, < 1.7.0)
-      treetop (~> 1.4.9)
-      uuidtools
-      yajl-ruby (~> 1.1)
-    erubis (2.7.0)
-    highline (1.6.16)
-    ipaddress (0.8.0)
-    json (1.6.1)
-    mime-types (1.21)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    mixlib-shellout (1.1.0-x86-mingw32)
-      win32-process (~> 0.6.5)
-    moneta (0.6.0)
-    net-ssh (2.2.2)
-    net-ssh-gateway (1.1.0)
-      net-ssh (>= 1.99.1)
-    net-ssh-multi (1.1)
-      net-ssh (>= 2.1.4)
-      net-ssh-gateway (>= 0.99.0)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    polyglot (0.3.3)
-    rake (0.9.2.2)
-    rest-client (1.6.7)
-      mime-types (>= 1.16)
-    systemu (2.5.2)
-    treetop (1.4.12)
-      polyglot
-      polyglot (>= 0.3.1)
-    uuidtools (2.1.3)
-    win32-api (1.4.8-x86-mingw32)
-    win32-process (0.6.6)
-      windows-pr (>= 1.2.2)
-    windows-api (0.4.2)
-      win32-api (>= 1.4.5)
-    windows-pr (1.2.2)
-      win32-api (>= 1.4.5)
-      windows-api (>= 0.3.0)
-    yajl-ruby (1.1.0)
-    yajl-ruby (1.1.0-x86-mingw32)
-
-PLATFORMS
-  ruby
-  x86-mingw32
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 10.16.4)
-  rake (~> 0.9.2.2)
-  yajl-ruby (~> 1.1.0)
diff --git a/chef_dsl_metadata/gemfiles/chef_10.16.6.gemfile b/chef_dsl_metadata/gemfiles/chef_10.16.6.gemfile
deleted file mode 100644
index 6ea6229..0000000
--- a/chef_dsl_metadata/gemfiles/chef_10.16.6.gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file was generated by Appraisal
-
-source "https://rubygems.org/"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "yajl-ruby", "~> 1.1.0"
-gem "chef", "10.16.6"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_10.16.6.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_10.16.6.gemfile.lock
deleted file mode 100644
index 918c0c7..0000000
--- a/chef_dsl_metadata/gemfiles/chef_10.16.6.gemfile.lock
+++ /dev/null
@@ -1,82 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    appraisal (0.5.1)
-      bundler
-      rake
-    bunny (0.7.9)
-    chef (10.16.6)
-      bunny (>= 0.6.0, < 0.8.0)
-      erubis
-      highline (>= 1.6.9)
-      json (>= 1.4.4, <= 1.6.1)
-      mixlib-authentication (>= 1.3.0)
-      mixlib-cli (>= 1.1.0)
-      mixlib-config (>= 1.1.2)
-      mixlib-log (>= 1.3.0)
-      mixlib-shellout
-      moneta (< 0.7.0)
-      net-ssh (~> 2.2.2)
-      net-ssh-multi (~> 1.1.0)
-      ohai (>= 0.6.0)
-      rest-client (>= 1.0.4, < 1.7.0)
-      treetop (~> 1.4.9)
-      uuidtools
-      yajl-ruby (~> 1.1)
-    erubis (2.7.0)
-    highline (1.6.16)
-    ipaddress (0.8.0)
-    json (1.6.1)
-    mime-types (1.21)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    mixlib-shellout (1.1.0-x86-mingw32)
-      win32-process (~> 0.6.5)
-    moneta (0.6.0)
-    net-ssh (2.2.2)
-    net-ssh-gateway (1.1.0)
-      net-ssh (>= 1.99.1)
-    net-ssh-multi (1.1)
-      net-ssh (>= 2.1.4)
-      net-ssh-gateway (>= 0.99.0)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    polyglot (0.3.3)
-    rake (0.9.2.2)
-    rest-client (1.6.7)
-      mime-types (>= 1.16)
-    systemu (2.5.2)
-    treetop (1.4.12)
-      polyglot
-      polyglot (>= 0.3.1)
-    uuidtools (2.1.3)
-    win32-api (1.4.8-x86-mingw32)
-    win32-process (0.6.6)
-      windows-pr (>= 1.2.2)
-    windows-api (0.4.2)
-      win32-api (>= 1.4.5)
-    windows-pr (1.2.2)
-      win32-api (>= 1.4.5)
-      windows-api (>= 0.3.0)
-    yajl-ruby (1.1.0)
-    yajl-ruby (1.1.0-x86-mingw32)
-
-PLATFORMS
-  ruby
-  x86-mingw32
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 10.16.6)
-  rake (~> 0.9.2.2)
-  yajl-ruby (~> 1.1.0)
diff --git a/chef_dsl_metadata/gemfiles/chef_10.18.0.gemfile b/chef_dsl_metadata/gemfiles/chef_10.18.0.gemfile
deleted file mode 100644
index 7b39475..0000000
--- a/chef_dsl_metadata/gemfiles/chef_10.18.0.gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file was generated by Appraisal
-
-source "https://rubygems.org/"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "yajl-ruby", "~> 1.1.0"
-gem "chef", "10.18.0"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_10.18.0.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_10.18.0.gemfile.lock
deleted file mode 100644
index dceab9c..0000000
--- a/chef_dsl_metadata/gemfiles/chef_10.18.0.gemfile.lock
+++ /dev/null
@@ -1,82 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    appraisal (0.5.1)
-      bundler
-      rake
-    bunny (0.7.9)
-    chef (10.18.0)
-      bunny (>= 0.6.0, < 0.8.0)
-      erubis
-      highline (>= 1.6.9)
-      json (>= 1.4.4, <= 1.6.1)
-      mixlib-authentication (>= 1.3.0)
-      mixlib-cli (>= 1.1.0)
-      mixlib-config (>= 1.1.2)
-      mixlib-log (>= 1.3.0)
-      mixlib-shellout
-      moneta (< 0.7.0)
-      net-ssh (~> 2.2.2)
-      net-ssh-multi (~> 1.1.0)
-      ohai (>= 0.6.0)
-      rest-client (>= 1.0.4, < 1.7.0)
-      treetop (~> 1.4.9)
-      uuidtools
-      yajl-ruby (~> 1.1)
-    erubis (2.7.0)
-    highline (1.6.16)
-    ipaddress (0.8.0)
-    json (1.6.1)
-    mime-types (1.21)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    mixlib-shellout (1.1.0-x86-mingw32)
-      win32-process (~> 0.6.5)
-    moneta (0.6.0)
-    net-ssh (2.2.2)
-    net-ssh-gateway (1.1.0)
-      net-ssh (>= 1.99.1)
-    net-ssh-multi (1.1)
-      net-ssh (>= 2.1.4)
-      net-ssh-gateway (>= 0.99.0)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    polyglot (0.3.3)
-    rake (0.9.2.2)
-    rest-client (1.6.7)
-      mime-types (>= 1.16)
-    systemu (2.5.2)
-    treetop (1.4.12)
-      polyglot
-      polyglot (>= 0.3.1)
-    uuidtools (2.1.3)
-    win32-api (1.4.8-x86-mingw32)
-    win32-process (0.6.6)
-      windows-pr (>= 1.2.2)
-    windows-api (0.4.2)
-      win32-api (>= 1.4.5)
-    windows-pr (1.2.2)
-      win32-api (>= 1.4.5)
-      windows-api (>= 0.3.0)
-    yajl-ruby (1.1.0)
-    yajl-ruby (1.1.0-x86-mingw32)
-
-PLATFORMS
-  ruby
-  x86-mingw32
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 10.18.0)
-  rake (~> 0.9.2.2)
-  yajl-ruby (~> 1.1.0)
diff --git a/chef_dsl_metadata/gemfiles/chef_10.18.2.gemfile b/chef_dsl_metadata/gemfiles/chef_10.18.2.gemfile
deleted file mode 100644
index 4317e1f..0000000
--- a/chef_dsl_metadata/gemfiles/chef_10.18.2.gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file was generated by Appraisal
-
-source "https://rubygems.org/"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "yajl-ruby", "~> 1.1.0"
-gem "chef", "10.18.2"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_10.18.2.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_10.18.2.gemfile.lock
deleted file mode 100644
index 3997666..0000000
--- a/chef_dsl_metadata/gemfiles/chef_10.18.2.gemfile.lock
+++ /dev/null
@@ -1,82 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    appraisal (0.5.1)
-      bundler
-      rake
-    bunny (0.7.9)
-    chef (10.18.2)
-      bunny (>= 0.6.0, < 0.8.0)
-      erubis
-      highline (>= 1.6.9)
-      json (>= 1.4.4, <= 1.6.1)
-      mixlib-authentication (>= 1.3.0)
-      mixlib-cli (>= 1.1.0)
-      mixlib-config (>= 1.1.2)
-      mixlib-log (>= 1.3.0)
-      mixlib-shellout
-      moneta (< 0.7.0)
-      net-ssh (~> 2.2.2)
-      net-ssh-multi (~> 1.1.0)
-      ohai (>= 0.6.0)
-      rest-client (>= 1.0.4, < 1.7.0)
-      treetop (~> 1.4.9)
-      uuidtools
-      yajl-ruby (~> 1.1)
-    erubis (2.7.0)
-    highline (1.6.16)
-    ipaddress (0.8.0)
-    json (1.6.1)
-    mime-types (1.21)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    mixlib-shellout (1.1.0-x86-mingw32)
-      win32-process (~> 0.6.5)
-    moneta (0.6.0)
-    net-ssh (2.2.2)
-    net-ssh-gateway (1.1.0)
-      net-ssh (>= 1.99.1)
-    net-ssh-multi (1.1)
-      net-ssh (>= 2.1.4)
-      net-ssh-gateway (>= 0.99.0)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    polyglot (0.3.3)
-    rake (0.9.2.2)
-    rest-client (1.6.7)
-      mime-types (>= 1.16)
-    systemu (2.5.2)
-    treetop (1.4.12)
-      polyglot
-      polyglot (>= 0.3.1)
-    uuidtools (2.1.3)
-    win32-api (1.4.8-x86-mingw32)
-    win32-process (0.6.6)
-      windows-pr (>= 1.2.2)
-    windows-api (0.4.2)
-      win32-api (>= 1.4.5)
-    windows-pr (1.2.2)
-      win32-api (>= 1.4.5)
-      windows-api (>= 0.3.0)
-    yajl-ruby (1.1.0)
-    yajl-ruby (1.1.0-x86-mingw32)
-
-PLATFORMS
-  ruby
-  x86-mingw32
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 10.18.2)
-  rake (~> 0.9.2.2)
-  yajl-ruby (~> 1.1.0)
diff --git a/chef_dsl_metadata/gemfiles/chef_10.20.0.gemfile b/chef_dsl_metadata/gemfiles/chef_10.20.0.gemfile
deleted file mode 100644
index f2fe072..0000000
--- a/chef_dsl_metadata/gemfiles/chef_10.20.0.gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file was generated by Appraisal
-
-source "https://rubygems.org/"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "yajl-ruby", "~> 1.1.0"
-gem "chef", "10.20.0"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_10.20.0.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_10.20.0.gemfile.lock
deleted file mode 100644
index 4638adc..0000000
--- a/chef_dsl_metadata/gemfiles/chef_10.20.0.gemfile.lock
+++ /dev/null
@@ -1,82 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    appraisal (0.5.1)
-      bundler
-      rake
-    bunny (0.7.9)
-    chef (10.20.0)
-      bunny (>= 0.6.0, < 0.8.0)
-      erubis
-      highline (>= 1.6.9)
-      json (~> 1.7.6, >= 1.4.4)
-      mixlib-authentication (>= 1.3.0)
-      mixlib-cli (>= 1.1.0)
-      mixlib-config (>= 1.1.2)
-      mixlib-log (>= 1.3.0)
-      mixlib-shellout
-      moneta (< 0.7.0)
-      net-ssh (~> 2.6)
-      net-ssh-multi (~> 1.1.0)
-      ohai (>= 0.6.0)
-      rest-client (>= 1.0.4, < 1.7.0)
-      treetop (~> 1.4.9)
-      uuidtools
-      yajl-ruby (~> 1.1)
-    erubis (2.7.0)
-    highline (1.6.16)
-    ipaddress (0.8.0)
-    json (1.7.7)
-    mime-types (1.21)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    mixlib-shellout (1.1.0-x86-mingw32)
-      win32-process (~> 0.6.5)
-    moneta (0.6.0)
-    net-ssh (2.6.6)
-    net-ssh-gateway (1.2.0)
-      net-ssh (>= 2.6.5)
-    net-ssh-multi (1.1)
-      net-ssh (>= 2.1.4)
-      net-ssh-gateway (>= 0.99.0)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    polyglot (0.3.3)
-    rake (0.9.2.2)
-    rest-client (1.6.7)
-      mime-types (>= 1.16)
-    systemu (2.5.2)
-    treetop (1.4.12)
-      polyglot
-      polyglot (>= 0.3.1)
-    uuidtools (2.1.3)
-    win32-api (1.4.8-x86-mingw32)
-    win32-process (0.6.6)
-      windows-pr (>= 1.2.2)
-    windows-api (0.4.2)
-      win32-api (>= 1.4.5)
-    windows-pr (1.2.2)
-      win32-api (>= 1.4.5)
-      windows-api (>= 0.3.0)
-    yajl-ruby (1.1.0)
-    yajl-ruby (1.1.0-x86-mingw32)
-
-PLATFORMS
-  ruby
-  x86-mingw32
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 10.20.0)
-  rake (~> 0.9.2.2)
-  yajl-ruby (~> 1.1.0)
diff --git a/chef_dsl_metadata/gemfiles/chef_10.22.0.gemfile b/chef_dsl_metadata/gemfiles/chef_10.22.0.gemfile
deleted file mode 100644
index 99e28e7..0000000
--- a/chef_dsl_metadata/gemfiles/chef_10.22.0.gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file was generated by Appraisal
-
-source "https://rubygems.org/"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "yajl-ruby", "~> 1.1.0"
-gem "chef", "10.22.0"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_10.22.0.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_10.22.0.gemfile.lock
deleted file mode 100644
index d9cc24f..0000000
--- a/chef_dsl_metadata/gemfiles/chef_10.22.0.gemfile.lock
+++ /dev/null
@@ -1,82 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    appraisal (0.5.1)
-      bundler
-      rake
-    bunny (0.7.9)
-    chef (10.22.0)
-      bunny (>= 0.6.0, < 0.8.0)
-      erubis
-      highline (>= 1.6.9)
-      json (>= 1.4.4, <= 1.7.7)
-      mixlib-authentication (>= 1.3.0)
-      mixlib-cli (>= 1.1.0)
-      mixlib-config (>= 1.1.2)
-      mixlib-log (>= 1.3.0)
-      mixlib-shellout
-      moneta (< 0.7.0)
-      net-ssh (~> 2.6)
-      net-ssh-multi (~> 1.1.0)
-      ohai (>= 0.6.0)
-      rest-client (>= 1.0.4, < 1.7.0)
-      treetop (~> 1.4.9)
-      uuidtools
-      yajl-ruby (~> 1.1)
-    erubis (2.7.0)
-    highline (1.6.16)
-    ipaddress (0.8.0)
-    json (1.7.7)
-    mime-types (1.21)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    mixlib-shellout (1.1.0-x86-mingw32)
-      win32-process (~> 0.6.5)
-    moneta (0.6.0)
-    net-ssh (2.6.6)
-    net-ssh-gateway (1.2.0)
-      net-ssh (>= 2.6.5)
-    net-ssh-multi (1.1)
-      net-ssh (>= 2.1.4)
-      net-ssh-gateway (>= 0.99.0)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    polyglot (0.3.3)
-    rake (0.9.2.2)
-    rest-client (1.6.7)
-      mime-types (>= 1.16)
-    systemu (2.5.2)
-    treetop (1.4.12)
-      polyglot
-      polyglot (>= 0.3.1)
-    uuidtools (2.1.3)
-    win32-api (1.4.8-x86-mingw32)
-    win32-process (0.6.6)
-      windows-pr (>= 1.2.2)
-    windows-api (0.4.2)
-      win32-api (>= 1.4.5)
-    windows-pr (1.2.2)
-      win32-api (>= 1.4.5)
-      windows-api (>= 0.3.0)
-    yajl-ruby (1.1.0)
-    yajl-ruby (1.1.0-x86-mingw32)
-
-PLATFORMS
-  ruby
-  x86-mingw32
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 10.22.0)
-  rake (~> 0.9.2.2)
-  yajl-ruby (~> 1.1.0)
diff --git a/chef_dsl_metadata/gemfiles/chef_10.24.0.gemfile b/chef_dsl_metadata/gemfiles/chef_10.24.0.gemfile
deleted file mode 100644
index 681f091..0000000
--- a/chef_dsl_metadata/gemfiles/chef_10.24.0.gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file was generated by Appraisal
-
-source "https://rubygems.org/"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "yajl-ruby", "~> 1.1.0"
-gem "chef", "10.24.0"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_10.24.0.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_10.24.0.gemfile.lock
deleted file mode 100644
index ff5afc6..0000000
--- a/chef_dsl_metadata/gemfiles/chef_10.24.0.gemfile.lock
+++ /dev/null
@@ -1,82 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    appraisal (0.5.1)
-      bundler
-      rake
-    bunny (0.7.9)
-    chef (10.24.0)
-      bunny (>= 0.6.0, < 0.8.0)
-      erubis
-      highline (>= 1.6.9)
-      json (>= 1.4.4, <= 1.7.7)
-      mixlib-authentication (>= 1.3.0)
-      mixlib-cli (>= 1.1.0)
-      mixlib-config (>= 1.1.2)
-      mixlib-log (>= 1.3.0)
-      mixlib-shellout
-      moneta (< 0.7.0)
-      net-ssh (~> 2.6)
-      net-ssh-multi (~> 1.1.0)
-      ohai (>= 0.6.0)
-      rest-client (>= 1.0.4, < 1.7.0)
-      treetop (~> 1.4.9)
-      uuidtools
-      yajl-ruby (~> 1.1)
-    erubis (2.7.0)
-    highline (1.6.16)
-    ipaddress (0.8.0)
-    json (1.7.7)
-    mime-types (1.21)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    mixlib-shellout (1.1.0-x86-mingw32)
-      win32-process (~> 0.6.5)
-    moneta (0.6.0)
-    net-ssh (2.6.6)
-    net-ssh-gateway (1.2.0)
-      net-ssh (>= 2.6.5)
-    net-ssh-multi (1.1)
-      net-ssh (>= 2.1.4)
-      net-ssh-gateway (>= 0.99.0)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    polyglot (0.3.3)
-    rake (0.9.2.2)
-    rest-client (1.6.7)
-      mime-types (>= 1.16)
-    systemu (2.5.2)
-    treetop (1.4.12)
-      polyglot
-      polyglot (>= 0.3.1)
-    uuidtools (2.1.3)
-    win32-api (1.4.8-x86-mingw32)
-    win32-process (0.6.6)
-      windows-pr (>= 1.2.2)
-    windows-api (0.4.2)
-      win32-api (>= 1.4.5)
-    windows-pr (1.2.2)
-      win32-api (>= 1.4.5)
-      windows-api (>= 0.3.0)
-    yajl-ruby (1.1.0)
-    yajl-ruby (1.1.0-x86-mingw32)
-
-PLATFORMS
-  ruby
-  x86-mingw32
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 10.24.0)
-  rake (~> 0.9.2.2)
-  yajl-ruby (~> 1.1.0)
diff --git a/chef_dsl_metadata/gemfiles/chef_10.24.4.gemfile b/chef_dsl_metadata/gemfiles/chef_10.24.4.gemfile
deleted file mode 100644
index 72f8cd2..0000000
--- a/chef_dsl_metadata/gemfiles/chef_10.24.4.gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file was generated by Appraisal
-
-source "https://rubygems.org/"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "yajl-ruby", "~> 1.1.0"
-gem "chef", "10.24.4"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_10.24.4.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_10.24.4.gemfile.lock
deleted file mode 100644
index c3a364d..0000000
--- a/chef_dsl_metadata/gemfiles/chef_10.24.4.gemfile.lock
+++ /dev/null
@@ -1,82 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    appraisal (0.5.2)
-      bundler
-      rake
-    bunny (0.7.9)
-    chef (10.24.4)
-      bunny (>= 0.6.0, < 0.8.0)
-      erubis
-      highline (>= 1.6.9)
-      json (>= 1.4.4, <= 1.7.7)
-      mixlib-authentication (>= 1.3.0)
-      mixlib-cli (>= 1.1.0)
-      mixlib-config (>= 1.1.2)
-      mixlib-log (>= 1.3.0)
-      mixlib-shellout
-      moneta (< 0.7.0)
-      net-ssh (~> 2.6)
-      net-ssh-multi (~> 1.1.0)
-      ohai (>= 0.6.0)
-      rest-client (>= 1.0.4, < 1.7.0)
-      treetop (~> 1.4.9)
-      uuidtools
-      yajl-ruby (~> 1.1)
-    erubis (2.7.0)
-    highline (1.6.18)
-    ipaddress (0.8.0)
-    json (1.7.7)
-    mime-types (1.23)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.6.0)
-    mixlib-shellout (1.1.0)
-    mixlib-shellout (1.1.0-x86-mingw32)
-      win32-process (~> 0.6.5)
-    moneta (0.6.0)
-    net-ssh (2.6.7)
-    net-ssh-gateway (1.2.0)
-      net-ssh (>= 2.6.5)
-    net-ssh-multi (1.1)
-      net-ssh (>= 2.1.4)
-      net-ssh-gateway (>= 0.99.0)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    polyglot (0.3.3)
-    rake (0.9.2.2)
-    rest-client (1.6.7)
-      mime-types (>= 1.16)
-    systemu (2.5.2)
-    treetop (1.4.12)
-      polyglot
-      polyglot (>= 0.3.1)
-    uuidtools (2.1.4)
-    win32-api (1.4.8-x86-mingw32)
-    win32-process (0.6.6)
-      windows-pr (>= 1.2.2)
-    windows-api (0.4.2)
-      win32-api (>= 1.4.5)
-    windows-pr (1.2.2)
-      win32-api (>= 1.4.5)
-      windows-api (>= 0.3.0)
-    yajl-ruby (1.1.0)
-    yajl-ruby (1.1.0-x86-mingw32)
-
-PLATFORMS
-  ruby
-  x86-mingw32
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 10.24.4)
-  rake (~> 0.9.2.2)
-  yajl-ruby (~> 1.1.0)
diff --git a/chef_dsl_metadata/gemfiles/chef_10.26.0.gemfile b/chef_dsl_metadata/gemfiles/chef_10.26.0.gemfile
deleted file mode 100644
index 360b843..0000000
--- a/chef_dsl_metadata/gemfiles/chef_10.26.0.gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file was generated by Appraisal
-
-source "https://rubygems.org/"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "yajl-ruby", "~> 1.1.0"
-gem "chef", "10.26.0"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_10.26.0.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_10.26.0.gemfile.lock
deleted file mode 100644
index 250c1e6..0000000
--- a/chef_dsl_metadata/gemfiles/chef_10.26.0.gemfile.lock
+++ /dev/null
@@ -1,82 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    appraisal (0.5.2)
-      bundler
-      rake
-    bunny (0.7.9)
-    chef (10.26.0)
-      bunny (>= 0.6.0, < 0.8.0)
-      erubis
-      highline (>= 1.6.9)
-      json (>= 1.4.4, <= 1.7.7)
-      mixlib-authentication (>= 1.3.0)
-      mixlib-cli (>= 1.1.0)
-      mixlib-config (>= 1.1.2)
-      mixlib-log (>= 1.3.0)
-      mixlib-shellout
-      moneta (< 0.7.0)
-      net-ssh (~> 2.6)
-      net-ssh-multi (~> 1.1.0)
-      ohai (>= 0.6.0)
-      rest-client (>= 1.0.4, < 1.7.0)
-      treetop (~> 1.4.9)
-      uuidtools
-      yajl-ruby (~> 1.1)
-    erubis (2.7.0)
-    highline (1.6.18)
-    ipaddress (0.8.0)
-    json (1.7.7)
-    mime-types (1.23)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.6.0)
-    mixlib-shellout (1.1.0)
-    mixlib-shellout (1.1.0-x86-mingw32)
-      win32-process (~> 0.6.5)
-    moneta (0.6.0)
-    net-ssh (2.6.7)
-    net-ssh-gateway (1.2.0)
-      net-ssh (>= 2.6.5)
-    net-ssh-multi (1.1)
-      net-ssh (>= 2.1.4)
-      net-ssh-gateway (>= 0.99.0)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    polyglot (0.3.3)
-    rake (0.9.2.2)
-    rest-client (1.6.7)
-      mime-types (>= 1.16)
-    systemu (2.5.2)
-    treetop (1.4.12)
-      polyglot
-      polyglot (>= 0.3.1)
-    uuidtools (2.1.4)
-    win32-api (1.4.8-x86-mingw32)
-    win32-process (0.6.6)
-      windows-pr (>= 1.2.2)
-    windows-api (0.4.2)
-      win32-api (>= 1.4.5)
-    windows-pr (1.2.2)
-      win32-api (>= 1.4.5)
-      windows-api (>= 0.3.0)
-    yajl-ruby (1.1.0)
-    yajl-ruby (1.1.0-x86-mingw32)
-
-PLATFORMS
-  ruby
-  x86-mingw32
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 10.26.0)
-  rake (~> 0.9.2.2)
-  yajl-ruby (~> 1.1.0)
diff --git a/chef_dsl_metadata/gemfiles/chef_11.0.0.gemfile b/chef_dsl_metadata/gemfiles/chef_11.0.0.gemfile
deleted file mode 100644
index dfd3fa0..0000000
--- a/chef_dsl_metadata/gemfiles/chef_11.0.0.gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file was generated by Appraisal
-
-source "https://rubygems.org/"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "yajl-ruby", "~> 1.1.0"
-gem "chef", "11.0.0"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_11.0.0.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_11.0.0.gemfile.lock
deleted file mode 100644
index f8e417b..0000000
--- a/chef_dsl_metadata/gemfiles/chef_11.0.0.gemfile.lock
+++ /dev/null
@@ -1,71 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    appraisal (0.5.1)
-      bundler
-      rake
-    chef (11.0.0)
-      erubis
-      highline (>= 1.6.9)
-      json (>= 1.4.4, <= 1.6.1)
-      mixlib-authentication (>= 1.3.0)
-      mixlib-cli (~> 1.3.0)
-      mixlib-config (>= 1.1.2)
-      mixlib-log (>= 1.3.0)
-      mixlib-shellout
-      net-ssh (~> 2.2.2)
-      net-ssh-multi (~> 1.1.0)
-      ohai (>= 0.6.0)
-      rest-client (>= 1.0.4, < 1.7.0)
-      yajl-ruby (~> 1.1)
-    erubis (2.7.0)
-    highline (1.6.16)
-    ipaddress (0.8.0)
-    json (1.6.1)
-    mime-types (1.21)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    mixlib-shellout (1.1.0-x86-mingw32)
-      win32-process (~> 0.6.5)
-    net-ssh (2.2.2)
-    net-ssh-gateway (1.1.0)
-      net-ssh (>= 1.99.1)
-    net-ssh-multi (1.1)
-      net-ssh (>= 2.1.4)
-      net-ssh-gateway (>= 0.99.0)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    rake (0.9.2.2)
-    rest-client (1.6.7)
-      mime-types (>= 1.16)
-    systemu (2.5.2)
-    win32-api (1.4.8-x86-mingw32)
-    win32-process (0.6.6)
-      windows-pr (>= 1.2.2)
-    windows-api (0.4.2)
-      win32-api (>= 1.4.5)
-    windows-pr (1.2.2)
-      win32-api (>= 1.4.5)
-      windows-api (>= 0.3.0)
-    yajl-ruby (1.1.0)
-    yajl-ruby (1.1.0-x86-mingw32)
-
-PLATFORMS
-  ruby
-  x86-mingw32
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 11.0.0)
-  rake (~> 0.9.2.2)
-  yajl-ruby (~> 1.1.0)
diff --git a/chef_dsl_metadata/gemfiles/chef_11.0.1.gemfile b/chef_dsl_metadata/gemfiles/chef_11.0.1.gemfile
deleted file mode 100644
index b9f13e1..0000000
--- a/chef_dsl_metadata/gemfiles/chef_11.0.1.gemfile
+++ /dev/null
@@ -1,8 +0,0 @@
-# This file was generated by Appraisal
-
-source "http://rubygems.org"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "chef", "11.0.1"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_11.2.0.gemfile b/chef_dsl_metadata/gemfiles/chef_11.2.0.gemfile
deleted file mode 100644
index 960f807..0000000
--- a/chef_dsl_metadata/gemfiles/chef_11.2.0.gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file was generated by Appraisal
-
-source "https://rubygems.org/"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "yajl-ruby", "~> 1.1.0"
-gem "chef", "11.2.0"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_11.2.0.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_11.2.0.gemfile.lock
deleted file mode 100644
index 084ff28..0000000
--- a/chef_dsl_metadata/gemfiles/chef_11.2.0.gemfile.lock
+++ /dev/null
@@ -1,71 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    appraisal (0.5.1)
-      bundler
-      rake
-    chef (11.2.0)
-      erubis
-      highline (>= 1.6.9)
-      json (~> 1.7.6, >= 1.4.4)
-      mixlib-authentication (>= 1.3.0)
-      mixlib-cli (~> 1.3.0)
-      mixlib-config (>= 1.1.2)
-      mixlib-log (>= 1.3.0)
-      mixlib-shellout
-      net-ssh (~> 2.6)
-      net-ssh-multi (~> 1.1.0)
-      ohai (>= 0.6.0)
-      rest-client (>= 1.0.4, < 1.7.0)
-      yajl-ruby (~> 1.1)
-    erubis (2.7.0)
-    highline (1.6.16)
-    ipaddress (0.8.0)
-    json (1.7.7)
-    mime-types (1.21)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    mixlib-shellout (1.1.0-x86-mingw32)
-      win32-process (~> 0.6.5)
-    net-ssh (2.6.6)
-    net-ssh-gateway (1.2.0)
-      net-ssh (>= 2.6.5)
-    net-ssh-multi (1.1)
-      net-ssh (>= 2.1.4)
-      net-ssh-gateway (>= 0.99.0)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    rake (0.9.2.2)
-    rest-client (1.6.7)
-      mime-types (>= 1.16)
-    systemu (2.5.2)
-    win32-api (1.4.8-x86-mingw32)
-    win32-process (0.6.6)
-      windows-pr (>= 1.2.2)
-    windows-api (0.4.2)
-      win32-api (>= 1.4.5)
-    windows-pr (1.2.2)
-      win32-api (>= 1.4.5)
-      windows-api (>= 0.3.0)
-    yajl-ruby (1.1.0)
-    yajl-ruby (1.1.0-x86-mingw32)
-
-PLATFORMS
-  ruby
-  x86-mingw32
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 11.2.0)
-  rake (~> 0.9.2.2)
-  yajl-ruby (~> 1.1.0)
diff --git a/chef_dsl_metadata/gemfiles/chef_11.4.0.gemfile b/chef_dsl_metadata/gemfiles/chef_11.4.0.gemfile
deleted file mode 100644
index 89a8a4c..0000000
--- a/chef_dsl_metadata/gemfiles/chef_11.4.0.gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file was generated by Appraisal
-
-source "https://rubygems.org/"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "yajl-ruby", "~> 1.1.0"
-gem "chef", "11.4.0"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_11.4.0.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_11.4.0.gemfile.lock
deleted file mode 100644
index 9184d5b..0000000
--- a/chef_dsl_metadata/gemfiles/chef_11.4.0.gemfile.lock
+++ /dev/null
@@ -1,71 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    appraisal (0.5.1)
-      bundler
-      rake
-    chef (11.4.0)
-      erubis
-      highline (>= 1.6.9)
-      json (>= 1.4.4, <= 1.7.7)
-      mixlib-authentication (>= 1.3.0)
-      mixlib-cli (~> 1.3.0)
-      mixlib-config (>= 1.1.2)
-      mixlib-log (>= 1.3.0)
-      mixlib-shellout
-      net-ssh (~> 2.6)
-      net-ssh-multi (~> 1.1.0)
-      ohai (>= 0.6.0)
-      rest-client (>= 1.0.4, < 1.7.0)
-      yajl-ruby (~> 1.1)
-    erubis (2.7.0)
-    highline (1.6.16)
-    ipaddress (0.8.0)
-    json (1.7.7)
-    mime-types (1.21)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.4.1)
-    mixlib-shellout (1.1.0)
-    mixlib-shellout (1.1.0-x86-mingw32)
-      win32-process (~> 0.6.5)
-    net-ssh (2.6.6)
-    net-ssh-gateway (1.2.0)
-      net-ssh (>= 2.6.5)
-    net-ssh-multi (1.1)
-      net-ssh (>= 2.1.4)
-      net-ssh-gateway (>= 0.99.0)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    rake (0.9.2.2)
-    rest-client (1.6.7)
-      mime-types (>= 1.16)
-    systemu (2.5.2)
-    win32-api (1.4.8-x86-mingw32)
-    win32-process (0.6.6)
-      windows-pr (>= 1.2.2)
-    windows-api (0.4.2)
-      win32-api (>= 1.4.5)
-    windows-pr (1.2.2)
-      win32-api (>= 1.4.5)
-      windows-api (>= 0.3.0)
-    yajl-ruby (1.1.0)
-    yajl-ruby (1.1.0-x86-mingw32)
-
-PLATFORMS
-  ruby
-  x86-mingw32
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 11.4.0)
-  rake (~> 0.9.2.2)
-  yajl-ruby (~> 1.1.0)
diff --git a/chef_dsl_metadata/gemfiles/chef_11.4.2.gemfile b/chef_dsl_metadata/gemfiles/chef_11.4.2.gemfile
deleted file mode 100644
index e6d0d4c..0000000
--- a/chef_dsl_metadata/gemfiles/chef_11.4.2.gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file was generated by Appraisal
-
-source "https://rubygems.org/"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "yajl-ruby", "~> 1.1.0"
-gem "chef", "11.4.2"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_11.4.2.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_11.4.2.gemfile.lock
deleted file mode 100644
index e308cd9..0000000
--- a/chef_dsl_metadata/gemfiles/chef_11.4.2.gemfile.lock
+++ /dev/null
@@ -1,71 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    appraisal (0.5.2)
-      bundler
-      rake
-    chef (11.4.2)
-      erubis
-      highline (>= 1.6.9)
-      json (>= 1.4.4, <= 1.7.7)
-      mixlib-authentication (>= 1.3.0)
-      mixlib-cli (~> 1.3.0)
-      mixlib-config (>= 1.1.2)
-      mixlib-log (>= 1.3.0)
-      mixlib-shellout
-      net-ssh (~> 2.6)
-      net-ssh-multi (~> 1.1.0)
-      ohai (>= 0.6.0)
-      rest-client (>= 1.0.4, < 1.7.0)
-      yajl-ruby (~> 1.1)
-    erubis (2.7.0)
-    highline (1.6.18)
-    ipaddress (0.8.0)
-    json (1.7.7)
-    mime-types (1.23)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.6.0)
-    mixlib-shellout (1.1.0)
-    mixlib-shellout (1.1.0-x86-mingw32)
-      win32-process (~> 0.6.5)
-    net-ssh (2.6.7)
-    net-ssh-gateway (1.2.0)
-      net-ssh (>= 2.6.5)
-    net-ssh-multi (1.1)
-      net-ssh (>= 2.1.4)
-      net-ssh-gateway (>= 0.99.0)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    rake (0.9.2.2)
-    rest-client (1.6.7)
-      mime-types (>= 1.16)
-    systemu (2.5.2)
-    win32-api (1.4.8-x86-mingw32)
-    win32-process (0.6.6)
-      windows-pr (>= 1.2.2)
-    windows-api (0.4.2)
-      win32-api (>= 1.4.5)
-    windows-pr (1.2.2)
-      win32-api (>= 1.4.5)
-      windows-api (>= 0.3.0)
-    yajl-ruby (1.1.0)
-    yajl-ruby (1.1.0-x86-mingw32)
-
-PLATFORMS
-  ruby
-  x86-mingw32
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 11.4.2)
-  rake (~> 0.9.2.2)
-  yajl-ruby (~> 1.1.0)
diff --git a/chef_dsl_metadata/gemfiles/chef_11.4.4.gemfile b/chef_dsl_metadata/gemfiles/chef_11.4.4.gemfile
deleted file mode 100644
index b2a2788..0000000
--- a/chef_dsl_metadata/gemfiles/chef_11.4.4.gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file was generated by Appraisal
-
-source "https://rubygems.org/"
-
-gem "appraisal", "~> 0.5.1"
-gem "rake", "~> 0.9.2.2"
-gem "yajl-ruby", "~> 1.1.0"
-gem "chef", "11.4.4"
-
diff --git a/chef_dsl_metadata/gemfiles/chef_11.4.4.gemfile.lock b/chef_dsl_metadata/gemfiles/chef_11.4.4.gemfile.lock
deleted file mode 100644
index 98df4e4..0000000
--- a/chef_dsl_metadata/gemfiles/chef_11.4.4.gemfile.lock
+++ /dev/null
@@ -1,71 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    appraisal (0.5.2)
-      bundler
-      rake
-    chef (11.4.4)
-      erubis
-      highline (>= 1.6.9)
-      json (>= 1.4.4, <= 1.7.7)
-      mixlib-authentication (>= 1.3.0)
-      mixlib-cli (~> 1.3.0)
-      mixlib-config (>= 1.1.2)
-      mixlib-log (>= 1.3.0)
-      mixlib-shellout
-      net-ssh (~> 2.6)
-      net-ssh-multi (~> 1.1.0)
-      ohai (>= 0.6.0)
-      rest-client (>= 1.0.4, < 1.7.0)
-      yajl-ruby (~> 1.1)
-    erubis (2.7.0)
-    highline (1.6.18)
-    ipaddress (0.8.0)
-    json (1.7.7)
-    mime-types (1.23)
-    mixlib-authentication (1.3.0)
-      mixlib-log
-    mixlib-cli (1.3.0)
-    mixlib-config (1.1.2)
-    mixlib-log (1.6.0)
-    mixlib-shellout (1.1.0)
-    mixlib-shellout (1.1.0-x86-mingw32)
-      win32-process (~> 0.6.5)
-    net-ssh (2.6.7)
-    net-ssh-gateway (1.2.0)
-      net-ssh (>= 2.6.5)
-    net-ssh-multi (1.1)
-      net-ssh (>= 2.1.4)
-      net-ssh-gateway (>= 0.99.0)
-    ohai (6.16.0)
-      ipaddress
-      mixlib-cli
-      mixlib-config
-      mixlib-log
-      mixlib-shellout
-      systemu
-      yajl-ruby
-    rake (0.9.2.2)
-    rest-client (1.6.7)
-      mime-types (>= 1.16)
-    systemu (2.5.2)
-    win32-api (1.4.8-x86-mingw32)
-    win32-process (0.6.6)
-      windows-pr (>= 1.2.2)
-    windows-api (0.4.2)
-      win32-api (>= 1.4.5)
-    windows-pr (1.2.2)
-      win32-api (>= 1.4.5)
-      windows-api (>= 0.3.0)
-    yajl-ruby (1.1.0)
-    yajl-ruby (1.1.0-x86-mingw32)
-
-PLATFORMS
-  ruby
-  x86-mingw32
-
-DEPENDENCIES
-  appraisal (~> 0.5.1)
-  chef (= 11.4.4)
-  rake (~> 0.9.2.2)
-  yajl-ruby (~> 1.1.0)
diff --git a/chef_dsl_metadata/windows.rb b/chef_dsl_metadata/windows.rb
deleted file mode 100644
index c99a195..0000000
--- a/chef_dsl_metadata/windows.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-def windows?
-  !! RUBY_PLATFORM =~ /mswin|mingw|windows/
-end
-
-def has_windows_rights?(version)
-  Gem::Version.new(version) >= Gem::Version.new('0.10.10')
-end
diff --git a/features/007_check_for_undeclared_recipe_dependencies.feature b/features/007_check_for_undeclared_recipe_dependencies.feature
index 6892eda..09f128e 100644
--- a/features/007_check_for_undeclared_recipe_dependencies.feature
+++ b/features/007_check_for_undeclared_recipe_dependencies.feature
@@ -4,15 +4,16 @@ Feature: Check for undeclared recipe dependencies
   As a developer
   I want to identify included recipes that are not expressed in cookbook metadata
 
-  Scenario: Cookbook includes undeclared recipe dependency
-    Given a cookbook recipe that includes an undeclared recipe dependency
-    When I check the cookbook
-    Then the undeclared dependency warning 007 should be displayed
-
-  Scenario: Cookbook includes undeclared recipe dependency unscoped
-    Given a cookbook recipe that includes an undeclared recipe dependency unscoped
+  Scenario Outline: Cookbook includes undeclared recipe dependency
+    Given a cookbook recipe that includes an undeclared recipe dependency <qualifiers>
     When I check the cookbook
     Then the undeclared dependency warning 007 should be displayed
+  Examples:
+    | qualifiers                |
+    |                           |
+    | with parentheses          |
+    | unscoped                  |
+    | unscoped with parentheses |
 
   Scenario: Cookbook includes recipe via expression
     Given a cookbook recipe that includes a recipe name from an expression
@@ -29,41 +30,24 @@ Feature: Check for undeclared recipe dependencies
     | #{cookbook_name}::other        |
     | #{cbk}_other::other            |
 
-  Scenario: Cookbook includes declared recipe dependency
-    Given a cookbook recipe that includes a declared recipe dependency
-    When I check the cookbook
-    Then the undeclared dependency warning 007 should not be displayed
-
-  Scenario: Cookbook includes declared recipe dependency unscoped
-    Given a cookbook recipe that includes a declared recipe dependency unscoped
-    When I check the cookbook
-    Then the undeclared dependency warning 007 should not be displayed
-
-  Scenario: Cookbook includes several declared recipe dependencies
-    Given a cookbook recipe that includes several declared recipe dependencies - brace
-    When I check the cookbook
-    Then the undeclared dependency warning 007 should not be displayed
-
-  Scenario: Cookbook includes several declared recipe dependencies
-    Given a cookbook recipe that includes several declared recipe dependencies - block
+  Scenario Outline: Declared dependencies
+    Given a cookbook recipe that includes <dependency_type>
     When I check the cookbook
     Then the undeclared dependency warning 007 should not be displayed
+  Examples:
+    | dependency_type                                         |
+    | a declared recipe dependency                            |
+    | a declared recipe dependency unscoped                   |
+    | several declared recipe dependencies - block            |
+    | several declared recipe dependencies - brace            |
+    | a local recipe                                          |
+    | a local recipe where the directory is differently named |
 
   Scenario: Cookbook includes mix of declared and undeclared recipe dependencies
     Given a cookbook recipe that includes both declared and undeclared recipe dependencies
     When I check the cookbook
     Then the undeclared dependency warning 007 should be displayed only for the undeclared dependencies
 
-  Scenario: Cookbook includes local recipe
-    Given a cookbook recipe that includes a local recipe
-    When I check the cookbook
-    Then the undeclared dependency warning 007 should not be displayed
-
-  Scenario: Cookbook includes local recipe - name in metadata
-    Given a cookbook recipe that includes a local recipe where the directory is differently named
-    When I check the cookbook
-    Then the undeclared dependency warning 007 should not be displayed
-
   Scenario: Cookbook has no metadata file
     Given a cookbook that does not have defined metadata
     When I check the cookbook
diff --git a/features/017_check_for_no_lwrp_notifications.feature b/features/017_check_for_no_lwrp_notifications.feature
index beb96a9..8f9bd5f 100644
--- a/features/017_check_for_no_lwrp_notifications.feature
+++ b/features/017_check_for_no_lwrp_notifications.feature
@@ -23,3 +23,28 @@ Feature: Check for no LWRP notifications
     Given a cookbook that contains a LWRP with multiple notifications
     When I check the cookbook
     Then the LWRP does not notify when updated warning 017 should not be displayed against the provider file
+
+  Scenario Outline: LWRP using converge_by
+    Given a cookbook that contains a LWRP that uses converge_by - <block_type> block <with_parens> parentheses
+    When I check the cookbook
+    Then the LWRP does not notify when updated warning 017 should not be displayed against the provider file
+  Examples:
+    | block_type | with_parens |
+    | brace      | with        |
+    | do         | with        |
+    | do         | without     |
+
+  Scenario: LWRP using use_inline_resources
+    Given a cookbook that contains a LWRP that uses use_inline_resources
+     When I check the cookbook
+     Then the LWRP does not notify when updated warning 017 should not be displayed against the provider file
+
+  Scenario Outline: Warnings raised for actions individually
+    Given a LWRP with an action :create that notifies with <notify_type> and another :delete that does not notify
+    When I check the cookbook
+    Then the LWRP does not notify when updated warning 017 should not be shown against the :create action
+     And the LWRP does not notify when updated warning 017 should be shown against the :delete action
+  Examples:
+    | notify_type            |
+    | converge_by            |
+    | updated_by_last_action |
diff --git a/features/019_check_for_consistent_node_access.feature b/features/019_check_for_consistent_node_access.feature
index 4c0bfc7..7574f54 100644
--- a/features/019_check_for_consistent_node_access.feature
+++ b/features/019_check_for_consistent_node_access.feature
@@ -53,6 +53,7 @@ Feature: Check for consistency in node access
       | reads    | strings          | platform? | not shown    |
       | reads    | symbols          | run_list  | not shown    |
       | reads    | symbols          | run_state | not shown    |
+      | reads    | strings          | run_state | not shown    |
       | reads    | strings          | set       | not shown    |
       | reads    | strings,symbols  | set       | shown        |
 
diff --git a/features/022_check_for_dodgy_conditions_within_loop.feature b/features/022_check_for_dodgy_conditions_within_loop.feature
index 171d8a7..ec727a8 100644
--- a/features/022_check_for_dodgy_conditions_within_loop.feature
+++ b/features/022_check_for_dodgy_conditions_within_loop.feature
@@ -26,3 +26,8 @@ Feature: Check for dodgy resource conditions within a loop
     | "feed_pet"             | only_if "[ -f \"/tmp/#{pet_name}\" ]"             | should       |
     | "feed_pet_#{pet_name}" | not_if "[ -f \"/tmp/#{pet_name}\" ]"              | should not   |
     | pet_name               | not_if "[ -f \"/tmp/#{pet_name}\" ]"              | should not   |
+
+  Scenario: Resource within a multi-arg block
+    Given a resource declared with a guard within a loop with multiple block arguments
+    When I check the cookbook
+    Then the dodgy resource condition warning 022 should not be shown
diff --git a/features/033_check_for_missing_template.feature b/features/033_check_for_missing_template.feature
index 29095e8..bb0ec2e 100644
--- a/features/033_check_for_missing_template.feature
+++ b/features/033_check_for_missing_template.feature
@@ -4,70 +4,26 @@ Feature: Check for missing template
   As a developer
   I want to identify template resources that refer to missing templates
 
-  Scenario: Missing template
-    Given a cookbook recipe that refers to a missing template
-     When I check the cookbook
-     Then the missing template warning 033 should be displayed
-
-  Scenario: Missing template (inferred)
-    Given a cookbook recipe that uses a missing inferred template
-     When I check the cookbook
-     Then the missing template warning 033 should be displayed
-
-  Scenario: Present template
-    Given a cookbook recipe that refers to a template
-     When I check the cookbook
-     Then the missing template warning 033 should not be displayed
-
-  Scenario: Present template (not .erb)
-    Given a cookbook recipe that refers to a template without an erb extension
-     When I check the cookbook
-     Then the missing template warning 033 should not be displayed
-
-  Scenario: Present template (subdirectory)
-    Given a cookbook recipe that refers to a template in a subdirectory
-     When I check the cookbook
-     Then the missing template warning 033 should not be displayed
-
-  Scenario: Present template (inferred)
-    Given a cookbook recipe that uses an inferred template
-     When I check the cookbook
-     Then the missing template warning 033 should not be displayed
-
-  Scenario: Template present in another cookbook
-    Given a cookbook recipe that uses a template from another cookbook
-     When I check the cookbook
-     Then the missing template warning 033 should not be displayed
-
-  Scenario: Local template
-    Given a cookbook recipe that refers to a local template
-     When I check the cookbook
-     Then the missing template warning 033 should not be displayed
-
-  Scenario: Template source name is an expression
-    Given a cookbook recipe that refers to a template with an expression
-     When I check the cookbook
-     Then the missing template warning 033 should not be displayed
-
-  Scenario: Template source is an expression (inferred)
-    Given a cookbook recipe that infers a template with an expression
-     When I check the cookbook
-     Then the missing template warning 033 should not be displayed
-
-  Scenario: Template name and source are expressions
-    Given a cookbook recipe that defines a template where name and source are both simple expressions
-     When I check the cookbook
-     Then the missing template warning 033 should not be displayed
-
-  Scenario: Template name is a complex expression
-    Given a cookbook recipe that defines a template where name is a complex expression
-     When I check the cookbook
-     Then the missing template warning 033 should not be displayed
-
-  Scenario: Template name and source are complex expressions
-    Given a cookbook recipe that defines a template where both the name and source are complex expressions
-     When I check the cookbook
-     Then the missing template warning 033 should not be displayed
+  Scenario Outline: Template types
+    Given a cookbook recipe that <template_type>
+     When I check the cookbook
+     Then the missing template warning 033 <warning>
+  Examples:
+    | template_type                                                             | warning                 |
+    | defines a template where both the name and source are complex expressions | should not be displayed |
+    | defines a template where name and source are both simple expressions      | should not be displayed |
+    | defines a template where name is a complex expression                     | should not be displayed |
+    | infers a template with an expression                                      | should not be displayed |
+    | refers to a hidden template                                               | should not be displayed |
+    | refers to a local template                                                | should not be displayed |
+    | refers to a missing template                                              | should be displayed     |
+    | refers to a template in a subdirectory                                    | should not be displayed |
+    | refers to a template                                                      | should not be displayed |
+    | refers to a template with an expression                                   | should not be displayed |
+    | refers to a template without an erb extension                             | should not be displayed |
+    | uses a missing inferred template                                          | should be displayed     |
+    | uses an inferred template                                                 | should not be displayed |
+    | uses a template from another cookbook                                     | should not be displayed |
 
   Scenario: Template within deploy resource
     Given a cookbook recipe with a deploy resource that contains a template resource
diff --git a/features/034_check_for_unused_template_variables.feature b/features/034_check_for_unused_template_variables.feature
index 3622b50..4a80469 100644
--- a/features/034_check_for_unused_template_variables.feature
+++ b/features/034_check_for_unused_template_variables.feature
@@ -35,3 +35,47 @@ Feature: Check for unused template variables
       | config_var,another_var | @another_var                | .conf.erb | should     |
       | config_var             | @config_var                 | .conf     | should not |
       | config_var,another_var | @another_var                | .conf     | should     |
+
+  Scenario Outline: Variables passed with includes
+    Given a cookbook that passes variables <variables> to a template with extension <extension>
+      And the template <extension> contains partial includes of type <type> with the expression <expression>
+     When I check the cookbook
+     Then the unused template variables warning 034 <displayed> be displayed against the template <extension>
+    Examples:
+      | variables              | expression                  | type           | extension | displayed  |
+      | config_var             | node[:configs][:config_var] | no parentheses | .conf.erb | should     |
+      | config_var             | @config_var                 | no parentheses | .conf.erb | should not |
+      | config_var             | @config_var['foo']          | no parentheses | .conf.erb | should not |
+      | config_var             | node[:configs][:config_var] | no parentheses | .conf.erb | should     |
+      | config_var,another_var | node[:configs][:config_var] | no parentheses | .conf.erb | should     |
+      | config_var,another_var | @config_var                 | no parentheses | .conf.erb | should     |
+      | config_var,another_var | @another_var                | no parentheses | .conf.erb | should     |
+      | config_var             | @config_var                 | no parentheses | .conf     | should not |
+      | config_var,another_var | @another_var                | no parentheses | .conf     | should     |
+      | config_var             | node[:configs][:config_var] | parentheses    | .conf.erb | should     |
+      | config_var             | @config_var                 | parentheses    | .conf.erb | should not |
+      | config_var             | @config_var['foo']          | parentheses    | .conf.erb | should not |
+      | config_var             | node[:configs][:config_var] | parentheses    | .conf.erb | should     |
+      | config_var,another_var | node[:configs][:config_var] | parentheses    | .conf.erb | should     |
+      | config_var,another_var | @config_var                 | parentheses    | .conf.erb | should     |
+      | config_var,another_var | @another_var                | parentheses    | .conf.erb | should     |
+      | config_var             | @config_var                 | parentheses    | .conf     | should not |
+      | config_var,another_var | @another_var                | parentheses    | .conf     | should     |
+      | config_var,another_var | @config_var, at another_var    | nested         | .conf     | should not |
+      | config_var,another_var | @config_var                 | nested         | .conf     | should     |
+
+  Scenario Outline: Template path is inferred
+    Given a cookbook that passes variables <variables> to an inferred template
+      And the inferred template contains the expression <expression>
+     When I check the cookbook
+     Then the unused template variables warning 034 <displayed> be displayed against the inferred template
+    Examples:
+      | variables              | expression                  | displayed  |
+      | config_var             | node[:configs][:config_var] | should     |
+      | config_var             | @config_var                 | should not |
+
+  Scenario: Template includes contain cycle
+    Given a template that includes a partial that includes the original template again
+     When I check the cookbook
+     Then the unused template variables warning 034 should not be displayed
+      And no error should have occurred
diff --git a/features/047_check_for_attribute_assignment_without_precedence.feature b/features/047_check_for_attribute_assignment_without_precedence.feature
new file mode 100644
index 0000000..18040f5
--- /dev/null
+++ b/features/047_check_for_attribute_assignment_without_precedence.feature
@@ -0,0 +1,47 @@
+Feature: Check for attribute assignment without specified precedence
+
+  In order to ensure that my cookbooks continue to work with Chef 11+
+  As a developer
+  I want to identify node attribute assignment that does not specify the attribute precedence
+
+  Scenario Outline: Attribute assignment
+    Given a cookbook attributes file with assignment <assignment>
+     When I check the cookbook
+     Then the attribute assignment without precedence warning 047 <show_warning> be displayed against the attributes file
+  Examples:
+    | assignment                          | show_warning |
+    | node[:foo] = 'bar'                  | should       |
+    | node['foo'] = 'bar'                 | should       |
+    | node['foo'] = a_var                 | should       |
+    | a_var = node['foo']                 | should not   |
+    | node['foo']['bar'] = 'baz'          | should       |
+    | node['foo']['bar']['baz'] = 'fizz'  | should       |
+    | node.foo = 'bar'                    | should       |
+    | node.normal.foo = 'bar'             | should not   |
+    | node.normal['foo'] = 'bar'          | should not   |
+    | node.default['foo'] = 'bar'         | should not   |
+    | node.force_default['foo'] = 'bar'   | should not   |
+    | node.set['foo'] = 'bar'             | should not   |
+    | node.override['foo'] = 'bar'        | should not   |
+    | node.force_override['foo'] = 'bar'  | should not   |
+    | node.automatic_attrs['foo'] = 'bar' | should not   |
+    | node['foos'] << 'bar'               | should       |
+    | node['foo']['bars'] << 'baz'        | should       |
+    | foo = node['bar']                   | should not   |
+    | baz << node['foo']['bars']          | should not   |
+    | node.run_state['foo'] = bar         | should not   |
+    | foo[:bar] << node['baz']            | should not   |
+    | node.default['foo'] << bar          | should not   |
+    | node.default_unless['foo'] = 'bar'  | should not   |
+    | node.normal_unless['foo'] = 'bar'   | should not   |
+    | node.set_unless['foo'] = 'bar'      | should not   |
+    | node.override_unless['foo'] = 'bar' | should not   |
+
+  Scenario Outline: Attribute assignment in recipe
+    Given a cookbook recipe file with assignment <assignment>
+     When I check the cookbook
+     Then the attribute assignment without precedence warning 047 <show_warning> be displayed
+  Examples:
+    | assignment                 | show_warning |
+    | node[:foo] = 'bar'         | should       |
+    | node.normal['foo'] = 'bar' | should not   |
diff --git a/features/048_check_for_shellout.feature b/features/048_check_for_shellout.feature
new file mode 100644
index 0000000..8b4e3d5
--- /dev/null
+++ b/features/048_check_for_shellout.feature
@@ -0,0 +1,34 @@
+Feature: Check for spawning without Mixlib::ShellOut
+
+  In order to work more easily with spawned processes
+  As a developer
+  I want to use the Mixlib::ShellOut library rather than basic ruby constructs
+
+  Scenario Outline: Spawning a sub-process
+    Given a cookbook recipe that spawns a sub-process with <command>
+     When I check the cookbook
+     Then the prefer mixlib shellout warning 048 <show_warning> be displayed
+  Examples:
+    | command                                | show_warning |
+    | `ls`                                   | should       |
+    | `#{cmd}`                               | should       |
+    | %x{ls}                                 | should       |
+    | %x[ls]                                 | should       |
+    | %x{#{cmd} some_dir}                    | should       |
+    | %x{#{cmd} some_dir}                    | should       |
+    | system "ls"                            | should       |
+    | system("ls")                           | should       |
+    | system cmd                             | should       |
+    | system(cmd)                            | should       |
+    | system("#{cmd} some_dir")              | should       |
+    | Mixlib::ShellOut.new('ls').run_command | should not   |
+
+  Scenario: Execute resource
+    Given a cookbook recipe that executes 'ls' with an execute resource
+     When I check the cookbook
+     Then the prefer mixlib shellout warning 048 should not be displayed
+
+  Scenario: Group resource
+    Given a cookbook recipe that contains a group resource that uses the 'system' attribute
+     When I check the cookbook
+     Then the prefer mixlib shellout warning 048 should not be displayed against the group resource
diff --git a/features/049_check_for_role_name_mismatch_with_file_name.feature b/features/049_check_for_role_name_mismatch_with_file_name.feature
new file mode 100644
index 0000000..4e007f1
--- /dev/null
+++ b/features/049_check_for_role_name_mismatch_with_file_name.feature
@@ -0,0 +1,31 @@
+Feature: Identify roles names that do not match filenames
+
+  In order to avoid confusion
+  As a developer
+  I want to identify roles whose names differ from their filename
+
+  Scenario Outline: Illustrates role paths
+    Given a directory that contains a role file <filename> in <format> that defines role name <role_name>
+     When I check the role directory as a <path_type> path
+     Then the role name does not match file name warning 049 <show_warning> be shown
+  Examples:
+    | filename       | format | role_name | path_type | show_warning |
+    | webserver.rb   | ruby   | webserver | role      | should not   |
+    | webserver.rb   | ruby   | apache    | role      | should       |
+    | webserver.json | json   | webserver | role      | should not   |
+    | webserver.json | json   | apache    | role      | should not   |
+    | webserver.rb   | ruby   | webserver | cookbook  | should not   |
+    | webserver.rb   | ruby   | apache    | cookbook  | should not   |
+    | webserver.rb   | ruby   | webserver | default   | should not   |
+    | webserver.rb   | ruby   | apache    | default   | should not   |
+
+  Scenario: Role name references variable
+    Given a directory that contains a ruby role with an expression as its name
+     When I check the role directory
+     Then the role name does not match file name warning 049 should not be shown
+
+  Scenario: Multiple role names declared
+    Given a directory that contains a ruby role that declares the role name more than once
+      And the last role name declared does not match the containing filename
+     When I check the role directory
+     Then the role name does not match file name warning 049 should be shown against the second name
diff --git a/features/050_check_for_invalid_name.feature b/features/050_check_for_invalid_name.feature
new file mode 100644
index 0000000..61e03a1
--- /dev/null
+++ b/features/050_check_for_invalid_name.feature
@@ -0,0 +1,33 @@
+Feature: Check for invalid names
+
+  In order to identify issues more quickly
+  As a developer
+  I want to identify roles or environments whose names are invalid
+
+  Scenario Outline: Role name validity
+    Given a ruby role file that defines a role with name <role_name>
+     When I check the role directory
+     Then the invalid role name warning 050 <show_warning> be shown
+  Examples:
+    | role_name    | show_warning |
+    | webserver    | should not   |
+    | web_server   | should not   |
+    | web-server   | should not   |
+    | webserver123 | should not   |
+    | Webserver    | should not   |
+    | web server   | should       |
+    | webserver%   | should       |
+
+  Scenario Outline: Environment name validity
+    Given a ruby environment file that defines an environment with name <environment_name>
+     When I check the environment directory
+     Then the invalid environment name warning 050 <show_warning> be shown
+  Examples:
+    | environment_name     | show_warning |
+    | production           | should not   |
+    | pre_production       | should not   |
+    | production-eu        | should not   |
+    | production2          | should not   |
+    | Production           | should not   |
+    | EU West              | should       |
+    | production (eu-west) | should       |
diff --git a/features/051_check_for_template_partial_loops.feature b/features/051_check_for_template_partial_loops.feature
new file mode 100644
index 0000000..73d7a9a
--- /dev/null
+++ b/features/051_check_for_template_partial_loops.feature
@@ -0,0 +1,43 @@
+Feature: Check for template partial includes cycle
+
+  In order to avoid failures at converge time
+  As a developer
+  I want to identify when a template uses partials that would loop
+
+  Scenario: Template without includes
+    Given a cookbook recipe that refers to a template
+    When I check the cookbook
+    Then the template partials loop indefinitely warning 051 should not be displayed against the templates
+
+  Scenario: Template includes do not cycle
+    Given a template that includes a partial
+     When I check the cookbook
+     Then the template partials loop indefinitely warning 051 should not be displayed against the templates
+
+  Scenario: Template includes contain cycle
+    Given a template that includes a partial that includes the original template again
+     When I check the cookbook
+     Then the template partials loop indefinitely warning 051 should be displayed against the templates
+      And no error should have occurred
+
+  Scenario: Relative partial
+    Given a template that includes a partial with a relative subdirectory path
+     When I check the cookbook
+     Then the template partials loop indefinitely warning 051 should not be displayed against the templates
+      And no error should have occurred
+
+  Scenario: Missing partial
+    Given a template that includes a missing partial with a relative subdirectory path
+     When I check the cookbook
+     Then the template partials loop indefinitely warning 051 should not be displayed against the templates
+      And no error should have occurred
+
+  Scenario Outline: Template directory contains binary files
+    Given a template directory that contains a binary file <file> that is not valid UTF-8
+     When I check the cookbook
+     Then the template partials loop indefinitely warning 051 should not be displayed against the templates
+      And no error should have occurred
+  Examples:
+    | file        |
+    | .DS_Store   |
+    | foo.erb.swp |
diff --git a/features/command_line_help.feature b/features/command_line_help.feature
index 92e56c6..f9c241a 100644
--- a/features/command_line_help.feature
+++ b/features/command_line_help.feature
@@ -14,6 +14,16 @@ Feature: Command line help
      When I run it on the command line specifying a cookbook that does not exist
      Then the simple usage text should be displayed along with a non-zero exit code
 
+  Scenario: Non-existent role directory
+    Given I have installed the lint tool
+     When I run it on the command line specifying a role directory that does not exist
+     Then the simple usage text should be displayed along with a non-zero exit code
+
+  Scenario: Non-existent environment directory
+    Given I have installed the lint tool
+     When I run it on the command line specifying an environment directory that does not exist
+     Then the simple usage text should be displayed along with a non-zero exit code
+
   Scenario: Command help
     Given I have installed the lint tool
      When I run it on the command line with the help option
@@ -41,3 +51,8 @@ Feature: Command line help
      Then the simple usage text should be displayed along with a non-zero exit code
      Then the style warning 002 should not be displayed
       And the current version should not be displayed
+
+  Scenario: Refer to the man page
+    Given access to the man page documentation
+     When I compare the man page options against the usage options
+     Then all options should be documented in the man page
diff --git a/features/ignore_via_line_comments.feature b/features/ignore_via_line_comments.feature
index f1f7c31..524ebb4 100644
--- a/features/ignore_via_line_comments.feature
+++ b/features/ignore_via_line_comments.feature
@@ -49,3 +49,21 @@ Feature: Ignoring rules on per line basis
     | # ~FC002,~FC007 | FC002       |
     | # ~FC002,~FC039 |             |
     | # ~FC002        | FC039       |
+
+  Scenario Outline: Ignoring role rules
+    Given a ruby role that triggers FC049 with comment <comment>
+     When I check the role directory
+     Then the role name does not match file name warning 049 should <shown>
+  Examples:
+    | comment | shown        |
+    |         | be shown     |
+    | #~FC049 | not be shown |
+
+  Scenario Outline: Ignoring environment rules
+    Given a ruby environment that triggers FC050 with comment <comment>
+     When I check the environment directory
+     Then the invalid environment name warning 050 should <shown>
+  Examples:
+    | comment | shown        |
+    |         | be shown     |
+    | #~FC050 | not be shown |
diff --git a/features/individual_file.feature b/features/individual_file.feature
index 7e9ad3b..465f994 100644
--- a/features/individual_file.feature
+++ b/features/individual_file.feature
@@ -4,9 +4,25 @@ Feature: Individual file
   As a developer
   I want to lint individual files in a cookbook
 
-  Scenario: Linting an individual file shows warnings only from that file
+  Scenario: Linting an individual recipe shows warnings only from that file
     Given a cookbook with a single recipe that reads node attributes via symbols,strings
       And a cookbook that declares normal attributes via symbols
      When I check the recipe
      Then the attribute consistency warning 019 should be displayed for the recipe
       And the attribute consistency warning 019 should not be displayed for the attributes
+
+  Scenario: Linting an individual role
+    Given a roles directory
+      And it contains a role file webserver.rb that defines the role name "apache"
+      And it contains a role file database.rb that defines the role name "postgresql"
+     When I check the webserver role only
+     Then the role name does not match file name warning 049 should be shown against the webserver role
+      And the role name does not match file name warning 049 should not be shown against the database role
+
+  Scenario: Linting an individual environment
+    Given an environments directory
+      And it contains an environment file production_eu.rb that defines the environment name "production (eu-west-1)"
+      And it contains an environment file production_us.rb that defines the environment name "production (us-east-1)"
+     When I check the eu environment file only
+     Then the invalid environment name warning 050 should be shown against the eu environment
+      And the invalid environment name warning 050 should not be shown against the us environment
diff --git a/features/multiple_paths.feature b/features/multiple_paths.feature
index 334fabd..c1cae26 100644
--- a/features/multiple_paths.feature
+++ b/features/multiple_paths.feature
@@ -4,8 +4,32 @@ Feature: Multiple paths
   As a developer
   I want to lint multiple paths at once
 
-  Scenario: Linting multiple individual cookbooks
+  Scenario Outline: Linting multiple individual cookbooks
     Given a cookbook with a single recipe that reads node attributes via symbols,strings
       And another cookbook with a single recipe that reads node attributes via strings
-     When I check both cookbooks
+     When I check both cookbooks with the command-line <command_line>
      Then the attribute consistency warning 019 should be shown
+  Examples:
+    | command_line                                            |
+    | example another_example                                 |
+    | -B example -B another_example                           |
+    | --cookbook-path example --cookbook-path another_example |
+    | -B example another_example                              |
+    | --cookbook-path example another_example                 |
+    | -B example --cookbook-path another_example              |
+
+  Scenario: Linting multiple role directories
+    Given two roles directories
+      And each role directory has a role with a name that does not match the containing file name
+     When I check both roles directories
+     Then the role name does not match file name warning 049 should be shown against the files in both directories
+
+  Scenario: Linting a cookbook, role and environment together
+    Given a cookbook with a single recipe that reads node attributes via symbols,strings
+      And another cookbook with a single recipe that reads node attributes via strings
+      And a directory that contains a role file webserver.rb in ruby that defines role name apache
+      And a directory that contains an environment file production.rb in ruby that defines environment name production (us-east)
+     When I check the cookbooks, role and environment together
+     Then the attribute consistency warning 019 should be shown
+      And the role name does not match file name warning 049 should be shown
+      And the invalid environment name warning 050 should be shown
diff --git a/features/step_definitions/cookbook_steps.rb b/features/step_definitions/cookbook_steps.rb
index 211ee63..247a0e7 100644
--- a/features/step_definitions/cookbook_steps.rb
+++ b/features/step_definitions/cookbook_steps.rb
@@ -34,8 +34,20 @@ Given 'a cookbook attributes file with a do block that takes arguments' do
   }
 end
 
-Given /^a cookbook attributes file with assignment (.*)$/ do |assignment|
-  write_attributes assignment
+Given /^a cookbook (attributes|recipe) file with assignment (.*)$/ do |type, assignment|
+  if type == 'attributes'
+    write_attributes assignment
+  else
+    write_recipe assignment
+  end
+end
+
+Given "a cookbook recipe that contains a group resource that uses the 'system' attribute" do
+  write_recipe %q{
+    group "senge" do
+      system true
+    end
+  }
 end
 
 Given /^a cookbook recipe that declares (too many )?execute resources varying only in the command in branching conditionals$/ do |too_many|
@@ -69,6 +81,18 @@ Given /^a cookbook recipe that declares a ([^ ]+) resource with the ([^ ]+) attr
   }
 end
 
+Given /^a cookbook recipe that executes '([^']+)' with an execute resource$/ do |command|
+  write_recipe %Q{
+    execute "#{command}" do
+      action :run
+    end
+  }
+end
+
+Given /^a cookbook recipe that spawns a sub-process with (.*)$/ do |command|
+  write_recipe command
+end
+
 Given 'a cookbook recipe with a deploy resource that contains a template resource' do
   write_recipe %q{
     deploy '/foo/bar' do
@@ -429,8 +453,9 @@ Given /^a cookbook recipe that includes a recipe name from an( embedded)? expres
   }
 end
 
-Given /^a cookbook recipe that includes a(n un| )?declared recipe dependency( unscoped)?$/ do |undeclared,unscoped|
-  recipe_with_dependency(:is_declared => undeclared.strip.empty?, :is_scoped => unscoped.nil?)
+Given /^a cookbook recipe that includes a(n un| )?declared recipe dependency(?: {0,1})(unscoped)?( with parentheses)?$/ do |undeclared,unscoped, parens|
+  recipe_with_dependency(:is_declared => undeclared.strip.empty?,
+                         :is_scoped => unscoped.nil?, :parentheses => parens)
 end
 
 Given 'a cookbook recipe that includes both declared and undeclared recipe dependencies' do
@@ -465,6 +490,17 @@ Given /a cookbook recipe that (install|upgrade)s (a gem|multiple gems)(.*)$/ do
   end
 end
 
+Given 'a cookbook recipe that refers to a hidden template' do
+  write_recipe %q{
+    template '/etc/.s3cfg' do
+      source '.s3cfg.erb'
+    end
+  }
+  write_file "cookbooks/example/templates/default/.s3cfg.erb", %q{
+    config=true
+  }
+end
+
 Given /^a cookbook recipe that refers to a (missing |local )?template( in a subdirectory)?$/ do |missing_or_local, sub_dir|
   sub_dir = sub_dir ? 'sub_dir/' : ''
   write_recipe %Q{
@@ -755,6 +791,16 @@ Given /^a cookbook that passes variables (.*) to a template with extension (.*)$
   }
 end
 
+Given /^a cookbook that passes variables (.*) to an inferred template$/ do |vars|
+  write_recipe %Q{
+    template "/tmp/config.conf" do
+      variables(
+        :#{vars.split(',').map{|v| "#{v} => node[:#{v}]"}.join(",\n:")}
+      )
+    end
+  }
+end
+
 Given /^a cookbook that contains a (short|long) ruby block$/ do |length|
   recipe_with_ruby_block(length.to_sym)
 end
@@ -805,10 +851,46 @@ Given /^a cookbook that contains a LWRP that (?:does not trigger notifications|d
   })
 end
 
+Given /^a cookbook that contains a LWRP that uses converge_by - (brace|do) block (with|without) parentheses$/ do |block_type, with_parens|
+  write_resource("site", %q{
+    actions :create
+    attribute :name, :kind_of => String, :name_attribute => true
+  })
+  if block_type == 'brace'
+    write_provider("site", %q{
+      action :create do
+        converge_by("Creating site #{new_resource.name}"){ Site.new(new_resource.name).create }
+      end
+    })
+  else
+    if with_parens == 'with'
+      write_provider("site", %q{
+        action :create do
+          converge_by("Creating site #{new_resource.name}") do
+            Site.new(new_resource.name).create
+          end
+        end
+      })
+    else
+      write_provider("site", %q{
+        action :create do
+          converge_by "Creating site #{new_resource.name}" do
+            Site.new(new_resource.name).create
+          end
+        end
+      })
+    end
+  end
+end
+
 Given /^a cookbook that contains a LWRP that uses the deprecated notification syntax(.*)$/ do |qualifier|
   cookbook_with_lwrp({:notifies => qualifier.include?('class variable') ? :class_variable : :deprecated_syntax})
 end
 
+Given 'a cookbook that contains a LWRP that uses use_inline_resources' do
+  cookbook_with_lwrp({:use_inline_resources => true})
+end
+
 Given 'a cookbook that contains a LWRP with multiple notifications' do
   write_resource("site", %q{
     actions :create, :delete
@@ -1176,6 +1258,22 @@ Given /^a cookbook with metadata that (specifies|does not specify) the cookbook
   }
 end
 
+Given /^a directory that contains a role file ([^ ]+) in (json|ruby) that defines role name (.*)$/ do |file_name, format, role_name|
+  role(:role_name => %Q{"#{role_name}"}, :file_name => file_name, :format => format.to_sym)
+end
+
+Given 'a directory that contains a ruby role that declares the role name more than once' do
+  role(:role_name => ['"webserver"', '"apache"'], :file_name => 'webserver.rb')
+end
+
+Given 'a directory that contains a ruby role with an expression as its name' do
+  role(:role_name => '"#{foo}#{bar}"', :file_name => 'webserver.rb')
+end
+
+Given /^a directory that contains an environment file (.*) in ruby that defines environment name (.*)$/ do |file_name, env_name|
+  environment(:environment_name => %Q{"#{env_name}"}, :file_name => 'production.rb')
+end
+
 Given /^a ([a-z_]+) resource declared with the mode ([^\s]+)(?: with comment (.*)?)?$/ do |resource,mode,comment|
   recipe_resource_with_mode(resource, mode, comment)
 end
@@ -1192,6 +1290,17 @@ Given /^a file with multiple errors on one line(?: with comment (.*))?$/ do |com
   write_file "cookbooks/example/recipes/default.rb", %Q{node['run_state']['nginx_force_recompile'] = "\#{foo}"#{comment}}
 end
 
+Given(/^a LWRP with an action :create that notifies with (converge_by|updated_by_last_action) and another :delete that does not notify$/) do |notify_type|
+  cookbook_with_lwrp_actions([
+    {:name => :create, :notify_type => notify_type.to_sym},
+    {:name => :delete, :notify_type => :none}
+  ])
+end
+
+Given /^(?:a roles|an environments) directory$/ do
+
+end
+
 Given /^a Rakefile that defines (no lint task|a lint task with no block|a lint task with an empty block|a lint task with a block setting options to)(.*)?$/ do |task,options|
   rakefile(
     case task
@@ -1314,6 +1423,20 @@ Given 'a recipe that declares multiple resources of the same type of which one h
   }
 end
 
+Given 'a resource declared with a guard within a loop with multiple block arguments' do
+  write_recipe %q{
+    {
+    'foo' => 'bar',
+    'baz' => 'bing',
+    }.each do |foo, bar|
+      package bar do
+        not_if { node['foo'] == foo }
+        action :install
+      end
+    end
+  }
+end
+
 Given /^a rule that (declares|does not declare) a version constraint(?: of ([^ ]+)? to ([^ ]+)?)?$/ do |constraint, from, to|
   if from || to
     rule_with_version_constraint(from, to)
@@ -1326,6 +1449,43 @@ Given /^a rule that (declares|does not declare) a version constraint(?: of ([^ ]
   end
 end
 
+Given /^a template that includes a partial( that includes the original template again)?$/ do |loops|
+  write_recipe %q{
+    template "/tmp/a" do
+      source "a.erb"
+      variables({
+        :config_var => "foo"
+      })
+    end
+  }
+  write_file 'cookbooks/example/templates/default/a.erb', '<%= render "b.erb" %>'
+  content = if loops
+    '<%= render "a.erb" %>'
+  else
+    '<%= @config_var %>'
+  end
+  write_file 'cookbooks/example/templates/default/b.erb', content
+end
+
+Given /^a template that includes a (missing )?partial with a relative subdirectory path$/ do |missing|
+  write_recipe %q{
+    template "/tmp/a" do
+      source "a.erb"
+      variables({
+        :config_var => "foo"
+      })
+    end
+  }
+  write_file 'cookbooks/example/templates/default/a.erb', '<%= render "partials/b.erb" %>'
+  unless missing
+    write_file 'cookbooks/example/templates/default/partials/b.erb', 'Partial content'
+  end
+end
+
+Given 'access to the man page documentation' do
+
+end
+
 Given /^another cookbook that has (an older )?chef-solo-search installed$/ do |older|
   if older.nil?
     write_library 'search', %q{
@@ -1374,6 +1534,16 @@ Given 'the gems have been vendored' do
   vendor_gems
 end
 
+Given 'the last role name declared does not match the containing filename' do
+
+end
+
+Given /^the inferred template contains the expression (.*)$/ do |expr|
+  write_file "cookbooks/example/templates/default/config.conf.erb", %Q{
+    <%= #{expr} %>
+  }
+end
+
 Given /^the template (.+)?contains the expression (.*)$/ do |ext,expr|
   file = if ext
     "templates/default/config#{ext.strip}"
@@ -1385,6 +1555,40 @@ Given /^the template (.+)?contains the expression (.*)$/ do |ext,expr|
   }
 end
 
+Given /^the template (.+)?contains partial includes of type (.*) with the expression (.*)$/ do |ext,type,expr|
+  file = if ext
+    "config#{ext.strip}"
+  else
+    'config.conf.erb'
+  end
+  if type == 'nested' and expr.split(',').length > 1
+    expressions = expr.split(',')
+    includes = (1..expressions.length).map{|i| "included_template_#{i}.erb"}
+    (Array(file) + includes).zip(includes).map do |parent, child|
+      content = if child
+        "<%= render '#{child}' %>"
+      else
+        expressions.map{|e| "<%= #{e} %>"}.join("\n")
+      end
+      [parent, content]
+    end.each do |template_name, content|
+      write_file "cookbooks/example/templates/default/#{template_name}", content
+    end
+  else
+    if type == 'no parentheses'
+      include_string = "<%= render 'included_template.erb' %>"
+    else
+      include_string = "<%= render('included_template.erb') %>"
+    end
+    write_file "cookbooks/example/templates/default/#{file}", %Q{
+      #{include_string}
+    }
+    write_file "cookbooks/example/templates/default/included_template.erb", %Q{
+      <%= #{expr} %>
+    }
+  end
+end
+
 Given 'unit tests under a top-level test directory' do
   minitest_spec_attributes
 end
@@ -1427,6 +1631,48 @@ Given /^a recipe that uses include_recipe$/ do
   }
 end
 
+Given /^a ruby environment file that defines an environment with name (.*)$/ do |env_name|
+  environment(:environment_name => %Q{"#{env_name}"}, :file_name => 'production.rb')
+end
+
+Given /^a ruby environment that triggers FC050 with comment (.*)$/ do |comment|
+  write_file 'environments/production.rb', %Q{
+    name "Production (eu-west-1)" #{comment}
+    run_list "recipe[apache2]"
+  }.strip
+end
+
+Given /^a ruby role file that defines a role with name (.*)$/ do |role_name|
+  role(:role_name => [%Q{"#{role_name}"}], :file_name => 'webserver.rb')
+end
+
+Given /^a ruby role that triggers FC049 with comment (.*)$/ do |comment|
+  write_file 'roles/webserver.rb', %Q{
+    name "apache" #{comment}
+    run_list "recipe[apache2]"
+  }.strip
+end
+
+Given /^a template directory that contains a binary file (.*) that is not valid UTF-8$/ do |filename|
+  template_dir = 'cookbooks/example/templates/default'
+  write_recipe ''
+  write_file "#{template_dir}/innocent_template.erb", '<%= hello %>'
+  File.open("#{current_dir}/#{template_dir}/#{filename}", 'wb'){|f| f.putc(0x93)}
+end
+
+Given 'each role directory has a role with a name that does not match the containing file name' do
+  role(:dir => 'roles1', :role_name => '"apache"', :file_name => 'webserver.rb')
+  role(:dir => 'roles2', :role_name => '"postgresql"', :file_name => 'database.rb')
+end
+
+Given /^it contains an environment file (.*\.rb) that defines the environment name (.*)$/ do |file_name, env_name|
+  environment(:environment_name => env_name, :file_name => file_name)
+end
+
+Given /^it contains a role file ([a-z]+\.rb) that defines the role name (.*)$/ do |file_name, role_name|
+  role(:role_name => role_name, :file_name => file_name)
+end
+
 Given /^the cookbook metadata declares support for (.*)$/ do |supported_platforms|
   write_metadata(supported_platforms.split(',').map do |platform|
     "supports '#{platform}'"
@@ -1452,6 +1698,10 @@ Given 'two of the recipes read node attributes via symbols' do
   end
 end
 
+Given 'two roles directories' do
+
+end
+
 When /^I check the cookbook specifying ([^ ]+) as the Chef version$/ do |version|
   options = ['-c', version, 'cookbooks/example']
   in_current_dir do
@@ -1471,18 +1721,70 @@ Given /^the cookbook directory has a \.foodcritic file specifying tags (.*)$/ do
   run_lint(["cookbooks/example"])
 end
 
-When 'I check both cookbooks' do
+When 'I check both cookbooks specified as arguments' do
   run_lint(["cookbooks/another_example", "cookbooks/example"])
 end
 
+When /^I check both cookbooks with the command-line (.*)$/ do |command_line|
+  cmds = command_line.split(' ').map do |c|
+    if c.end_with?('example')
+      "cookbooks/#{c}"
+    else
+      c
+    end
+  end
+  run_lint(cmds)
+end
+
+When 'I check the cookbooks, role and environment together' do
+  run_lint([
+    '-B', 'cookbooks/another_example', '-B', 'cookbooks/example',
+    '-E', 'environments',
+    '-R', 'roles'
+  ])
+end
+
 When 'I check the cookbook without specifying a Chef version' do
   run_lint(['-I', 'rules/test.rb', 'cookbooks/example'])
 end
 
+When 'I check the environment directory' do
+  run_lint ['-E', 'environments']
+end
+
+When 'I check both roles directories' do
+  run_lint ['-R', 'roles1', '-R', 'roles2']
+end
+
+When 'I check the eu environment file only' do
+  run_lint ['-E', 'environments/production_eu.rb']
+end
+
 When 'I check the recipe' do
   run_lint(["cookbooks/example/recipes/default.rb"])
 end
 
+When 'I compare the man page options against the usage options' do
+
+end
+
+When 'I check the role directory' do
+  run_lint ['-R', 'roles']
+end
+
+When /^I check the role directory as a (default|cookbook|role) path$/ do |path_type|
+  options = case path_type
+    when 'default' then ['roles']
+    when 'cookbook' then ['-B', 'roles']
+    when 'role' then ['-R', 'roles']
+  end
+  run_lint(options)
+end
+
+When 'I check the webserver role only' do
+  run_lint ['-R', 'roles/webserver.rb']
+end
+
 When 'I list the available build tasks' do
   list_available_build_tasks
 end
@@ -1518,6 +1820,14 @@ When 'I run it on the command line specifying a cookbook that does not exist' do
   run_lint(['no-such-cookbook'])
 end
 
+When /^I run it on the command line specifying a( role|n environment) directory that does not exist$/ do |type|
+  if type.include?('role')
+    run_lint(['-R', 'no-such-role-dir'])
+  else
+    run_lint(['-E', 'no-such-environment-dir'])
+  end
+end
+
 When 'I run it on the command line with no arguments' do
   run_lint([])
 end
@@ -1541,6 +1851,10 @@ Then 'a warning for the custom rule should be displayed' do
   expect_output('BAR001: Use symbols in preference to strings to access node attributes: cookbooks/example/recipes/default.rb:1')
 end
 
+Then 'all options should be documented in the man page' do
+  man_page_options.should == usage_options_for_diff
+end
+
 Then /^an? '([^']+)' error should be displayed$/ do |expected_error|
   last_error.should include expected_error
 end
@@ -1559,6 +1873,40 @@ Then /^the bare attribute keys warning 044 should not be displayed against the (
   expect_warning 'FC044', {:expect_warning => false, :line => 2, :file_type => :attributes}
 end
 
+Then /^the LWRP does not notify when updated warning 017 should( not)? be shown against the :([^ ]+) action$/ do |not_shown, action|
+  line = action == 'create' ? 1 : 8
+  expect_warning('FC017', :file_type => :provider, :expect_warning => ! not_shown, :line => line)
+end
+
+Then /^the invalid (role|environment) name warning 050 should( not)? be shown$/ do |type, not_shown|
+  file = type == 'role' ? 'roles/webserver.rb' : 'environments/production.rb'
+  expect_warning 'FC050', {:expect_warning => ! not_shown, :file => file}
+end
+
+Then /^the invalid environment name warning 050 should( not)? be shown against the (eu|us) environment$/ do |not_shown, env|
+  expect_warning 'FC050', {:expect_warning => ! not_shown,
+    :file => "environments/production_#{env}.rb", :line => 1}
+end
+
+Then 'the prefer mixlib shellout warning 048 should not be displayed against the group resource' do
+  expect_warning 'FC048', {:expect_warning => false, :line => 2}
+end
+
+Then /^the role name does not match file name warning 049 should( not)? be shown( against the second name)?$/ do |not_shown, second|
+  expect_warning 'FC049', {:expect_warning => ! not_shown,
+                           :file => 'roles/webserver.rb', :line => second ? 2 : 1}
+end
+
+Then 'the role name does not match file name warning 049 should be shown against the files in both directories' do
+  expect_warning 'FC049', {:file => "roles1/webserver.rb", :line => 1}
+  expect_warning 'FC049', {:file => "roles2/database.rb", :line => 1}
+end
+
+Then /^the role name does not match file name warning 049 should( not)? be shown against the (webserver|database) role$/ do |not_shown, role|
+  expect_warning 'FC049', {:expect_warning => ! not_shown,
+                           :file => "roles/#{role}.rb", :line => 1}
+end
+
 Then 'the long ruby block warning 014 should be displayed against the long block only' do
   expect_warning 'FC014', {:expect_warning => false, :line => 1}
   expect_warning 'FC014', {:expect_warning => true, :line => 11}
@@ -1675,6 +2023,10 @@ Then /^the debugger breakpoint warning 030 should be (not )?shown against the (.
   expect_warning('FC030', :line => nil, :expect_warning => should_not.nil?, :file => filename)
 end
 
+Then 'the dodgy resource condition warning 022 should not be shown' do
+  expect_warning('FC022', {:line => nil, :expect_warning => false})
+end
+
 Then /^the warning (\d+) should be (valid|invalid)$/ do |code, valid|
   code = "FC#{code}"
   valid == 'valid' ? expect_no_warning(code) : expect_warning(code)
@@ -1730,17 +2082,24 @@ Then /^the simple usage text should be displayed along with a (non-)?zero exit c
   usage_displayed(non_zero.nil?)
 end
 
+Then /^the template partials loop indefinitely warning 051 should (not )?be displayed against the templates$/ do |not_shown|
+  expect_warning('FC051', :file => 'templates/default/a.erb', :line => 1,
+                 :expect_warning => ! not_shown)
+  expect_warning('FC051', :file => 'templates/default/b.erb', :line => 1,
+                 :expect_warning => ! not_shown)
+end
+
 Then 'the undeclared dependency warning 007 should be displayed only for the undeclared dependencies' do
   expect_warning("FC007", :file => 'recipes/default.rb', :line => 1, :expect_warning => false)
   expect_warning("FC007", :file => 'recipes/default.rb', :line => 2, :expect_warning => false)
   expect_warning("FC007", :file => 'recipes/default.rb', :line => 6, :expect_warning => true)
 end
 
-Then /^the unused template variables warning 034 should (not )?be displayed against the template(.*)?$/ do |not_shown, ext|
-  file = if ext
-    "templates/default/config#{ext.strip}"
-  else
+Then /^the unused template variables warning 034 should (not )?be displayed against the (?:inferred )?template(.*)?$/ do |not_shown, ext|
+  file = if ext.empty?
     'templates/default/config.conf.erb'
+  else
+    "templates/default/config#{ext.strip}"
   end
   expect_warning('FC034', :file => file, :line => 1,
 		 :expect_warning => ! not_shown)
diff --git a/features/support/command_helpers.rb b/features/support/command_helpers.rb
index a1bc11e..34079e0 100644
--- a/features/support/command_helpers.rb
+++ b/features/support/command_helpers.rb
@@ -44,11 +44,16 @@ module FoodCritic
       'FC039' => 'Node method cannot be accessed with key',
       'FC040' => 'Execute resource used to run git commands',
       'FC041' => 'Execute resource used to run curl or wget commands',
-      'FC042' => 'Prefer include_recipe to require_recipe', 
+      'FC042' => 'Prefer include_recipe to require_recipe',
       'FC043' => 'Prefer new notification syntax',
       'FC044' => 'Avoid bare attribute keys',
       'FC045' => 'Consider setting cookbook name in metadata',
       'FC046' => 'Attribute assignment uses assign unless nil',
+      'FC047' => 'Attribute assignment does not specify precedence',
+      'FC048' => 'Prefer Mixlib::ShellOut',
+      'FC049' => 'Role name does not match containing file name',
+      'FC050' => 'Name includes invalid characters',
+      'FC051' => 'Template partials loop indefinitely',
       'FCTEST001' => 'Test Rule'
     }
 
@@ -97,10 +102,14 @@ module FoodCritic
                           :resource => 'resources/site.rb', :libraries => 'libraries/lib.rb'}[options[:file_type]]
       end
       options = {:line => 1, :expect_warning => true, :file => 'recipes/default.rb'}.merge!(options)
+      unless options[:file].include?('roles') ||
+        options[:file].include?('environments')
+          options[:file] = "cookbooks/example/#{options[:file]}"
+      end
       if options[:warning_only]
         warning = "#{code}: #{WARNINGS[code]}"
       else
-        warning = "#{code}: #{WARNINGS[code]}: cookbooks/example/#{options[:file]}:#{options[:line]}#{"\n" if ! options[:line].nil?}"
+        warning = "#{code}: #{WARNINGS[code]}: #{options[:file]}:#{options[:line]}#{"\n" if ! options[:line].nil?}"
       end
       options[:expect_warning] ? expect_output(warning) : expect_no_output(warning)
     end
@@ -122,19 +131,29 @@ module FoodCritic
       expect_output(Regexp.new(expected_switch))
     end
 
+    def man_page_options
+      man_path = Pathname.new(__FILE__) + '../../../man/foodcritic.1.ronn'
+      option_lines = File.read(man_path).split('## ').find do |s|
+        s.start_with?('OPTIONS')
+      end.split("\n").select{|o| o.start_with?(' *')}
+      option_lines.map do |o|
+        o.sub('`[`no-`]`', '').split('`').select{|f| f.include?('-')}
+      end.map do |option|
+        {:short => option.first.sub(/^-/, ''),
+         :long => option.last.sub(/^--/, '')}
+      end.sort_by{|o| o[:short]}
+    end
+
     # Assert that the usage message is displayed.
     #
     # @param [Boolean] is_exit_zero The exit code to check for.
     def usage_displayed(is_exit_zero)
       expect_output 'foodcritic [cookbook_paths]'
-      expect_usage_option('c', 'chef-version VERSION', 'Only check against rules valid for this version of Chef.')
-      expect_usage_option('f', 'epic-fail TAGS',
-        "Fail the build if any of the specified tags are matched ('any' -> fail on any match).")
-      expect_usage_option('t', 'tags TAGS', 'Only check against rules with the specified tags.')
-      expect_usage_option('C', '[no-]context', 'Show lines matched against rather than the default summary.')
-      expect_usage_option('I', 'include PATH', 'Additional rule file path(s) to load.')
-      expect_usage_option('S', 'search-grammar PATH', 'Specify grammar to use when validating search syntax.')
-      expect_usage_option('V', 'version', 'Display the foodcritic version.')
+
+      usage_options.each do |option|
+        expect_usage_option(option[:short], option[:long], option[:description])
+      end
+
       if is_exit_zero
         assert_no_error_occurred
       else
@@ -142,6 +161,48 @@ module FoodCritic
       end
     end
 
+    def usage_options
+      [
+        {:short => 'c', :long => 'chef-version VERSION',
+         :description => 'Only check against rules valid for this version of Chef.'},
+
+        {:short => 'f', :long => 'epic-fail TAGS',
+         :description => "Fail the build if any of the specified tags are matched ('any' -> fail on any match)."},
+
+        {:short => 't', :long => 'tags TAGS',
+         :description => 'Only check against rules with the specified tags.'},
+
+        {:short => 'B', :long => 'cookbook-path PATH',
+         :description => 'Cookbook path(s) to check.'},
+
+        {:short => 'C', :long => '[no-]context',
+         :description => 'Show lines matched against rather than the default summary.'},
+
+        {:short => 'E', :long => 'environment-path PATH',
+         :description => 'Environment path(s) to check.'},
+
+        {:short => 'I', :long => 'include PATH',
+         :description => 'Additional rule file path(s) to load.'},
+
+        {:short => 'R', :long => 'role-path PATH',
+         :description => 'Role path(s) to check.'},
+
+        {:short => 'S', :long => 'search-grammar PATH',
+         :description => 'Specify grammar to use when validating search syntax.'},
+
+        {:short => 'V', :long => 'version',
+         :description => 'Display the foodcritic version.'}
+
+      ]
+    end
+
+    def usage_options_for_diff
+      usage_options.map do |o|
+        {:short => o[:short],
+         :long => o[:long].split(' ').first.sub(/^\[no-\]/, '')}
+      end.sort_by{|o| o[:short]}
+    end
+
   end
 
   # Helpers used when features are executed in-process.
diff --git a/features/support/cookbook_helpers.rb b/features/support/cookbook_helpers.rb
index 86166ac..3d8c80c 100644
--- a/features/support/cookbook_helpers.rb
+++ b/features/support/cookbook_helpers.rb
@@ -13,7 +13,7 @@ module FoodCritic
     # Create a Gemfile for a cookbook
     def buildable_gemfile
       write_file 'cookbooks/example/Gemfile', %q{
-        source :rubygems
+        source 'https://rubygems.org/'
         gem 'rake'
         gem 'foodcritic', :path => '../../../..'
       }
@@ -82,8 +82,10 @@ module FoodCritic
     # @param [Hash] lwrp The options to use for the created LWRP
     # @option lwrp [Symbol] :default_action One of :no_default_action, :ruby_default_action, :dsl_default_action
     # @option lwrp [Symbol] :notifies One of :does_not_notify, :does_notify, :does_notify_without_parens, :deprecated_syntax, :class_variable
+    # @option lwrp [Symbol] :use_inline_resources Defaults to false
     def cookbook_with_lwrp(lwrp)
-      lwrp = {:default_action => false, :notifies => :does_not_notify}.merge!(lwrp)
+      lwrp = {:default_action => false, :notifies => :does_not_notify,
+              :use_inline_resources => false}.merge!(lwrp)
       ruby_default_action = %q{
         def initialize(*args)
           super
@@ -101,6 +103,7 @@ module FoodCritic
                        :deprecated_syntax => 'new_resource.updated = true',
                        :class_variable => '@updated = true'}
       write_provider("site", %Q{
+        #{'use_inline_resources' if lwrp[:use_inline_resources]}
         action :create do
           log "Here is where I would create a site"
           #{notifications[lwrp[:notifies]]}
@@ -108,6 +111,14 @@ module FoodCritic
       })
     end
 
+    def cookbook_with_lwrp_actions(actions)
+      write_resource("site", %Q{
+        actions #{actions.map{|a| a[:name].inspect}.join(', ')}
+        attribute :name, :kind_of => String, :name_attribute => true
+      })
+      write_provider("site", actions.map{|a| provider_action(a)}.join("\n"))
+    end
+
     # Create an cookbook with the maintainer specified in the metadata
     #
     # @param [String] name The maintainer name
@@ -136,6 +147,20 @@ module FoodCritic
       }
     end
 
+    # Create an environment file
+    #
+    # @param [Hash] options The options to use for the environment
+    # @option options [String] :dir The relative directory to write to
+    # @option options [String] :environment_name The name of the environment declared in the file
+    # @option options [String] :file_name The containing file relative to the environments directory
+    def environment(options={})
+      options = {:dir => 'environments'}.merge(options)
+      write_file "#{options[:dir]}/#{options[:file_name]}", %Q{
+        #{Array(options[:environment_name]).map{|r| "name #{r}"}.join("\n")}
+        cookbook "apache2"
+      }.strip
+    end
+
     # Create a placeholder minitest spec that would be linted due to its path
     # unless an exclusion is specified.
     def minitest_spec_attributes
@@ -145,6 +170,30 @@ module FoodCritic
       }
     end
 
+    def provider_action(action)
+      case action[:notify_type]
+      when :none then %Q{
+        action #{action[:name].inspect} do
+          log "Would take action here"
+        end
+      }
+      when :updated_by_last_action then %Q{
+        action #{action[:name].inspect} do
+          log "Would take action here"
+          # Explicitly update
+          new_resource.updated_by_last_action(true)
+        end
+      }
+      when :converge_by then %Q{
+        action #{action[:name].inspect} do
+          converge_by "#{action[:name]} site" do
+            log "Would take action here"
+          end
+        end
+      }
+      end
+    end
+
     # Create a Rakefile that uses the linter rake task
     #
     # @param [Symbol] task Type of task
@@ -273,11 +322,16 @@ module FoodCritic
     # @param [Hash] dep The options to use for dependency
     # @option dep [Boolean] :is_declared True if this dependency has been declared in the cookbook metadata
     # @option dep [Boolean] :is_scoped True if the include_recipe references a specific recipe or the cookbook
+    # @option dep [Boolean] :parentheses True if the include_recipe is called with parentheses
     def recipe_with_dependency(dep)
-      dep = {:is_scoped => true, :is_declared => true}.merge!(dep)
-      write_recipe %Q{
-        include_recipe 'foo#{dep[:is_scoped] ? '::default' : ''}'
-      }
+      dep = {:is_scoped => true, :is_declared => true,
+             :parentheses => false}.merge!(dep)
+      recipe = "foo#{dep[:is_scoped] ? '::default' : ''}"
+      write_recipe(if dep[:parentheses]
+        "include_recipe('#{recipe}')"
+      else
+        "include_recipe '#{recipe}'"
+      end)
       write_metadata %Q{
         version "1.9.0"
         depends "#{dep[:is_declared] ? 'foo' : 'dogs'}"
@@ -377,6 +431,34 @@ module FoodCritic
       }
     end
 
+    # Create a role file
+    #
+    # @param [Hash] options The options to use for the role
+    # @option options [String] :role_name The name of the role declared in the role file
+    # @option options [String] :file_name The containing file relative to the roles directory
+    # @option options [Symbol] :format Either :ruby or :json. Default is :ruby
+    def role(options={})
+      options = {:format => :ruby, :dir => 'roles'}.merge(options)
+      content = if options[:format] == :json
+        %Q{
+          {
+            "chef_type": "role",
+            "json_class": "Chef::Role",
+            #{Array(options[:role_name]).map{|r| "name: #{r},"}.join("\n")}
+            "run_list": [
+              "recipe[apache2]",
+            ]
+          }
+        }
+      else
+        %Q{
+          #{Array(options[:role_name]).map{|r| "name #{r}"}.join("\n")}
+          run_list "recipe[apache2]"
+        }
+      end
+      write_file "#{options[:dir]}/#{options[:file_name]}", content.strip
+    end
+
     # Create a rule with the specified Chef version constraints
     #
     # @param [String] from_version The from version
diff --git a/foodcritic.gemspec b/foodcritic.gemspec
deleted file mode 100644
index 521bf68..0000000
--- a/foodcritic.gemspec
+++ /dev/null
@@ -1,22 +0,0 @@
-lib = File.expand_path('../lib/', __FILE__)
-$:.unshift lib unless $:.include?(lib)
-require 'foodcritic/version'
-Gem::Specification.new do |s|
-  s.name = 'foodcritic'
-  s.version = FoodCritic::VERSION
-  s.description = 'Lint tool for Opscode Chef cookbooks.'
-  s.summary = "foodcritic-#{s.version}"
-  s.authors = ['Andrew Crump']
-  s.homepage = 'http://acrmp.github.com/foodcritic'
-  s.license = 'MIT'
-  s.executables << 'foodcritic'
-  s.add_dependency('gherkin', '~> 2.11.7')
-  s.add_dependency('nokogiri', '~> 1.5.4')
-  s.add_dependency('treetop', '~> 1.4.10')
-  s.add_dependency('yajl-ruby', '~> 1.1.0')
-  s.add_dependency('erubis')
-  s.files = Dir['chef_dsl_metadata/*.json'] + Dir['lib/**/*.rb']
-  s.files += Dir['spec/**/*'] + Dir['features/**/*']
-  s.files += Dir['*.md'] + Dir['LICENSE'] + Dir['man/*']
-  s.required_ruby_version = '>= 1.9.2'
-end
diff --git a/lib/foodcritic/api.rb b/lib/foodcritic/api.rb
index 466bcc8..4ec7ce0 100644
--- a/lib/foodcritic/api.rb
+++ b/lib/foodcritic/api.rb
@@ -11,6 +11,8 @@ module FoodCritic
     include FoodCritic::Chef
     include FoodCritic::Notifications
 
+    class RecursedTooFarError < StandardError; end
+
     # Find attribute access by type.
     def attribute_access(ast, options = {})
       options = {:type => :any, :ignore_calls => false}.merge!(options)
@@ -22,10 +24,10 @@ module FoodCritic
 
       case options[:type]
         when :any then
-          vivified_attribute_access(ast, options[:cookbook_dir]) +
-          standard_attribute_access(ast, options)
+          vivified_attribute_access(ast, options) +
+            standard_attribute_access(ast, options)
         when :vivified then
-          vivified_attribute_access(ast, options[:cookbook_dir])
+          vivified_attribute_access(ast, options)
         else
           standard_attribute_access(ast, options)
       end
@@ -108,7 +110,22 @@ module FoodCritic
       #       depends cbk
       #     end
       deps = deps.to_a + word_list_values(ast, "//command[ident/@value='depends']")
-      deps.map{|dep| dep['value']}
+      deps.uniq.map{|dep| dep['value'].strip }
+    end
+
+    # The key / value pair in an environment or role ruby file
+    def field(ast, field_name)
+      if field_name.nil? || field_name.to_s.empty?
+        raise ArgumentError, "Field name cannot be nil or empty"
+      end
+      ast.xpath("//command[ident/@value='#{field_name}']")
+    end
+
+    # The value for a specific key in an environment or role ruby file
+    def field_value(ast, field_name)
+      field(ast, field_name).xpath('args_add_block/descendant::tstring_content
+        [count(ancestor::args_add) = 1][count(ancestor::string_add) = 1]
+        /@value').map{|a| a.to_s}.last
     end
 
     # Create a match for a specified file. Use this if the presence of the file
@@ -164,8 +181,13 @@ module FoodCritic
         filter << '[count(descendant::string_embexpr) = 0]'
       end
 
-      included = ast.xpath(%Q{//command[ident/@value = 'include_recipe']#{filter.join}
-        [descendant::args_add/string_literal]/descendant::tstring_content})
+      string_desc = '[descendant::args_add/string_literal]/descendant::tstring_content'
+      included = ast.xpath([
+        "//command[ident/@value = 'include_recipe']",
+        "//fcall[ident/@value = 'include_recipe']/following-sibling::arg_paren",
+      ].map do |recipe_include|
+        recipe_include + filter.join + string_desc
+      end.join(' | '))
 
       # Hash keyed by recipe name with matched nodes.
       included.inject(Hash.new([])){|h, i| h[i['value']] += [i]; h}
@@ -191,8 +213,7 @@ module FoodCritic
     # Read the AST for the given Ruby source file
     def read_ast(file)
       source = if file.to_s.split(File::SEPARATOR).include?('templates')
-        Template::ExpressionExtractor.new.extract(
-          File.read(file)).map{|e| e[:code]}.join(';')
+        template_expressions_only(file)
       else
         File.read(file)
       end
@@ -312,10 +333,30 @@ module FoodCritic
       end
     end
 
+    def templates_included(all_templates, template_path, depth=1)
+      raise RecursedTooFarError.new(template_path) if depth > 10
+      partials = read_ast(template_path).xpath('//*[self::command or
+        child::fcall][descendant::ident/@value="render"]//args_add/
+        string_literal//tstring_content/@value').map{|p| p.to_s}
+      Array(template_path) + partials.map do |included_partial|
+        partial_path = Array(all_templates).find do |path|
+          (Pathname.new(template_path).dirname + included_partial).to_s == path
+        end
+        if partial_path
+          Array(partial_path) +
+            templates_included(all_templates, partial_path, depth + 1)
+        end
+      end.flatten.uniq.compact
+    end
+
     # Templates in the current cookbook
     def template_paths(recipe_path)
-      Dir[Pathname.new(recipe_path).dirname.dirname + 'templates' +
-        '**/*'].select{|path| File.file?(path)}
+      Dir.glob(Pathname.new(recipe_path).dirname.dirname + 'templates' +
+        '**/*', File::FNM_DOTMATCH).select do |path|
+        File.file?(path)
+      end.reject do |path|
+        File.basename(path) == '.DS_Store' || File.extname(path) == '.swp'
+      end
     end
 
     private
@@ -390,6 +431,12 @@ module FoodCritic
       end
     end
 
+    def ignore_attributes_xpath(ignores)
+      Array(ignores).map do |ignore|
+        "[count(descendant::*[@value='#{ignore}']) = 0]"
+      end.join
+    end
+
     def node_method?(meth, cookbook_dir)
       chef_dsl_methods.include?(meth) || patched_node_method?(meth, cookbook_dir)
     end
@@ -433,7 +480,22 @@ module FoodCritic
     class AttFilter
       def is_att_type(value)
         return [] unless value.respond_to?(:select)
-        value.select{|n| %w{node default override set normal}.include?(n.to_s)}
+        value.select do |n|
+          %w{
+            automatic_attrs
+            default
+            default_unless
+            force_default
+            force_override
+            node
+            normal
+            normal_unless
+            override
+            override_unless
+            set
+            set_unless
+          }.include?(n.to_s)
+        end
       end
     end
 
@@ -444,31 +506,45 @@ module FoodCritic
         end.inject(:+)
       else
         type = if options[:type] == :string
-	         'tstring_content'
-	       else
-                 '*[self::symbol or self::dyna_symbol]'
-	       end
+          'tstring_content'
+        else
+          '*[self::symbol or self::dyna_symbol]'
+        end
         expr = '//*[self::aref_field or self::aref][count(method_add_arg) = 0]'
         expr += '[count(is_att_type(descendant::var_ref/ident/@value)) =
           count(descendant::var_ref/ident/@value)]'
         expr += '[is_att_type(descendant::ident'
         expr += '[not(ancestor::aref/call)]' if options[:ignore_calls]
-        expr += "/@value)]/descendant::#{type}"
-	if options[:type] == :string
+        expr += '/@value)]'
+        expr += ignore_attributes_xpath(options[:ignore])
+        expr += "/descendant::#{type}"
+        if options[:type] == :string
           expr += '[count(ancestor::dyna_symbol) = 0]'
         end
         ast.xpath(expr, AttFilter.new).sort
       end
     end
 
-    def vivified_attribute_access(ast, cookbook_dir)
-      calls = ast.xpath(%q{//*[self::call or self::field]
+    def template_expressions_only(file)
+      exprs = Template::ExpressionExtractor.new.extract(File.read(file))
+      lines = Array.new(exprs.map{|e| e[:line]}.max || 0, '')
+      exprs.each do |e|
+        lines[e[:line] -1] += ';' unless lines[e[:line] -1].empty?
+        lines[e[:line] -1] += e[:code]
+      end
+      lines.join("\n")
+    end
+
+    def vivified_attribute_access(ast, options={})
+      calls = ast.xpath(%Q{//*[self::call or self::field]
         [is_att_type(vcall/ident/@value) or is_att_type(var_ref/ident/@value)]
+        #{ignore_attributes_xpath(options[:ignore])}
         [@value='.'][count(following-sibling::arg_paren) = 0]}, AttFilter.new)
       calls.select do |call|
         call.xpath("aref/args_add_block").size == 0 and
           (call.xpath("descendant::ident").size > 1 and
-            ! node_method?(call.xpath("ident/@value").to_s.to_sym, cookbook_dir))
+            ! node_method?(call.xpath("ident/@value").to_s.to_sym,
+                options[:cookbook_dir]))
       end.sort
     end
 
diff --git a/lib/foodcritic/command_line.rb b/lib/foodcritic/command_line.rb
index ff3b495..92a7a33 100644
--- a/lib/foodcritic/command_line.rb
+++ b/lib/foodcritic/command_line.rb
@@ -9,40 +9,59 @@ module FoodCritic
     def initialize(args)
       @args = args
       @original_args = args.dup
-      @options = {:fail_tags => [], :tags => [], :include_rules => []}
+      @options = {
+        :fail_tags => [],
+        :tags => [],
+        :include_rules => [],
+        :cookbook_paths => [],
+        :role_paths => [],
+        :environment_paths => []
+      }
       @parser = OptionParser.new do |opts|
         opts.banner = 'foodcritic [cookbook_paths]'
         opts.on("-t", "--tags TAGS",
           "Only check against rules with the specified tags.") do |t|
-          options[:tags] << t
+          @options[:tags] << t
         end
         opts.on("-f", "--epic-fail TAGS",
           "Fail the build if any of the specified tags are matched ('any' -> fail on any match).") do |t|
-          options[:fail_tags] << t
+          @options[:fail_tags] << t
         end
         opts.on("-c", "--chef-version VERSION",
           "Only check against rules valid for this version of Chef.") do |c|
-          options[:chef_version] = c
+          @options[:chef_version] = c
+        end
+        opts.on("-B", "--cookbook-path PATH",
+          "Cookbook path(s) to check.") do |b|
+          @options[:cookbook_paths] << b
         end
         opts.on("-C", "--[no-]context",
           "Show lines matched against rather than the default summary.") do |c|
-          options[:context] = c
+          @options[:context] = c
+        end
+        opts.on("-E", "--environment-path PATH",
+          "Environment path(s) to check.") do |e|
+          @options[:environment_paths] << e
         end
         opts.on("-I", "--include PATH",
           "Additional rule file path(s) to load.") do |i|
-          options[:include_rules] << i
+          @options[:include_rules] << i
         end
         opts.on("-G", "--search-gems",
           "Search rubygems for rule files with the path foodcritic/rules/**/*.rb") do |g|
-          options[:search_gems] = true
+          @options[:search_gems] = true
+        end
+        opts.on("-R", "--role-path PATH",
+          "Role path(s) to check.") do |r|
+          @options[:role_paths] << r
         end
         opts.on("-S", "--search-grammar PATH",
           "Specify grammar to use when validating search syntax.") do |s|
-          options[:search_grammar] = s
+          @options[:search_grammar] = s
         end
         opts.on("-V", "--version",
           "Display the foodcritic version.") do |v|
-          options[:version] = true
+          @options[:version] = true
         end
       end
       # -v is not implemented but OptionParser gives the Foodcritic's version
@@ -86,18 +105,13 @@ module FoodCritic
       "foodcritic #{FoodCritic::VERSION}"
     end
 
-    # If the cookbook paths provided are valid
+    # If the paths provided are valid
     #
     # @return [Boolean] True if the paths exist.
     def valid_paths?
-      @args.any? && @args.all? {|path| File.exists?(path) }
-    end
-
-    # The cookbook paths
-    #
-    # @return [Array<String>] Path(s) to the cookbook(s) being checked.
-    def cookbook_paths
-      @args
+      paths = options[:cookbook_paths] + options[:role_paths] +
+        options[:environment_paths]
+      paths.any? && paths.all?{|path| File.exists?(path) }
     end
 
     # Is the search grammar specified valid?
@@ -112,6 +126,27 @@ module FoodCritic
       search.parser?
     end
 
+    # The cookbook paths to check
+    #
+    # @return [Array<String>] Path(s) to the cookbook(s) being checked.
+    def cookbook_paths
+      @args + Array(@options[:cookbook_paths])
+    end
+
+    # The role paths to check
+    #
+    # @return [Array<String>] Path(s) to the role directories being checked.
+    def role_paths
+      Array(@options[:role_paths])
+    end
+
+    # The environment paths to check
+    #
+    # @return [Array<String>] Path(s) to the environment directories being checked.
+    def environment_paths
+      Array(@options[:environment_paths])
+    end
+
     # If matches should be shown with context rather than the default summary
     # display.
     #
@@ -124,6 +159,17 @@ module FoodCritic
     #
     # @return [Hash] The parsed command-line options.
     def options
+      original_options.merge({
+        :cookbook_paths => cookbook_paths,
+        :role_paths => role_paths,
+        :environment_paths => environment_paths,
+      })
+    end
+
+    # The original command-line options
+    #
+    # @return [Hash] The original command-line options.
+    def original_options
       @options
     end
 
diff --git a/lib/foodcritic/domain.rb b/lib/foodcritic/domain.rb
index 20dd716..1c4ab0a 100644
--- a/lib/foodcritic/domain.rb
+++ b/lib/foodcritic/domain.rb
@@ -1,16 +1,24 @@
+require 'gherkin/tag_expression'
+
 module FoodCritic
 
   # A warning of a possible issue
   class Warning
-    attr_reader :rule, :match
+    attr_reader :rule, :match, :is_failed
 
     # Create a new warning.
     #
     #     Warning.new(rule, :filename => 'foo/recipes.default.rb',
     #       :line => 5, :column=> 40)
     #
-    def initialize(rule, match={})
+    def initialize(rule, match={}, options={})
       @rule, @match = rule, match
+      @is_failed = options[:fail_tags].empty? ? false : rule.matches_tags?(options[:fail_tags])
+    end
+
+    # If this warning has failed or not.
+    def failed?
+      @is_failed
     end
   end
 
@@ -19,15 +27,19 @@ module FoodCritic
 
     attr_reader :cookbook_paths, :warnings
 
-    def initialize(cookbook_paths, warnings, is_failed)
+    def initialize(cookbook_paths, warnings)
       @cookbook_paths = Array(cookbook_paths)
       @warnings = warnings
-      @is_failed = is_failed
     end
 
-    # If this review has failed or not.
+    # If any of the warnings in this review have failed or not.
     def failed?
-      @is_failed
+      warnings.any? { |w| w.failed? }
+    end
+
+    # Returns an array of warnings that are marked as failed.
+    def failures
+      warnings.select { |w| w.failed? }
     end
 
     # Returns a string representation of this review. This representation is
@@ -48,7 +60,7 @@ module FoodCritic
   # A rule to be matched against.
   class Rule
     attr_accessor :code, :name, :applies_to, :cookbook, :attributes, :recipe,
-      :provider, :resource, :metadata, :library, :template
+      :provider, :resource, :metadata, :library, :template, :role, :environment
 
     attr_writer :tags
 
@@ -64,6 +76,13 @@ module FoodCritic
       ['any'] + @tags
     end
 
+    # Checks the rule's tags to see if they match a Gherkin (Cucumber) expression
+    def matches_tags?(tag_expr)
+      Gherkin::TagExpression.new(tag_expr).evaluate(tags.map do |t|
+        Gherkin::Formatter::Model::Tag.new(t, 1)
+      end)
+    end
+
     # Returns a string representation of this rule.
     def to_s
       "#{@code}: #{@name}"
diff --git a/lib/foodcritic/dsl.rb b/lib/foodcritic/dsl.rb
index 877b0e2..b17d5c2 100644
--- a/lib/foodcritic/dsl.rb
+++ b/lib/foodcritic/dsl.rb
@@ -69,6 +69,9 @@ module FoodCritic
     rule_block :library
     rule_block :template
 
+    rule_block :environment
+    rule_block :role
+
     # Load the ruleset(s).
     def self.load(paths, chef_version=Linter::DEFAULT_CHEF_VERSION)
       dsl = RuleDsl.new(chef_version)
diff --git a/lib/foodcritic/linter.rb b/lib/foodcritic/linter.rb
index e0d31ee..64f614c 100644
--- a/lib/foodcritic/linter.rb
+++ b/lib/foodcritic/linter.rb
@@ -1,7 +1,6 @@
 require 'optparse'
 require 'ripper'
 require 'rubygems'
-require 'gherkin/tag_expression'
 require 'set'
 
 module FoodCritic
@@ -25,8 +24,7 @@ module FoodCritic
       if ! cmd_line.valid_grammar?
         [cmd_line.help, 4]
       elsif cmd_line.valid_paths?
-        review = FoodCritic::Linter.new.check(cmd_line.cookbook_paths,
-          cmd_line.options)
+        review = FoodCritic::Linter.new.check(cmd_line.options)
         [review, review.failed? ? 3 : 0]
       else
         [cmd_line.help, 2]
@@ -38,55 +36,86 @@ module FoodCritic
     #
     # The `options` are a hash where the valid keys are:
     #
+    # * `:cookbook_paths` - Cookbook paths to lint
+    # * `:role_paths` - Role paths to lint
     # * `:include_rules` - Paths to additional rules to apply
     # * `:search_gems - If true then search for custom rules in installed gems.
     # * `:tags` - The tags to filter rules based on
     # * `:fail_tags` - The tags to fail the build on
     # * `:exclude_paths` - Paths to exclude from linting
     #
-    def check(cookbook_paths, options = {})
+    def check(options = {})
 
-      cookbook_paths = sanity_check_cookbook_paths(cookbook_paths)
       options = setup_defaults(options)
       @options = options
       @chef_version = options[:chef_version] || DEFAULT_CHEF_VERSION
 
       warnings = []; last_dir = nil; matched_rule_tags = Set.new
-
       load_rules
+      paths = specified_paths!(options)
 
       # Loop through each file to be processed and apply the rules
-      files_to_process(cookbook_paths, options[:exclude_paths]).each do |file|
-        ast = read_ast(file)
-        relevant_tags = options[:tags].any? ? options[:tags] : cookbook_tags(file)
-        active_rules(relevant_tags).each do |rule|
-          rule_matches = matches(rule.recipe, ast, file)
+      files_to_process(paths).each do |p|
 
-          if dsl_method_for_file(file)
-            rule_matches += matches(rule.send(dsl_method_for_file(file)),
-              ast, file)
-          end
+        relevant_tags = if options[:tags].any?
+          options[:tags]
+        else
+          cookbook_tags(p[:filename])
+        end
 
-          per_cookbook_rules(last_dir, file) do
-            if File.basename(file) == 'metadata.rb'
-              rule_matches += matches(rule.metadata, ast, file)
-            end
-            rule_matches += matches(rule.cookbook, cookbook_dir(file))
+        active_rules(relevant_tags).each do |rule|
+
+          state = {
+            :path_type => p[:path_type],
+            :file => p[:filename],
+            :ast => read_ast(p[:filename]),
+            :rule => rule,
+            :last_dir => last_dir
+          }
+
+          matches = if p[:path_type] == :cookbook
+            cookbook_matches(state)
+          else
+            other_matches(state)
           end
 
-          rule_matches = remove_ignored(rule_matches, rule, file)
+          matches = remove_ignored(matches, state[:rule], state[:file])
 
           # Convert the matches into warnings
-          rule_matches.each do |match|
-            warnings << Warning.new(rule, {:filename => file}.merge(match))
-            matched_rule_tags << rule.tags
+          matches.each do |match|
+            warnings << Warning.new(state[:rule],
+              {:filename => state[:file]}.merge(match), options)
+            matched_rule_tags << state[:rule].tags
           end
         end
-        last_dir = cookbook_dir(file)
+        last_dir = cookbook_dir(p[:filename])
+      end
+
+      Review.new(paths, warnings)
+    end
+
+    def cookbook_matches(state)
+      cbk_matches = matches(state[:rule].recipe, state[:ast], state[:file])
+
+      if dsl_method_for_file(state[:file])
+        cbk_matches += matches(state[:rule].send(
+          dsl_method_for_file(state[:file])), state[:ast], state[:file])
+      end
+
+      per_cookbook_rules(state[:last_dir], state[:file]) do
+        if File.basename(state[:file]) == 'metadata.rb'
+          cbk_matches += matches(
+            state[:rule].metadata, state[:ast], state[:file])
+        end
+        cbk_matches += matches(
+          state[:rule].cookbook, cookbook_dir(state[:file]))
       end
 
-      Review.new(cookbook_paths, warnings,
-        should_fail_build?(options[:fail_tags], matched_rule_tags))
+      cbk_matches
+    end
+
+    def other_matches(state)
+      matches(state[:rule].send(state[:path_type]), state[:ast], state[:file])
     end
 
     # Load the rules from the (fairly unnecessary) DSL.
@@ -120,7 +149,7 @@ module FoodCritic
     def ignore_line_match?(line, rule)
       ignores = line.to_s[/\s+#\s*(.*)/, 1]
       if ignores and ignores.include?('~')
-        ! matching_tags?(ignores.split(/[ ,]/), rule.tags)
+        ! rule.matches_tags?(ignores.split(/[ ,]/))
       else
         false
       end
@@ -147,7 +176,7 @@ module FoodCritic
 
     def active_rules(tags)
       @rules.select do |rule|
-        matching_tags?(tags, rule.tags) and
+        rule.matches_tags?(tags) and
         applies_to_version?(rule, chef_version)
       end
     end
@@ -178,19 +207,29 @@ module FoodCritic
 
     # Return the files within a cookbook tree that we are interested in trying
     # to match rules against.
-    def files_to_process(dirs, exclude_paths = [])
-      files = []
-      dirs.each do |dir|
-        exclusions = Dir.glob(exclude_paths.map{|p| File.join(dir, p)})
-        if File.directory? dir
-          cookbook_glob = '{metadata.rb,{attributes,definitions,libraries,providers,recipes,resources}/*.rb,templates/*/*.erb}'
-          files += (Dir.glob(File.join(dir, cookbook_glob)) +
-            Dir.glob(File.join(dir, "*/#{cookbook_glob}")) - exclusions)
-        else
-          files << dir unless exclusions.include?(dir)
+    def files_to_process(paths)
+      paths.reject{|type, _| type == :exclude}.map do |path_type, dirs|
+        dirs.map do |dir|
+          exclusions = []
+          unless paths[:exclude].empty?
+            exclusions = Dir.glob(paths[:exclude].map{|p| File.join(dir, p)})
+          end
+
+          if File.directory?(dir)
+            glob = if path_type == :cookbook
+              '{metadata.rb,{attributes,definitions,libraries,providers,recipes,resources}/*.rb,templates/*/*.erb}'
+            else
+              '*.rb'
+            end
+            (Dir.glob(File.join(dir, glob)) +
+             Dir.glob(File.join(dir, "*/#{glob}")) - exclusions)
+          else
+            dir unless exclusions.include?(dir)
+          end
+        end.compact.flatten.map do |filename|
+          {:filename => filename, :path_type => path_type}
         end
-      end
-      files
+      end.flatten
     end
 
     # Invoke the DSL method with the provided parameters.
@@ -211,34 +250,27 @@ module FoodCritic
       end.flatten
     end
 
-    # We use the Gherkin (Cucumber) syntax to specify tags.
-    def matching_tags?(tag_expr, tags)
-      Gherkin::TagExpression.new(tag_expr).evaluate(tags.map do |t|
-        Gherkin::Formatter::Model::Tag.new(t, 1)
-      end)
-    end
-
     def per_cookbook_rules(last_dir, file)
       yield if last_dir != cookbook_dir(file)
     end
 
-    def sanity_check_cookbook_paths(cookbook_paths)
-      raise ArgumentError, "Cookbook paths are required" if cookbook_paths.nil?
-      cookbook_paths = Array(cookbook_paths)
-      if cookbook_paths.empty?
-        raise ArgumentError, "Cookbook paths cannot be empty"
+    def specified_paths!(options)
+      paths = Hash[options.map do |key, value|
+        [key, Array(value)] if key.to_s.end_with?('paths')
+      end.compact]
+
+      unless paths.find{|k, v| k != :exclude_paths and ! v.empty?}
+        raise ArgumentError, "A cookbook path or role path must be specified"
       end
-      cookbook_paths
-    end
 
-    def setup_defaults(options)
-      {:tags => [], :fail_tags => [],
-                 :include_rules => [], :exclude_paths => []}.merge(options)
+      Hash[paths.map do |key, value|
+        [key.to_s.sub(/_paths$/, '').to_sym, value]
+      end]
     end
 
-    def should_fail_build?(fail_tags, matched_tags)
-      return false if fail_tags.empty?
-      matched_tags.any?{|tags| matching_tags?(fail_tags, tags)}
+    def setup_defaults(options)
+      {:tags => [], :fail_tags => [], :include_rules => [], :exclude_paths => [],
+       :cookbook_paths => [], :role_paths => []}.merge(options)
     end
 
   end
diff --git a/lib/foodcritic/rake_task.rb b/lib/foodcritic/rake_task.rb
index 80c2608..6c53980 100644
--- a/lib/foodcritic/rake_task.rb
+++ b/lib/foodcritic/rake_task.rb
@@ -9,7 +9,7 @@ module FoodCritic
 
       def initialize(name = :foodcritic)
         @name = name
-        @files = Dir.pwd
+        @files = [Dir.pwd]
         @options = {}
         yield self if block_given?
         define
@@ -17,6 +17,7 @@ module FoodCritic
 
       def options
         {:fail_tags => ['correctness'], # differs to default cmd-line behaviour
+         :cookbook_paths => @files,
          :exclude_paths => ['test/**/*', 'spec/**/*', 'features/**/*']
         }.merge(@options)
       end
@@ -24,7 +25,7 @@ module FoodCritic
       def define
         desc "Lint Chef cookbooks"
         task(name) do
-          result = FoodCritic::Linter.new.check(files, options)
+          result = FoodCritic::Linter.new.check(options)
           if result.warnings.any?
             puts result
           end
diff --git a/lib/foodcritic/rules.rb b/lib/foodcritic/rules.rb
index fb7b5e2..179f1d8 100644
--- a/lib/foodcritic/rules.rb
+++ b/lib/foodcritic/rules.rb
@@ -208,12 +208,30 @@ rule "FC017", "LWRP does not notify when updated" do
     version >= gem_version("0.7.12")
   end
   provider do |ast, filename|
-    if ast.xpath(%q{//*[self::call or self::command_call]/
-                 *[self::vcall or self::var_ref/ident/
-                 @value='new_resource']/../
-                 ident[@value='updated_by_last_action']}).empty?
-      [file_match(filename)]
+
+    use_inline_resources = ! ast.xpath('//*[self::vcall or self::var_ref]/ident
+      [@value="use_inline_resources"]').empty?
+
+    unless use_inline_resources
+      actions = ast.xpath('//method_add_block/command[ident/@value="action"]/
+        args_add_block/descendant::symbol/ident')
+
+      actions.reject do |action|
+        blk = action.xpath('ancestor::command[1]/
+          following-sibling::*[self::do_block or self::brace_block]')
+        empty = ! blk.xpath('stmts_add/void_stmt').empty?
+        converge_by = ! blk.xpath('descendant::*[self::command or self::fcall]
+          /ident[@value="converge_by"]').empty?
+
+        updated_by_last_action = ! blk.xpath('descendant::*[self::call or
+          self::command_call]/*[self::vcall or self::var_ref/ident/
+          @value="new_resource"]/../ident[@value="updated_by_last_action"]
+        ').empty?
+
+        empty || converge_by || updated_by_last_action
+      end
     end
+
   end
 end
 
@@ -240,7 +258,7 @@ rule "FC019", "Access node attributes in a consistent manner" do
     types = [:string, :symbol, :vivified].map do |type|
       {:access_type => type, :count => files.map do |file|
         attribute_access(file[:ast], :type => type, :ignore_calls => true,
-                          :cookbook_dir => cookbook_dir).tap do |ast|
+          :cookbook_dir => cookbook_dir, :ignore => 'run_state').tap do |ast|
           unless ast.empty?
             (asts[type] ||= []) << {:ast => ast, :path => file[:path]}
           end
@@ -278,6 +296,8 @@ rule "FC022", "Resource condition within loop may not behave as expected" do
     ast.xpath("//call[ident/@value='each']/../do_block").map do |loop|
       block_vars = loop.xpath("block_var/params/child::*").map do |n|
         n.name.sub(/^ident/, '')
+      end + loop.xpath("block_var/params/child::*/descendant::ident").map do |v|
+        v['value']
       end
       find_resources(loop).map do |resource|
         # if any of the parameters to the block are used in a condition then we
@@ -466,17 +486,29 @@ end
 rule "FC034", "Unused template variables" do
   tags %w{correctness}
   recipe do |ast,filename|
-    Array(resource_attributes_by_type(ast)['template']).select do
-      |t| t['variables'] and t['variables'].respond_to?(:xpath)
+    Array(resource_attributes_by_type(ast)['template']).select do |t|
+      t['variables'] and t['variables'].respond_to?(:xpath)
     end.map do |resource|
-      template_path = template_paths(filename).find do |p|
-        File.basename(p) == resource['source']
+      all_templates = template_paths(filename)
+      template_path = all_templates.find do |path|
+        File.basename(path) == template_file(resource)
       end
       next unless template_path
-      passed_vars = resource['variables'].xpath('symbol/ident/@value').map{|tv| tv.to_s}
-      template_vars = read_ast(template_path).xpath('//var_ref/ivar/' +
-        '@value').map{|v| v.to_s.sub(/^@/, '')}
-      file_match(template_path) unless (passed_vars - template_vars).empty?
+      passed_vars = resource['variables'].xpath(
+        'symbol/ident/@value').map{|tv| tv.to_s}
+
+      begin
+        template_vars = templates_included(
+          all_templates, template_path).map do |template|
+            read_ast(template).xpath('//var_ref/ivar/@value').map do |v|
+              v.to_s.sub(/^@/, '')
+            end
+        end.flatten
+
+        file_match(template_path) unless (passed_vars - template_vars).empty?
+      rescue RecursedTooFarError
+        []
+      end
     end.compact
   end
 end
@@ -608,3 +640,64 @@ rule "FC046", "Attribute assignment uses assign unless nil" do
     attribute_access(ast).map{|a| a.xpath('ancestor::opassign/op[@value="||="]')}
   end
 end
+
+rule "FC047", "Attribute assignment does not specify precedence" do
+  tags %w{attributes correctness}
+  recipe do |ast|
+    attribute_access(ast).map do |att|
+      exclude_att_types = '[count(following-sibling::ident[
+        is_att_type(@value) or @value = "run_state"]) = 0]'
+      att.xpath(%Q{ancestor::assign[*[self::field | self::aref_field]
+        [descendant::*[self::vcall | self::var_ref][ident/@value="node"]
+        #{exclude_att_types}]]}, AttFilter.new) +
+        att.xpath(%Q{ancestor::binary[@value="<<"]/*[position() = 1][self::aref]
+          [descendant::*[self::vcall | self::var_ref]#{exclude_att_types}
+          /ident/@value="node"]}, AttFilter.new)
+    end
+  end
+end
+
+rule "FC048", "Prefer Mixlib::ShellOut" do
+  tags %w{style processes}
+  recipe do |ast|
+    ast.xpath('//xstring_literal | //*[self::command or self::fcall]/
+      ident[@value="system"][count(following-sibling::args_add_block/
+      descendant::kw[@value="true" or @value="false"]) = 0]')
+  end
+end
+
+rule "FC049", "Role name does not match containing file name" do
+  tags %w{style roles}
+  role do |ast, filename|
+    role_name_specified = field_value(ast, :name)
+    role_name_file = Pathname.new(filename).basename.sub_ext('').to_s
+    if role_name_specified and role_name_specified != role_name_file
+      field(ast, :name)
+    end
+  end
+end
+
+rule "FC050", "Name includes invalid characters" do
+  tags %w{correctness environments roles}
+  def invalid_name(ast)
+    field(ast, :name) unless field_value(ast, :name) =~ /^[a-zA-Z0-9_\-]+$/
+  end
+  environment{|ast| invalid_name(ast)}
+  role{|ast| invalid_name(ast)}
+end
+
+rule "FC051", "Template partials loop indefinitely" do
+  tags %w{correctness}
+  recipe do |_,filename|
+    cbk_templates = template_paths(filename)
+
+    cbk_templates.select do |template|
+      begin
+        templates_included(cbk_templates, template)
+        false
+      rescue RecursedTooFarError
+        true
+      end
+    end.map{|t| file_match(t)}
+  end
+end
diff --git a/lib/foodcritic/template.rb b/lib/foodcritic/template.rb
index 137ae5e..b6065f5 100644
--- a/lib/foodcritic/template.rb
+++ b/lib/foodcritic/template.rb
@@ -13,7 +13,7 @@ module FoodCritic
       def extract(template_code)
         @expressions = []
         convert(template_code)
-        @expressions
+        expressions(template_code)
       end
 
       def add_expr(src, code, indicator)
@@ -38,6 +38,39 @@ module FoodCritic
         @expressions << {:type => :statement, :code => code.strip}
       end
 
+      private
+
+      def expressions(template_code)
+        expr_lines = expressions_with_lines(template_code)
+        expr_lines.map do |expr, line|
+          e = @expressions.find{|e| e[:code] == expr}
+          {:code => expr, :type => e[:type], :line => line} if e
+        end.compact
+      end
+
+      def expressions_with_lines(template_code)
+        lines = lines_with_offsets(template_code)
+        expression_offsets(template_code).map do |expr_offset, code|
+          [code, lines.find {|line, offset| offset >= expr_offset}.first]
+        end
+      end
+
+      def expression_offsets(template_code)
+        expr_offsets = []
+        template_code.scan(DEFAULT_REGEXP) do |m|
+          expr_offsets << [Regexp.last_match.offset(0).first, m[1].strip]
+        end
+        expr_offsets
+      end
+
+      def lines_with_offsets(template_code)
+        line_offsets = []
+        template_code.scan(/$/) do |m|
+          line_offsets << Regexp.last_match.offset(0).first
+        end
+        line_offsets.each_with_index.map{| pos, ln| [ln +1, pos]}
+      end
+
     end
 
   end
diff --git a/lib/foodcritic/version.rb b/lib/foodcritic/version.rb
index 6d1609f..0788a47 100644
--- a/lib/foodcritic/version.rb
+++ b/lib/foodcritic/version.rb
@@ -1,4 +1,4 @@
 module FoodCritic
   # The current version of foodcritic
-  VERSION = '2.2.0'
+  VERSION = '3.0.3'
 end
diff --git a/man/foodcritic.1 b/man/foodcritic.1
new file mode 100644
index 0000000..9966b51
--- /dev/null
+++ b/man/foodcritic.1
@@ -0,0 +1,70 @@
+.\" generated with Ronn/v0.7.3
+.\" http://github.com/rtomayko/ronn/tree/0.7.3
+.
+.TH "FOODCRITIC" "1" "August 2013" "" ""
+.
+.SH "NAME"
+\fBfoodcritic\fR \- lint tool for chef cookbooks
+.
+.SH "SYNOPSIS"
+\fBfoodcritic\fR [\fIoptions\fR\.\.\.] \fIcookbook\fR\.\.\.
+.
+.SH "DESCRIPTION"
+\fBfoodcritic\fR makes it easier to flag problems in your Chef cookbooks that will cause Chef to blow up when you attempt to converge\. This is about faster feedback\.
+.
+.P
+Each \fBcookbook\fR path specified will be examined for common problems and poor style\.
+.
+.SH "OPTIONS"
+.
+.TP
+\fB\-t\fR, \fB\-\-tags\fR \fITAGS\fR
+Only check against rules with the specified tags\.
+.
+.TP
+\fB\-f\fR, \fB\-\-epic\-fail\fR \fITAGS\fR
+Exit non\-zero if any of the specified tags are matched\. Use the pseudo\-tag \fBany\fR to fail if any tag is matched\.
+.
+.TP
+\fB\-c\fR, \fB\-\-chef\-version\fR \fIVERSION\fR
+Only check against rules valid for this version of Chef\.
+.
+.TP
+\fB\-B\fR, \fB\-\-cookbook\-path\fR
+Cookbook path(s) to check\.
+.
+.TP
+\fB\-C\fR, \fB\-\-\fR[\fBno\-\fR]\fBcontext\fR
+Show lines matched against rather than the default summary\.
+.
+.TP
+\fB\-E\fR, \fB\-\-environment\-path\fR
+Environment path(s) to check\.
+.
+.TP
+\fB\-I\fR, \fB\-\-include\fR \fIPATH\fR
+Additional rule file path(s) to load\.
+.
+.TP
+\fB\-R\fR, \fB\-\-role\-path\fR
+Role path(s) to check\.
+.
+.TP
+\fB\-S\fR, \fB\-\-search\-grammar\fR \fIPATH\fR
+Specify grammar to use when validating search syntax\. (Default: the grammar of any installed Chef)
+.
+.TP
+\fB\-V\fR, \fB\-\-version\fR
+Display the foodcritic version\.
+.
+.SH "RETURN VALUES"
+By default, \fBfoodcritic\fR will always return \fB0\fR\.
+.
+.P
+If \fB\-\-epic\-fail\fR is specified, then \fBfoodcritic\fR will return \fB3\fR if any tags are matched\.
+.
+.SH "COPYRIGHT"
+\fBfoodcritic\fR is Copyright 2011 by Andrew Crump\.
+.
+.SH "SEE ALSO"
+chef(1)
diff --git a/man/foodcritic.1.ronn b/man/foodcritic.1.ronn
index 6465c56..a437930 100644
--- a/man/foodcritic.1.ronn
+++ b/man/foodcritic.1.ronn
@@ -28,12 +28,21 @@ poor style.
  * `-c`, `--chef-version` <VERSION>:
    Only check against rules valid for this version of Chef.
 
+ * `-B`, `--cookbook-path`:
+   Cookbook path(s) to check.
+
  * `-C`, `--`[`no-`]`context`:
    Show lines matched against rather than the default summary.
 
+ * `-E`, `--environment-path`:
+   Environment path(s) to check.
+
  * `-I`, `--include` <PATH>:
    Additional rule file path(s) to load.
 
+ * `-R`, `--role-path`:
+   Role path(s) to check.
+
  * `-S`, `--search-grammar` <PATH>:
    Specify grammar to use when validating search syntax.
    (Default: the grammar of any installed Chef)
diff --git a/metadata.yml b/metadata.yml
new file mode 100644
index 0000000..daad83c
--- /dev/null
+++ b/metadata.yml
@@ -0,0 +1,264 @@
+--- !ruby/object:Gem::Specification
+name: foodcritic
+version: !ruby/object:Gem::Version
+  version: 3.0.3
+platform: ruby
+authors:
+- Andrew Crump
+autorequire: 
+bindir: bin
+cert_chain: []
+date: 2013-10-13 00:00:00.000000000 Z
+dependencies:
+- !ruby/object:Gem::Dependency
+  name: gherkin
+  requirement: !ruby/object:Gem::Requirement
+    requirements:
+    - - ~>
+      - !ruby/object:Gem::Version
+        version: 2.11.7
+  type: :runtime
+  prerelease: false
+  version_requirements: !ruby/object:Gem::Requirement
+    requirements:
+    - - ~>
+      - !ruby/object:Gem::Version
+        version: 2.11.7
+- !ruby/object:Gem::Dependency
+  name: nokogiri
+  requirement: !ruby/object:Gem::Requirement
+    requirements:
+    - - ~>
+      - !ruby/object:Gem::Version
+        version: 1.5.4
+  type: :runtime
+  prerelease: false
+  version_requirements: !ruby/object:Gem::Requirement
+    requirements:
+    - - ~>
+      - !ruby/object:Gem::Version
+        version: 1.5.4
+- !ruby/object:Gem::Dependency
+  name: rake
+  requirement: !ruby/object:Gem::Requirement
+    requirements:
+    - - ! '>='
+      - !ruby/object:Gem::Version
+        version: '0'
+  type: :runtime
+  prerelease: false
+  version_requirements: !ruby/object:Gem::Requirement
+    requirements:
+    - - ! '>='
+      - !ruby/object:Gem::Version
+        version: '0'
+- !ruby/object:Gem::Dependency
+  name: treetop
+  requirement: !ruby/object:Gem::Requirement
+    requirements:
+    - - ~>
+      - !ruby/object:Gem::Version
+        version: 1.4.10
+  type: :runtime
+  prerelease: false
+  version_requirements: !ruby/object:Gem::Requirement
+    requirements:
+    - - ~>
+      - !ruby/object:Gem::Version
+        version: 1.4.10
+- !ruby/object:Gem::Dependency
+  name: yajl-ruby
+  requirement: !ruby/object:Gem::Requirement
+    requirements:
+    - - ~>
+      - !ruby/object:Gem::Version
+        version: 1.1.0
+  type: :runtime
+  prerelease: false
+  version_requirements: !ruby/object:Gem::Requirement
+    requirements:
+    - - ~>
+      - !ruby/object:Gem::Version
+        version: 1.1.0
+- !ruby/object:Gem::Dependency
+  name: erubis
+  requirement: !ruby/object:Gem::Requirement
+    requirements:
+    - - ! '>='
+      - !ruby/object:Gem::Version
+        version: '0'
+  type: :runtime
+  prerelease: false
+  version_requirements: !ruby/object:Gem::Requirement
+    requirements:
+    - - ! '>='
+      - !ruby/object:Gem::Version
+        version: '0'
+description: Lint tool for Opscode Chef cookbooks.
+email: 
+executables:
+- foodcritic
+extensions: []
+extra_rdoc_files: []
+files:
+- chef_dsl_metadata/chef_10.20.0.json
+- chef_dsl_metadata/chef_10.12.0.json
+- chef_dsl_metadata/chef_10.18.2.json
+- chef_dsl_metadata/chef_10.26.0.json
+- chef_dsl_metadata/chef_0.10.10.json
+- chef_dsl_metadata/chef_0.9.4.json
+- chef_dsl_metadata/chef_0.10.8.json
+- chef_dsl_metadata/chef_10.14.4.json
+- chef_dsl_metadata/chef_0.9.12.json
+- chef_dsl_metadata/chef_10.22.0.json
+- chef_dsl_metadata/chef_0.10.6.json
+- chef_dsl_metadata/chef_11.0.0.json
+- chef_dsl_metadata/chef_0.9.8.json
+- chef_dsl_metadata/chef_11.4.0.json
+- chef_dsl_metadata/chef_0.8.14.json
+- chef_dsl_metadata/chef_0.9.18.json
+- chef_dsl_metadata/chef_10.16.0.json
+- chef_dsl_metadata/chef_11.4.2.json
+- chef_dsl_metadata/chef_0.9.16.json
+- chef_dsl_metadata/chef_0.9.2.json
+- chef_dsl_metadata/chef_0.9.6.json
+- chef_dsl_metadata/chef_10.16.6.json
+- chef_dsl_metadata/chef_10.16.4.json
+- chef_dsl_metadata/chef_0.9.14.json
+- chef_dsl_metadata/chef_10.18.0.json
+- chef_dsl_metadata/chef_0.10.2.json
+- chef_dsl_metadata/chef_0.9.0.json
+- chef_dsl_metadata/chef_0.8.16.json
+- chef_dsl_metadata/chef_0.10.4.json
+- chef_dsl_metadata/chef_11.4.4.json
+- chef_dsl_metadata/chef_0.10.0.json
+- chef_dsl_metadata/chef_10.16.2.json
+- chef_dsl_metadata/chef_10.24.0.json
+- chef_dsl_metadata/chef_11.6.0.json
+- chef_dsl_metadata/chef_10.24.4.json
+- chef_dsl_metadata/chef_10.14.2.json
+- chef_dsl_metadata/chef_10.14.0.json
+- chef_dsl_metadata/chef_11.2.0.json
+- chef_dsl_metadata/chef_0.9.10.json
+- lib/foodcritic/dsl.rb
+- lib/foodcritic/command_line.rb
+- lib/foodcritic/rake_task.rb
+- lib/foodcritic/chef.rb
+- lib/foodcritic/ast.rb
+- lib/foodcritic/api.rb
+- lib/foodcritic/output.rb
+- lib/foodcritic/xml.rb
+- lib/foodcritic/template.rb
+- lib/foodcritic/linter.rb
+- lib/foodcritic/error_checker.rb
+- lib/foodcritic/domain.rb
+- lib/foodcritic/rules.rb
+- lib/foodcritic/version.rb
+- lib/foodcritic/notifications.rb
+- lib/foodcritic.rb
+- bin/foodcritic
+- spec/spec_helper.rb
+- spec/regression/regression_spec.rb
+- spec/regression/expected-output.txt
+- spec/regression/cookbooks.txt
+- spec/foodcritic/template_spec.rb
+- spec/foodcritic/command_line_spec.rb
+- spec/foodcritic/chef_spec.rb
+- spec/foodcritic/api_spec.rb
+- spec/foodcritic/linter_spec.rb
+- spec/foodcritic/domain_spec.rb
+- spec/regression_helpers.rb
+- features/045_check_for_cookbook_name_in_metadata.feature
+- features/choose_rules_to_apply.feature
+- features/030_check_for_debugger_breakpoints.feature
+- features/006_check_file_mode.feature
+- features/050_check_for_invalid_name.feature
+- features/029_check_for_no_leading_cookbook_name.feature
+- features/include_custom_rules.feature
+- features/031_check_for_metadata_existence.feature
+- features/checking_all_types_of_file.feature
+- features/021_check_for_dodgy_lwrp_conditions.feature
+- features/051_check_for_template_partial_loops.feature
+- features/015_check_for_definitions.feature
+- features/041_check_raw_download.feature
+- features/individual_file.feature
+- features/multiple_paths.feature
+- features/007_check_for_undeclared_recipe_dependencies.feature
+- features/046_check_for_assign_unless_nil_attributes.feature
+- features/023_check_for_condition_around_resource.feature
+- features/003_check_for_chef_server.feature
+- features/018_check_for_old_lwrp_notification_syntax.feature
+- features/043_check_for_old_notification_style.feature
+- features/002_check_string_interpolation.feature
+- features/044_check_for_bare_attribute_keys.feature
+- features/028_check_for_incorrect_platform_method.feature
+- features/008_check_for_boilerplate_metadata.feature
+- features/039_check_for_key_access_to_node_methods.feature
+- features/026_check_for_conditional_block_string.feature
+- features/010_check_search_syntax.feature
+- features/show_lines_matched.feature
+- features/005_check_for_resource_repetition.feature
+- features/012_check_for_deprecated_readme_format.feature
+- features/017_check_for_no_lwrp_notifications.feature
+- features/support/cookbook_helpers.rb
+- features/support/env.rb
+- features/support/command_helpers.rb
+- features/032_check_for_invalid_notification_timing.feature
+- features/continuous_integration_support.feature
+- features/034_check_for_unused_template_variables.feature
+- features/038_check_for_invalid_action.feature
+- features/022_check_for_dodgy_conditions_within_loop.feature
+- features/025_check_for_deprecated_gem_install.feature
+- features/004_check_service_resource_used.feature
+- features/sort_warnings.feature
+- features/limit_rules_to_specific_versions.feature
+- features/step_definitions/cookbook_steps.rb
+- features/042_check_for_deprecated_require_recipe.feature
+- features/024_check_for_missing_platforms.feature
+- features/command_line_help.feature
+- features/049_check_for_role_name_mismatch_with_file_name.feature
+- features/013_check_for_hardcoded_tmpdir.feature
+- features/047_check_for_attribute_assignment_without_precedence.feature
+- features/011_check_for_markdown_readme.feature
+- features/specify_search_grammar.feature
+- features/019_check_for_consistent_node_access.feature
+- features/014_check_for_long_ruby_blocks.feature
+- features/037_check_for_invalid_notification_action.feature
+- features/ignore_via_line_comments.feature
+- features/016_check_for_no_lwrp_default_action.feature
+- features/033_check_for_missing_template.feature
+- features/048_check_for_shellout.feature
+- features/040_check_raw_git_usage.feature
+- features/009_check_for_unrecognised_resource_attributes.feature
+- features/build_framework_support.feature
+- features/027_check_for_internal_attribute_use.feature
+- CHANGELOG.md
+- README.md
+- LICENSE
+- man/foodcritic.1.ronn
+- man/foodcritic.1
+homepage: http://foodcritic.io
+licenses:
+- MIT
+metadata: {}
+post_install_message: 
+rdoc_options: []
+require_paths:
+- lib
+required_ruby_version: !ruby/object:Gem::Requirement
+  requirements:
+  - - ! '>='
+    - !ruby/object:Gem::Version
+      version: 1.9.2
+required_rubygems_version: !ruby/object:Gem::Requirement
+  requirements:
+  - - ! '>='
+    - !ruby/object:Gem::Version
+      version: '0'
+requirements: []
+rubyforge_project: 
+rubygems_version: 2.0.7
+signing_key: 
+specification_version: 4
+summary: foodcritic-3.0.3
+test_files: []
diff --git a/spec/foodcritic/api_spec.rb b/spec/foodcritic/api_spec.rb
index 9650ef3..71b4c3a 100644
--- a/spec/foodcritic/api_spec.rb
+++ b/spec/foodcritic/api_spec.rb
@@ -21,6 +21,8 @@ describe FoodCritic::Api do
         :chef_solo_search_supported?,
         :cookbook_name,
         :declared_dependencies,
+        :field,
+        :field_value,
         :file_match,
         :find_resources,
         :gem_version,
@@ -40,9 +42,10 @@ describe FoodCritic::Api do
         :ruby_code?,
         :searches,
         :standard_cookbook_subdirs,
-	:supported_platforms,
+        :supported_platforms,
         :template_file,
         :template_paths,
+        :templates_included,
         :valid_query?
       ])
     end
@@ -87,6 +90,51 @@ describe FoodCritic::Api do
       ast = parse_ast(%q{baz = search(:node, "name:#{node['foo']['bar']}")[0]})
       api.attribute_access(ast, :type => :symbol).must_be_empty
     end
+    describe :ignoring_attributes do
+      it "doesn't ignore run_state by default for backwards compatibility" do
+        ast = parse_ast("node.run_state['bar'] = 'baz'")
+        api.attribute_access(ast).wont_be_empty
+      end
+      it "allows run_state to be ignored" do
+        ast = parse_ast("node.run_state['bar'] = 'baz'")
+        api.attribute_access(ast, :ignore => ['run_state']).must_be_empty
+      end
+      it "allows run_state to be ignored (symbols access)" do
+        ast = parse_ast("node.run_state[:bar] = 'baz'")
+        api.attribute_access(ast, :ignore => ['run_state']).must_be_empty
+      end
+      it "allows any attribute to be ignored" do
+        ast = parse_ast("node['bar'] = 'baz'")
+        api.attribute_access(ast, :ignore => ['bar']).must_be_empty
+      end
+      it "allows any attribute to be ignored (symbols access)" do
+        ast = parse_ast("node[:bar] = 'baz'")
+        api.attribute_access(ast, :ignore => ['bar']).must_be_empty
+      end
+      it "allows any attribute to be ignored (dot access)" do
+        ast = parse_ast("node.bar = 'baz'")
+        api.attribute_access(ast, :ignore => ['bar']).must_be_empty
+      end
+      it "includes the children of attributes" do
+        ast = parse_ast("node['foo']['bar'] = 'baz'")
+        api.attribute_access(ast).map{|a| a['value']}.must_equal(%w{foo bar})
+      end
+      it "does not include children of removed attributes" do
+        ast = parse_ast("node['foo']['bar'] = 'baz'")
+        api.attribute_access(ast, :ignore => ['foo']).must_be_empty
+      end
+      it "coerces ignore values to enumerate them" do
+        ast = parse_ast("node.run_state['bar'] = 'baz'")
+        api.attribute_access(ast, :ignore => 'run_state').must_be_empty
+      end
+      it "can ignore multiple attributes" do
+        ast = parse_ast(%q{
+          node['bar'] = 'baz'
+          node.foo = 'baz'
+        })
+        api.attribute_access(ast, :ignore => %w{foo bar}).must_be_empty
+      end
+    end
   end
 
   describe "#checks_for_chef_solo?" do
@@ -184,6 +232,86 @@ describe FoodCritic::Api do
     end
   end
 
+  describe "#field" do
+    describe :simple_ast do
+      let(:ast){ parse_ast('name "webserver"') }
+      it "raises if the field name is nil" do
+        lambda{api.field(ast, nil)}.must_raise ArgumentError
+      end
+      it "raises if the field name is empty" do
+        lambda{api.field(ast, '')}.must_raise ArgumentError
+      end
+      it "returns empty if the field is not present" do
+        api.field(ast, :common_name).must_be_empty
+      end
+      it "accepts a string for the field name" do
+        api.field(ast, 'name').wont_be_empty
+      end
+      it "accepts a symbol for the field name" do
+        api.field(ast, :name).wont_be_empty
+      end
+    end
+    it "returns fields when the value is an embedded string expression" do
+      ast = parse_ast(%q{
+        name "#{foo}_#{bar}"
+      }.strip)
+      api.field(ast, :name).size.must_equal 1
+    end
+    it "returns fields when the value is a method call" do
+      ast = parse_ast(%q{
+        name generate_name
+      }.strip)
+      api.field(ast, :name).size.must_equal 1
+    end
+    it "returns both fields if the field is specified twice" do
+      ast = parse_ast(%q{
+        name "webserver"
+        name "database"
+      }.strip)
+      api.field(ast, :name).size.must_equal 2
+    end
+  end
+
+  describe "#field_value" do
+    describe :simple_ast do
+      let(:ast){ parse_ast('name "webserver"') }
+      it "raises if the field name is nil" do
+        lambda{api.field_value(ast, nil)}.must_raise ArgumentError
+      end
+      it "raises if the field name is empty" do
+        lambda{api.field_value(ast, '')}.must_raise ArgumentError
+      end
+      it "is falsy if the field is not present" do
+        refute api.field_value(ast, :common_name)
+      end
+      it "accepts a string for the field name" do
+        api.field_value(ast, 'name').must_equal 'webserver'
+      end
+      it "accepts a symbol for the field name" do
+        api.field_value(ast, :name).must_equal 'webserver'
+      end
+    end
+    it "is falsy when the value is an embedded string expression" do
+      ast = parse_ast(%q{
+        name "#{foo}_#{bar}"
+      }.strip)
+      refute api.field_value(ast, :name)
+    end
+    it "is falsy when the value is a method call" do
+      ast = parse_ast(%q{
+        name generate_name('foo')
+      }.strip)
+      refute api.field_value(ast, :name)
+    end
+    it "returns the last value if the field is specified twice" do
+      ast = parse_ast(%q{
+        name "webserver"
+        name "database"
+      }.strip)
+      api.field_value(ast, :name).must_equal 'database'
+    end
+  end
+
   describe "#file_match" do
     it "includes the provided filename in the match" do
       api.file_match("foo.rb")[:filename].must_equal "foo.rb"
@@ -1612,4 +1740,85 @@ describe FoodCritic::Api do
     end
   end
 
+  describe "#templates_included" do
+
+    def all_templates
+      [
+        'templates/default/main.erb',
+        'templates/default/included_1.erb',
+        'templates/default/included_2.erb'
+      ]
+    end
+
+    def template_ast(content)
+      parse_ast(FoodCritic::Template::ExpressionExtractor.new.extract(
+        content).map{|e| e[:code]}.join(';'))
+    end
+
+    it "returns the path of the containing template when there are no partials" do
+      ast = parse_ast('<%= foo.erb %>')
+      api.stub :read_ast, ast do
+        api.templates_included(['foo.erb'], 'foo.erb').must_equal ['foo.erb']
+      end
+    end
+
+    it "returns the path of the containing template and any partials" do
+      api.instance_variable_set(:@asts, {
+        :main =>  template_ast('<%= render "included_1.erb" %>
+                                <%= render "included_2.erb" %>'),
+        :ok => template_ast('<%= @foo %>')
+      })
+      def api.read_ast(path)
+        case path
+          when /main/ then @asts[:main]
+          else @asts[:ok]
+        end
+      end
+      api.templates_included(all_templates,
+        'templates/default/main.erb').must_equal(
+          ['templates/default/main.erb',
+           'templates/default/included_1.erb',
+           'templates/default/included_2.erb']
+      )
+    end
+
+    it "doesn't mistake render options for partial template names" do
+      api.instance_variable_set(:@asts, {
+        :main =>  template_ast('<%= render "included_1.erb",
+                               :variables => {:foo => "included_2.erb"} %>'),
+        :ok => template_ast('<%= @foo %>')
+      })
+      def api.read_ast(path)
+        case path
+          when /main/ then @asts[:main]
+          else @asts[:ok]
+        end
+      end
+      api.templates_included(all_templates,
+        'templates/default/main.erb').must_equal(
+          ['templates/default/main.erb', 'templates/default/included_1.erb']
+      )
+    end
+
+    it "raises if included partials have cycles" do
+      api.instance_variable_set(:@asts, {
+        :main =>  template_ast('<%= render "included_1.erb" %>
+                                <%= render "included_2.erb" %>'),
+        :loop => template_ast('<%= render "main.erb" %>'),
+        :ok => template_ast('<%= foo %>')
+      })
+      def api.read_ast(path)
+        case path
+          when /main/ then @asts[:main]
+          when /included_2/ then @asts[:loop]
+          else @asts[:ok]
+        end
+      end
+      err = lambda do
+        api.templates_included(all_templates, 'templates/default/main.erb')
+      end.must_raise(FoodCritic::Api::RecursedTooFarError)
+      err.message.must_equal 'templates/default/main.erb'
+    end
+  end
+
 end
diff --git a/spec/foodcritic/command_line_spec.rb b/spec/foodcritic/command_line_spec.rb
index cd3538d..fa45fc2 100644
--- a/spec/foodcritic/command_line_spec.rb
+++ b/spec/foodcritic/command_line_spec.rb
@@ -23,6 +23,19 @@ describe FoodCritic::CommandLine do
     end
   end
 
+  describe "#role_paths" do
+    it "returns an empty if no role paths are specified" do
+      FoodCritic::CommandLine.new([]).role_paths.must_be_empty
+    end
+    it "returns the provided role path" do
+      FoodCritic::CommandLine.new(['-R', 'roles']).role_paths.must_equal(%w{roles})
+    end
+    it "returns the provided role paths when there are multiple" do
+      FoodCritic::CommandLine.new(['-R', 'roles1',
+        '-R', 'roles2']).role_paths.must_equal(%w{roles1 roles2})
+    end
+  end
+
   describe "#valid_paths?" do
     it "returns false if no paths are specified" do
       refute FoodCritic::CommandLine.new([]).valid_paths?
diff --git a/spec/foodcritic/domain_spec.rb b/spec/foodcritic/domain_spec.rb
index 5d79f24..1d3d4d6 100644
--- a/spec/foodcritic/domain_spec.rb
+++ b/spec/foodcritic/domain_spec.rb
@@ -2,23 +2,58 @@ require_relative '../spec_helper'
 
 describe FoodCritic::Review do
   it "is instantiable with no warnings" do
-    FoodCritic::Review.new('example', [], false)
+    FoodCritic::Review.new('example', [])
   end
   describe "#cookbook_paths" do
     it "returns the cookbook paths provided" do
-      FoodCritic::Review.new(['example'], [], false).cookbook_paths.must_equal ['example']
+      FoodCritic::Review.new(['example'], []).cookbook_paths.must_equal ['example']
     end
     it "returns the cookbook paths provided when there are multiple" do
-      FoodCritic::Review.new(['example', 'example2'], [], false).cookbook_paths.must_equal ['example', 'example2']
+      FoodCritic::Review.new(['example', 'example2'], []).cookbook_paths.must_equal ['example', 'example2']
     end
   end
   describe "#warnings" do
     it "returns empty when there are no warnings" do
-      FoodCritic::Review.new('example', [], false).warnings.must_be_empty
+      FoodCritic::Review.new('example', []).warnings.must_be_empty
     end
     it "makes the warnings available" do
       warning = 'Danger Will Robinson'
-      FoodCritic::Review.new('example', [warning], false).warnings.must_equal [warning]
+      FoodCritic::Review.new('example', [warning]).warnings.must_equal [warning]
+    end
+  end
+end
+
+describe FoodCritic::Rule do
+  let(:rule) { FoodCritic::Rule.new('FCTEST001', 'Test rule') }
+
+  describe '#matches_tags?' do
+    it "matches the rule's code" do
+      rule.matches_tags?(['FCTEST001']).must_equal true
+    end
+
+    it "doesn't match an unrelated code" do
+      rule.matches_tags?(['FCTEST999']).must_equal false
+    end
+  end
+
+  describe '#tags' do
+    it "returns any + the rule's code" do
+      rule.tags.must_equal ['any', 'FCTEST001']
+    end
+  end
+end
+
+describe FoodCritic::Warning do
+  let(:rule) { FoodCritic::Rule.new('FCTEST001', 'Test rule') }
+  let(:match_opts) { {:filename => 'foo/recipes.default.rb', :line => 5, :column=> 40} }
+
+  describe "failure indication" do
+    it 'is false if no fail_tags match' do
+      FoodCritic::Warning.new(rule, match_opts, {:fail_tags => []}).failed?.must_equal false
+    end
+
+    it 'is true if fail_tags do match' do
+      FoodCritic::Warning.new(rule, match_opts, {:fail_tags => ['any']}).failed?.must_equal true
     end
   end
 end
diff --git a/spec/foodcritic/linter_spec.rb b/spec/foodcritic/linter_spec.rb
index 823bf75..cee39f3 100644
--- a/spec/foodcritic/linter_spec.rb
+++ b/spec/foodcritic/linter_spec.rb
@@ -7,10 +7,6 @@ describe FoodCritic::Linter do
     it "is instantiable" do
       linter.wont_be_nil
     end
-
-    it "raises if a cookbook path is not provided" do
-      lambda {linter.check(nil, {})}.must_raise(ArgumentError)
-    end
   end
 
   describe "chef version" do
@@ -20,29 +16,30 @@ describe FoodCritic::Linter do
   end
 
   describe "#check" do
-    it "requires a cookbook_path to be provided" do
-      lambda{ linter.check(nil, {}) }.must_raise ArgumentError
-    end
-
-    it "requires an array of cookbook paths not to be empty" do
-      lambda{ linter.check([], {}) }.must_raise ArgumentError
-    end
-
-    it "accepts a scalar with a single cookbook path for backwards compatibility" do
-      linter.check('.', {})
-    end
 
-    it "accepts an array of cookbook paths" do
-      linter.check(['.'], {})
+    it "requires a cookbook_path, role_path or environment_path to be specified" do
+      lambda{ linter.check({}) }.must_raise ArgumentError
     end
 
-    it "returns a review" do
-      linter.check(['.'], {}).must_respond_to(:warnings)
+    [:cookbook, :role, :environment].each do |path_type|
+      key = "#{path_type}_paths".to_sym
+      it "requires a #{path_type}_path by itself not to be nil" do
+        lambda{ linter.check(key => nil) }.must_raise ArgumentError
+      end
+      it "requires a #{path_type}_path by itself not to be empty" do
+        lambda{ linter.check(key => []) }.must_raise ArgumentError
+      end
+      it "accepts a scalar with a single #{path_type} path" do
+        linter.check(key => '.')
+      end
+      it "accepts an array of #{path_type} paths" do
+        linter.check(key => ['.'])
+      end
+      it "returns a review when a #{path_type} path is provided" do
+        linter.check(key => ['.']).must_respond_to(:warnings)
+      end
     end
 
-    it "does not require an empty hash of options" do
-      linter.check(['.'])
-    end
   end
 
   describe "#load_files!" do
diff --git a/spec/foodcritic/template_spec.rb b/spec/foodcritic/template_spec.rb
index 8a2b421..6ba3c01 100644
--- a/spec/foodcritic/template_spec.rb
+++ b/spec/foodcritic/template_spec.rb
@@ -16,7 +16,8 @@ describe FoodCritic::Template::ExpressionExtractor do
         <% if true %>
           Hello World!
         <% end %>
-      }).must_equal([{:type => :statement, :code => 'if true'}, {:type => :statement, :code => 'end'}])
+      }).must_equal([{:type => :statement, :code => 'if true', :line => 2},
+                     {:type => :statement, :code => 'end', :line => 4}])
     end
     it "does not evaluate erb statements" do
       extractor.extract(%q{
@@ -26,7 +27,7 @@ describe FoodCritic::Template::ExpressionExtractor do
     it "extracts an expression from within the template" do
       extractor.extract(%q{
         <%= foo %>
-      }).must_equal([{:type => :expression, :code => 'foo'}])
+      }).must_equal([{:type => :expression, :code => 'foo', :line => 2}])
     end
     it "does not evaluate erb expressions" do
       extractor.extract(%q{
@@ -40,10 +41,13 @@ describe FoodCritic::Template::ExpressionExtractor do
                    URIEncoding="UTF-8"
                    redirectPort="<%= node["tomcat"]["ssl_port"] %>" />
       }).must_equal([
-        {:type => :expression, :code => 'node["tomcat"]["port"]'},
-        {:type => :expression, :code => 'node["tomcat"]["ssl_port"]'}
+        {:type => :expression, :code => 'node["tomcat"]["port"]', :line => 2},
+        {:type => :expression, :code => 'node["tomcat"]["ssl_port"]', :line => 5}
       ])
     end
+    it "excludes comment-only expressions" do
+      extractor.extract('<%# A comment %>').must_be_empty
+    end
   end
 
 end
diff --git a/spec/regression/expected-output.txt b/spec/regression/expected-output.txt
index 66acaa4..a930012 100644
--- a/spec/regression/expected-output.txt
+++ b/spec/regression/expected-output.txt
@@ -1,5 +1,5 @@
 FC002: Avoid string interpolation where not required: ./ant/resources/library.rb:29
-FC002: Avoid string interpolation where not required: ./application_php/templates/default/php.conf.erb:1
+FC002: Avoid string interpolation where not required: ./application_php/templates/default/php.conf.erb:3
 FC002: Avoid string interpolation where not required: ./application_python/providers/gunicorn.rb:80
 FC002: Avoid string interpolation where not required: ./ark/libraries/provider_ark.rb:247
 FC002: Avoid string interpolation where not required: ./ark/libraries/provider_ark.rb:249
@@ -21,8 +21,8 @@ FC002: Avoid string interpolation where not required: ./pacman/providers/aur.rb:
 FC002: Avoid string interpolation where not required: ./pacman/providers/aur.rb:31
 FC002: Avoid string interpolation where not required: ./pacman/providers/aur.rb:72
 FC002: Avoid string interpolation where not required: ./pacman/providers/aur.rb:90
-FC002: Avoid string interpolation where not required: ./passenger_apache2/templates/default/passenger_web_app.conf.erb:1
-FC002: Avoid string interpolation where not required: ./passenger_apache2/templates/default/web_app.conf.erb:1
+FC002: Avoid string interpolation where not required: ./passenger_apache2/templates/default/passenger_web_app.conf.erb:3
+FC002: Avoid string interpolation where not required: ./passenger_apache2/templates/default/web_app.conf.erb:3
 FC002: Avoid string interpolation where not required: ./perl/recipes/default.rb:37
 FC002: Avoid string interpolation where not required: ./perl/recipes/default.rb:43
 FC002: Avoid string interpolation where not required: ./pxe_dust/recipes/bootstrap_template.rb:89
@@ -35,7 +35,7 @@ FC002: Avoid string interpolation where not required: ./python/providers/virtual
 FC002: Avoid string interpolation where not required: ./python/providers/virtualenv.rb:64
 FC002: Avoid string interpolation where not required: ./radiant/recipes/default.rb:57
 FC002: Avoid string interpolation where not required: ./radiant/recipes/default.rb:61
-FC002: Avoid string interpolation where not required: ./radiant/templates/default/radiant.conf.erb:1
+FC002: Avoid string interpolation where not required: ./radiant/templates/default/radiant.conf.erb:3
 FC002: Avoid string interpolation where not required: ./rsyslog/recipes/default.rb:24
 FC002: Avoid string interpolation where not required: ./rsyslog/recipes/default.rb:63
 FC002: Avoid string interpolation where not required: ./sbuild/definitions/sbuild_lv.rb:30
@@ -45,7 +45,7 @@ FC002: Avoid string interpolation where not required: ./windows/libraries/window
 FC002: Avoid string interpolation where not required: ./windows/libraries/windows_privileged.rb:56
 FC002: Avoid string interpolation where not required: ./wordpress/recipes/default.rb:66
 FC002: Avoid string interpolation where not required: ./wordpress/recipes/default.rb:148
-FC002: Avoid string interpolation where not required: ./wordpress/templates/default/wordpress.conf.erb:1
+FC002: Avoid string interpolation where not required: ./wordpress/templates/default/wordpress.conf.erb:3
 FC002: Avoid string interpolation where not required: ./zenoss/providers/zendmd.rb:4
 FC002: Avoid string interpolation where not required: ./zenoss/recipes/server.rb:164
 FC003: Check whether you are running with chef server before using server-specific features: ./application/libraries/default.rb:97
@@ -146,57 +146,126 @@ FC016: LWRP does not declare a default action: ./zenoss/resources/zenbatchload.r
 FC016: LWRP does not declare a default action: ./zenoss/resources/zendmd.rb:1
 FC016: LWRP does not declare a default action: ./zenoss/resources/zenpack.rb:1
 FC016: LWRP does not declare a default action: ./zenoss/resources/zenpatch.rb:1
-FC017: LWRP does not notify when updated: ./application/providers/default.rb:1
-FC017: LWRP does not notify when updated: ./application_java/providers/java_webapp.rb:1
-FC017: LWRP does not notify when updated: ./application_java/providers/tomcat.rb:1
-FC017: LWRP does not notify when updated: ./application_nginx/providers/nginx_load_balancer.rb:1
-FC017: LWRP does not notify when updated: ./application_php/providers/mod_php_apache2.rb:1
-FC017: LWRP does not notify when updated: ./application_php/providers/php.rb:1
-FC017: LWRP does not notify when updated: ./application_python/providers/celery.rb:1
-FC017: LWRP does not notify when updated: ./application_python/providers/django.rb:1
-FC017: LWRP does not notify when updated: ./application_python/providers/gunicorn.rb:1
-FC017: LWRP does not notify when updated: ./application_ruby/providers/memcached.rb:1
-FC017: LWRP does not notify when updated: ./application_ruby/providers/passenger_apache2.rb:1
-FC017: LWRP does not notify when updated: ./application_ruby/providers/rails.rb:1
-FC017: LWRP does not notify when updated: ./application_ruby/providers/unicorn.rb:1
-FC017: LWRP does not notify when updated: ./aws/providers/ebs_volume.rb:1
-FC017: LWRP does not notify when updated: ./aws/providers/elastic_ip.rb:1
-FC017: LWRP does not notify when updated: ./aws/providers/elastic_lb.rb:1
-FC017: LWRP does not notify when updated: ./aws/providers/resource_tag.rb:1
-FC017: LWRP does not notify when updated: ./chef_handler/providers/default.rb:1
-FC017: LWRP does not notify when updated: ./dmg/providers/package.rb:1
-FC017: LWRP does not notify when updated: ./heartbeat/providers/default.rb:1
-FC017: LWRP does not notify when updated: ./heartbeat/providers/null.rb:1
-FC017: LWRP does not notify when updated: ./homebrew/providers/tap.rb:1
-FC017: LWRP does not notify when updated: ./iis/providers/app.rb:1
-FC017: LWRP does not notify when updated: ./iis/providers/config.rb:1
-FC017: LWRP does not notify when updated: ./iis/providers/pool.rb:1
-FC017: LWRP does not notify when updated: ./iis/providers/site.rb:1
-FC017: LWRP does not notify when updated: ./java/providers/ark.rb:1
-FC017: LWRP does not notify when updated: ./lvm/providers/physical_volume.rb:1
-FC017: LWRP does not notify when updated: ./pacman/providers/aur.rb:1
-FC017: LWRP does not notify when updated: ./php/providers/pear.rb:1
-FC017: LWRP does not notify when updated: ./php/providers/pear_channel.rb:1
-FC017: LWRP does not notify when updated: ./powershell/providers/default.rb:1
-FC017: LWRP does not notify when updated: ./python/providers/pip.rb:1
-FC017: LWRP does not notify when updated: ./supervisor/providers/fcgi.rb:1
-FC017: LWRP does not notify when updated: ./supervisor/providers/group.rb:1
-FC017: LWRP does not notify when updated: ./supervisor/providers/service.rb:1
-FC017: LWRP does not notify when updated: ./webpi/providers/product.rb:1
-FC017: LWRP does not notify when updated: ./windows/providers/auto_run.rb:1
-FC017: LWRP does not notify when updated: ./windows/providers/batch.rb:1
-FC017: LWRP does not notify when updated: ./windows/providers/feature_dism.rb:1
-FC017: LWRP does not notify when updated: ./windows/providers/feature_servermanagercmd.rb:1
-FC017: LWRP does not notify when updated: ./windows/providers/package.rb:1
-FC017: LWRP does not notify when updated: ./windows/providers/pagefile.rb:1
-FC017: LWRP does not notify when updated: ./windows/providers/path.rb:1
-FC017: LWRP does not notify when updated: ./windows/providers/reboot.rb:1
-FC017: LWRP does not notify when updated: ./windows/providers/registry.rb:1
-FC017: LWRP does not notify when updated: ./windows/providers/shortcut.rb:1
-FC017: LWRP does not notify when updated: ./windows/providers/task.rb:1
-FC017: LWRP does not notify when updated: ./windows/providers/zipfile.rb:1
-FC017: LWRP does not notify when updated: ./zenoss/providers/zenbatchload.rb:1
-FC017: LWRP does not notify when updated: ./zenoss/providers/zendmd.rb:1
+FC017: LWRP does not notify when updated: ./application/providers/default.rb:23
+FC017: LWRP does not notify when updated: ./application/providers/default.rb:33
+FC017: LWRP does not notify when updated: ./application/providers/default.rb:43
+FC017: LWRP does not notify when updated: ./application_java/providers/java_webapp.rb:25
+FC017: LWRP does not notify when updated: ./application_java/providers/tomcat.rb:22
+FC017: LWRP does not notify when updated: ./application_java/providers/tomcat.rb:34
+FC017: LWRP does not notify when updated: ./application_nginx/providers/nginx_load_balancer.rb:23
+FC017: LWRP does not notify when updated: ./application_nginx/providers/nginx_load_balancer.rb:37
+FC017: LWRP does not notify when updated: ./application_php/providers/mod_php_apache2.rb:22
+FC017: LWRP does not notify when updated: ./application_php/providers/mod_php_apache2.rb:46
+FC017: LWRP does not notify when updated: ./application_php/providers/php.rb:22
+FC017: LWRP does not notify when updated: ./application_php/providers/php.rb:31
+FC017: LWRP does not notify when updated: ./application_python/providers/celery.rb:23
+FC017: LWRP does not notify when updated: ./application_python/providers/celery.rb:50
+FC017: LWRP does not notify when updated: ./application_python/providers/django.rb:25
+FC017: LWRP does not notify when updated: ./application_python/providers/django.rb:36
+FC017: LWRP does not notify when updated: ./application_python/providers/django.rb:44
+FC017: LWRP does not notify when updated: ./application_python/providers/django.rb:70
+FC017: LWRP does not notify when updated: ./application_python/providers/gunicorn.rb:25
+FC017: LWRP does not notify when updated: ./application_python/providers/gunicorn.rb:46
+FC017: LWRP does not notify when updated: ./application_python/providers/gunicorn.rb:91
+FC017: LWRP does not notify when updated: ./application_ruby/providers/memcached.rb:20
+FC017: LWRP does not notify when updated: ./application_ruby/providers/memcached.rb:26
+FC017: LWRP does not notify when updated: ./application_ruby/providers/passenger_apache2.rb:22
+FC017: LWRP does not notify when updated: ./application_ruby/providers/passenger_apache2.rb:40
+FC017: LWRP does not notify when updated: ./application_ruby/providers/rails.rb:21
+FC017: LWRP does not notify when updated: ./application_ruby/providers/rails.rb:44
+FC017: LWRP does not notify when updated: ./application_ruby/providers/rails.rb:54
+FC017: LWRP does not notify when updated: ./application_ruby/providers/rails.rb:108
+FC017: LWRP does not notify when updated: ./application_ruby/providers/unicorn.rb:23
+FC017: LWRP does not notify when updated: ./application_ruby/providers/unicorn.rb:54
+FC017: LWRP does not notify when updated: ./apt/providers/repository.rb:124
+FC017: LWRP does not notify when updated: ./cron/providers/d.rb:1
+FC017: LWRP does not notify when updated: ./dmg/providers/package.rb:27
+FC017: LWRP does not notify when updated: ./firewall/providers/rule_ufw.rb:23
+FC017: LWRP does not notify when updated: ./firewall/providers/rule_ufw.rb:27
+FC017: LWRP does not notify when updated: ./firewall/providers/rule_ufw.rb:31
+FC017: LWRP does not notify when updated: ./heartbeat/providers/default.rb:20
+FC017: LWRP does not notify when updated: ./homebrew/providers/tap.rb:13
+FC017: LWRP does not notify when updated: ./homebrew/providers/tap.rb:21
+FC017: LWRP does not notify when updated: ./iis/providers/app.rb:26
+FC017: LWRP does not notify when updated: ./iis/providers/app.rb:40
+FC017: LWRP does not notify when updated: ./iis/providers/app.rb:57
+FC017: LWRP does not notify when updated: ./iis/providers/config.rb:27
+FC017: LWRP does not notify when updated: ./iis/providers/pool.rb:27
+FC017: LWRP does not notify when updated: ./iis/providers/pool.rb:41
+FC017: LWRP does not notify when updated: ./iis/providers/pool.rb:68
+FC017: LWRP does not notify when updated: ./iis/providers/pool.rb:78
+FC017: LWRP does not notify when updated: ./iis/providers/pool.rb:88
+FC017: LWRP does not notify when updated: ./iis/providers/pool.rb:98
+FC017: LWRP does not notify when updated: ./iis/providers/pool.rb:106
+FC017: LWRP does not notify when updated: ./iis/providers/site.rb:26
+FC017: LWRP does not notify when updated: ./iis/providers/site.rb:50
+FC017: LWRP does not notify when updated: ./iis/providers/site.rb:84
+FC017: LWRP does not notify when updated: ./iis/providers/site.rb:94
+FC017: LWRP does not notify when updated: ./iis/providers/site.rb:104
+FC017: LWRP does not notify when updated: ./iis/providers/site.rb:114
+FC017: LWRP does not notify when updated: ./lvm/providers/physical_volume.rb:6
+FC017: LWRP does not notify when updated: ./maven/providers/default.rb:61
+FC017: LWRP does not notify when updated: ./maven/providers/default.rb:65
+FC017: LWRP does not notify when updated: ./pacman/providers/aur.rb:24
+FC017: LWRP does not notify when updated: ./pacman/providers/aur.rb:98
+FC017: LWRP does not notify when updated: ./php/providers/pear_channel.rb:31
+FC017: LWRP does not notify when updated: ./php/providers/pear_channel.rb:40
+FC017: LWRP does not notify when updated: ./php/providers/pear_channel.rb:69
+FC017: LWRP does not notify when updated: ./powershell/providers/default.rb:19
+FC017: LWRP does not notify when updated: ./rsync/providers/serve.rb:65
+FC017: LWRP does not notify when updated: ./rsync/providers/serve.rb:69
+FC017: LWRP does not notify when updated: ./sudo/providers/default.rb:102
+FC017: LWRP does not notify when updated: ./supervisor/providers/fcgi.rb:21
+FC017: LWRP does not notify when updated: ./supervisor/providers/fcgi.rb:38
+FC017: LWRP does not notify when updated: ./supervisor/providers/fcgi.rb:50
+FC017: LWRP does not notify when updated: ./supervisor/providers/fcgi.rb:56
+FC017: LWRP does not notify when updated: ./supervisor/providers/fcgi.rb:62
+FC017: LWRP does not notify when updated: ./supervisor/providers/fcgi.rb:68
+FC017: LWRP does not notify when updated: ./supervisor/providers/group.rb:21
+FC017: LWRP does not notify when updated: ./supervisor/providers/group.rb:38
+FC017: LWRP does not notify when updated: ./supervisor/providers/group.rb:50
+FC017: LWRP does not notify when updated: ./supervisor/providers/group.rb:56
+FC017: LWRP does not notify when updated: ./supervisor/providers/group.rb:62
+FC017: LWRP does not notify when updated: ./supervisor/providers/group.rb:68
+FC017: LWRP does not notify when updated: ./supervisor/providers/service.rb:21
+FC017: LWRP does not notify when updated: ./supervisor/providers/service.rb:38
+FC017: LWRP does not notify when updated: ./supervisor/providers/service.rb:50
+FC017: LWRP does not notify when updated: ./supervisor/providers/service.rb:56
+FC017: LWRP does not notify when updated: ./supervisor/providers/service.rb:62
+FC017: LWRP does not notify when updated: ./supervisor/providers/service.rb:68
+FC017: LWRP does not notify when updated: ./webpi/providers/product.rb:26
+FC017: LWRP does not notify when updated: ./windows/providers/auto_run.rb:21
+FC017: LWRP does not notify when updated: ./windows/providers/auto_run.rb:27
+FC017: LWRP does not notify when updated: ./windows/providers/batch.rb:24
+FC017: LWRP does not notify when updated: ./windows/providers/package.rb:35
+FC017: LWRP does not notify when updated: ./windows/providers/package.rb:53
+FC017: LWRP does not notify when updated: ./windows/providers/package.rb:64
+FC017: LWRP does not notify when updated: ./windows/providers/pagefile.rb:24
+FC017: LWRP does not notify when updated: ./windows/providers/pagefile.rb:66
+FC017: LWRP does not notify when updated: ./windows/providers/path.rb:21
+FC017: LWRP does not notify when updated: ./windows/providers/path.rb:29
+FC017: LWRP does not notify when updated: ./windows/providers/reboot.rb:21
+FC017: LWRP does not notify when updated: ./windows/providers/reboot.rb:27
+FC017: LWRP does not notify when updated: ./windows/providers/registry.rb:27
+FC017: LWRP does not notify when updated: ./windows/providers/registry.rb:31
+FC017: LWRP does not notify when updated: ./windows/providers/registry.rb:35
+FC017: LWRP does not notify when updated: ./windows/providers/registry.rb:61
+FC017: LWRP does not notify when updated: ./windows/providers/task.rb:24
+FC017: LWRP does not notify when updated: ./windows/providers/task.rb:43
+FC017: LWRP does not notify when updated: ./windows/providers/task.rb:58
+FC017: LWRP does not notify when updated: ./windows/providers/task.rb:75
+FC017: LWRP does not notify when updated: ./windows/providers/zipfile.rb:27
+FC017: LWRP does not notify when updated: ./windows/providers/zipfile.rb:44
+FC017: LWRP does not notify when updated: ./yum/providers/key.rb:25
+FC017: LWRP does not notify when updated: ./yum/providers/repository.rb:28
+FC017: LWRP does not notify when updated: ./yum/providers/repository.rb:45
+FC017: LWRP does not notify when updated: ./zenoss/providers/zenbatchload.rb:2
+FC017: LWRP does not notify when updated: ./zenoss/providers/zendmd.rb:2
+FC017: LWRP does not notify when updated: ./zenoss/providers/zendmd.rb:33
+FC017: LWRP does not notify when updated: ./zenoss/providers/zendmd.rb:63
+FC017: LWRP does not notify when updated: ./zenoss/providers/zendmd.rb:77
+FC017: LWRP does not notify when updated: ./zenoss/providers/zendmd.rb:88
+FC017: LWRP does not notify when updated: ./zenoss/providers/zendmd.rb:97
 FC017: LWRP does not notify when updated: ./zenoss/providers/zenpatch.rb:1
 FC018: LWRP uses deprecated notification syntax: ./pacman/providers/aur.rb:94
 FC018: LWRP uses deprecated notification syntax: ./pacman/providers/aur.rb:104
@@ -277,9 +346,6 @@ FC019: Access node attributes in a consistent manner: runit/definitions/runit_se
 FC019: Access node attributes in a consistent manner: trac/recipes/default.rb:53
 FC019: Access node attributes in a consistent manner: ufw/attributes/default.rb:1
 FC019: Access node attributes in a consistent manner: ufw/attributes/default.rb:2
-FC019: Access node attributes in a consistent manner: windows/providers/reboot.rb:22
-FC019: Access node attributes in a consistent manner: windows/providers/reboot.rb:23
-FC019: Access node attributes in a consistent manner: windows/providers/reboot.rb:24
 FC019: Access node attributes in a consistent manner: zenoss/attributes/default.rb:33
 FC019: Access node attributes in a consistent manner: zenoss/recipes/server.rb:62
 FC019: Access node attributes in a consistent manner: zenoss/recipes/server.rb:86
@@ -332,7 +398,6 @@ FC034: Unused template variables: ./horizon/templates/default/local_settings.py.
 FC034: Unused template variables: ./nginx/templates/default/nginx.init.erb:1
 FC034: Unused template variables: ./nova/templates/default/libvirtd.conf.erb:1
 FC034: Unused template variables: ./sbuild/templates/default/mk_chroot.sh.erb:1
-FC037: Invalid notification action: ./wordpress/recipes/default.rb:125
 FC041: Execute resource used to run curl or wget commands: ./hadoop/recipes/default.rb:33
 FC042: Prefer include_recipe to require_recipe: ./postfix/recipes/aliases.rb:17
 FC043: Prefer new notification syntax: ./apache2/definitions/apache_module.rb:20
@@ -441,3 +506,17 @@ FC043: Prefer new notification syntax: ./zenoss/recipes/server.rb:155
 FC043: Prefer new notification syntax: ./zenoss/recipes/server.rb:164
 FC044: Avoid bare attribute keys: ./resolver/attributes/default.rb:20
 FC045: Consider setting cookbook name in metadata: ./maven/metadata.rb:1
+FC047: Attribute assignment does not specify precedence: ./jetty/recipes/cargo.rb:35
+FC047: Attribute assignment does not specify precedence: ./munin/recipes/server_apache.rb:1
+FC047: Attribute assignment does not specify precedence: ./python/recipes/package.rb:28
+FC047: Attribute assignment does not specify precedence: ./users/providers/manage.rb:55
+FC048: Prefer Mixlib::ShellOut: ./apt/providers/repository.rb:26
+FC048: Prefer Mixlib::ShellOut: ./chef-client/recipes/cron.rb:38
+FC048: Prefer Mixlib::ShellOut: ./chef-client/recipes/delete_validation.rb:20
+FC048: Prefer Mixlib::ShellOut: ./chef-client/recipes/service.rb:52
+FC048: Prefer Mixlib::ShellOut: ./chef-client/recipes/task.rb:42
+FC048: Prefer Mixlib::ShellOut: ./dmg/providers/package.rb:44
+FC048: Prefer Mixlib::ShellOut: ./dmg/providers/package.rb:47
+FC048: Prefer Mixlib::ShellOut: ./dmg/providers/package.rb:76
+FC048: Prefer Mixlib::ShellOut: ./nginx/recipes/passenger.rb:20
+FC048: Prefer Mixlib::ShellOut: ./windows/providers/task.rb:106

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-ruby-extras/foodcritic.git



More information about the Pkg-ruby-extras-commits mailing list