visionmedia-commander 1.2.2 → 2.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,126 +0,0 @@
1
-
2
- module Commander
3
- module HelpGenerators
4
-
5
- # Default help generator.
6
- #
7
- # Example formatting:
8
- #
9
- # NAME:
10
- #
11
- # Commander-init
12
- #
13
- # DESCRIPTION:
14
- #
15
- # Initialize an empty file with a commander skeleton.
16
- #
17
- # EXAMPLES:
18
- #
19
- # # Apply commander to a blank file.
20
- # commander init ./bin/my_executable
21
- #
22
- # OPTIONS:
23
- #
24
- # -r, --recursive, Do something recursively
25
- # -v, --verbose, Do something verbosely
26
- #
27
- class Default
28
-
29
- attr_reader :manager
30
-
31
- def initialize(manager)
32
- $terminal.page_at = 22
33
- @manager = manager
34
- @command = @manager.user_command
35
- render
36
- end
37
-
38
- # -----------------------------------------------------------
39
-
40
- protected
41
-
42
- # -----------------------------------------------------------
43
-
44
- def render
45
- say(render_command(@command)) if @command
46
- say(render_global) unless @command
47
- end
48
-
49
- def render_global
50
- %w[ name description command_list copyright ].collect { |v| send("render_#{v}") }.join
51
- end
52
-
53
- def render_name
54
- o = head 'name'
55
- o += row 6, @manager.info[:name]
56
- o += "\n"
57
- o
58
- end
59
-
60
- def render_description
61
- o = head 'description'
62
- o += row 6, @manager.info[:description] unless @manager.info[:description].nil?
63
- o += "\n"
64
- o
65
- end
66
-
67
- def render_command_list
68
- o = head 'sub-commands'
69
- o += @manager.commands.collect { |c, command| row(6, c.to_s, command.description) }.join
70
- o += row 6, "help", "Display this help information, or help for the trailing sub-command."
71
- o += "\n"
72
- o
73
- end
74
-
75
- def render_command(command)
76
- o = head 'name'
77
- o += row 6, "#{@manager.info[:name]}-#{command.command}"
78
- o += "\n"
79
-
80
- o += head 'description'
81
- o += row 6, command.description
82
- o += "\n"
83
-
84
- o += head('examples') unless command.examples.empty?
85
- o += render_command_examples command
86
- o += "\n"
87
-
88
- o += head('options') unless command.options.empty?
89
- o += render_command_options command
90
- o += "\n\n"
91
- o
92
- end
93
-
94
- def render_command_options(command)
95
- command.options.collect { |option| row(6, option[:args].join(', ')) }.join
96
- end
97
-
98
- def render_command_examples(command)
99
- command.examples.collect do |example|
100
- o = row 6, "# #{example[:description]}"
101
- o += row 6, "#{example[:code]}"
102
- end.join "\n"
103
- end
104
-
105
- def render_copyright
106
- @manager.info[:copyright].nil? ? "\n" : head('copyright') + row(6, @manager.info[:copyright]) + "\n\n";
107
- end
108
-
109
- def head(text)
110
- "\n <%= color('#{text.upcase}', BOLD) %>:\n"
111
- end
112
-
113
- def row(lpad, *args)
114
- "\n" + (' ' * lpad) + args.collect { |a| a.to_s.ljust(15, ' ') }.join
115
- end
116
- end
117
- end
118
- end
119
-
120
- class Hash
121
- def collect(&block)
122
- o = []
123
- self.each_pair { |k, v| o << block.call(k, v)}
124
- o
125
- end
126
- end
@@ -1,2 +0,0 @@
1
-
2
- require 'commander/help_generators/default'
@@ -1,129 +0,0 @@
1
-
2
- module Commander
3
-
4
- # = Manager
5
- #
6
- # Controls management and invocation of sub-commands.
7
- class Manager
8
-
9
- attr_reader :command_options, :commands, :info
10
- attr_reader :user_command, :user_args
11
-
12
- # Initialize commander singleton.
13
- #
14
- # == Keys:
15
- #
16
- # * name (required)
17
- # * version (required)
18
- # * description
19
- # * copyright
20
- #
21
- # == Examples:
22
- #
23
- # init_commander(
24
- # :name => 'Commander',
25
- # :version => Commander::VERSION,
26
- # :description => 'Commander utility program.'
27
- # )
28
- #
29
- def self.instance(options = {})
30
- @@instance ||= Commander::Manager.new options
31
- end
32
-
33
- def self.kill_instance!
34
- @@instance = nil
35
- end
36
-
37
- def initialize(options)
38
- @info, @command_options = options, {}
39
- @user_args = ARGV.dup
40
- @info[:help_generator] ||= Commander::HelpGenerators::Default
41
- init_version
42
- at_exit { run }
43
- end
44
-
45
- def add_command(command)
46
- @commands ||= {} and @commands[command.command] = command
47
- end
48
-
49
- def get_command(command)
50
- @commands[command.to_sym]
51
- end
52
-
53
- def execute_command
54
- abort "Invalid command." if not @user_command
55
- unless @user_command.options.empty?
56
- opts = OptionParser.new
57
- @user_command.options.each { |option| opts.on(*option[:args], &option[:proc]) }
58
- opts.parse! @user_args
59
- end
60
- rescue OptionParser::MissingArgument => e
61
- debug_abort e
62
- else
63
- @user_command.invoke(:when_called_proc, @user_args)
64
- end
65
-
66
- def valid_command?(command)
67
- !@commands[command.to_sym].nil? unless command.nil?
68
- end
69
- alias :include? :valid_command?
70
-
71
- def empty?
72
- @commands.empty?
73
- end
74
-
75
- def length
76
- @commands.length
77
- end
78
- alias :size :length
79
-
80
- def valid_version?(version)
81
- version.split('.').length == 3 if version.is_a? String
82
- end
83
-
84
- def parse_version(version)
85
- version.split('.').collect { |v| v.to_i } if version.is_a? String
86
- end
87
-
88
- def debug_abort(msg, exception = nil)
89
- abort msg
90
- end
91
-
92
- def init_version
93
- raise "Your program must have a version tuple ('x.x.x')." unless valid_version?(@info[:version])
94
- @info[:major], @info[:minor], @info[:tiny] = parse_version(@info[:version])
95
- end
96
-
97
- def run
98
- parse_options!
99
- abort "Invalid arguments." if @user_args.empty?
100
- @command_options[:help] = true and @user_args.shift if @user_args[0] == 'help'
101
- set_user_command
102
- case
103
- when (@command_options[:help] and @user_args.empty?) then output_help
104
- when @command_options[:help] then output_help
105
- else execute_command
106
- end
107
- end
108
-
109
- def parse_options!
110
- opts = OptionParser.new
111
- opts.on('--help') { output_help; exit }
112
- opts.on('--version') { output_version; exit }
113
- opts.parse! @user_args rescue nil
114
- end
115
-
116
- def set_user_command
117
- @user_command = get_command(@user_args[0]) unless @user_args.empty?
118
- @user_args.shift
119
- end
120
-
121
- def output_help
122
- @info[:help_generator].new self
123
- end
124
-
125
- def output_version
126
- puts "#{@info[:name]} #{@info[:version]}"
127
- end
128
- end
129
- end
data/spec/all_spec.rb DELETED
@@ -1,6 +0,0 @@
1
-
2
- require File.expand_path(File.dirname(__FILE__) + '/../lib/commander')
3
-
4
- Dir['./spec/**/*.rb'].each do |file|
5
- require file unless file == './spec/all_spec.rb'
6
- end
data/spec/manager_spec.rb DELETED
@@ -1,19 +0,0 @@
1
-
2
- describe Commander::Manager do
3
- before :each do
4
- @manager = Commander::Manager.instance
5
- end
6
-
7
- it "should parse version numbers" do
8
- @manager.parse_version('1.2.3').should == [1, 2, 3]
9
- end
10
-
11
- it "should validate version numbers" do
12
- @manager.valid_version?('1.2.3').should == true
13
- end
14
-
15
- it "should invalidate version numbers" do
16
- @manager.valid_version?('1.2').should_not == true
17
- end
18
-
19
- end