toys-core 0.3.5 → 0.3.6
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.
- 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
|