Class | MCollective::Application |
In: |
lib/mcollective/application.rb
|
Parent: | Object |
# File lib/mcollective/application.rb, line 16 16: def [](option) 17: intialize_application_options unless @application_options 18: @application_options[option] 19: end
# File lib/mcollective/application.rb, line 11 11: def []=(option, value) 12: intialize_application_options unless @application_options 13: @application_options[option] = value 14: end
# File lib/mcollective/application.rb, line 6 6: def application_options 7: intialize_application_options unless @application_options 8: @application_options 9: end
# File lib/mcollective/application.rb, line 21 21: def description(descr) 22: self[:description] = descr 23: end
# File lib/mcollective/application.rb, line 42 42: def intialize_application_options 43: @application_options = {:description => nil, 44: :usage => [], 45: :cli_arguments => []} 46: end
# File lib/mcollective/application.rb, line 29 29: def option(name, arguments) 30: opt = {:name => name, 31: :description => nil, 32: :arguments => [], 33: :type => String, 34: :required => false, 35: :validate => Proc.new { true }} 36: 37: arguments.each_pair{|k,v| opt[k] = v} 38: 39: self[:cli_arguments] << opt 40: end
# File lib/mcollective/application.rb, line 25 25: def usage(usage) 26: self[:usage] << usage 27: end
# File lib/mcollective/application.rb, line 166 166: def application_cli_arguments 167: self.class.application_options[:cli_arguments] 168: end
# File lib/mcollective/application.rb, line 156 156: def application_description 157: self.class.application_options[:description] 158: end
# File lib/mcollective/application.rb, line 170 170: def application_failure(e) 171: STDERR.puts "#{$0} failed to run: #{e} (#{e.class})" 172: 173: if options 174: e.backtrace.each{|l| STDERR.puts "\tfrom #{l}"} if options[:verbose] 175: else 176: e.backtrace.each{|l| STDERR.puts "\tfrom #{l}"} 177: end 178: 179: exit! 1 180: end
# File lib/mcollective/application.rb, line 67 67: def application_parse_options 68: @options = rpcoptions do |parser, options| 69: parser.define_head application_description if application_description 70: parser.banner = "" 71: 72: if application_usage 73: parser.separator "" 74: 75: application_usage.each do |u| 76: parser.separator "Usage: #{u}" 77: end 78: 79: parser.separator "" 80: end 81: 82: parser.define_tail "" 83: parser.define_tail "The Marionette Collective #{MCollective.version}" 84: 85: 86: application_cli_arguments.each do |carg| 87: opts_array = [] 88: 89: opts_array << :on 90: 91: # if a default is set from the application set it up front 92: if carg.include?(:default) 93: configuration[carg[:name]] = carg[:default] 94: end 95: 96: # :arguments are multiple possible ones 97: if carg[:arguments].is_a?(Array) 98: carg[:arguments].each {|a| opts_array << a} 99: else 100: opts_array << carg[:arguments] 101: end 102: 103: # type was given and its not one of our special types, just pass it onto optparse 104: opts_array << carg[:type] if carg[:type] and ! [:bool, :array].include?(carg[:type]) 105: 106: opts_array << carg[:description] 107: 108: # Handle our special types else just rely on the optparser to handle the types 109: if carg[:type] == :bool 110: parser.send(*opts_array) do |v| 111: validate_option(carg[:validate], carg[:name], v) 112: 113: configuration[carg[:name]] = true 114: end 115: 116: elsif carg[:type] == :array 117: parser.send(*opts_array) do |v| 118: validate_option(carg[:validate], carg[:name], v) 119: 120: configuration[carg[:name]] = [] unless configuration.include?(carg[:name]) 121: configuration[carg[:name]] << v 122: end 123: 124: else 125: parser.send(*opts_array) do |v| 126: validate_option(carg[:validate], carg[:name], v) 127: 128: configuration[carg[:name]] = v 129: end 130: end 131: end 132: end 133: 134: # Check all required parameters were set 135: validation_passed = true 136: application_cli_arguments.each do |carg| 137: # Check for required arguments 138: if carg[:required] 139: unless configuration[ carg[:name] ] 140: validation_passed = false 141: STDERR.puts "The #{carg[:name]} option is mandatory" 142: end 143: end 144: end 145: 146: unless validation_passed 147: STDERR.puts "\nPlease run with --help for detailed help" 148: exit! 1 149: end 150: 151: post_option_parser(configuration) if respond_to?(:post_option_parser) 152: rescue Exception => e 153: application_failure(e) 154: end
# File lib/mcollective/application.rb, line 160 160: def application_usage 161: usage = self.class.application_options[:usage] 162: 163: usage.empty? ? false : usage 164: end
# File lib/mcollective/application.rb, line 49 49: def configuration 50: @application_configuration ||= {} 51: @application_configuration 52: end
abstract
# File lib/mcollective/application.rb, line 193 193: def main 194: STDERR.puts "Applications need to supply a 'main' method" 195: exit 1 196: end
# File lib/mcollective/application.rb, line 182 182: def run 183: application_parse_options 184: 185: validate_configuration(configuration) if respond_to?(:validate_configuration) 186: 187: main 188: rescue Exception => e 189: application_failure(e) 190: end