9 @logger = Logger.new(STDERR)
10 @logger.level = Logger::WARN
11 @logger.formatter = proc { |severity, time, progname, msg|
12 "[%s] %s\n" % [severity, msg]
14 OSDNClient.configure do |config|
15 ENV['OSDN_API_OVERRIDE_HOST'] and
16 config.host = ENV['OSDN_API_OVERRIDE_HOST']
17 ENV['OSDN_API_SKIP_SSL_VERIFY'].to_s =~ /^(1|t(rue)?|y(es)?)$/ and
18 config.verify_ssl = false
24 opts = GetoptLong.new(
25 [ '--help', '-h', GetoptLong::NO_ARGUMENT ],
26 [ '--verbose', '-v', GetoptLong::NO_ARGUMENT ],
27 [ '--quiet', '-q', GetoptLong::NO_ARGUMENT ],
29 opts.ordering = GetoptLong::REQUIRE_ORDER
30 opts.each do |opt, arg|
36 if logger.level == Logger::DEBUG
37 OSDNClient.configure do |config|
38 config.debugging = true
41 logger.level > Logger::DEBUG and
44 logger.level < Logger::UNKNOWN and
51 logger.debug "Loglevel is #{logger.level}"
54 def get_command_class(command_name)
55 class_name = command_name.to_s.split('_').map(&:capitalize).join
57 return self.class.const_get("OSDN::CLI::Command::#{class_name}")
59 logger.fatal "Invalid command name '#{command_name}'. Use 'help' to list commands."
68 command_name = ARGV.shift
74 if command_name == 'help'
79 command = get_command_class(command_name).new(logger)
80 logger.debug "Run command #{command_name}"
83 rescue OSDNClient::ApiError => e
85 err = JSON.parse(e.response_body)
87 logger.fatal "#{err["status"]}: #{err["message"]}"
88 elsif err["error_description"]
89 logger.fatal err["error_description"]
91 logger.fatal "Command failed by ApiError: #{e.response_body}"
94 logger.fatal "Command failed: #{e.inspect}"
100 command_name = ARGV.shift
102 get_command_class(command_name).new(logger).help
104 puts "#{$0} [global-options] <command> [command-options] [args]"
105 puts "#{$0} help <command>"
106 puts "Global Options:"
107 puts " -h --help Show help message. use 'help <command>' for specific command. "
108 puts " -v --verbose Increase log level (multiple)"
109 puts " -q --quiet Decrease log level (multiple)"
110 puts "Avaiable Commands:"
112 OSDN::CLI::Command.constants.each do |c|
113 c = c.to_s.split(/(?=[A-Z])/).join('_').downcase
115 puts " %-14s %s" % [c, get_command_class(c).description]