OSDN Git Service

Package and release command gets target from vars file.
[osdn-codes/osdn-cli.git] / lib / osdn / cli / command / package.rb
index 0d37831..c8865f5 100644 (file)
@@ -1,10 +1,12 @@
+require 'osdn/cli/command/frs_base'
+
 module OSDN; module CLI; module Command
-  class Package < Base
+  class Package < FrsBase
     def help
       puts "#{$0} package [opts] [list]"
       puts "#{$0} package [opts] create <new-package-name>"
-      puts "#{$0} package [opts] update <numeric-package-id> [name]"
-      puts "#{$0} package [opts] delete <numeric-package-id>"
+      puts "#{$0} package [opts] update [numeric-package-id] [name]"
+      puts "#{$0} package [opts] delete [numeric-package-id]"
       puts "Options:"
       puts "  -f --format=<pretty|json>  Set output format"
       puts "  -p --project=<project>     Target project (numeric id or name)"
@@ -12,11 +14,10 @@ module OSDN; module CLI; module Command
     end
 
     def self.description
-      "Manipulate release package of project"
+      "Manipulate frs packages of project"
     end
 
-    def run
-      update_token
+    def process_options
       opts = GetoptLong.new(
         [ '--format', '-f', GetoptLong::REQUIRED_ARGUMENT ],
         [ '--project', '-p', GetoptLong::REQUIRED_ARGUMENT ],
@@ -38,25 +39,12 @@ module OSDN; module CLI; module Command
           @visibility = arg
         end
       end
-      command = ARGV.shift || 'list'
-      if !command || command.empty?
-        logger.fatal "subcommand is missing."
-        help
-        return
-      end
-      if self.respond_to? command
-        self.send command
-      else
-        logger.fatal "Invalid subcommand: #{command}"
-        help
-        return
-      end
     end
 
     def list
       list = api.list_packages target_proj
       if format == 'json'
-        puts list.to_json
+        puts list.map{|i| i.to_hash}.to_json
       else
         list.each do |p|
           puts format_package(p)
@@ -77,42 +65,30 @@ module OSDN; module CLI; module Command
     end
 
     def update
-      target_id = ARGV.shift
-      args = {name: ARGV.shift}
+      _set_package_id
+      args = {}
+      if ARGV[1].to_s != ""
+        args[:name] = ARGV[1]
+      end
       if @visibility
         args[:visibility] = @visibility
       end
-      p = api.update_package target_proj, target_id, args
-      logger.info "Package #{target_id} has been updated."
+      logger.debug "Updating package #{target_package} as #{args.inspect}"
+      p = api.update_package target_proj, target_package, args
+      logger.info "Package #{target_package} has been updated."
       puts format_package(p)
     end
 
     def delete
-      target_id = ARGV.shift
-      p = api.delete_package target_proj, target_id
-      logger.info "Package #{target_id} has been deleted."
-    end
-
-    private
-    def target_proj
-      @target_proj and return @target_proj
-      vars = load_variables
-      vars.project && !vars.project.empty? and
-        return vars.project
-      logger.fatal "No target project is specified."
-      exit
+      _set_package_id
+      p = api.delete_package target_proj, target_package
+      logger.info "Package #{target_package} has been deleted."
     end
 
-    def api
-      OSDNClient::ProjectApi.new
+    def _set_package_id
+      return if ARGV[0].to_i == 0
+      @target_package = ARGV[0].to_i
     end
 
-    def format_package(p)
-      if format == 'json'
-        p.to_json
-      else
-        "##{p.id} #{p.name} (#{p.visibility}, #{[*p.releases].count} releases)\n  #{p.url}"
-      end
-    end
   end
 end; end; end