OSDN Git Service

Package and release command gets target from vars file.
[osdn-codes/osdn-cli.git] / lib / osdn / cli / command / frs_base.rb
1 module OSDN; module CLI; module Command
2   class FrsBase < Base
3     def run
4       update_token
5       process_options
6       command = ARGV.shift || 'list'
7       if !command || command.empty?
8         logger.fatal "subcommand is missing."
9         help
10         return
11       end
12       if self.respond_to? command
13         self.send command
14       else
15         logger.fatal "Invalid subcommand: #{command}"
16         help
17         return
18       end
19     end
20
21     def process_options
22       raise NotImplementedError
23     end
24
25     private
26     def target_proj
27       @target_proj and return @target_proj
28       vars = load_variables
29       vars.project && !vars.project.to_s.empty? and
30         return vars.project
31       logger.fatal "No target project is specified."
32       exit
33     end
34
35     def target_package
36       @target_package and return @target_package
37       vars = load_variables
38       vars.package_id && !vars.package_id.to_s.empty? and
39         return vars.package_id
40       logger.fatal "No target package is specified."
41       exit
42     end
43
44     def target_release
45       @target_release and return @target_release
46       vars = load_variables
47       vars.release_id && !vars.release_id.to_s.empty? and
48         return vars.release_id
49       logger.fatal "No target release is specified."
50       exit
51     end
52
53     def api
54       OSDNClient::ProjectApi.new
55     end
56
57     def format_object(o, children = nil)
58       if format == 'json'
59         o.to_hash.to_json
60       else
61         children_str = ''
62         children and
63           children_str = ", #{[*o.send(children)].count} #{children}"
64         "##{o.id} #{o.name} (#{o.visibility}#{children_str})\n  #{o.url}"
65        end
66     end
67     
68     def format_release(r)
69       format_object(r, :files)
70     end
71
72     def format_package(p)
73       format_object(p, :releases)
74     end
75
76     def format_file(f)
77       format_object(f)
78     end
79   end
80 end; end; end