toys-core 0.3.5 → 0.3.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -0
- data/lib/toys/cli.rb +15 -10
- data/lib/toys/config_dsl.rb +103 -17
- data/lib/toys/context.rb +60 -48
- data/lib/toys/core_version.rb +1 -1
- data/lib/toys/helpers/exec.rb +1 -1
- data/lib/toys/helpers/highline.rb +4 -9
- data/lib/toys/middleware/add_verbosity_flags.rb +6 -6
- data/lib/toys/middleware/set_default_descriptions.rb +162 -92
- data/lib/toys/middleware/show_help.rb +12 -6
- data/lib/toys/middleware/{show_version.rb → show_root_version.rb} +14 -23
- data/lib/toys/tool.rb +122 -372
- data/lib/toys/tool/acceptor.rb +190 -0
- data/lib/toys/tool/arg_definition.rb +130 -0
- data/lib/toys/tool/flag_definition.rb +322 -0
- data/lib/toys/utils/exec.rb +1 -1
- data/lib/toys/utils/help_text.rb +21 -15
- data/lib/toys/utils/line_output.rb +29 -12
- data/lib/toys/utils/wrappable_string.rb +23 -0
- metadata +6 -3
data/lib/toys/utils/exec.rb
CHANGED
data/lib/toys/utils/help_text.rb
CHANGED
@@ -107,6 +107,8 @@ module Toys
|
|
107
107
|
# display all subcommands recursively. Defaults to false.
|
108
108
|
# @param [String,nil] search An optional string to search for when
|
109
109
|
# listing subcommands. Defaults to `nil` which finds all subcommands.
|
110
|
+
# @param [Boolean] show_source_path If true, shows the source path
|
111
|
+
# section. Defaults to false.
|
110
112
|
# @param [Integer] indent Indent width. Default is {DEFAULT_INDENT}.
|
111
113
|
# @param [Integer] indent2 Second indent width. Default is
|
112
114
|
# {DEFAULT_INDENT}.
|
@@ -116,12 +118,12 @@ module Toys
|
|
116
118
|
#
|
117
119
|
# @return [String] A usage string.
|
118
120
|
#
|
119
|
-
def help_string(recursive: false, search: nil,
|
121
|
+
def help_string(recursive: false, search: nil, show_source_path: false,
|
120
122
|
indent: nil, indent2: nil, wrap_width: nil, styled: true)
|
121
123
|
indent ||= DEFAULT_INDENT
|
122
124
|
indent2 ||= DEFAULT_INDENT
|
123
125
|
subtools = find_subtools(recursive, search)
|
124
|
-
assembler = HelpStringAssembler.new(@tool, @binary_name, subtools, search,
|
126
|
+
assembler = HelpStringAssembler.new(@tool, @binary_name, subtools, search, show_source_path,
|
125
127
|
indent, indent2, wrap_width, styled)
|
126
128
|
assembler.result
|
127
129
|
end
|
@@ -199,9 +201,11 @@ module Toys
|
|
199
201
|
end
|
200
202
|
|
201
203
|
def add_flag(flag)
|
202
|
-
|
203
|
-
|
204
|
-
flags_str
|
204
|
+
flags = flag.single_flag_syntax + flag.double_flag_syntax
|
205
|
+
last_index = flags.size - 1
|
206
|
+
flags_str = flags.each_with_index.map do |fs, i|
|
207
|
+
i == last_index ? fs.canonical_str : fs.str_without_value
|
208
|
+
end.join(", ")
|
205
209
|
flags_str = " #{flags_str}" if flag.single_flag_syntax.empty?
|
206
210
|
add_right_column_desc(flags_str, wrap_desc(flag.desc))
|
207
211
|
end
|
@@ -269,12 +273,13 @@ module Toys
|
|
269
273
|
|
270
274
|
## @private
|
271
275
|
class HelpStringAssembler
|
272
|
-
def initialize(tool, binary_name, subtools, search_term,
|
276
|
+
def initialize(tool, binary_name, subtools, search_term, show_source_path,
|
273
277
|
indent, indent2, wrap_width, styled)
|
274
278
|
@tool = tool
|
275
279
|
@binary_name = binary_name
|
276
280
|
@subtools = subtools
|
277
281
|
@search_term = search_term
|
282
|
+
@show_source_path = show_source_path
|
278
283
|
@indent = indent
|
279
284
|
@indent2 = indent2
|
280
285
|
@wrap_width = wrap_width
|
@@ -359,7 +364,7 @@ module Toys
|
|
359
364
|
end
|
360
365
|
|
361
366
|
def add_source_section
|
362
|
-
return unless @tool.definition_path
|
367
|
+
return unless @tool.definition_path && @show_source_path
|
363
368
|
@lines << ""
|
364
369
|
@lines << bold("SOURCE")
|
365
370
|
@lines << indent_str("Defined in #{@tool.definition_path}")
|
@@ -387,15 +392,16 @@ module Toys
|
|
387
392
|
end
|
388
393
|
|
389
394
|
def flag_spec_string(flag)
|
390
|
-
|
395
|
+
flag.flag_syntax.map do |fs|
|
391
396
|
str = bold(fs.str_without_value)
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
397
|
+
if fs.flag_type != :value
|
398
|
+
str
|
399
|
+
elsif fs.value_type == :optional
|
400
|
+
"#{str}#{fs.value_delim}[#{underline(fs.value_label)}]"
|
401
|
+
else
|
402
|
+
"#{str}#{fs.value_delim}#{underline(fs.value_label)}"
|
403
|
+
end
|
404
|
+
end.join(", ")
|
399
405
|
end
|
400
406
|
|
401
407
|
def add_positional_arguments_section
|
@@ -49,6 +49,7 @@ module Toys
|
|
49
49
|
else
|
50
50
|
styled ? true : false
|
51
51
|
end
|
52
|
+
@buffer = ""
|
52
53
|
end
|
53
54
|
|
54
55
|
##
|
@@ -61,7 +62,7 @@ module Toys
|
|
61
62
|
# Whether output is styled
|
62
63
|
# @return [Boolean]
|
63
64
|
#
|
64
|
-
|
65
|
+
attr_accessor :styled
|
65
66
|
|
66
67
|
##
|
67
68
|
# If the sink is a Logger, the level to log, otherwise `nil`.
|
@@ -76,29 +77,45 @@ module Toys
|
|
76
77
|
# @param [Symbol...] styles Styles to apply to the entire line.
|
77
78
|
#
|
78
79
|
def puts(str = "", *styles)
|
79
|
-
|
80
|
-
|
81
|
-
else
|
82
|
-
str = ::HighLine.uncolor(str)
|
83
|
-
end
|
80
|
+
str = @buffer + apply_styles(str, styles)
|
81
|
+
@buffer = ""
|
84
82
|
case sink
|
85
83
|
when ::Logger
|
86
84
|
sink.log(log_level, str)
|
87
85
|
when ::IO
|
88
86
|
sink.puts(str)
|
87
|
+
sink.flush
|
89
88
|
end
|
90
89
|
self
|
91
90
|
end
|
92
91
|
|
93
92
|
##
|
94
|
-
#
|
93
|
+
# Write a newline and flush the current line.
|
94
|
+
#
|
95
|
+
def newline
|
96
|
+
puts
|
97
|
+
end
|
98
|
+
|
99
|
+
##
|
100
|
+
# Buffer a partial line but do not write it out yet because the line
|
101
|
+
# may not yet be complete.
|
95
102
|
#
|
96
|
-
# @param [String] str The
|
97
|
-
# @param [Symbol...] styles Styles to apply to the
|
98
|
-
# @return [String] The string with styles applied.
|
103
|
+
# @param [String] str The line to write
|
104
|
+
# @param [Symbol...] styles Styles to apply to the partial line.
|
99
105
|
#
|
100
|
-
def
|
101
|
-
|
106
|
+
def write(str = "", *styles)
|
107
|
+
@buffer << apply_styles(str, styles)
|
108
|
+
self
|
109
|
+
end
|
110
|
+
|
111
|
+
private
|
112
|
+
|
113
|
+
def apply_styles(str, styles)
|
114
|
+
if styled
|
115
|
+
styles.empty? ? str : ::HighLine.color(str, *styles)
|
116
|
+
else
|
117
|
+
::HighLine.uncolor(str)
|
118
|
+
end
|
102
119
|
end
|
103
120
|
end
|
104
121
|
end
|
@@ -135,6 +135,29 @@ module Toys
|
|
135
135
|
result = [] if result.all?(&:empty?)
|
136
136
|
result
|
137
137
|
end
|
138
|
+
|
139
|
+
##
|
140
|
+
# Make the given object a WrappableString.
|
141
|
+
# If the object is already a WrappableString, return it. Otherwise,
|
142
|
+
# treat it as a string or an array of strings and wrap it in a
|
143
|
+
# WrappableString.
|
144
|
+
#
|
145
|
+
# @param [Toys::Utils::WrappableString,String,Array<String>] obj
|
146
|
+
# @return [Toys::Utils::WrappableString]
|
147
|
+
#
|
148
|
+
def self.make(obj)
|
149
|
+
obj.is_a?(Utils::WrappableString) ? obj : Utils::WrappableString.new(obj)
|
150
|
+
end
|
151
|
+
|
152
|
+
##
|
153
|
+
# Make the given object an array of WrappableString.
|
154
|
+
#
|
155
|
+
# @param [Array<Toys::Utils::WrappableString,String,Array<String>>] objs
|
156
|
+
# @return [Array<Toys::Utils::WrappableString>]
|
157
|
+
#
|
158
|
+
def self.make_array(objs)
|
159
|
+
Array(objs).map { |obj| make(obj) }
|
160
|
+
end
|
138
161
|
end
|
139
162
|
end
|
140
163
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: toys-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Azuma
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-05-
|
11
|
+
date: 2018-05-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: highline
|
@@ -126,7 +126,7 @@ files:
|
|
126
126
|
- lib/toys/middleware/handle_usage_errors.rb
|
127
127
|
- lib/toys/middleware/set_default_descriptions.rb
|
128
128
|
- lib/toys/middleware/show_help.rb
|
129
|
-
- lib/toys/middleware/
|
129
|
+
- lib/toys/middleware/show_root_version.rb
|
130
130
|
- lib/toys/template.rb
|
131
131
|
- lib/toys/templates.rb
|
132
132
|
- lib/toys/templates/clean.rb
|
@@ -135,6 +135,9 @@ files:
|
|
135
135
|
- lib/toys/templates/rubocop.rb
|
136
136
|
- lib/toys/templates/yardoc.rb
|
137
137
|
- lib/toys/tool.rb
|
138
|
+
- lib/toys/tool/acceptor.rb
|
139
|
+
- lib/toys/tool/arg_definition.rb
|
140
|
+
- lib/toys/tool/flag_definition.rb
|
138
141
|
- lib/toys/utils/exec.rb
|
139
142
|
- lib/toys/utils/help_text.rb
|
140
143
|
- lib/toys/utils/line_output.rb
|