chef-attribute-validator 0.2.0 → 0.3.0
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 +8 -8
- data/CHANGES +4 -0
- data/README.md +2 -0
- data/lib/chef-attribute-validator/checks/enum.rb +31 -0
- data/lib/chef-attribute-validator/checks/proc.rb +26 -0
- data/lib/chef-attribute-validator/version.rb +1 -1
- data/lib/chef-attribute-validator/wildcard_expander/brutal_regex.rb +1 -1
- data/test/fixtures/check_enum_array_empty.rb +6 -0
- data/test/fixtures/check_enum_array_mixed.rb +7 -0
- data/test/fixtures/check_enum_array_strings.rb +6 -0
- data/test/fixtures/check_enum_assorted.rb +52 -0
- data/test/fixtures/check_enum_nil.rb +6 -0
- data/test/fixtures/check_enum_string.rb +6 -0
- data/test/fixtures/check_proc_arity0.rb +10 -0
- data/test/fixtures/check_proc_arity1.rb +10 -0
- data/test/fixtures/check_proc_arity2.rb +10 -0
- data/test/fixtures/check_proc_arity3.rb +10 -0
- data/test/fixtures/check_proc_assorted.rb +63 -0
- data/test/fixtures/check_proc_nil.rb +6 -0
- data/test/unit/check_enum_spec.rb +72 -0
- data/test/unit/check_proc_spec.rb +69 -0
- metadata +32 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,15 +1,15 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            !binary "U0hBMQ==":
         | 
| 3 3 | 
             
              metadata.gz: !binary |-
         | 
| 4 | 
            -
                 | 
| 4 | 
            +
                NDNkM2Y5MDMwZTEwNmYwN2Q0ZmQ3NzkzYzQyN2NlNjE2ODYwNTc1Mg==
         | 
| 5 5 | 
             
              data.tar.gz: !binary |-
         | 
| 6 | 
            -
                 | 
| 6 | 
            +
                ZjNiMGQwNDZkM2Y0MmI2OGFjZWM3MTM0MjI2ZDA2OGRhNTFkZWZjNg==
         | 
| 7 7 | 
             
            SHA512:
         | 
| 8 8 | 
             
              metadata.gz: !binary |-
         | 
| 9 | 
            -
                 | 
| 10 | 
            -
                 | 
| 11 | 
            -
                 | 
| 9 | 
            +
                NWY1MTBhNTk3MTU2MTQ4NWFkZDk5MjY5NTdlZTY2ODI1YTQ4ZDcwYzU5MGQx
         | 
| 10 | 
            +
                NGFlMmE1OTZhZjdiZWIwZDNiZGY1YzI0YWY3MjAzYTlhYTI0YjliNmM0NzA3
         | 
| 11 | 
            +
                NzUwNzczMjI1OWVjNzFkNjdiNDYyYzE4NDAxZWUyYWYxNGZkNDA=
         | 
| 12 12 | 
             
              data.tar.gz: !binary |-
         | 
| 13 | 
            -
                 | 
| 14 | 
            -
                 | 
| 15 | 
            -
                 | 
| 13 | 
            +
                ZWM3YzFjMjRhZTY2MjYzNjI3YzhhZmU4ZGY4ZDNhMGExYmY5YzMzZDljYmQw
         | 
| 14 | 
            +
                NWQzNThjN2UwOWI3YjkyNTQ1YTJhOWRhZjFjZTIxZGJiYjJjNjBkMWYzZjdl
         | 
| 15 | 
            +
                ZTliYWRhOGQ5ZDk2ZjExYjZkM2Q0ZTdiMjljMTVhZjJjOTViOTQ=
         | 
    
        data/CHANGES
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -56,6 +56,8 @@ referenced by 'path'.  You may list zero or more. | |
| 56 56 | 
             
                 regex - Regexp.  Applies given regex to the value.  Ignored for Hash and Array.  See looks_like for a selection of canned regexen.
         | 
| 57 57 | 
             
                 required - Boolean.  If true, fails if the path matches zero attributes, or the value is nil, or the value is the empty string, or if the value is an empty array or empty hash.  No-op if false (use present => false to enforce absence).
         | 
| 58 58 | 
             
                 looks_like - String, one of 'url', 'ip'. Applies canned regexes (or more sophisticated matchers).
         | 
| 59 | 
            +
                 enum - Array, a set of possible values.  
         | 
| 60 | 
            +
                 proc - a Proc, which should take two args - a string rule name, and a Chef::Attribute::Validator::AttributeSet.  You can treat the attribute set as a hash - its each() methods will yield path, value pairs.  The proc should return a possibly empty array of Chef::Attribute::Validator::Violations.
         | 
| 59 61 |  | 
| 60 62 | 
             
            ## Referencing Attributes
         | 
| 61 63 |  | 
| @@ -0,0 +1,31 @@ | |
| 1 | 
            +
            class Chef
         | 
| 2 | 
            +
              class Attribute
         | 
| 3 | 
            +
                class Validator
         | 
| 4 | 
            +
                  class Check
         | 
| 5 | 
            +
                    class Enum < Check
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                      register_check('enum', Enum)
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                      def validate_check_arg
         | 
| 10 | 
            +
                        unless check_arg.kind_of?(Array)
         | 
| 11 | 
            +
                          raise "Bad 'enum' check argument '#{check_arg}' for rule '#{rule_name}' - expected an Array"
         | 
| 12 | 
            +
                        end
         | 
| 13 | 
            +
                      end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                      def check(attrset)
         | 
| 16 | 
            +
                        violations = []
         | 
| 17 | 
            +
                        attrset.each do |path, value|
         | 
| 18 | 
            +
                          if val_scalar?(value)
         | 
| 19 | 
            +
                            unless check_arg.include?(value)
         | 
| 20 | 
            +
                              violations.push Chef::Attribute::Validator::Violation.new(rule_name, path, "Attribute's value is '#{value}', which is not one of '#{check_arg.map{ |e| e.to_s }.join(',')} '")
         | 
| 21 | 
            +
                            end
         | 
| 22 | 
            +
                          end
         | 
| 23 | 
            +
                        end
         | 
| 24 | 
            +
                        violations
         | 
| 25 | 
            +
                      end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                    end
         | 
| 28 | 
            +
                  end
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
            end
         | 
| @@ -0,0 +1,26 @@ | |
| 1 | 
            +
            class Chef
         | 
| 2 | 
            +
              class Attribute
         | 
| 3 | 
            +
                class Validator
         | 
| 4 | 
            +
                  class Check
         | 
| 5 | 
            +
                    class Proc < Check
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                      register_check('proc', Proc)
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                      def validate_check_arg
         | 
| 10 | 
            +
                        unless check_arg.kind_of?(::Proc)
         | 
| 11 | 
            +
                          raise "Bad 'proc' check argument '#{check_arg}' for rule '#{rule_name}' - expected a Proc"
         | 
| 12 | 
            +
                        end
         | 
| 13 | 
            +
                        unless check_arg.arity == 2
         | 
| 14 | 
            +
                          raise "Bad 'proc' check argument '#{check_arg}' for rule '#{rule_name}' - Proc must take exactly two arguments, a rule name and an AttributeSet."
         | 
| 15 | 
            +
                        end
         | 
| 16 | 
            +
                      end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                      def check(attrset)
         | 
| 19 | 
            +
                        check_arg.call(rule_name, attrset)
         | 
| 20 | 
            +
                      end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                    end
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
                end
         | 
| 25 | 
            +
              end
         | 
| 26 | 
            +
            end
         | 
| @@ -39,7 +39,7 @@ class Chef | |
| 39 39 | 
             
                          end
         | 
| 40 40 | 
             
                        else
         | 
| 41 41 | 
             
                          node_cursor.keys.each do |key|
         | 
| 42 | 
            -
                            child_paths.push prefix + '/' + key
         | 
| 42 | 
            +
                            child_paths.push prefix + '/' + key.to_s
         | 
| 43 43 | 
             
                            if node_cursor[key].kind_of?(Mash) || node_cursor[key].kind_of?(Array)
         | 
| 44 44 | 
             
                              child_paths += find_all_slashpaths(prefix + '/' + key, node_cursor[key])
         | 
| 45 45 | 
             
                            end
         | 
| @@ -0,0 +1,52 @@ | |
| 1 | 
            +
            default['empty'] = ""
         | 
| 2 | 
            +
            default['nil'] = nil
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            default['not']['a']['scalar']['here'] = {}
         | 
| 5 | 
            +
             | 
| 6 | 
            +
             | 
| 7 | 
            +
            default['fruits']['a'] = 'banana'
         | 
| 8 | 
            +
            default['fruits']['b'] = 'gichee'
         | 
| 9 | 
            +
            default['fruits']['c'] = 'tomato'
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            default['cats'][0] = 'leopard'
         | 
| 12 | 
            +
            default['cats'][1] = 'puma'
         | 
| 13 | 
            +
            default['cats'][2] = 'mountain lion'
         | 
| 14 | 
            +
            default['cats'][3] = 'catamount'
         | 
| 15 | 
            +
             | 
| 16 | 
            +
             | 
| 17 | 
            +
            rules = default['attribute-validator']['rules']
         | 
| 18 | 
            +
            rules['empty-a'] = {
         | 
| 19 | 
            +
              'path' =>  '/empty',
         | 
| 20 | 
            +
              'enum' => ['a'],
         | 
| 21 | 
            +
            }
         | 
| 22 | 
            +
            rules['empty-empty'] = {
         | 
| 23 | 
            +
              'path' =>  '/empty',
         | 
| 24 | 
            +
              'enum' => [],
         | 
| 25 | 
            +
            }
         | 
| 26 | 
            +
            rules['empty-empty-match'] = {
         | 
| 27 | 
            +
              'path' =>  '/empty',
         | 
| 28 | 
            +
              'enum' => [''],
         | 
| 29 | 
            +
            }
         | 
| 30 | 
            +
            rules['hash'] = {
         | 
| 31 | 
            +
              'path' => '/not/a/scalar',
         | 
| 32 | 
            +
              'enum' => [ 'a' ],
         | 
| 33 | 
            +
            }
         | 
| 34 | 
            +
            rules['fruits'] = {
         | 
| 35 | 
            +
              'path' => '/fruits/a',
         | 
| 36 | 
            +
              'enum' => ['banana', 'gichee', 'apple'],
         | 
| 37 | 
            +
            }
         | 
| 38 | 
            +
            rules['mixed-fruits'] = {
         | 
| 39 | 
            +
              'path' => '/fruits/b',
         | 
| 40 | 
            +
              'enum' => [:banana, 'gichee', 23],
         | 
| 41 | 
            +
            }
         | 
| 42 | 
            +
             | 
| 43 | 
            +
            rules['today-its-a-vegetable'] = {
         | 
| 44 | 
            +
              'path' => '/fruits/c',
         | 
| 45 | 
            +
              'enum' => ['banana', 'gichee', 'apple'],
         | 
| 46 | 
            +
            }
         | 
| 47 | 
            +
             | 
| 48 | 
            +
            rules['cougars'] = {
         | 
| 49 | 
            +
              'path' => '/cats/*',
         | 
| 50 | 
            +
              'enum' => ['leopard', 'puma', 'mountain lion', 'catamount'],
         | 
| 51 | 
            +
            }
         | 
| 52 | 
            +
             | 
| @@ -0,0 +1,63 @@ | |
| 1 | 
            +
            default['nil'] = nil
         | 
| 2 | 
            +
            default['bunnies'] = [1, 2, 3, 5, 8]
         | 
| 3 | 
            +
            default['rabbot'] = [1, 2, 3, 5, 8, 0]
         | 
| 4 | 
            +
             | 
| 5 | 
            +
             | 
| 6 | 
            +
            rules = default['attribute-validator']['rules']
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            proc_never_fail = Proc.new do |rule_name, attrset|
         | 
| 9 | 
            +
              # No matter what, return no violations
         | 
| 10 | 
            +
              []
         | 
| 11 | 
            +
            end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            proc_always_fail = Proc.new do |rule_name, attrset|
         | 
| 14 | 
            +
              # No matter what, return a violation
         | 
| 15 | 
            +
              [ Chef::Attribute::Validator::Violation.new(rule_name, '/meh', 'I always fail') ]
         | 
| 16 | 
            +
            end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            proc_array_looks_fibonacci = Proc.new do |rule_name, attrset|
         | 
| 19 | 
            +
              violations = []
         | 
| 20 | 
            +
              prev1 = 0 
         | 
| 21 | 
            +
              prev2 = 1
         | 
| 22 | 
            +
              attrset.each do |path, value|
         | 
| 23 | 
            +
                # binding.pry
         | 
| 24 | 
            +
                unless value == prev1 + prev2
         | 
| 25 | 
            +
                  violations.push Chef::Attribute::Validator::Violation.new(rule_name, path, 'Stopped looking like a fibonacci sequence')
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
                prev1 = prev2
         | 
| 28 | 
            +
                prev2 = value
         | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
              violations
         | 
| 31 | 
            +
            end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
             | 
| 34 | 
            +
            rules['missing-never-fail'] = {
         | 
| 35 | 
            +
              'path' =>  '/nope',
         | 
| 36 | 
            +
              'proc' => proc_never_fail
         | 
| 37 | 
            +
            }
         | 
| 38 | 
            +
             | 
| 39 | 
            +
            rules['nil-never-fail'] = {
         | 
| 40 | 
            +
              'path' =>  '/nil',
         | 
| 41 | 
            +
              'proc' => proc_never_fail
         | 
| 42 | 
            +
            }
         | 
| 43 | 
            +
             | 
| 44 | 
            +
            rules['nil-always-fail'] = {
         | 
| 45 | 
            +
              'path' =>  '/nil',
         | 
| 46 | 
            +
              'proc' => proc_always_fail
         | 
| 47 | 
            +
            }
         | 
| 48 | 
            +
             | 
| 49 | 
            +
            rules['missing-always-fail'] = {
         | 
| 50 | 
            +
              'path' =>  '/nope',
         | 
| 51 | 
            +
              'proc' => proc_always_fail
         | 
| 52 | 
            +
            }
         | 
| 53 | 
            +
             | 
| 54 | 
            +
            rules['valid-fibo'] = {
         | 
| 55 | 
            +
              'path' =>  '/bunnies/*',
         | 
| 56 | 
            +
              'proc' => proc_array_looks_fibonacci
         | 
| 57 | 
            +
            }
         | 
| 58 | 
            +
            rules['invalid-fibo'] = {
         | 
| 59 | 
            +
              'path' =>  '/rabbot/*',
         | 
| 60 | 
            +
              'proc' => proc_array_looks_fibonacci
         | 
| 61 | 
            +
            }
         | 
| 62 | 
            +
             | 
| 63 | 
            +
             | 
| @@ -0,0 +1,72 @@ | |
| 1 | 
            +
            require_relative './spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe "'enum' check" do
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              describe "check registry" do
         | 
| 6 | 
            +
                it "should be present in the Check registry" do
         | 
| 7 | 
            +
                  expect(Chef::Attribute::Validator::Check.list_check_types).to include('enum')
         | 
| 8 | 
            +
                end
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              describe "check_arg checks" do
         | 
| 12 | 
            +
                it "should accept an empty array" do
         | 
| 13 | 
            +
                  node = CAVHelper.load_fixture_attributes('check_enum_array_empty')
         | 
| 14 | 
            +
                  expect { Chef::Attribute::Validator.new(node) }.not_to raise_error
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
                it "should accept an array of strings" do
         | 
| 17 | 
            +
                  node = CAVHelper.load_fixture_attributes('check_enum_array_strings')
         | 
| 18 | 
            +
                  expect { Chef::Attribute::Validator.new(node) }.not_to raise_error
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
                it "should accept a mixed array" do
         | 
| 21 | 
            +
                  node = CAVHelper.load_fixture_attributes('check_enum_array_mixed')
         | 
| 22 | 
            +
                  expect { Chef::Attribute::Validator.new(node) }.not_to raise_error
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
                it "should reject a string" do
         | 
| 25 | 
            +
                  node = CAVHelper.load_fixture_attributes('check_enum_string')
         | 
| 26 | 
            +
                  expect { Chef::Attribute::Validator.new(node) }.to raise_error
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
                it "should reject a nil" do
         | 
| 29 | 
            +
                  node = CAVHelper.load_fixture_attributes('check_enum_nil')
         | 
| 30 | 
            +
                  expect { Chef::Attribute::Validator.new(node) }.to raise_error
         | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
              end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
              describe "assorted arrays" do
         | 
| 35 | 
            +
                let(:node) { CAVHelper.load_fixture_attributes('check_enum_assorted') }
         | 
| 36 | 
            +
                let(:av) { Chef::Attribute::Validator.new(node) }
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                it "should violate on an empty string with an empty enum list" do
         | 
| 39 | 
            +
                  expect(av.validate_rule('empty-empty')).not_to be_empty
         | 
| 40 | 
            +
                end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                it "should violate on an empty string with a non-empty enum list" do
         | 
| 43 | 
            +
                  expect(av.validate_rule('empty-a')).not_to be_empty
         | 
| 44 | 
            +
                end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                it "should not violate on an empty string with a '' enum list" do
         | 
| 47 | 
            +
                  expect(av.validate_rule('empty-empty-match')).to be_empty
         | 
| 48 | 
            +
                end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                it "should not violate on a hash-valued entry" do
         | 
| 51 | 
            +
                  expect(av.validate_rule('hash')).to be_empty
         | 
| 52 | 
            +
                end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                it "should not violate on a simple entry" do
         | 
| 55 | 
            +
                  expect(av.validate_rule('fruits')).to be_empty
         | 
| 56 | 
            +
                end
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                it "should not violate on a mixed entry" do
         | 
| 59 | 
            +
                  expect(av.validate_rule('mixed-fruits')).to be_empty
         | 
| 60 | 
            +
                end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                it "should not violate when running over an array attribute" do
         | 
| 63 | 
            +
                  expect(av.validate_rule('cougars')).to be_empty
         | 
| 64 | 
            +
                end
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                it "should violate when a tomato is not a fruit" do
         | 
| 67 | 
            +
                  expect(av.validate_rule('today-its-a-vegetable')).not_to be_empty
         | 
| 68 | 
            +
                end
         | 
| 69 | 
            +
             | 
| 70 | 
            +
              end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
            end
         | 
| @@ -0,0 +1,69 @@ | |
| 1 | 
            +
            require_relative './spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe "'proc' check" do
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              describe "check registry" do
         | 
| 6 | 
            +
                it "should be present in the Check registry" do
         | 
| 7 | 
            +
                  expect(Chef::Attribute::Validator::Check.list_check_types).to include('proc')
         | 
| 8 | 
            +
                end
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              describe "check_arg checks" do
         | 
| 12 | 
            +
                it "should reject nil" do
         | 
| 13 | 
            +
                  node = CAVHelper.load_fixture_attributes('check_proc_nil')
         | 
| 14 | 
            +
                  expect { Chef::Attribute::Validator.new(node) }.to raise_error
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
                it "should reject a 0-arg Proc" do
         | 
| 17 | 
            +
                  node = CAVHelper.load_fixture_attributes('check_proc_arity0')
         | 
| 18 | 
            +
                  expect { Chef::Attribute::Validator.new(node) }.to raise_error
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
                it "should reject a 1-arg Proc" do
         | 
| 21 | 
            +
                  node = CAVHelper.load_fixture_attributes('check_proc_arity1')
         | 
| 22 | 
            +
                  expect { Chef::Attribute::Validator.new(node) }.to raise_error
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
                it "should accept a 2-arg Proc" do
         | 
| 25 | 
            +
                  node = CAVHelper.load_fixture_attributes('check_proc_arity2')
         | 
| 26 | 
            +
                  expect { Chef::Attribute::Validator.new(node) }.not_to raise_error
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
                it "should reject a 3-arg Proc" do
         | 
| 29 | 
            +
                  node = CAVHelper.load_fixture_attributes('check_proc_arity3')
         | 
| 30 | 
            +
                  expect { Chef::Attribute::Validator.new(node) }.to raise_error
         | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
              end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
              describe "assorted procs" do
         | 
| 35 | 
            +
                let(:node) { CAVHelper.load_fixture_attributes('check_proc_assorted') }
         | 
| 36 | 
            +
                let(:av) { Chef::Attribute::Validator.new(node) }
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                it "should not violate on a missing attribute with a never-fail proc" do
         | 
| 39 | 
            +
                  expect(av.validate_rule('missing-never-fail')).to be_empty
         | 
| 40 | 
            +
                end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                it "should not violate on a nil attribute with a never-fail proc" do
         | 
| 43 | 
            +
                  expect(av.validate_rule('nil-never-fail')).to be_empty
         | 
| 44 | 
            +
                end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                it "should violate on a missing attribute with an always-fail proc" do
         | 
| 47 | 
            +
                  expect(av.validate_rule('missing-always-fail')).not_to be_empty
         | 
| 48 | 
            +
                end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                it "should violate on a nil attribute with an always-fail proc" do
         | 
| 51 | 
            +
                  expect(av.validate_rule('nil-always-fail')).not_to be_empty
         | 
| 52 | 
            +
                end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                it "a violation should include the correct rule name" do
         | 
| 55 | 
            +
                  expect(av.validate_rule('nil-always-fail')[0].rule_name).to eql 'nil-always-fail'
         | 
| 56 | 
            +
                end
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                it "fibonacci scanner should not violate on a correct fib sequence" do
         | 
| 59 | 
            +
                  expect(av.validate_rule('valid-fibo')).to be_empty
         | 
| 60 | 
            +
                end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                it "fibonacci scanner should violate on a incorrect fib sequence" do
         | 
| 63 | 
            +
                  expect(av.validate_rule('invalid-fibo')).not_to be_empty
         | 
| 64 | 
            +
                end
         | 
| 65 | 
            +
             | 
| 66 | 
            +
             | 
| 67 | 
            +
              end
         | 
| 68 | 
            +
             | 
| 69 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: chef-attribute-validator
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.3.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Clinton Wolfe
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2013-11- | 
| 11 | 
            +
            date: 2013-11-13 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bundler
         | 
| @@ -74,9 +74,11 @@ files: | |
| 74 74 | 
             
            - lib/chef-attribute-validator.rb
         | 
| 75 75 | 
             
            - lib/chef-attribute-validator/attribute_set.rb
         | 
| 76 76 | 
             
            - lib/chef-attribute-validator/check.rb
         | 
| 77 | 
            +
            - lib/chef-attribute-validator/checks/enum.rb
         | 
| 77 78 | 
             
            - lib/chef-attribute-validator/checks/looks_like.rb
         | 
| 78 79 | 
             
            - lib/chef-attribute-validator/checks/max_children.rb
         | 
| 79 80 | 
             
            - lib/chef-attribute-validator/checks/min_children.rb
         | 
| 81 | 
            +
            - lib/chef-attribute-validator/checks/proc.rb
         | 
| 80 82 | 
             
            - lib/chef-attribute-validator/checks/regex.rb
         | 
| 81 83 | 
             
            - lib/chef-attribute-validator/checks/required.rb
         | 
| 82 84 | 
             
            - lib/chef-attribute-validator/checks/type.rb
         | 
| @@ -88,12 +90,24 @@ files: | |
| 88 90 | 
             
            - lib/chef-attribute-validator/wildcard_expander/no_wildcards.rb
         | 
| 89 91 | 
             
            - test/fixtures/attr_set.rb
         | 
| 90 92 | 
             
            - test/fixtures/check_child_count.rb
         | 
| 93 | 
            +
            - test/fixtures/check_enum_array_empty.rb
         | 
| 94 | 
            +
            - test/fixtures/check_enum_array_mixed.rb
         | 
| 95 | 
            +
            - test/fixtures/check_enum_array_strings.rb
         | 
| 96 | 
            +
            - test/fixtures/check_enum_assorted.rb
         | 
| 97 | 
            +
            - test/fixtures/check_enum_nil.rb
         | 
| 98 | 
            +
            - test/fixtures/check_enum_string.rb
         | 
| 91 99 | 
             
            - test/fixtures/check_looks_like_arg_ip.rb
         | 
| 92 100 | 
             
            - test/fixtures/check_looks_like_arg_regex.rb
         | 
| 93 101 | 
             
            - test/fixtures/check_looks_like_arg_url.rb
         | 
| 94 102 | 
             
            - test/fixtures/check_looks_like_arg_your_mom.rb
         | 
| 95 103 | 
             
            - test/fixtures/check_looks_like_ip.rb
         | 
| 96 104 | 
             
            - test/fixtures/check_looks_like_url.rb
         | 
| 105 | 
            +
            - test/fixtures/check_proc_arity0.rb
         | 
| 106 | 
            +
            - test/fixtures/check_proc_arity1.rb
         | 
| 107 | 
            +
            - test/fixtures/check_proc_arity2.rb
         | 
| 108 | 
            +
            - test/fixtures/check_proc_arity3.rb
         | 
| 109 | 
            +
            - test/fixtures/check_proc_assorted.rb
         | 
| 110 | 
            +
            - test/fixtures/check_proc_nil.rb
         | 
| 97 111 | 
             
            - test/fixtures/check_regex_assorted.rb
         | 
| 98 112 | 
             
            - test/fixtures/check_regex_literal.rb
         | 
| 99 113 | 
             
            - test/fixtures/check_regex_nil.rb
         | 
| @@ -115,7 +129,9 @@ files: | |
| 115 129 | 
             
            - test/unit/attr_set_spec.rb
         | 
| 116 130 | 
             
            - test/unit/attr_set_spec_wildcard.rb
         | 
| 117 131 | 
             
            - test/unit/check_child_count_spec.rb
         | 
| 132 | 
            +
            - test/unit/check_enum_spec.rb
         | 
| 118 133 | 
             
            - test/unit/check_looks_like_spec.rb
         | 
| 134 | 
            +
            - test/unit/check_proc_spec.rb
         | 
| 119 135 | 
             
            - test/unit/check_regex_spec.rb
         | 
| 120 136 | 
             
            - test/unit/check_required_spec.rb
         | 
| 121 137 | 
             
            - test/unit/check_type_spec.rb
         | 
| @@ -149,12 +165,24 @@ summary: A Rubygem implementing a rule engine for validating Chef node attribute | |
| 149 165 | 
             
            test_files:
         | 
| 150 166 | 
             
            - test/fixtures/attr_set.rb
         | 
| 151 167 | 
             
            - test/fixtures/check_child_count.rb
         | 
| 168 | 
            +
            - test/fixtures/check_enum_array_empty.rb
         | 
| 169 | 
            +
            - test/fixtures/check_enum_array_mixed.rb
         | 
| 170 | 
            +
            - test/fixtures/check_enum_array_strings.rb
         | 
| 171 | 
            +
            - test/fixtures/check_enum_assorted.rb
         | 
| 172 | 
            +
            - test/fixtures/check_enum_nil.rb
         | 
| 173 | 
            +
            - test/fixtures/check_enum_string.rb
         | 
| 152 174 | 
             
            - test/fixtures/check_looks_like_arg_ip.rb
         | 
| 153 175 | 
             
            - test/fixtures/check_looks_like_arg_regex.rb
         | 
| 154 176 | 
             
            - test/fixtures/check_looks_like_arg_url.rb
         | 
| 155 177 | 
             
            - test/fixtures/check_looks_like_arg_your_mom.rb
         | 
| 156 178 | 
             
            - test/fixtures/check_looks_like_ip.rb
         | 
| 157 179 | 
             
            - test/fixtures/check_looks_like_url.rb
         | 
| 180 | 
            +
            - test/fixtures/check_proc_arity0.rb
         | 
| 181 | 
            +
            - test/fixtures/check_proc_arity1.rb
         | 
| 182 | 
            +
            - test/fixtures/check_proc_arity2.rb
         | 
| 183 | 
            +
            - test/fixtures/check_proc_arity3.rb
         | 
| 184 | 
            +
            - test/fixtures/check_proc_assorted.rb
         | 
| 185 | 
            +
            - test/fixtures/check_proc_nil.rb
         | 
| 158 186 | 
             
            - test/fixtures/check_regex_assorted.rb
         | 
| 159 187 | 
             
            - test/fixtures/check_regex_literal.rb
         | 
| 160 188 | 
             
            - test/fixtures/check_regex_nil.rb
         | 
| @@ -176,7 +204,9 @@ test_files: | |
| 176 204 | 
             
            - test/unit/attr_set_spec.rb
         | 
| 177 205 | 
             
            - test/unit/attr_set_spec_wildcard.rb
         | 
| 178 206 | 
             
            - test/unit/check_child_count_spec.rb
         | 
| 207 | 
            +
            - test/unit/check_enum_spec.rb
         | 
| 179 208 | 
             
            - test/unit/check_looks_like_spec.rb
         | 
| 209 | 
            +
            - test/unit/check_proc_spec.rb
         | 
| 180 210 | 
             
            - test/unit/check_regex_spec.rb
         | 
| 181 211 | 
             
            - test/unit/check_required_spec.rb
         | 
| 182 212 | 
             
            - test/unit/check_type_spec.rb
         |