mothership 0.2.5 → 0.3.0
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.
- data/lib/mothership/base.rb +5 -0
- data/lib/mothership/command.rb +9 -7
- data/lib/mothership/help.rb +19 -215
- data/lib/mothership/help/commands.rb +49 -0
- data/lib/mothership/help/printer.rb +162 -0
- data/lib/mothership/version.rb +1 -1
- metadata +17 -19
- data/lib/mothership/pretty.rb +0 -91
- data/lib/mothership/progress.rb +0 -112
data/lib/mothership/base.rb
CHANGED
data/lib/mothership/command.rb
CHANGED
@@ -90,15 +90,17 @@ class Mothership
|
|
90
90
|
options[:interact] = interact if interact
|
91
91
|
options[:description] = options.delete(:desc) if options.key?(:desc)
|
92
92
|
|
93
|
-
|
93
|
+
unless options[:hidden]
|
94
|
+
@flags["--#{name.to_s.gsub("_", "-")}"] = name
|
94
95
|
|
95
|
-
|
96
|
-
|
97
|
-
|
96
|
+
if options[:singular]
|
97
|
+
@flags["--#{options[:singular]}"] = name
|
98
|
+
end
|
98
99
|
|
99
|
-
|
100
|
-
|
101
|
-
|
100
|
+
if aliases = options[:aliases] || options[:alias]
|
101
|
+
Array(aliases).each do |a|
|
102
|
+
@flags[a] = name
|
103
|
+
end
|
102
104
|
end
|
103
105
|
end
|
104
106
|
|
data/lib/mothership/help.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require "mothership/base"
|
2
|
+
require "mothership/help/commands"
|
2
3
|
|
3
4
|
module Mothership::Help
|
4
5
|
@@groups = []
|
@@ -9,69 +10,6 @@ module Mothership::Help
|
|
9
10
|
!@@groups.empty?
|
10
11
|
end
|
11
12
|
|
12
|
-
def print_help_groups(global = nil, all = false)
|
13
|
-
@@groups.each do |commands|
|
14
|
-
print_help_group(commands, all)
|
15
|
-
end
|
16
|
-
|
17
|
-
command_options(global)
|
18
|
-
end
|
19
|
-
|
20
|
-
def unique_commands(commands)
|
21
|
-
uniq_commands = []
|
22
|
-
cmd_index = {}
|
23
|
-
|
24
|
-
commands.each do |cmd|
|
25
|
-
if idx = cmd_index[cmd.name]
|
26
|
-
uniq_commands[idx] = cmd
|
27
|
-
else
|
28
|
-
cmd_index[cmd.name] = uniq_commands.size
|
29
|
-
uniq_commands << cmd
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
uniq_commands
|
34
|
-
end
|
35
|
-
|
36
|
-
def print_help_group(group, all = false, indent = 0)
|
37
|
-
return if nothing_printable?(group, all)
|
38
|
-
|
39
|
-
members = group[:members]
|
40
|
-
|
41
|
-
unless all
|
42
|
-
members = members.reject do |_, opts|
|
43
|
-
opts[:hidden]
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
commands = members.collect(&:first)
|
48
|
-
|
49
|
-
i = " " * indent
|
50
|
-
|
51
|
-
print i
|
52
|
-
puts group[:description]
|
53
|
-
|
54
|
-
commands = unique_commands(commands)
|
55
|
-
|
56
|
-
width = 0
|
57
|
-
commands.each do |cmd|
|
58
|
-
len = cmd.usage.size
|
59
|
-
if len > width
|
60
|
-
width = len
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
commands.each do |cmd|
|
65
|
-
puts "#{i} #{cmd.usage.ljust(width)}\t#{cmd.description}"
|
66
|
-
end
|
67
|
-
|
68
|
-
puts "" unless commands.empty?
|
69
|
-
|
70
|
-
group[:children].each do |group|
|
71
|
-
print_help_group(group, all, indent + 1)
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
13
|
# define help groups
|
76
14
|
def groups(*tree)
|
77
15
|
tree.each do |*args|
|
@@ -79,119 +17,33 @@ module Mothership::Help
|
|
79
17
|
end
|
80
18
|
end
|
81
19
|
|
82
|
-
def
|
83
|
-
where = @@tree
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
break unless where
|
88
|
-
|
89
|
-
where = where[n]
|
90
|
-
break unless where
|
91
|
-
|
92
|
-
top = false
|
93
|
-
end
|
94
|
-
|
95
|
-
unless where
|
96
|
-
raise "unknown help group: #{names.join("/")}"
|
97
|
-
end
|
98
|
-
|
99
|
-
where[:members] << [command, options]
|
100
|
-
end
|
101
|
-
|
102
|
-
def basic_help(commands, global)
|
103
|
-
puts "Commands:"
|
104
|
-
|
105
|
-
width = 0
|
106
|
-
commands.each do |_, c|
|
107
|
-
len = c.usage.size
|
108
|
-
width = len if len > width
|
109
|
-
end
|
110
|
-
|
111
|
-
commands.each do |_, c|
|
112
|
-
puts " #{c.usage.ljust(width)}\t#{c.description}"
|
113
|
-
end
|
114
|
-
|
115
|
-
unless global.flags.empty?
|
116
|
-
puts ""
|
117
|
-
command_options(global)
|
20
|
+
def group(*names)
|
21
|
+
if where = find_group(names, @@tree)
|
22
|
+
where[:members].collect(&:first)
|
23
|
+
else
|
24
|
+
[]
|
118
25
|
end
|
119
26
|
end
|
120
27
|
|
121
|
-
def
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
def command_usage(cmd, io = $stdout)
|
128
|
-
io.puts "Usage: #{cmd.usage}"
|
129
|
-
|
130
|
-
unless cmd.flags.empty?
|
131
|
-
io.puts ""
|
132
|
-
command_options(cmd, io)
|
133
|
-
end
|
28
|
+
def add_to_group(command, names, options)
|
29
|
+
where = find_group(names, @@tree)
|
30
|
+
raise "unknown help group: #{names.join("/")}" unless where
|
31
|
+
|
32
|
+
where[:members] << [command, options]
|
134
33
|
end
|
135
34
|
|
136
|
-
|
137
|
-
io.puts "Options:"
|
138
|
-
|
139
|
-
rev_flags = Hash.new { |h, k| h[k] = [] }
|
140
|
-
|
141
|
-
cmd.flags.each do |f, n|
|
142
|
-
rev_flags[n] << f
|
143
|
-
end
|
144
|
-
|
145
|
-
usages = []
|
146
|
-
|
147
|
-
max_width = 0
|
148
|
-
rev_flags.collect do |name, fs|
|
149
|
-
info = cmd.inputs[name]
|
150
|
-
|
151
|
-
flag = name.to_s.gsub("_", "-")
|
152
|
-
|
153
|
-
# move full form to the front
|
154
|
-
fs.unshift fs.delete("--#{flag}")
|
155
|
-
|
156
|
-
if short = fs.find { |x| x =~ /^-.$/ }
|
157
|
-
fs.delete short
|
158
|
-
end
|
159
|
-
|
160
|
-
if info[:type] == :boolean && info[:default]
|
161
|
-
fs[0] = "--[no-]#{flag}"
|
162
|
-
end
|
163
|
-
|
164
|
-
if info.key?(:default) && info.key?(:interact)
|
165
|
-
fs.unshift "--ask-#{flag}"
|
166
|
-
end
|
167
|
-
|
168
|
-
usage = "#{short ? short + "," : " "} #{fs.join ", "}"
|
169
|
-
|
170
|
-
unless info[:type] == :boolean
|
171
|
-
usage << " #{(info[:value] || name).to_s.upcase}"
|
172
|
-
end
|
173
|
-
|
174
|
-
max_width = usage.size if usage.size > max_width
|
175
|
-
|
176
|
-
usages << [usage, info[:description]]
|
177
|
-
end
|
35
|
+
private
|
178
36
|
|
179
|
-
|
37
|
+
def find_group(names, where)
|
38
|
+
names.each_with_index do |n, index|
|
39
|
+
where = where[:children] unless index == 0
|
40
|
+
break unless where
|
180
41
|
|
181
|
-
|
182
|
-
|
183
|
-
io.puts " #{u.ljust(max_width)} #{d}"
|
184
|
-
else
|
185
|
-
io.puts " #{u}"
|
186
|
-
end
|
42
|
+
where = where[n]
|
43
|
+
break unless where
|
187
44
|
end
|
188
|
-
end
|
189
|
-
|
190
|
-
private
|
191
45
|
|
192
|
-
|
193
|
-
group[:members].reject { |_, opts| !all && opts[:hidden] }.empty? &&
|
194
|
-
group[:children].all? { |g| nothing_printable?(g) }
|
46
|
+
where
|
195
47
|
end
|
196
48
|
|
197
49
|
def add_group(groups, tree, name, desc, *subs)
|
@@ -210,51 +62,3 @@ module Mothership::Help
|
|
210
62
|
end
|
211
63
|
end
|
212
64
|
end
|
213
|
-
|
214
|
-
class Mothership
|
215
|
-
class << self
|
216
|
-
# add command to help group
|
217
|
-
def group(*names)
|
218
|
-
options =
|
219
|
-
if names.last.is_a? Hash
|
220
|
-
names.pop
|
221
|
-
else
|
222
|
-
{}
|
223
|
-
end
|
224
|
-
|
225
|
-
Mothership::Help.add_to_group(@command, names, options)
|
226
|
-
end
|
227
|
-
end
|
228
|
-
|
229
|
-
def default_action
|
230
|
-
invoke :help
|
231
|
-
end
|
232
|
-
|
233
|
-
def unknown_command(name)
|
234
|
-
$stderr.print "Unknown command '#{name.to_s.gsub("_", "-")}'. "
|
235
|
-
$stderr.puts "See 'help' for available commands."
|
236
|
-
exit_status 1
|
237
|
-
end
|
238
|
-
|
239
|
-
desc "Help!"
|
240
|
-
input :command, :argument => :optional
|
241
|
-
input :all, :type => :boolean
|
242
|
-
def help
|
243
|
-
if name = input[:command]
|
244
|
-
if cmd = @@commands[name.gsub("-", "_").to_sym]
|
245
|
-
Mothership::Help.command_help(cmd)
|
246
|
-
else
|
247
|
-
unknown_command(name)
|
248
|
-
end
|
249
|
-
elsif Help.has_groups?
|
250
|
-
unless input[:all]
|
251
|
-
puts "Showing basic command set. Pass --all to list all commands."
|
252
|
-
puts ""
|
253
|
-
end
|
254
|
-
|
255
|
-
Mothership::Help.print_help_groups(@@global, input[:all])
|
256
|
-
else
|
257
|
-
Mothership::Help.basic_help(@@commands, @@global)
|
258
|
-
end
|
259
|
-
end
|
260
|
-
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require "mothership/help/printer"
|
2
|
+
|
3
|
+
class Mothership
|
4
|
+
class << self
|
5
|
+
# add command to help group
|
6
|
+
def group(*names)
|
7
|
+
options =
|
8
|
+
if names.last.is_a? Hash
|
9
|
+
names.pop
|
10
|
+
else
|
11
|
+
{}
|
12
|
+
end
|
13
|
+
|
14
|
+
Mothership::Help.add_to_group(@command, names, options)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def default_action
|
19
|
+
invoke :help
|
20
|
+
end
|
21
|
+
|
22
|
+
def unknown_command(name)
|
23
|
+
$stderr.print "Unknown command '#{name.to_s.gsub("_", "-")}'. "
|
24
|
+
$stderr.puts "See 'help' for available commands."
|
25
|
+
exit_status 1
|
26
|
+
end
|
27
|
+
|
28
|
+
desc "Help!"
|
29
|
+
input :command, :argument => :optional
|
30
|
+
input :all, :type => :boolean
|
31
|
+
def help
|
32
|
+
if name = input[:command]
|
33
|
+
if cmd = @@commands[name.gsub("-", "_").to_sym]
|
34
|
+
Mothership::Help.command_help(cmd)
|
35
|
+
else
|
36
|
+
unknown_command(name)
|
37
|
+
end
|
38
|
+
elsif Help.has_groups?
|
39
|
+
unless input[:all]
|
40
|
+
puts "Showing basic command set. Pass --all to list all commands."
|
41
|
+
puts ""
|
42
|
+
end
|
43
|
+
|
44
|
+
Mothership::Help.print_help_groups(@@global, input[:all])
|
45
|
+
else
|
46
|
+
Mothership::Help.basic_help(@@commands, @@global)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,162 @@
|
|
1
|
+
module Mothership::Help
|
2
|
+
class << self
|
3
|
+
def print_help_groups(global = nil, all = false)
|
4
|
+
@@groups.each do |commands|
|
5
|
+
print_help_group(commands, all)
|
6
|
+
end
|
7
|
+
|
8
|
+
command_options(global)
|
9
|
+
end
|
10
|
+
|
11
|
+
def print_help_group(group, all = false, indent = 0)
|
12
|
+
return if nothing_printable?(group, all)
|
13
|
+
|
14
|
+
members = group[:members]
|
15
|
+
|
16
|
+
unless all
|
17
|
+
members = members.reject do |_, opts|
|
18
|
+
opts[:hidden]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
commands = members.collect(&:first)
|
23
|
+
|
24
|
+
i = " " * indent
|
25
|
+
|
26
|
+
print i
|
27
|
+
puts group[:description]
|
28
|
+
|
29
|
+
commands = unique_commands(commands)
|
30
|
+
|
31
|
+
width = 0
|
32
|
+
commands.each do |cmd|
|
33
|
+
len = cmd.usage.size
|
34
|
+
if len > width
|
35
|
+
width = len
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
commands.each do |cmd|
|
40
|
+
puts "#{i} #{cmd.usage.ljust(width)}\t#{cmd.description}"
|
41
|
+
end
|
42
|
+
|
43
|
+
puts "" unless commands.empty?
|
44
|
+
|
45
|
+
group[:children].each do |group|
|
46
|
+
print_help_group(group, all, indent + 1)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def basic_help(commands, global)
|
51
|
+
puts "Commands:"
|
52
|
+
|
53
|
+
width = 0
|
54
|
+
commands.each do |_, c|
|
55
|
+
len = c.usage.size
|
56
|
+
width = len if len > width
|
57
|
+
end
|
58
|
+
|
59
|
+
commands.each do |_, c|
|
60
|
+
puts " #{c.usage.ljust(width)}\t#{c.description}"
|
61
|
+
end
|
62
|
+
|
63
|
+
unless global.flags.empty?
|
64
|
+
puts ""
|
65
|
+
command_options(global)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def command_help(cmd)
|
70
|
+
puts cmd.description
|
71
|
+
puts ""
|
72
|
+
command_usage(cmd)
|
73
|
+
end
|
74
|
+
|
75
|
+
def command_usage(cmd, io = $stdout)
|
76
|
+
io.puts "Usage: #{cmd.usage}"
|
77
|
+
|
78
|
+
unless cmd.flags.empty?
|
79
|
+
io.puts ""
|
80
|
+
command_options(cmd, io)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def command_options(cmd, io = $stdout)
|
85
|
+
io.puts "Options:"
|
86
|
+
|
87
|
+
rev_flags = Hash.new { |h, k| h[k] = [] }
|
88
|
+
|
89
|
+
cmd.flags.each do |f, n|
|
90
|
+
rev_flags[n] << f
|
91
|
+
end
|
92
|
+
|
93
|
+
usages = []
|
94
|
+
|
95
|
+
max_width = 0
|
96
|
+
rev_flags.collect do |name, fs|
|
97
|
+
info = cmd.inputs[name]
|
98
|
+
next if info[:hidden]
|
99
|
+
|
100
|
+
flag = name.to_s.gsub("_", "-")
|
101
|
+
|
102
|
+
# move full form to the front
|
103
|
+
fs.unshift fs.delete("--#{flag}")
|
104
|
+
|
105
|
+
if short = fs.find { |x| x =~ /^-.$/ }
|
106
|
+
fs.delete short
|
107
|
+
end
|
108
|
+
|
109
|
+
if info[:type] == :boolean && info[:default]
|
110
|
+
fs[0] = "--[no-]#{flag}"
|
111
|
+
end
|
112
|
+
|
113
|
+
if info.key?(:default) && info.key?(:interact)
|
114
|
+
fs.unshift "--ask-#{flag}"
|
115
|
+
end
|
116
|
+
|
117
|
+
usage = "#{short ? short + "," : " "} #{fs.join ", "}"
|
118
|
+
|
119
|
+
unless info[:type] == :boolean
|
120
|
+
usage << " #{(info[:value] || name).to_s.upcase}"
|
121
|
+
end
|
122
|
+
|
123
|
+
max_width = usage.size if usage.size > max_width
|
124
|
+
|
125
|
+
usages << [usage, info[:description]]
|
126
|
+
end
|
127
|
+
|
128
|
+
usages.sort! { |a, b| a.first <=> b.first }
|
129
|
+
|
130
|
+
usages.each do |u, d|
|
131
|
+
if d
|
132
|
+
io.puts " #{u.ljust(max_width)} #{d}"
|
133
|
+
else
|
134
|
+
io.puts " #{u}"
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
private
|
140
|
+
|
141
|
+
def nothing_printable?(group, all = false)
|
142
|
+
group[:members].reject { |_, opts| !all && opts[:hidden] }.empty? &&
|
143
|
+
group[:children].all? { |g| nothing_printable?(g) }
|
144
|
+
end
|
145
|
+
|
146
|
+
def unique_commands(commands)
|
147
|
+
uniq_commands = []
|
148
|
+
cmd_index = {}
|
149
|
+
|
150
|
+
commands.each do |cmd|
|
151
|
+
if idx = cmd_index[cmd.name]
|
152
|
+
uniq_commands[idx] = cmd
|
153
|
+
else
|
154
|
+
cmd_index[cmd.name] = uniq_commands.size
|
155
|
+
uniq_commands << cmd
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
uniq_commands
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
data/lib/mothership/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mothership
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 3
|
9
|
+
- 0
|
10
|
+
version: 0.3.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Alex Suraci
|
@@ -15,8 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-11-
|
19
|
-
default_executable:
|
18
|
+
date: 2012-11-28 00:00:00 Z
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
22
21
|
name: rake
|
@@ -59,23 +58,22 @@ extra_rdoc_files: []
|
|
59
58
|
files:
|
60
59
|
- LICENSE
|
61
60
|
- Rakefile
|
62
|
-
- lib/mothership.rb
|
63
|
-
- lib/mothership/version.rb
|
61
|
+
- lib/mothership/base.rb
|
64
62
|
- lib/mothership/callbacks.rb
|
65
|
-
- lib/mothership/inputs.rb
|
66
|
-
- lib/mothership/pretty.rb
|
67
|
-
- lib/mothership/errors.rb
|
68
63
|
- lib/mothership/command.rb
|
69
|
-
- lib/mothership/
|
64
|
+
- lib/mothership/errors.rb
|
65
|
+
- lib/mothership/help/commands.rb
|
66
|
+
- lib/mothership/help/printer.rb
|
70
67
|
- lib/mothership/help.rb
|
68
|
+
- lib/mothership/inputs.rb
|
71
69
|
- lib/mothership/parser.rb
|
72
|
-
- lib/mothership/
|
73
|
-
-
|
70
|
+
- lib/mothership/version.rb
|
71
|
+
- lib/mothership.rb
|
74
72
|
- spec/arguments_spec.rb
|
75
73
|
- spec/combination_spec.rb
|
76
|
-
- spec/Rakefile
|
77
74
|
- spec/flags_spec.rb
|
78
|
-
|
75
|
+
- spec/helpers.rb
|
76
|
+
- spec/Rakefile
|
79
77
|
homepage: https://github.com/vito/mothership
|
80
78
|
licenses: []
|
81
79
|
|
@@ -105,13 +103,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
105
103
|
requirements: []
|
106
104
|
|
107
105
|
rubyforge_project: mothership
|
108
|
-
rubygems_version: 1.
|
106
|
+
rubygems_version: 1.8.24
|
109
107
|
signing_key:
|
110
108
|
specification_version: 3
|
111
109
|
summary: Command-line library for big honkin' CLI apps.
|
112
110
|
test_files:
|
113
|
-
- spec/helpers.rb
|
114
111
|
- spec/arguments_spec.rb
|
115
112
|
- spec/combination_spec.rb
|
116
|
-
- spec/Rakefile
|
117
113
|
- spec/flags_spec.rb
|
114
|
+
- spec/helpers.rb
|
115
|
+
- spec/Rakefile
|
data/lib/mothership/pretty.rb
DELETED
@@ -1,91 +0,0 @@
|
|
1
|
-
require "rbconfig"
|
2
|
-
|
3
|
-
# Mix in to your Mothership class to enable user-toggleable colors.
|
4
|
-
#
|
5
|
-
# Redefine color_enabled? to control color enabling/disabling. Colors will be
|
6
|
-
# auto-disabled if the platform is Windows or if $stdout is not a tty.
|
7
|
-
#
|
8
|
-
# Redefine user_colors to return a hash from tags to color, e.g. from a user's
|
9
|
-
# color config file.
|
10
|
-
module Mothership::Pretty
|
11
|
-
WINDOWS = !!(RbConfig::CONFIG['host_os'] =~ /mingw|mswin32|cygwin/)
|
12
|
-
|
13
|
-
COLOR_CODES = {
|
14
|
-
:black => 0,
|
15
|
-
:red => 1,
|
16
|
-
:green => 2,
|
17
|
-
:yellow => 3,
|
18
|
-
:blue => 4,
|
19
|
-
:magenta => 5,
|
20
|
-
:cyan => 6,
|
21
|
-
:white => 7
|
22
|
-
}
|
23
|
-
|
24
|
-
DEFAULT_COLORS = {
|
25
|
-
:name => :blue,
|
26
|
-
:neutral => :blue,
|
27
|
-
:good => :green,
|
28
|
-
:bad => :red,
|
29
|
-
:error => :magenta,
|
30
|
-
:unknown => :cyan,
|
31
|
-
:warning => :yellow,
|
32
|
-
:instance => :yellow,
|
33
|
-
:number => :green,
|
34
|
-
:prompt => :blue,
|
35
|
-
:yes => :green,
|
36
|
-
:no => :red
|
37
|
-
}
|
38
|
-
|
39
|
-
private
|
40
|
-
|
41
|
-
# override with e.g. option(:color), or whatever toggle you use
|
42
|
-
def color_enabled?
|
43
|
-
true
|
44
|
-
end
|
45
|
-
|
46
|
-
# use colors?
|
47
|
-
def color?
|
48
|
-
color_enabled? && !WINDOWS && $stdout.tty?
|
49
|
-
end
|
50
|
-
|
51
|
-
# redefine to control the tag -> color settings
|
52
|
-
def user_colors
|
53
|
-
DEFAULT_COLORS
|
54
|
-
end
|
55
|
-
|
56
|
-
# colored text
|
57
|
-
#
|
58
|
-
# shouldn't use bright colors, as some color themes abuse
|
59
|
-
# the bright palette (I'm looking at you, Solarized)
|
60
|
-
def c(str, type)
|
61
|
-
return str unless color?
|
62
|
-
|
63
|
-
bright = false
|
64
|
-
color = user_colors[type]
|
65
|
-
if color.to_s =~ /bright-(.+)/
|
66
|
-
bright = true
|
67
|
-
color = $1.to_sym
|
68
|
-
end
|
69
|
-
|
70
|
-
return str unless color
|
71
|
-
|
72
|
-
code = "\e[#{bright ? 9 : 3}#{COLOR_CODES[color]}m"
|
73
|
-
"#{code}#{str.to_s.gsub("\e[0m", "\e[0m#{code}")}\e[0m"
|
74
|
-
end
|
75
|
-
|
76
|
-
# bold text
|
77
|
-
def b(str)
|
78
|
-
return str unless color?
|
79
|
-
|
80
|
-
code = "\e[1m"
|
81
|
-
"#{code}#{str.to_s.gsub("\e[0m", "\e[0m#{code}")}\e[0m"
|
82
|
-
end
|
83
|
-
|
84
|
-
# dim text
|
85
|
-
def d(str)
|
86
|
-
return str unless color?
|
87
|
-
|
88
|
-
code = "\e[2m"
|
89
|
-
"#{code}#{str.to_s.gsub("\e[0m", "\e[0m#{code}")}\e[0m"
|
90
|
-
end
|
91
|
-
end
|
data/lib/mothership/progress.rb
DELETED
@@ -1,112 +0,0 @@
|
|
1
|
-
require "mothership/pretty"
|
2
|
-
|
3
|
-
module Mothership::Progress
|
4
|
-
include Mothership::Pretty
|
5
|
-
|
6
|
-
module Dots
|
7
|
-
class << self
|
8
|
-
DOT_COUNT = 3
|
9
|
-
DOT_TICK = 0.15
|
10
|
-
|
11
|
-
def start!
|
12
|
-
@dots ||=
|
13
|
-
Thread.new do
|
14
|
-
before_sync = $stdout.sync
|
15
|
-
|
16
|
-
$stdout.sync = true
|
17
|
-
|
18
|
-
printed = false
|
19
|
-
i = 1
|
20
|
-
until @stop_dots
|
21
|
-
if printed
|
22
|
-
print "\b" * DOT_COUNT
|
23
|
-
end
|
24
|
-
|
25
|
-
print ("." * i).ljust(DOT_COUNT)
|
26
|
-
printed = true
|
27
|
-
|
28
|
-
if i == DOT_COUNT
|
29
|
-
i = 0
|
30
|
-
else
|
31
|
-
i += 1
|
32
|
-
end
|
33
|
-
|
34
|
-
sleep DOT_TICK
|
35
|
-
end
|
36
|
-
|
37
|
-
if printed
|
38
|
-
print "\b" * DOT_COUNT
|
39
|
-
print " " * DOT_COUNT
|
40
|
-
print "\b" * DOT_COUNT
|
41
|
-
end
|
42
|
-
|
43
|
-
$stdout.sync = before_sync
|
44
|
-
@stop_dots = nil
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def stop!
|
49
|
-
return unless @dots
|
50
|
-
return if @stop_dots
|
51
|
-
@stop_dots = true
|
52
|
-
@dots.join
|
53
|
-
@dots = nil
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
class Skipper
|
59
|
-
def initialize(&ret)
|
60
|
-
@return = ret
|
61
|
-
end
|
62
|
-
|
63
|
-
def skip(&callback)
|
64
|
-
@return.call("SKIPPED", :warning, callback)
|
65
|
-
end
|
66
|
-
|
67
|
-
def give_up(&callback)
|
68
|
-
@return.call("GAVE UP", :bad, callback)
|
69
|
-
end
|
70
|
-
|
71
|
-
def fail(&callback)
|
72
|
-
@return.call("FAILED", :error, callback)
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
# override to determine whether to show progress
|
77
|
-
def quiet?
|
78
|
-
false
|
79
|
-
end
|
80
|
-
|
81
|
-
def with_progress(message)
|
82
|
-
unless quiet?
|
83
|
-
print message
|
84
|
-
Dots.start!
|
85
|
-
end
|
86
|
-
|
87
|
-
skipper = Skipper.new do |status, color, callback|
|
88
|
-
unless quiet?
|
89
|
-
Dots.stop!
|
90
|
-
puts "... #{c(status, color)}"
|
91
|
-
end
|
92
|
-
|
93
|
-
return callback && callback.call
|
94
|
-
end
|
95
|
-
|
96
|
-
begin
|
97
|
-
res = yield skipper
|
98
|
-
unless quiet?
|
99
|
-
Dots.stop!
|
100
|
-
puts "... #{c("OK", :good)}"
|
101
|
-
end
|
102
|
-
res
|
103
|
-
rescue
|
104
|
-
unless quiet?
|
105
|
-
Dots.stop!
|
106
|
-
puts "... #{c("FAILED", :error)}"
|
107
|
-
end
|
108
|
-
|
109
|
-
raise
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|