Class: PuppetLint::Bin

Inherits:
Object
  • Object
show all
Defined in:
lib/puppet-lint/bin.rb

Overview

Internal: The logic of the puppet-lint bin script, contained in a class for ease of testing.

Instance Method Summary collapse

Constructor Details

#initialize(args) ⇒ Bin

Public: Initialise a new PuppetLint::Bin.

args - An Array of command line argument Strings to be passed to the option

parser.

Examples

PuppetLint::Bin.new(ARGV).run


14
15
16
# File 'lib/puppet-lint/bin.rb', line 14

def initialize(args)
  @args = args
end

Instance Method Details

#runObject

Public: Run puppet-lint as a command line tool.

Returns an Integer exit code to be passed back to the shell.



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/puppet-lint/bin.rb', line 21

def run
  begin
    opts = PuppetLint::OptParser.build(@args)
    opts.parse!(@args)
  rescue OptionParser::InvalidOption => e
    puts "puppet-lint: #{e.message}"
    puts "puppet-lint: try 'puppet-lint --help' for more information"
    return 1
  end

  if PuppetLint.configuration.display_version
    puts "puppet-lint #{PuppetLint::VERSION}"
    return 0
  end

  if PuppetLint.configuration.list_checks
    puts PuppetLint.configuration.checks
    return 0
  end

  if @args[0].nil?
    puts 'puppet-lint: no file specified'
    puts "puppet-lint: try 'puppet-lint --help' for more information"
    return 1
  end

  begin
    path = @args[0]
    path = path.gsub(File::ALT_SEPARATOR, File::SEPARATOR) if File::ALT_SEPARATOR
    path = if File.directory?(path)
             Dir.glob("#{path}/**/*.pp")
           else
             @args
           end

    PuppetLint.configuration.with_filename = true if path.length > 1

    return_val = 0
    ignore_paths = PuppetLint.configuration.ignore_paths

    puts '[' if PuppetLint.configuration.json
    path.each do |f|
      next if ignore_paths.any? { |p| File.fnmatch(p, f) }
      l = PuppetLint.new
      l.file = f
      l.run
      l.print_problems
      puts ',' if f != path.last && PuppetLint.configuration.json

      if l.errors? || (l.warnings? && PuppetLint.configuration.fail_on_warnings)
        return_val = 1
      end

      next unless PuppetLint.configuration.fix && l.problems.none? { |r| r[:check] == :syntax }
      File.open(f, 'wb') do |fd|
        fd.write(l.manifest)
      end
    end
    puts ']' if PuppetLint.configuration.json

    return return_val
  rescue PuppetLint::NoCodeError
    puts 'puppet-lint: no file specified or specified file does not exist'
    puts "puppet-lint: try 'puppet-lint --help' for more information"
    return 1
  end
end