Class: Confiner::Cli
Instance Attribute Summary collapse
-
#action ⇒ Object
Returns the value of attribute action.
-
#parser ⇒ Object
readonly
Returns the value of attribute parser.
-
#plugin_options ⇒ Object
readonly
Returns the value of attribute plugin_options.
-
#plugins ⇒ Object
Returns the value of attribute plugins.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(*options) ⇒ Cli
constructor
A new instance of Cli.
-
#run ⇒ Object
Run the confiner.
Methods included from Logger
Constructor Details
#initialize(*options) ⇒ Cli
Returns a new instance of Cli.
13 14 15 16 17 18 19 20 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 88 89 |
# File 'lib/confiner/cli.rb', line 13 def initialize(*) @plugins = [] @plugin_options = [] @rules_files = [] @rules = [] # default logging to standard out Logger.log_to = $stdout if .include?('--') @plugin_options = [.index('--')..] = [0...index('--')] end @parser = OptionParser.new do |opts| opts. = <<~USAGE Usage: #{$PROGRAM_NAME} [options] [-- plugin_options] Examples: Run all rules within .confiner directory outputting to a log file: #{$PROGRAM_NAME} -o confiner.log Run a specific rule file overriding specific arguments for plugins: #{$PROGRAM_NAME} -r rules.yml -- --arg1=foo --arg2=bar Run all all_rules within a specific directory: #{$PROGRAM_NAME} -r ./all_rules Options: USAGE opts.on('-h', '--help', 'Show the help') do puts opts exit 0 end opts.on('-r RULES', '--rules RULES', 'Path to rule yaml file or directory of rules') do |rule| rule.strip! # strip any trailing/leading spacess rules = File.(rule) raise "Rule file or directory `#{rules}` does not exist" unless File.exist?(rules) @rules = if File.directory?(rules) Dir[File.join(rules, '**', '*.yml')].each_with_object([]) do |definitions, all_rules| all_rules << load_yaml(definitions) end else [load_yaml(rules)] end end opts.on('-v', '--version', 'Show the version') do $stdout.puts "#{$PROGRAM_NAME} version #{VERSION}" exit(0) end opts.on('-o OUTPUT', '--output-to OUTPUT', 'File to output the log to') do |output_to| Logger.log_to = output_to end end @parser.parse!() log :confiner, 'Program Start' if @rules.empty? # load any and all rules within .confiner raise 'No rules to run. Are you missing a .confiner directory or -r argument?' unless Dir.exist?('.confiner') @rules = Dir[File.join('.confiner', '**', '*.yml')].each_with_object([]) do |definitions, rules| rules << load_yaml(definitions) end end log :rules, 'Using rule files:' @rules_files.each do |file| log :loaded, file, 2 end end |
Instance Attribute Details
#action ⇒ Object
Returns the value of attribute action.
10 11 12 |
# File 'lib/confiner/cli.rb', line 10 def action @action end |
#parser ⇒ Object (readonly)
Returns the value of attribute parser.
11 12 13 |
# File 'lib/confiner/cli.rb', line 11 def parser @parser end |
#plugin_options ⇒ Object (readonly)
Returns the value of attribute plugin_options.
11 12 13 |
# File 'lib/confiner/cli.rb', line 11 def @plugin_options end |
#plugins ⇒ Object
Returns the value of attribute plugins.
10 11 12 |
# File 'lib/confiner/cli.rb', line 10 def plugins @plugins end |
Class Method Details
.run(*argv) ⇒ Object
102 103 104 |
# File 'lib/confiner/cli.rb', line 102 def self.run(*argv) new(*argv).run end |
Instance Method Details
#run ⇒ Object
Run the confiner
92 93 94 95 96 97 98 99 100 |
# File 'lib/confiner/cli.rb', line 92 def run @rules.each do |rules| rules.each do |rule| process_rule(rule) end end log :confiner, 'Done' end |