cookstyle 5.17.4 → 5.18.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/config/cookstyle.yml +22 -4
- data/lib/cookstyle/version.rb +1 -1
- data/lib/rubocop/cop/chef/modernize/compile_time_resources.rb +51 -0
- data/lib/rubocop/cop/chef/modernize/execute_sysctl.rb +73 -0
- data/lib/rubocop/cop/chef/redundant/name_property_and_required.rb +9 -26
- data/lib/rubocop/cop/chef/redundant/property_with_default_and_required.rb +17 -23
- data/lib/rubocop/cop/chef/style/true_false_resource_properties.rb +17 -6
- metadata +4 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 56fb1dda6ccaeeb4a3f521c52407e12becf9f1b1625a89b4c893f415820e40c4
         | 
| 4 | 
            +
              data.tar.gz: 46c9bf893653173d77d7282056dc81cb385ef2b6f7828cc5f76e0e4e8e51a3f4
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: f3e1c5acbb968e895c0a8190c28635baa023574e797d0b56ba54bba776f97f24b7d0f718bb02b92080175f46f475500a02254db3bd6f92090fd89f5b2239ec4e
         | 
| 7 | 
            +
              data.tar.gz: 44d2c68635670c76ac81c4941dd70a3fd99fa53cdf40654576584784fd88b256f6c94066716cdff8c8cb7b63b29f68b17524b654e7de4cba514d89803993941b
         | 
    
        data/config/cookstyle.yml
    CHANGED
    
    | @@ -2,8 +2,8 @@ AllCops: | |
| 2 2 | 
             
              TargetRubyVersion: 2.4
         | 
| 3 3 | 
             
              TargetChefVersion: ~
         | 
| 4 4 | 
             
              Exclude:
         | 
| 5 | 
            -
                - files/**/*
         | 
| 6 | 
            -
                - vendor/**/*
         | 
| 5 | 
            +
                - '**/files/**/*'
         | 
| 6 | 
            +
                - '**/vendor/**/*'
         | 
| 7 7 | 
             
                - Guardfile
         | 
| 8 8 | 
             
              ChefAttributes:
         | 
| 9 9 | 
             
                Patterns:
         | 
| @@ -1064,8 +1064,26 @@ ChefModernize/DslIncludeInResource: | |
| 1064 1064 | 
             
                - '**/resources/*.rb'
         | 
| 1065 1065 | 
             
                - '**/providers/*.rb'
         | 
| 1066 1066 |  | 
| 1067 | 
            +
            ChefModernize/ResourceForcingCompileTime:
         | 
| 1068 | 
            +
              Description: The hostname, build_essential, chef_gem, and ohai_hint resources include 'compile_time' properties, which should be used to force the resources to run at compile time by setting `compile_time true`.
         | 
| 1069 | 
            +
              Enabled: true
         | 
| 1070 | 
            +
              VersionAdded: '5.18.0'
         | 
| 1071 | 
            +
              Exclude:
         | 
| 1072 | 
            +
                - '**/metadata.rb'
         | 
| 1073 | 
            +
                - '**/attributes/*.rb'
         | 
| 1074 | 
            +
                - '**/Berksfile'
         | 
| 1075 | 
            +
             | 
| 1076 | 
            +
            ChefModernize/ExecuteSysctl:
         | 
| 1077 | 
            +
              Description: Chef Infra Client 14.0 and later includes a sysctl resource that should be used to idempotently load sysctl values instead of templating files and using execute to load them.
         | 
| 1078 | 
            +
              Enabled: true
         | 
| 1079 | 
            +
              VersionAdded: '5.18.0'
         | 
| 1080 | 
            +
              Exclude:
         | 
| 1081 | 
            +
                - '**/metadata.rb'
         | 
| 1082 | 
            +
                - '**/attributes/*.rb'
         | 
| 1083 | 
            +
                - '**/Berksfile'
         | 
| 1084 | 
            +
             | 
| 1067 1085 | 
             
            ###############################
         | 
| 1068 | 
            -
            # ChefRedundantCode: Cleanup  | 
| 1086 | 
            +
            # ChefRedundantCode: Cleanup unnecessary code in your cookbooks regardless of Chef Infra Client release
         | 
| 1069 1087 | 
             
            ###############################
         | 
| 1070 1088 |  | 
| 1071 1089 | 
             
            ChefRedundantCode/ConflictsMetadata:
         | 
| @@ -1892,7 +1910,7 @@ Lint/BigDecimalNew: | |
| 1892 1910 | 
             
            Lint/UnneededCopEnableDirective:
         | 
| 1893 1911 | 
             
              Enabled: true
         | 
| 1894 1912 |  | 
| 1895 | 
            -
            # get people on a much simpler ruby 2.4 way of doing things
         | 
| 1913 | 
            +
            # get people on a much simpler ruby 2.4+ way of doing things
         | 
| 1896 1914 | 
             
            Style/UnpackFirst:
         | 
| 1897 1915 | 
             
              Enabled: true
         | 
| 1898 1916 |  | 
    
        data/lib/cookstyle/version.rb
    CHANGED
    
    
| @@ -0,0 +1,51 @@ | |
| 1 | 
            +
            #
         | 
| 2 | 
            +
            # Copyright:: 2020, Chef Software, Inc.
         | 
| 3 | 
            +
            # Author:: Tim Smith (<tsmith@chef.io>)
         | 
| 4 | 
            +
            #
         | 
| 5 | 
            +
            # Licensed under the Apache License, Version 2.0 (the "License");
         | 
| 6 | 
            +
            # you may not use this file except in compliance with the License.
         | 
| 7 | 
            +
            # You may obtain a copy of the License at
         | 
| 8 | 
            +
            #
         | 
| 9 | 
            +
            # http://www.apache.org/licenses/LICENSE-2.0
         | 
| 10 | 
            +
            #
         | 
| 11 | 
            +
            # Unless required by applicable law or agreed to in writing, software
         | 
| 12 | 
            +
            # distributed under the License is distributed on an "AS IS" BASIS,
         | 
| 13 | 
            +
            # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         | 
| 14 | 
            +
            # See the License for the specific language governing permissions and
         | 
| 15 | 
            +
            # limitations under the License.
         | 
| 16 | 
            +
            #
         | 
| 17 | 
            +
            module RuboCop
         | 
| 18 | 
            +
              module Cop
         | 
| 19 | 
            +
                module Chef
         | 
| 20 | 
            +
                  module ChefModernize
         | 
| 21 | 
            +
                    # The hostname, build_essential, chef_gem, and ohai_hint resources include 'compile_time' properties, which should be used to force the resources to run at compile time by setting `compile_time true`.
         | 
| 22 | 
            +
                    #
         | 
| 23 | 
            +
                    # @example
         | 
| 24 | 
            +
                    #
         | 
| 25 | 
            +
                    #   # bad
         | 
| 26 | 
            +
                    #   build_essential 'install build tools' do
         | 
| 27 | 
            +
                    #    action :nothing
         | 
| 28 | 
            +
                    #   end.run_action(:install)
         | 
| 29 | 
            +
                    #
         | 
| 30 | 
            +
                    #   # good
         | 
| 31 | 
            +
                    #   build_essential 'install build tools' do
         | 
| 32 | 
            +
                    #    compile_time true
         | 
| 33 | 
            +
                    #   end
         | 
| 34 | 
            +
                    #
         | 
| 35 | 
            +
                    class ResourceForcingCompileTime < Cop
         | 
| 36 | 
            +
                      MSG = "Set 'compile_time true' in resources when available instead of forcing resources to run at compile time by setting an action on the block.".freeze
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                      def_node_matcher :compile_time_resource?, <<-PATTERN
         | 
| 39 | 
            +
                        (send (block (send nil? {:build_essential :chef_gem :hostname :ohai_hint} (...)) (args) (...)) $:run_action (sym ...))
         | 
| 40 | 
            +
                      PATTERN
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                      def on_send(node)
         | 
| 43 | 
            +
                        compile_time_resource?(node) do
         | 
| 44 | 
            +
                          add_offense(node, location: :expression, message: MSG, severity: :refactor)
         | 
| 45 | 
            +
                        end
         | 
| 46 | 
            +
                      end
         | 
| 47 | 
            +
                    end
         | 
| 48 | 
            +
                  end
         | 
| 49 | 
            +
                end
         | 
| 50 | 
            +
              end
         | 
| 51 | 
            +
            end
         | 
| @@ -0,0 +1,73 @@ | |
| 1 | 
            +
            #
         | 
| 2 | 
            +
            # Copyright:: 2020, Chef Software, Inc.
         | 
| 3 | 
            +
            # Author:: Tim Smith (<tsmith@chef.io>)
         | 
| 4 | 
            +
            #
         | 
| 5 | 
            +
            # Licensed under the Apache License, Version 2.0 (the "License");
         | 
| 6 | 
            +
            # you may not use this file except in compliance with the License.
         | 
| 7 | 
            +
            # You may obtain a copy of the License at
         | 
| 8 | 
            +
            #
         | 
| 9 | 
            +
            # http://www.apache.org/licenses/LICENSE-2.0
         | 
| 10 | 
            +
            #
         | 
| 11 | 
            +
            # Unless required by applicable law or agreed to in writing, software
         | 
| 12 | 
            +
            # distributed under the License is distributed on an "AS IS" BASIS,
         | 
| 13 | 
            +
            # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         | 
| 14 | 
            +
            # See the License for the specific language governing permissions and
         | 
| 15 | 
            +
            # limitations under the License.
         | 
| 16 | 
            +
            #
         | 
| 17 | 
            +
            module RuboCop
         | 
| 18 | 
            +
              module Cop
         | 
| 19 | 
            +
                module Chef
         | 
| 20 | 
            +
                  module ChefModernize
         | 
| 21 | 
            +
                    # Chef Infra Client 14.0 and later includes a sysctl resource that should be used to idempotently load sysctl values instead of templating files and using execute to load them.
         | 
| 22 | 
            +
                    #
         | 
| 23 | 
            +
                    #   # bad
         | 
| 24 | 
            +
                    #   file '/etc/sysctl.d/ipv4.conf' do
         | 
| 25 | 
            +
                    #     owner 'root'
         | 
| 26 | 
            +
                    #     group 'root'
         | 
| 27 | 
            +
                    #     mode '0755'
         | 
| 28 | 
            +
                    #     notifies :run, 'service[sysctl -p /etc/sysctl.d/ipv4.conf]', :immediately
         | 
| 29 | 
            +
                    #     content '9000 65500'
         | 
| 30 | 
            +
                    #   end
         | 
| 31 | 
            +
                    #
         | 
| 32 | 
            +
                    #   execute 'sysctl -p /etc/sysctl.d/ipv4.conf' do
         | 
| 33 | 
            +
                    #     action :nothing
         | 
| 34 | 
            +
                    #   end
         | 
| 35 | 
            +
                    #
         | 
| 36 | 
            +
                    #   # good
         | 
| 37 | 
            +
                    #   sysctl 'net.ipv4.ip_local_port_range' do
         | 
| 38 | 
            +
                    #     value '9000 65500'
         | 
| 39 | 
            +
                    #   end
         | 
| 40 | 
            +
                    #
         | 
| 41 | 
            +
                    class ExecuteSysctl < Cop
         | 
| 42 | 
            +
                      include RuboCop::Chef::CookbookHelpers
         | 
| 43 | 
            +
                      extend TargetChefVersion
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                      minimum_target_chef_version '14.0'
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                      MSG = 'Chef Infra Client 14.0 and later includes a sysctl resource that should be used to idempotently load sysctl values instead of templating files and using execute to load them.'.freeze
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                      # non block execute resources
         | 
| 50 | 
            +
                      def on_send(node)
         | 
| 51 | 
            +
                        return unless node.method_name == :execute
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                        # use a regex on source instead of .value in case there's string interpolation which adds a complex dstr type
         | 
| 54 | 
            +
                        # with a nested string and a begin. Source allows us to avoid a lot of defensive programming here
         | 
| 55 | 
            +
                        if node&.arguments.first&.source&.match?(/^("|')sysctl -p/)
         | 
| 56 | 
            +
                          add_offense(node, location: :expression, message: MSG, severity: :refactor)
         | 
| 57 | 
            +
                        end
         | 
| 58 | 
            +
                      end
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                      # block execute resources
         | 
| 61 | 
            +
                      def on_block(node)
         | 
| 62 | 
            +
                        match_property_in_resource?(:execute, 'command', node) do |code_property|
         | 
| 63 | 
            +
                          property_data = method_arg_ast_to_string(code_property)
         | 
| 64 | 
            +
                          if property_data && property_data.match?(/^sysctl -p/i)
         | 
| 65 | 
            +
                            add_offense(node, location: :expression, message: MSG, severity: :refactor)
         | 
| 66 | 
            +
                          end
         | 
| 67 | 
            +
                        end
         | 
| 68 | 
            +
                      end
         | 
| 69 | 
            +
                    end
         | 
| 70 | 
            +
                  end
         | 
| 71 | 
            +
                end
         | 
| 72 | 
            +
              end
         | 
| 73 | 
            +
            end
         | 
| @@ -1,5 +1,5 @@ | |
| 1 1 | 
             
            #
         | 
| 2 | 
            -
            # Copyright:: Copyright 2019, Chef Software Inc.
         | 
| 2 | 
            +
            # Copyright:: Copyright 2019-2020, Chef Software Inc.
         | 
| 3 3 | 
             
            # Author:: Tim Smith (<tsmith@chef.io>)
         | 
| 4 4 | 
             
            #
         | 
| 5 5 | 
             
            # Licensed under the Apache License, Version 2.0 (the "License");
         | 
| @@ -61,35 +61,18 @@ module RuboCop | |
| 61 61 | 
             
                    class NamePropertyIsRequired < Cop
         | 
| 62 62 | 
             
                      MSG = 'Resource properties marked as name properties should not also be required properties'.freeze
         | 
| 63 63 |  | 
| 64 | 
            +
                      # match on a property or attribute that has any name and any type and a hash that
         | 
| 65 | 
            +
                      # contains name_property: true and required: true. These are wrapped in <> which means
         | 
| 66 | 
            +
                      # the order doesn't matter in the hash.
         | 
| 67 | 
            +
                      def_node_matcher :name_property_and_required?, <<-PATTERN
         | 
| 68 | 
            +
                        (send nil? {:property :attribute} (sym _) ... (hash <(pair (sym {:name_property :name_attribute}) (true)) $(pair (sym :required) (true) ) ...>))
         | 
| 69 | 
            +
                      PATTERN
         | 
| 70 | 
            +
             | 
| 64 71 | 
             
                      def on_send(node)
         | 
| 65 | 
            -
                         | 
| 72 | 
            +
                        name_property_and_required?(node) do
         | 
| 66 73 | 
             
                          add_offense(node, location: :expression, message: MSG, severity: :refactor)
         | 
| 67 74 | 
             
                        end
         | 
| 68 75 | 
             
                      end
         | 
| 69 | 
            -
             | 
| 70 | 
            -
                      private
         | 
| 71 | 
            -
             | 
| 72 | 
            -
                      def property_is_name_property?(node)
         | 
| 73 | 
            -
                        if %i(property attribute).include?(node.method_name)
         | 
| 74 | 
            -
                          node.arguments.each do |arg|
         | 
| 75 | 
            -
                            if arg.type == :hash
         | 
| 76 | 
            -
                              return true if arg.source.match?(/name_(property|attribute):\s*true/)
         | 
| 77 | 
            -
                            end
         | 
| 78 | 
            -
                          end
         | 
| 79 | 
            -
                          false # no required: true found
         | 
| 80 | 
            -
                        end
         | 
| 81 | 
            -
                      end
         | 
| 82 | 
            -
             | 
| 83 | 
            -
                      def required_property?(node)
         | 
| 84 | 
            -
                        if %i(property attribute).include?(node.method_name)
         | 
| 85 | 
            -
                          node.arguments.each do |arg|
         | 
| 86 | 
            -
                            if arg.type == :hash
         | 
| 87 | 
            -
                              return true if arg.source.match?(/required:\s*true/)
         | 
| 88 | 
            -
                            end
         | 
| 89 | 
            -
                          end
         | 
| 90 | 
            -
                          false # no default: found
         | 
| 91 | 
            -
                        end
         | 
| 92 | 
            -
                      end
         | 
| 93 76 | 
             
                    end
         | 
| 94 77 | 
             
                  end
         | 
| 95 78 | 
             
                end
         | 
| @@ -1,5 +1,5 @@ | |
| 1 1 | 
             
            #
         | 
| 2 | 
            -
            # Copyright:: Copyright 2019, Chef Software Inc.
         | 
| 2 | 
            +
            # Copyright:: Copyright 2019-2020, Chef Software Inc.
         | 
| 3 3 | 
             
            # Author:: Tim Smith (<tsmith@chef.io>)
         | 
| 4 4 | 
             
            #
         | 
| 5 5 | 
             
            # Licensed under the Apache License, Version 2.0 (the "License");
         | 
| @@ -32,35 +32,29 @@ module RuboCop | |
| 32 32 | 
             
                    #   property :bob, String, required: true
         | 
| 33 33 | 
             
                    #
         | 
| 34 34 | 
             
                    class PropertyWithRequiredAndDefault < Cop
         | 
| 35 | 
            -
                       | 
| 35 | 
            +
                      include RangeHelp
         | 
| 36 36 |  | 
| 37 | 
            -
                       | 
| 38 | 
            -
                        if required_property?(node) && property_has_default?(node)
         | 
| 39 | 
            -
                          add_offense(node, location: :expression, message: MSG, severity: :refactor)
         | 
| 40 | 
            -
                        end
         | 
| 41 | 
            -
                      end
         | 
| 37 | 
            +
                      MSG = 'Resource properties should not be both required and have a default value. This will fail on Chef Infra Client 13+'.freeze
         | 
| 42 38 |  | 
| 43 | 
            -
                       | 
| 39 | 
            +
                      # match on a property or attribute that has any name and any type and a hash that
         | 
| 40 | 
            +
                      # contains default: true and required: true. These are wrapped in <> which means
         | 
| 41 | 
            +
                      # the order doesn't matter in the hash.
         | 
| 42 | 
            +
                      def_node_matcher :required_and_default?, <<-PATTERN
         | 
| 43 | 
            +
                        (send nil? {:property :attribute} (sym _) ... (hash <$(pair (sym :default) ...) (pair (sym :required) true) ...>))
         | 
| 44 | 
            +
                      PATTERN
         | 
| 44 45 |  | 
| 45 | 
            -
                      def  | 
| 46 | 
            -
                         | 
| 47 | 
            -
                          node | 
| 48 | 
            -
                            if arg.type == :hash
         | 
| 49 | 
            -
                              return true if arg.source.match?(/required:\s*true/)
         | 
| 50 | 
            -
                            end
         | 
| 51 | 
            -
                          end
         | 
| 52 | 
            -
                          false # no required: true found
         | 
| 46 | 
            +
                      def on_send(node)
         | 
| 47 | 
            +
                        required_and_default?(node) do
         | 
| 48 | 
            +
                          add_offense(node, location: :expression, message: MSG, severity: :refactor)
         | 
| 53 49 | 
             
                        end
         | 
| 54 50 | 
             
                      end
         | 
| 55 51 |  | 
| 56 | 
            -
                      def  | 
| 57 | 
            -
                         | 
| 58 | 
            -
                          node | 
| 59 | 
            -
                             | 
| 60 | 
            -
             | 
| 61 | 
            -
                            end
         | 
| 52 | 
            +
                      def autocorrect(node)
         | 
| 53 | 
            +
                        lambda do |corrector|
         | 
| 54 | 
            +
                          required_and_default?(node) do |default|
         | 
| 55 | 
            +
                            range = range_with_surrounding_comma(range_with_surrounding_space(range: default.loc.expression, side: :left), :left)
         | 
| 56 | 
            +
                            corrector.remove(range)
         | 
| 62 57 | 
             
                          end
         | 
| 63 | 
            -
                          false # no default: found
         | 
| 64 58 | 
             
                        end
         | 
| 65 59 | 
             
                      end
         | 
| 66 60 | 
             
                    end
         | 
| @@ -24,28 +24,39 @@ module RuboCop | |
| 24 24 | 
             
                    #
         | 
| 25 25 | 
             
                    #   # bad
         | 
| 26 26 | 
             
                    #   property :foo, [TrueClass, FalseClass]
         | 
| 27 | 
            +
                    #   attribute :foo, kind_of: [TrueClass, FalseClass]
         | 
| 27 28 | 
             
                    #
         | 
| 28 29 | 
             
                    #   # good
         | 
| 29 30 | 
             
                    #   property :foo, [true, false]
         | 
| 31 | 
            +
                    #   attribute :foo, kind_of: [true, false]
         | 
| 30 32 | 
             
                    #
         | 
| 31 33 | 
             
                    class TrueClassFalseClassResourceProperties < Cop
         | 
| 32 34 | 
             
                      MSG = "When setting the allowed types for a resource to accept either true or false values it's much simpler to use true and false instead of TrueClass and FalseClass.".freeze
         | 
| 33 35 |  | 
| 36 | 
            +
                      def_node_matcher :trueclass_falseclass_array?, <<-PATTERN
         | 
| 37 | 
            +
                         (array (const nil? :TrueClass) (const nil? :FalseClass))
         | 
| 38 | 
            +
                      PATTERN
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                      def_node_matcher :tf_in_kind_of_hash?, <<-PATTERN
         | 
| 41 | 
            +
                        (hash (pair (sym :kind_of) #trueclass_falseclass_array? ))
         | 
| 42 | 
            +
                      PATTERN
         | 
| 43 | 
            +
             | 
| 34 44 | 
             
                      def_node_matcher :trueclass_falseclass_property?, <<-PATTERN
         | 
| 35 | 
            -
                        (send nil? {:property :attribute} (sym _) | 
| 45 | 
            +
                        (send nil? {:property :attribute} (sym _)
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                        ${#tf_in_kind_of_hash? #trueclass_falseclass_array? } ... )
         | 
| 36 48 | 
             
                      PATTERN
         | 
| 37 49 |  | 
| 38 50 | 
             
                      def on_send(node)
         | 
| 39 | 
            -
                        trueclass_falseclass_property?(node) do
         | 
| 40 | 
            -
                          add_offense( | 
| 51 | 
            +
                        trueclass_falseclass_property?(node) do |tf_match|
         | 
| 52 | 
            +
                          add_offense(tf_match, location: :expression, message: MSG, severity: :refactor)
         | 
| 41 53 | 
             
                        end
         | 
| 42 54 | 
             
                      end
         | 
| 43 55 |  | 
| 44 56 | 
             
                      def autocorrect(node)
         | 
| 45 57 | 
             
                        lambda do |corrector|
         | 
| 46 | 
            -
                           | 
| 47 | 
            -
             | 
| 48 | 
            -
                          end
         | 
| 58 | 
            +
                          replacement_text = node.hash_type? ? 'kind_of: [true, false]' : '[true, false]'
         | 
| 59 | 
            +
                          corrector.replace(node.loc.expression, replacement_text)
         | 
| 49 60 | 
             
                        end
         | 
| 50 61 | 
             
                      end
         | 
| 51 62 | 
             
                    end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: cookstyle
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 5. | 
| 4 | 
            +
              version: 5.18.4
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Thom May
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date:  | 
| 12 | 
            +
            date: 2020-01-03 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: rubocop
         | 
| @@ -129,6 +129,7 @@ files: | |
| 129 129 | 
             
            - lib/rubocop/cop/chef/modernize/build_essential.rb
         | 
| 130 130 | 
             
            - lib/rubocop/cop/chef/modernize/chef_14_resources.rb
         | 
| 131 131 | 
             
            - lib/rubocop/cop/chef/modernize/chef_gem_nokogiri.rb
         | 
| 132 | 
            +
            - lib/rubocop/cop/chef/modernize/compile_time_resources.rb
         | 
| 132 133 | 
             
            - lib/rubocop/cop/chef/modernize/cron_manage_resource.rb
         | 
| 133 134 | 
             
            - lib/rubocop/cop/chef/modernize/default_action_initializer.rb
         | 
| 134 135 | 
             
            - lib/rubocop/cop/chef/modernize/defines_chefspec_matchers.rb
         | 
| @@ -139,6 +140,7 @@ files: | |
| 139 140 | 
             
            - lib/rubocop/cop/chef/modernize/execute_apt_update.rb
         | 
| 140 141 | 
             
            - lib/rubocop/cop/chef/modernize/execute_sc_exe.rb
         | 
| 141 142 | 
             
            - lib/rubocop/cop/chef/modernize/execute_sleep.rb
         | 
| 143 | 
            +
            - lib/rubocop/cop/chef/modernize/execute_sysctl.rb
         | 
| 142 144 | 
             
            - lib/rubocop/cop/chef/modernize/execute_tzutil.rb
         | 
| 143 145 | 
             
            - lib/rubocop/cop/chef/modernize/foodcritic_comments.rb
         | 
| 144 146 | 
             
            - lib/rubocop/cop/chef/modernize/if_provides_default_action.rb
         |