OSDN Git Service

c8865f581413b0f54aaf3734aa16871d885ac3db
[osdn-codes/osdn-cli.git] / lib / osdn / cli / command / package.rb
1 require 'osdn/cli/command/frs_base'
2
3 module OSDN; module CLI; module Command
4   class Package < FrsBase
5     def help
6       puts "#{$0} package [opts] [list]"
7       puts "#{$0} package [opts] create <new-package-name>"
8       puts "#{$0} package [opts] update [numeric-package-id] [name]"
9       puts "#{$0} package [opts] delete [numeric-package-id]"
10       puts "Options:"
11       puts "  -f --format=<pretty|json>  Set output format"
12       puts "  -p --project=<project>     Target project (numeric id or name)"
13       puts "  -v --visibility=<public|private|hidden>"
14     end
15
16     def self.description
17       "Manipulate frs packages of project"
18     end
19
20     def process_options
21       opts = GetoptLong.new(
22         [ '--format', '-f', GetoptLong::REQUIRED_ARGUMENT ],
23         [ '--project', '-p', GetoptLong::REQUIRED_ARGUMENT ],
24         [ '--visibility', '-v', GetoptLong::REQUIRED_ARGUMENT ],
25       )
26       opts.each do |opt, arg|
27         case opt
28         when '--format'
29           arg == 'json' and
30             self.format = arg
31         when '--project'
32           arg.empty? or
33             @target_proj = arg
34         when '--visibility'
35           unless %w(public private hidden).member?(arg)
36             logger.fatal "Invalid visibility status: #{arg}"
37             exit
38           end
39           @visibility = arg
40         end
41       end
42     end
43
44     def list
45       list = api.list_packages target_proj
46       if format == 'json'
47         puts list.map{|i| i.to_hash}.to_json
48       else
49         list.each do |p|
50           puts format_package(p)
51         end
52       end
53     end
54
55     def create
56       name = ARGV.shift
57       if !name
58         logger.fatal "Package name is missing."
59         help
60         return
61       end
62       p = api.create_package target_proj, name, visibility: @visibility
63       logger.info "New package has been created."
64       puts format_package(p)
65     end
66
67     def update
68       _set_package_id
69       args = {}
70       if ARGV[1].to_s != ""
71         args[:name] = ARGV[1]
72       end
73       if @visibility
74         args[:visibility] = @visibility
75       end
76       logger.debug "Updating package #{target_package} as #{args.inspect}"
77       p = api.update_package target_proj, target_package, args
78       logger.info "Package #{target_package} has been updated."
79       puts format_package(p)
80     end
81
82     def delete
83       _set_package_id
84       p = api.delete_package target_proj, target_package
85       logger.info "Package #{target_package} has been deleted."
86     end
87
88     def _set_package_id
89       return if ARGV[0].to_i == 0
90       @target_package = ARGV[0].to_i
91     end
92
93   end
94 end; end; end