OSDN Git Service

Fix description message.
[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       target_id = ARGV.shift
69       args = {name: ARGV.shift}
70       if @visibility
71         args[:visibility] = @visibility
72       end
73       p = api.update_package target_proj, target_id, args
74       logger.info "Package #{target_id} has been updated."
75       puts format_package(p)
76     end
77
78     def delete
79       target_id = ARGV.shift
80       p = api.delete_package target_proj, target_id
81       logger.info "Package #{target_id} has been deleted."
82     end
83
84   end
85 end; end; end