9 @logger = Logger.new(STDERR)
10 @logger.level = Logger::INFO
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)?)$/i and
18 config.verify_ssl = false
19 config.verify_ssl_host = false
25 opts = GetoptLong.new(
26 [ '--help', '-h', GetoptLong::NO_ARGUMENT ],
27 [ '--verbose', '-v', GetoptLong::NO_ARGUMENT ],
28 [ '--quiet', '-q', GetoptLong::NO_ARGUMENT ],
30 opts.ordering = GetoptLong::REQUIRE_ORDER
31 opts.each do |opt, arg|
37 if logger.level == Logger::DEBUG
38 OSDNClient.configure do |config|
39 config.debugging = true
42 logger.level > Logger::DEBUG and
45 logger.level < Logger::UNKNOWN and
52 logger.debug "Loglevel is #{logger.level}"
55 def get_command_class(command_name)
56 class_name = command_name.to_s.split('_').map(&:capitalize).join
58 return OSDN::CLI::Command.const_get(class_name)
60 logger.fatal "Invalid command name '#{command_name}'. Use 'help' to list commands."
69 command_name = ARGV.shift
75 if command_name == 'help'
80 command = get_command_class(command_name).new(logger)
81 logger.debug "Run command #{command_name}"
88 rescue OSDNClient::ApiError => e
90 err = JSON.parse(e.response_body)
92 logger.fatal "#{err["status"]}: #{err["message"]}"
93 elsif err["error_description"]
94 logger.fatal err["error_description"]
96 logger.fatal "Command failed by ApiError: #{e.response_body}"
99 logger.fatal "Command failed: #{e.inspect} #{e.message} (#{e.code}): #{e.response_body} #{e.response_headers}"
105 command_name = ARGV.shift
107 get_command_class(command_name).new(logger).help
109 puts "#{$0} [global-options] <command> [command-options] [args]"
110 puts "#{$0} help <command>"
111 puts "Global Options:"
112 puts " -h --help Show help message. use 'help <command>' for specific command. "
113 puts " -v --verbose Increase log level (multiple)"
114 puts " -q --quiet Decrease log level (multiple)"
115 puts "Avaiable Commands:"
117 OSDN::CLI::Command.constants.each do |c|
118 c = c.to_s.split(/(?=[A-Z])/).join('_').downcase
120 puts " %-14s %s" % [c, get_command_class(c).description]