salt-lint 0.1.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2c6fdd6bc0f61861da08a6749f212f70702f859f
4
+ data.tar.gz: 7cdfc50a058ea2233f81cfb7d08e0de6b19dcf73
5
+ SHA512:
6
+ metadata.gz: 914c047db9b1a65e441f058a96db6f9d65a659c8fc896ec3cc2d7c79b3148724c899d01c77c6caba17f956f1f2275c57b0e5fe56a2ae07e9b8e6ad39ac818ca8
7
+ data.tar.gz: 6629dc6f3f525536de001d603fa708d858ea3c00ec8785e0ae3e313dfa59a1d7b44f4e7d082f215f8ce95d4ce80a7183beaaa67245a380b00cbd21c2a6286fbb
data/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ *.lock
2
+ .DS_Store
3
+ *.gem
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'rspec'
4
+ gem 'colorize'
5
+ gem 'aruba-rspec'
6
+ gem 'fuubar'
7
+ gem 'trollop'
8
+ gem 'awesome_print'
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015 Lukasz Raczylo
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
data/README.md ADDED
@@ -0,0 +1,13 @@
1
+ # salt-lint
2
+
3
+ Linter for Salt configuration management.
4
+
5
+ [![Master: Build Status](https://api.shippable.com/projects/551cfc825ab6cc1352b491b3/badge?branchName=master)](https://app.shippable.com/projects/551cfc825ab6cc1352b491b3/builds/latest)
6
+ [![Development: Build Status](https://api.shippable.com/projects/551cfc825ab6cc1352b491b3/badge?branchName=development)](https://app.shippable.com/projects/551cfc825ab6cc1352b491b3/builds/latest)
7
+
8
+
9
+ [![Gem Version](https://badge.fury.io/rb/salt-lint.svg)](http://badge.fury.io/rb/salt-lint)
10
+ [![Code Climate](https://codeclimate.com/github/lukaszraczylo/salt-lint/badges/gpa.svg)](https://codeclimate.com/github/lukaszraczylo/salt-lint)
11
+ [![Gratipay](https://img.shields.io/gratipay/lukaszraczylo.svg)](https://gratipay.com/lukaszraczylo/)
12
+
13
+ ## Do not use it until version >= 0.5
data/Rakefile ADDED
@@ -0,0 +1,7 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+ task default: :spec
4
+ desc 'Run all salt-lint gem specs'
5
+ task :spec do
6
+ exec 'rspec -c spec'
7
+ end
data/bin/salt-lint ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ require 'pathname'
5
+ bin_file = Pathname.new(__FILE__).realpath
6
+
7
+ $:.unshift File.expand_path("../../lib", bin_file)
8
+
9
+ require 'salt-lint/runner'
10
+ SaltLint::Runner.new(*ARGV)
@@ -0,0 +1,38 @@
1
+ module SaltLint
2
+ # Executing appropriate actions
3
+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4
+ class Actions
5
+ # Check if files comply with linter rules
6
+ def self.check_rules(f)
7
+ $invalid_yaml = Hash.new
8
+ $invalid_newline = Hash.new
9
+
10
+ checks_went_fine = true
11
+ Printer.print('debug', "Checking file: #{f}", 5)
12
+ test_suite_methods = SaltLint::Tests.methods(false).sort
13
+ line_counter = 1
14
+ File.readlines(f).each do |l|
15
+ test_suite_methods.each do |m|
16
+ if ! $invalid_yaml[f]
17
+ checks_went_fine_tmp = SaltLint::Tests.send(m, line_counter, l, f)
18
+ checks_went_fine_tmp == false ? checks_went_fine = false : nil
19
+ end
20
+ end
21
+ line_counter += 1
22
+ end
23
+ checks_went_fine ? Printer.print('success', "File looks fine: #{f}") : Printer.print('error', "Found errors in file: #{f}")
24
+ return checks_went_fine
25
+ end
26
+
27
+ # Scans folder specified as argument --scan for SLS files and returns array
28
+ def self.scan
29
+ files = Dir.glob( $arguments.scan + "**/*.sls")
30
+ if files and files.count > 0
31
+ return files
32
+ else
33
+ Printer.print('error', 'No salt state files found.')
34
+ exit 1
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,40 @@
1
+ require 'trollop'
2
+
3
+ module SaltLint
4
+ # Parsing user arguments / parameters class
5
+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6
+ class Options
7
+ # Actions based on parsed command line arguments
8
+ def self.act
9
+ # Scanning for files in
10
+ if $arguments.scan_given
11
+ list_of_files = SaltLint::Actions.scan
12
+ if list_of_files.count > 0
13
+ SaltLint::Actions.scan.each do |f|
14
+ SaltLint::Actions.check_rules(f)
15
+ end
16
+ end
17
+ end
18
+ end
19
+
20
+
21
+ # Parsing command line arguments
22
+ def self.parse(args)
23
+ opts = Trollop::options do
24
+ version "salt-lint #{SaltLint::VERSION} (c) 2015 Lukasz Raczylo <lukasz@raczylo.com>\nVisit https://github.com/lukaszraczylo/salt-lint for source code"
25
+ banner <<-EOS
26
+ salt-lint is a first linter for Salt state files.
27
+ Usage:
28
+ $ salt-lint [options]
29
+
30
+ where [options] are:
31
+ EOS
32
+ opt :debug, 'Enable debug mode', default: 0
33
+ opt :file, 'File to check against', type: :string
34
+ opt :scan, 'Traversal scan of current directory and sub dirs', type: :string
35
+ end
36
+ $debug = opts.debug.to_i
37
+ return opts
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,49 @@
1
+ # Printer module
2
+ # ~~~~~~~~~~~~~~
3
+ # It's responsible for printing, duh.
4
+
5
+ require 'colorize'
6
+
7
+ module Printer
8
+ def self.print(msg_type = 'info', message = 'no message specified', debug_level = 0)
9
+ prefix = nil
10
+ show = true
11
+ kill = false
12
+ case msg_type
13
+ when 'debug'
14
+ prefix = '[d]'
15
+ color = 'light_black'
16
+ show = false
17
+ when 'warning'
18
+ prefix = '[!]'
19
+ color = 'yellow'
20
+ when 'error'
21
+ prefix = '[!!!]'
22
+ color = 'red'
23
+ kill = true
24
+ when 'question'
25
+ prefix = '[?]'
26
+ color = 'light_blue'
27
+ when 'success'
28
+ prefix = '[:)]'
29
+ color = 'light_green'
30
+ else
31
+ prefix = '[i]'
32
+ color = 'white'
33
+ end
34
+
35
+ # If debug message requested - check if debug flag has been enabled and which
36
+ # level of debug if so. If global debug level is higher or equal to message
37
+ # debug level - print it out.
38
+ if msg_type == 'debug' and $debug != false and debug_level <= $debug
39
+ show = true
40
+ end
41
+
42
+ if show == true
43
+ puts "#{prefix} #{message}".send(color.to_sym)
44
+ end
45
+
46
+ # Kill switch for error messages. Using this one to abort script run as
47
+ # something went really wrong there.
48
+ end
49
+ end
@@ -0,0 +1,20 @@
1
+ require 'salt-lint/version'
2
+ require 'salt-lint/options'
3
+ require 'salt-lint/printer'
4
+ require 'salt-lint/actions'
5
+ require 'salt-lint/tests'
6
+
7
+ require 'awesome_print'
8
+
9
+ module SaltLint
10
+ # Main class executed on every run. Just to spin things up.
11
+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
12
+ class Runner
13
+ def initialize(*args)
14
+ $arguments = SaltLint::Options.parse(args)
15
+ # ap $arguments
16
+ # ap $debug
17
+ SaltLint::Options.act
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,69 @@
1
+ require 'yaml'
2
+
3
+ module SaltLint
4
+ # Main class for all the tests.
5
+ class Tests
6
+
7
+ # Test content: Checking given line for trailing whitespaces.
8
+ def self.check_trailing_whitespace(line_number, line, file)
9
+ is_ok = true
10
+ Printer.print('debug', "Checking for trailing whitespaces: #{line_number}", 5)
11
+ line.match(/[ \t]+$/) ? is_ok = false : nil
12
+ if ! is_ok
13
+ Printer.print('warning', "Trailing whitespace character found: #{file}:#{line_number}")
14
+ end
15
+ return is_ok
16
+ end
17
+
18
+ # Test content: Checking given file for no newline at the end of the file.
19
+ def self.check_for_no_newline(line_number, line, file)
20
+ is_ok = true
21
+ Printer.print('debug', "Checking for no-newline at the end of the file in file #{file}", 5)
22
+ f = File.readlines(file).last
23
+ f.match(/^\n$/) ? is_ok = true : is_ok = false
24
+ if ! $invalid_newline.has_key?(file) && is_ok == false
25
+ Printer.print('warning', "No newline at the end of the file #{file}")
26
+ $invalid_newline[file] = is_ok
27
+ end
28
+ return is_ok
29
+ end
30
+
31
+ # Test content: Checking if given file is a valid YAML file.
32
+ def self.check_if_proper_yaml(line_number, line, file)
33
+ is_ok = true
34
+ begin
35
+ YAML.load_file(file)
36
+ rescue Psych::SyntaxError
37
+ is_ok = false
38
+ if ! $invalid_yaml.has_key?(file)
39
+ Printer.print('warning', "File #{file} is not YAML. Unable to parse.")
40
+ $invalid_yaml[file] = true
41
+ end
42
+ end
43
+ return is_ok
44
+ end
45
+
46
+ # Test content: Checking if given line isn't longer than 80 characters.
47
+ def self.check_line_length(line_number, line, file)
48
+ is_ok = true
49
+ Printer.print('debug', "Checking line length: #{line_number}", 5)
50
+ line.length > 80 ? is_ok = false : nil
51
+ if ! is_ok
52
+ Printer.print('warning', "Line length above 80 characters: #{file}:#{line_number}")
53
+ end
54
+ return is_ok
55
+ end
56
+
57
+ # Test content: Checking if given line contains double quoted content without
58
+ # variable.
59
+ def self.check_double_quotes(line_number, line, file)
60
+ is_ok = true
61
+ Printer.print('debug', "Checking for double quotes: #{line_number}", 5)
62
+ line.match(/\"(?!{+).*(?!}+)\"/) ? is_ok = false : nil
63
+ if ! is_ok
64
+ Printer.print('warning', "Using double quotes with no variables: #{file}:#{line_number}")
65
+ end
66
+ return is_ok
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,3 @@
1
+ module SaltLint
2
+ VERSION = '0.1.1'
3
+ end
data/lib/salt-lint.rb ADDED
@@ -0,0 +1,10 @@
1
+ require 'salt-lint/version'
2
+ require 'salt-lint/runner'
3
+ require 'salt-lint/tests'
4
+
5
+ # Main salt-lint module declaration.
6
+ module SaltLint
7
+ def self.runner
8
+ @runner ||= SaltLint::Runner.new(*ARGV)
9
+ end
10
+ end
data/salt-lint.gemspec ADDED
@@ -0,0 +1,26 @@
1
+ lib = File.expand_path('../lib', __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require 'salt-lint/version'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'salt-lint'
7
+ spec.version = SaltLint::VERSION
8
+ spec.authors = ['Lukasz Raczylo']
9
+ spec.email = ['lukasz@raczylo.com']
10
+ spec.summary = %q{Salt linter written in Ruby}
11
+ spec.description = 'Created as nobody from Salt community created one till today.'
12
+ spec.homepage = 'https://github.com/lukaszraczylo/salt-lint'
13
+ spec.license = 'MIT'
14
+
15
+ spec.files = `git ls-files -z`.split("\x0")
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ['lib']
19
+
20
+ spec.required_ruby_version = '>=1.9.2'
21
+ spec.add_development_dependency 'awesome_print', '~> 1.2.0', '>= 1.2.0'
22
+ spec.add_development_dependency 'trollop','2.1.2', '>= 2.1.2'
23
+ spec.add_development_dependency 'bundler', '~> 1.5'
24
+ spec.add_development_dependency 'rake', '~> 10.0', '>= 10.0.0'
25
+ spec.add_development_dependency 'rspec', '~> 2.6'
26
+ end
data/shippable.yml ADDED
@@ -0,0 +1,10 @@
1
+ language: ruby
2
+ install:
3
+ - bundle install
4
+
5
+ notifications:
6
+ email:
7
+ recipients:
8
+ - shippable@raczylo.com
9
+ on_success: change
10
+ on_failure: always
@@ -0,0 +1,8 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe 'Basic commands' do
4
+ # Running the same with -h argument should display help
5
+ it 'arg -h displays help' do
6
+ expect(`salt-lint -h`).to include 'Usage:'
7
+ end
8
+ end
@@ -0,0 +1,22 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe 'Files operations' do
4
+
5
+ it 'scans all the files within "tests" directory' do
6
+ $arguments = OpenStruct.new({ scan: 'tests', scan_given: true })
7
+ list_of_sls_files = SaltLint::Actions.scan
8
+ expect(list_of_sls_files.grep(/well_formatted_top\.sls/).any?).to eq true
9
+ end
10
+
11
+ it 'checks well formatted file' do
12
+ $arguments = OpenStruct.new({ file: 'tests/well_formatted_top.sls', file_given: true })
13
+ $debug = 0
14
+ expect(SaltLint::Actions.check_rules($arguments.file)).to eq true
15
+ end
16
+
17
+ it 'checks file with multiple errors' do
18
+ $arguments = OpenStruct.new({ file: 'tests/file_with_multiple_errors.sls', file_given: true })
19
+ $debug = 0
20
+ expect(SaltLint::Actions.check_rules($arguments.file)).to eq false
21
+ end
22
+ end
@@ -0,0 +1,50 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+
4
+ require 'salt-lint'
5
+ require 'rspec'
6
+ require 'aruba/rspec'
7
+ require 'pathname'
8
+ require 'ostruct'
9
+
10
+ require 'salt-lint/printer'
11
+ require 'salt-lint/actions'
12
+
13
+ RSpec.configure do |c|
14
+ c.fail_fast = true
15
+ c.include ArubaDoubles
16
+
17
+ c.before :each do
18
+ Aruba::RSpec.setup
19
+ end
20
+
21
+ c.after :each do
22
+ Aruba::RSpec.teardown
23
+ end
24
+
25
+ c.before(:all, &:silence_output)
26
+ c.after(:all, &:enable_output)
27
+ end
28
+
29
+ root_path = Pathname.new(__FILE__).parent.parent
30
+ ENV['PATH'] = "#{root_path.join('bin').to_s}#{File::PATH_SEPARATOR}#{ENV['PATH']}"
31
+
32
+ public
33
+
34
+ def silence_output
35
+ # Store the original stderr and stdout in order to restore them later
36
+ @original_stderr = $stderr
37
+ @original_stdout = $stdout
38
+
39
+ # Redirect stderr and stdout
40
+ $stderr = File.new(File.join('/dev', 'null'), 'w')
41
+ $stdout = File.new(File.join('/dev', 'null'), 'w')
42
+ end
43
+
44
+ # Replace stderr and stdout so anything else is output correctly
45
+ def enable_output
46
+ $stderr = @original_stderr
47
+ $stdout = @original_stdout
48
+ @original_stderr = nil
49
+ @original_stdout = nil
50
+ end
@@ -0,0 +1,32 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ test_file_good = 'tests/well_formatted_top.sls'
4
+ test_file_bad_yaml = 'tests/non_yaml_file.sls'
5
+ test_file_bad = 'tests/file_with_multiple_errors.sls'
6
+
7
+ describe 'Tests suite checks if' do
8
+ it 'file is in YAML format (incorrect)' do
9
+ expect(SaltLint::Tests.check_if_proper_yaml(0, 0, test_file_bad_yaml)).to eq false
10
+ end
11
+
12
+ it 'file is in YAML format (correct)' do
13
+ expect(SaltLint::Tests.check_if_proper_yaml(0, 0, test_file_good)).to eq true
14
+ end
15
+
16
+ it 'won\'t allow lines longer than 80 characters' do
17
+ expect(SaltLint::Tests.check_line_length(0, 'xG9H2z8dOK0n3fTX1g4bWS5a6lRI7t6jCsY58mLJ2pqU9N3k4rBD0woA17iMyP90eEZ2u3cFbQ47uYD5lmM16' , test_file_good)).to eq false
18
+ end
19
+
20
+ it 'won\'t allow double quotes' do
21
+ expect(SaltLint::Tests.check_double_quotes(0, 'There\'s one "potato"', test_file_good)).to eq false
22
+ end
23
+
24
+ it 'won\'t allow trailing whitespace' do
25
+ expect(SaltLint::Tests.check_trailing_whitespace(0, 'This text looks okay ', test_file_good)).to eq false
26
+ expect(SaltLint::Tests.check_trailing_whitespace(0, "This text looks okay\t", test_file_good)).to eq false
27
+ end
28
+
29
+ it 'won\'t allow to forget about newline at the end of the file' do
30
+ expect(SaltLint::Tests.check_for_no_newline(0, 0, test_file_bad)).to eq false
31
+ end
32
+ end
Binary file
@@ -0,0 +1,3 @@
1
+ base:
2
+ "*":
3
+ - this_line_should_throw_an_error_as_it_is_longer_than_80_characters_which_trigger_alert
@@ -0,0 +1,3 @@
1
+ potato:
2
+ banana
3
+ foo: somebody said I should put a colon here: so I did
@@ -0,0 +1,4 @@
1
+ base:
2
+ '*':
3
+ - core
4
+
metadata ADDED
@@ -0,0 +1,161 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: salt-lint
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Lukasz Raczylo
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-04-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: awesome_print
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 1.2.0
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.2.0
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: 1.2.0
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.2.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: trollop
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - '='
38
+ - !ruby/object:Gem::Version
39
+ version: 2.1.2
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 2.1.2
43
+ type: :development
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - '='
48
+ - !ruby/object:Gem::Version
49
+ version: 2.1.2
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 2.1.2
53
+ - !ruby/object:Gem::Dependency
54
+ name: bundler
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '1.5'
60
+ type: :development
61
+ prerelease: false
62
+ version_requirements: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - "~>"
65
+ - !ruby/object:Gem::Version
66
+ version: '1.5'
67
+ - !ruby/object:Gem::Dependency
68
+ name: rake
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - "~>"
72
+ - !ruby/object:Gem::Version
73
+ version: '10.0'
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: 10.0.0
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: '10.0'
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: 10.0.0
87
+ - !ruby/object:Gem::Dependency
88
+ name: rspec
89
+ requirement: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - "~>"
92
+ - !ruby/object:Gem::Version
93
+ version: '2.6'
94
+ type: :development
95
+ prerelease: false
96
+ version_requirements: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - "~>"
99
+ - !ruby/object:Gem::Version
100
+ version: '2.6'
101
+ description: Created as nobody from Salt community created one till today.
102
+ email:
103
+ - lukasz@raczylo.com
104
+ executables:
105
+ - salt-lint
106
+ extensions: []
107
+ extra_rdoc_files: []
108
+ files:
109
+ - ".gitignore"
110
+ - Gemfile
111
+ - LICENSE
112
+ - README.md
113
+ - Rakefile
114
+ - bin/salt-lint
115
+ - lib/salt-lint.rb
116
+ - lib/salt-lint/actions.rb
117
+ - lib/salt-lint/options.rb
118
+ - lib/salt-lint/printer.rb
119
+ - lib/salt-lint/runner.rb
120
+ - lib/salt-lint/tests.rb
121
+ - lib/salt-lint/version.rb
122
+ - salt-lint.gemspec
123
+ - shippable.yml
124
+ - spec/basic_spec.rb
125
+ - spec/files_spec.rb
126
+ - spec/spec_helper.rb
127
+ - spec/tests_spec.rb
128
+ - tests/.well_formatted_top.sls.swp
129
+ - tests/file_with_multiple_errors.sls
130
+ - tests/non_yaml_file.sls
131
+ - tests/well_formatted_top.sls
132
+ homepage: https://github.com/lukaszraczylo/salt-lint
133
+ licenses:
134
+ - MIT
135
+ metadata: {}
136
+ post_install_message:
137
+ rdoc_options: []
138
+ require_paths:
139
+ - lib
140
+ required_ruby_version: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: 1.9.2
145
+ required_rubygems_version: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - ">="
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ requirements: []
151
+ rubyforge_project:
152
+ rubygems_version: 2.4.5
153
+ signing_key:
154
+ specification_version: 4
155
+ summary: Salt linter written in Ruby
156
+ test_files:
157
+ - spec/basic_spec.rb
158
+ - spec/files_spec.rb
159
+ - spec/spec_helper.rb
160
+ - spec/tests_spec.rb
161
+ has_rdoc: