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 self.class.const_get("OSDN::CLI::Command::#{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}"
84 rescue OSDNClient::ApiError => e
86 err = JSON.parse(e.response_body)
88 logger.fatal "#{err["status"]}: #{err["message"]}"
89 elsif err["error_description"]
90 logger.fatal err["error_description"]
92 logger.fatal "Command failed by ApiError: #{e.response_body}"
95 logger.fatal "Command failed: #{e.inspect}"
101 command_name = ARGV.shift
103 get_command_class(command_name).new(logger).help
105 puts "#{$0} [global-options] <command> [command-options] [args]"
106 puts "#{$0} help <command>"
107 puts "Global Options:"
108 puts " -h --help Show help message. use 'help <command>' for specific command. "
109 puts " -v --verbose Increase log level (multiple)"
110 puts " -q --quiet Decrease log level (multiple)"
111 puts "Avaiable Commands:"
113 OSDN::CLI::Command.constants.each do |c|
114 c = c.to_s.split(/(?=[A-Z])/).join('_').downcase
116 puts " %-14s %s" % [c, get_command_class(c).description]