thor 0.20.0 → 1.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +7 -9
- data/lib/thor/actions/create_file.rb +1 -1
- data/lib/thor/actions/create_link.rb +3 -2
- data/lib/thor/actions/directory.rb +7 -17
- data/lib/thor/actions/file_manipulation.rb +25 -14
- data/lib/thor/actions/inject_into_file.rb +20 -10
- data/lib/thor/actions.rb +34 -15
- data/lib/thor/base.rb +63 -43
- data/lib/thor/command.rb +21 -14
- data/lib/thor/core_ext/hash_with_indifferent_access.rb +6 -0
- data/lib/thor/error.rb +83 -0
- data/lib/thor/group.rb +3 -3
- data/lib/thor/invocation.rb +1 -0
- data/lib/thor/line_editor/basic.rb +1 -1
- data/lib/thor/line_editor/readline.rb +6 -6
- data/lib/thor/line_editor.rb +2 -2
- data/lib/thor/nested_context.rb +29 -0
- data/lib/thor/parser/arguments.rb +7 -3
- data/lib/thor/parser/option.rb +20 -7
- data/lib/thor/parser/options.rb +40 -6
- data/lib/thor/parser.rb +4 -4
- data/lib/thor/rake_compat.rb +1 -0
- data/lib/thor/runner.rb +5 -4
- data/lib/thor/shell/basic.rb +87 -12
- data/lib/thor/shell/color.rb +10 -2
- data/lib/thor/shell/html.rb +3 -3
- data/lib/thor/shell.rb +5 -5
- data/lib/thor/util.rb +18 -2
- data/lib/thor/version.rb +1 -1
- data/lib/thor.rb +16 -9
- data/thor.gemspec +10 -2
- metadata +20 -11
- data/CHANGELOG.md +0 -193
- data/lib/thor/core_ext/io_binary_read.rb +0 -12
- data/lib/thor/core_ext/ordered_hash.rb +0 -129
data/lib/thor/shell/basic.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
class Thor
|
2
2
|
module Shell
|
3
3
|
class Basic
|
4
|
+
DEFAULT_TERMINAL_WIDTH = 80
|
5
|
+
|
4
6
|
attr_accessor :base
|
5
7
|
attr_reader :padding
|
6
8
|
|
@@ -45,6 +47,10 @@ class Thor
|
|
45
47
|
|
46
48
|
# Asks something to the user and receives a response.
|
47
49
|
#
|
50
|
+
# If a default value is specified it will be presented to the user
|
51
|
+
# and allows them to select that value with an empty response. This
|
52
|
+
# option is ignored when limited answers are supplied.
|
53
|
+
#
|
48
54
|
# If asked to limit the correct responses, you can pass in an
|
49
55
|
# array of acceptable answers. If one of those is not supplied,
|
50
56
|
# they will be shown a message stating that one of those answers
|
@@ -61,6 +67,8 @@ class Thor
|
|
61
67
|
# ==== Example
|
62
68
|
# ask("What is your name?")
|
63
69
|
#
|
70
|
+
# ask("What is the planet furthest from the sun?", :default => "Pluto")
|
71
|
+
#
|
64
72
|
# ask("What is your favorite Neopolitan flavor?", :limited_to => ["strawberry", "chocolate", "vanilla"])
|
65
73
|
#
|
66
74
|
# ask("What is your password?", :echo => false)
|
@@ -86,6 +94,8 @@ class Thor
|
|
86
94
|
# say("I know you knew that.")
|
87
95
|
#
|
88
96
|
def say(message = "", color = nil, force_new_line = (message.to_s !~ /( |\t)\Z/))
|
97
|
+
return if quiet?
|
98
|
+
|
89
99
|
buffer = prepare_message(message, *color)
|
90
100
|
buffer << "\n" if force_new_line && !message.to_s.end_with?("\n")
|
91
101
|
|
@@ -93,6 +103,23 @@ class Thor
|
|
93
103
|
stdout.flush
|
94
104
|
end
|
95
105
|
|
106
|
+
# Say (print) an error to the user. If the sentence ends with a whitespace
|
107
|
+
# or tab character, a new line is not appended (print + flush). Otherwise
|
108
|
+
# are passed straight to puts (behavior got from Highline).
|
109
|
+
#
|
110
|
+
# ==== Example
|
111
|
+
# say_error("error: something went wrong")
|
112
|
+
#
|
113
|
+
def say_error(message = "", color = nil, force_new_line = (message.to_s !~ /( |\t)\Z/))
|
114
|
+
return if quiet?
|
115
|
+
|
116
|
+
buffer = prepare_message(message, *color)
|
117
|
+
buffer << "\n" if force_new_line && !message.to_s.end_with?("\n")
|
118
|
+
|
119
|
+
stderr.print(buffer)
|
120
|
+
stderr.flush
|
121
|
+
end
|
122
|
+
|
96
123
|
# Say a status with the given color and appends the message. Since this
|
97
124
|
# method is used frequently by actions, it allows nil or false to be given
|
98
125
|
# in log_status, avoiding the message from being shown. If a Symbol is
|
@@ -101,13 +128,14 @@ class Thor
|
|
101
128
|
def say_status(status, message, log_status = true)
|
102
129
|
return if quiet? || log_status == false
|
103
130
|
spaces = " " * (padding + 1)
|
104
|
-
color = log_status.is_a?(Symbol) ? log_status : :green
|
105
|
-
|
106
131
|
status = status.to_s.rjust(12)
|
132
|
+
margin = " " * status.length + spaces
|
133
|
+
|
134
|
+
color = log_status.is_a?(Symbol) ? log_status : :green
|
107
135
|
status = set_color status, color, true if color
|
108
136
|
|
109
|
-
|
110
|
-
buffer = "#{
|
137
|
+
message = message.to_s.chomp.gsub(/(?<!\A)^/, margin)
|
138
|
+
buffer = "#{status}#{spaces}#{message}\n"
|
111
139
|
|
112
140
|
stdout.print(buffer)
|
113
141
|
stdout.flush
|
@@ -222,8 +250,21 @@ class Thor
|
|
222
250
|
paras = message.split("\n\n")
|
223
251
|
|
224
252
|
paras.map! do |unwrapped|
|
225
|
-
|
226
|
-
|
253
|
+
words = unwrapped.split(" ")
|
254
|
+
counter = words.first.length
|
255
|
+
words.inject do |memo, word|
|
256
|
+
word = word.gsub(/\n\005/, "\n").gsub(/\005/, "\n")
|
257
|
+
counter = 0 if word.include? "\n"
|
258
|
+
if (counter + word.length + 1) < width
|
259
|
+
memo = "#{memo} #{word}"
|
260
|
+
counter += (word.length + 1)
|
261
|
+
else
|
262
|
+
memo = "#{memo}\n#{word}"
|
263
|
+
counter = word.length
|
264
|
+
end
|
265
|
+
memo
|
266
|
+
end
|
267
|
+
end.compact!
|
227
268
|
|
228
269
|
paras.each do |para|
|
229
270
|
para.split("\n").each do |line|
|
@@ -239,11 +280,11 @@ class Thor
|
|
239
280
|
#
|
240
281
|
# ==== Parameters
|
241
282
|
# destination<String>:: the destination file to solve conflicts
|
242
|
-
# block<Proc>:: an optional block that returns the value to be used in diff
|
283
|
+
# block<Proc>:: an optional block that returns the value to be used in diff and merge
|
243
284
|
#
|
244
285
|
def file_collision(destination)
|
245
286
|
return true if @always_force
|
246
|
-
options = block_given? ? "[
|
287
|
+
options = block_given? ? "[Ynaqdhm]" : "[Ynaqh]"
|
247
288
|
|
248
289
|
loop do
|
249
290
|
answer = ask(
|
@@ -267,6 +308,13 @@ class Thor
|
|
267
308
|
when is?(:diff)
|
268
309
|
show_diff(destination, yield) if block_given?
|
269
310
|
say "Retrying..."
|
311
|
+
when is?(:merge)
|
312
|
+
if block_given? && !merge_tool.empty?
|
313
|
+
merge(destination, yield)
|
314
|
+
return nil
|
315
|
+
end
|
316
|
+
|
317
|
+
say "Please specify merge tool to `THOR_MERGE` env."
|
270
318
|
else
|
271
319
|
say file_collision_help
|
272
320
|
end
|
@@ -279,11 +327,11 @@ class Thor
|
|
279
327
|
result = if ENV["THOR_COLUMNS"]
|
280
328
|
ENV["THOR_COLUMNS"].to_i
|
281
329
|
else
|
282
|
-
unix? ? dynamic_width :
|
330
|
+
unix? ? dynamic_width : DEFAULT_TERMINAL_WIDTH
|
283
331
|
end
|
284
|
-
result < 10 ?
|
332
|
+
result < 10 ? DEFAULT_TERMINAL_WIDTH : result
|
285
333
|
rescue
|
286
|
-
|
334
|
+
DEFAULT_TERMINAL_WIDTH
|
287
335
|
end
|
288
336
|
|
289
337
|
# Called if something goes wrong during the execution. This is used by Thor
|
@@ -344,6 +392,7 @@ class Thor
|
|
344
392
|
q - quit, abort
|
345
393
|
d - diff, show the differences between the old and the new
|
346
394
|
h - help, show this help
|
395
|
+
m - merge, run merge tool
|
347
396
|
HELP
|
348
397
|
end
|
349
398
|
|
@@ -423,15 +472,41 @@ class Thor
|
|
423
472
|
|
424
473
|
def ask_filtered(statement, color, options)
|
425
474
|
answer_set = options[:limited_to]
|
475
|
+
case_insensitive = options.fetch(:case_insensitive, false)
|
426
476
|
correct_answer = nil
|
427
477
|
until correct_answer
|
428
478
|
answers = answer_set.join(", ")
|
429
479
|
answer = ask_simply("#{statement} [#{answers}]", color, options)
|
430
|
-
correct_answer = answer_set
|
480
|
+
correct_answer = answer_match(answer_set, answer, case_insensitive)
|
431
481
|
say("Your response must be one of: [#{answers}]. Please try again.") unless correct_answer
|
432
482
|
end
|
433
483
|
correct_answer
|
434
484
|
end
|
485
|
+
|
486
|
+
def answer_match(possibilities, answer, case_insensitive)
|
487
|
+
if case_insensitive
|
488
|
+
possibilities.detect{ |possibility| possibility.downcase == answer.downcase }
|
489
|
+
else
|
490
|
+
possibilities.detect{ |possibility| possibility == answer }
|
491
|
+
end
|
492
|
+
end
|
493
|
+
|
494
|
+
def merge(destination, content) #:nodoc:
|
495
|
+
require "tempfile"
|
496
|
+
Tempfile.open([File.basename(destination), File.extname(destination)], File.dirname(destination)) do |temp|
|
497
|
+
temp.write content
|
498
|
+
temp.rewind
|
499
|
+
system %(#{merge_tool} "#{temp.path}" "#{destination}")
|
500
|
+
end
|
501
|
+
end
|
502
|
+
|
503
|
+
def merge_tool #:nodoc:
|
504
|
+
@merge_tool ||= ENV["THOR_MERGE"] || git_merge_tool
|
505
|
+
end
|
506
|
+
|
507
|
+
def git_merge_tool #:nodoc:
|
508
|
+
`git config merge.tool`.rstrip rescue ""
|
509
|
+
end
|
435
510
|
end
|
436
511
|
end
|
437
512
|
end
|
data/lib/thor/shell/color.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
require_relative "basic"
|
2
2
|
|
3
3
|
class Thor
|
4
4
|
module Shell
|
@@ -97,7 +97,15 @@ class Thor
|
|
97
97
|
protected
|
98
98
|
|
99
99
|
def can_display_colors?
|
100
|
-
|
100
|
+
are_colors_supported? && !are_colors_disabled?
|
101
|
+
end
|
102
|
+
|
103
|
+
def are_colors_supported?
|
104
|
+
stdout.tty? && ENV["TERM"] != "dumb"
|
105
|
+
end
|
106
|
+
|
107
|
+
def are_colors_disabled?
|
108
|
+
!ENV['NO_COLOR'].nil?
|
101
109
|
end
|
102
110
|
|
103
111
|
# Overwrite show_diff to show diff with colors if Diff::LCS is
|
data/lib/thor/shell/html.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
require_relative "basic"
|
2
2
|
|
3
3
|
class Thor
|
4
4
|
module Shell
|
@@ -51,13 +51,13 @@ class Thor
|
|
51
51
|
def set_color(string, *colors)
|
52
52
|
if colors.all? { |color| color.is_a?(Symbol) || color.is_a?(String) }
|
53
53
|
html_colors = colors.map { |color| lookup_color(color) }
|
54
|
-
"<span style=\"#{html_colors.join('; ')};\">#{string}</span>"
|
54
|
+
"<span style=\"#{html_colors.join('; ')};\">#{Thor::Util.escape_html(string)}</span>"
|
55
55
|
else
|
56
56
|
color, bold = colors
|
57
57
|
html_color = self.class.const_get(color.to_s.upcase) if color.is_a?(Symbol)
|
58
58
|
styles = [html_color]
|
59
59
|
styles << BOLD if bold
|
60
|
-
"<span style=\"#{styles.join('; ')};\">#{string}</span>"
|
60
|
+
"<span style=\"#{styles.join('; ')};\">#{Thor::Util.escape_html(string)}</span>"
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
data/lib/thor/shell.rb
CHANGED
@@ -21,12 +21,12 @@ class Thor
|
|
21
21
|
end
|
22
22
|
|
23
23
|
module Shell
|
24
|
-
SHELL_DELEGATED_METHODS = [:ask, :error, :set_color, :yes?, :no?, :say, :say_status, :print_in_columns, :print_table, :print_wrapped, :file_collision, :terminal_width]
|
24
|
+
SHELL_DELEGATED_METHODS = [:ask, :error, :set_color, :yes?, :no?, :say, :say_error, :say_status, :print_in_columns, :print_table, :print_wrapped, :file_collision, :terminal_width]
|
25
25
|
attr_writer :shell
|
26
26
|
|
27
|
-
autoload :Basic, "
|
28
|
-
autoload :Color, "
|
29
|
-
autoload :HTML, "
|
27
|
+
autoload :Basic, File.expand_path("shell/basic", __dir__)
|
28
|
+
autoload :Color, File.expand_path("shell/color", __dir__)
|
29
|
+
autoload :HTML, File.expand_path("shell/html", __dir__)
|
30
30
|
|
31
31
|
# Add shell to initialize config values.
|
32
32
|
#
|
@@ -55,7 +55,7 @@ class Thor
|
|
55
55
|
|
56
56
|
# Common methods that are delegated to the shell.
|
57
57
|
SHELL_DELEGATED_METHODS.each do |method|
|
58
|
-
module_eval <<-METHOD, __FILE__, __LINE__
|
58
|
+
module_eval <<-METHOD, __FILE__, __LINE__ + 1
|
59
59
|
def #{method}(*args,&block)
|
60
60
|
shell.#{method}(*args,&block)
|
61
61
|
end
|
data/lib/thor/util.rb
CHANGED
@@ -27,7 +27,7 @@ class Thor
|
|
27
27
|
end
|
28
28
|
|
29
29
|
# Receives a constant and converts it to a Thor namespace. Since Thor
|
30
|
-
# commands can be added to a sandbox, this method is also
|
30
|
+
# commands can be added to a sandbox, this method is also responsible for
|
31
31
|
# removing the sandbox namespace.
|
32
32
|
#
|
33
33
|
# This method should not be used in general because it's used to deal with
|
@@ -211,7 +211,7 @@ class Thor
|
|
211
211
|
#
|
212
212
|
def globs_for(path)
|
213
213
|
path = escape_globs(path)
|
214
|
-
["#{path}/Thorfile", "#{path}/*.thor", "#{path}/tasks/*.thor", "#{path}/lib/tasks
|
214
|
+
["#{path}/Thorfile", "#{path}/*.thor", "#{path}/tasks/*.thor", "#{path}/lib/tasks/**/*.thor"]
|
215
215
|
end
|
216
216
|
|
217
217
|
# Return the path to the ruby interpreter taking into account multiple
|
@@ -263,6 +263,22 @@ class Thor
|
|
263
263
|
def escape_globs(path)
|
264
264
|
path.to_s.gsub(/[*?{}\[\]]/, '\\\\\\&')
|
265
265
|
end
|
266
|
+
|
267
|
+
# Returns a string that has had any HTML characters escaped.
|
268
|
+
#
|
269
|
+
# ==== Examples
|
270
|
+
#
|
271
|
+
# Thor::Util.escape_html('<div>') # => "<div>"
|
272
|
+
#
|
273
|
+
# ==== Parameters
|
274
|
+
# String
|
275
|
+
#
|
276
|
+
# ==== Returns
|
277
|
+
# String
|
278
|
+
#
|
279
|
+
def escape_html(string)
|
280
|
+
CGI.escapeHTML(string)
|
281
|
+
end
|
266
282
|
end
|
267
283
|
end
|
268
284
|
end
|
data/lib/thor/version.rb
CHANGED
data/lib/thor.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
|
2
|
-
require "thor/base"
|
1
|
+
require_relative "thor/base"
|
3
2
|
|
4
3
|
class Thor
|
4
|
+
$thor_runner ||= false
|
5
5
|
class << self
|
6
6
|
# Allows for custom "Command" package naming.
|
7
7
|
#
|
@@ -90,9 +90,14 @@ class Thor
|
|
90
90
|
# ==== Parameters
|
91
91
|
# Hash[String|Array => Symbol]:: Maps the string or the strings in the array to the given command.
|
92
92
|
#
|
93
|
-
def map(mappings = nil)
|
93
|
+
def map(mappings = nil, **kw)
|
94
94
|
@map ||= from_superclass(:map, {})
|
95
95
|
|
96
|
+
if mappings && !kw.empty?
|
97
|
+
mappings = kw.merge!(mappings)
|
98
|
+
else
|
99
|
+
mappings ||= kw
|
100
|
+
end
|
96
101
|
if mappings
|
97
102
|
mappings.each do |key, value|
|
98
103
|
if key.respond_to?(:each)
|
@@ -170,7 +175,7 @@ class Thor
|
|
170
175
|
handle_no_command_error(meth) unless command
|
171
176
|
|
172
177
|
shell.say "Usage:"
|
173
|
-
shell.say " #{banner(command)}"
|
178
|
+
shell.say " #{banner(command).split("\n").join("\n ")}"
|
174
179
|
shell.say
|
175
180
|
class_options_help(shell, nil => command.options.values)
|
176
181
|
if command.long_description
|
@@ -318,7 +323,7 @@ class Thor
|
|
318
323
|
# ==== Parameters
|
319
324
|
# Symbol ...:: A list of commands that should be affected.
|
320
325
|
def stop_on_unknown_option!(*command_names)
|
321
|
-
stop_on_unknown_option
|
326
|
+
@stop_on_unknown_option = stop_on_unknown_option | command_names
|
322
327
|
end
|
323
328
|
|
324
329
|
def stop_on_unknown_option?(command) #:nodoc:
|
@@ -332,7 +337,7 @@ class Thor
|
|
332
337
|
# ==== Parameters
|
333
338
|
# Symbol ...:: A list of commands that should be affected.
|
334
339
|
def disable_required_check!(*command_names)
|
335
|
-
disable_required_check
|
340
|
+
@disable_required_check = disable_required_check | command_names
|
336
341
|
end
|
337
342
|
|
338
343
|
def disable_required_check?(command) #:nodoc:
|
@@ -342,12 +347,12 @@ class Thor
|
|
342
347
|
protected
|
343
348
|
|
344
349
|
def stop_on_unknown_option #:nodoc:
|
345
|
-
@stop_on_unknown_option ||=
|
350
|
+
@stop_on_unknown_option ||= []
|
346
351
|
end
|
347
352
|
|
348
353
|
# help command has the required check disabled by default.
|
349
354
|
def disable_required_check #:nodoc:
|
350
|
-
@disable_required_check ||=
|
355
|
+
@disable_required_check ||= [:help]
|
351
356
|
end
|
352
357
|
|
353
358
|
# The method responsible for dispatching given the args.
|
@@ -393,7 +398,9 @@ class Thor
|
|
393
398
|
# the namespace should be displayed as arguments.
|
394
399
|
#
|
395
400
|
def banner(command, namespace = nil, subcommand = false)
|
396
|
-
|
401
|
+
command.formatted_usage(self, $thor_runner, subcommand).split("\n").map do |formatted_usage|
|
402
|
+
"#{basename} #{formatted_usage}"
|
403
|
+
end.join("\n")
|
397
404
|
end
|
398
405
|
|
399
406
|
def baseclass #:nodoc:
|
data/thor.gemspec
CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift lib unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require "thor/version"
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
|
-
spec.add_development_dependency "bundler", "
|
7
|
+
spec.add_development_dependency "bundler", ">= 1.0", "< 3"
|
8
8
|
spec.authors = ["Yehuda Katz", "José Valim"]
|
9
9
|
spec.description = "Thor is a toolkit for building powerful command-line interfaces."
|
10
10
|
spec.email = "ruby-thor@googlegroups.com"
|
@@ -13,8 +13,16 @@ Gem::Specification.new do |spec|
|
|
13
13
|
spec.homepage = "http://whatisthor.com/"
|
14
14
|
spec.licenses = %w(MIT)
|
15
15
|
spec.name = "thor"
|
16
|
+
spec.metadata = {
|
17
|
+
"bug_tracker_uri" => "https://github.com/rails/thor/issues",
|
18
|
+
"changelog_uri" => "https://github.com/rails/thor/releases/tag/v#{Thor::VERSION}",
|
19
|
+
"documentation_uri" => "http://whatisthor.com/",
|
20
|
+
"source_code_uri" => "https://github.com/rails/thor/tree/v#{Thor::VERSION}",
|
21
|
+
"wiki_uri" => "https://github.com/rails/thor/wiki",
|
22
|
+
"rubygems_mfa_required" => "true",
|
23
|
+
}
|
16
24
|
spec.require_paths = %w(lib)
|
17
|
-
spec.required_ruby_version = ">=
|
25
|
+
spec.required_ruby_version = ">= 2.0.0"
|
18
26
|
spec.required_rubygems_version = ">= 1.3.5"
|
19
27
|
spec.summary = spec.description
|
20
28
|
spec.version = Thor::VERSION
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: thor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yehuda Katz
|
@@ -9,22 +9,28 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2022-01-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- - "
|
18
|
+
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: '1.0'
|
21
|
+
- - "<"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: '3'
|
21
24
|
type: :development
|
22
25
|
prerelease: false
|
23
26
|
version_requirements: !ruby/object:Gem::Requirement
|
24
27
|
requirements:
|
25
|
-
- - "
|
28
|
+
- - ">="
|
26
29
|
- !ruby/object:Gem::Version
|
27
30
|
version: '1.0'
|
31
|
+
- - "<"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '3'
|
28
34
|
description: Thor is a toolkit for building powerful command-line interfaces.
|
29
35
|
email: ruby-thor@googlegroups.com
|
30
36
|
executables:
|
@@ -33,7 +39,6 @@ extensions: []
|
|
33
39
|
extra_rdoc_files: []
|
34
40
|
files:
|
35
41
|
- ".document"
|
36
|
-
- CHANGELOG.md
|
37
42
|
- CONTRIBUTING.md
|
38
43
|
- LICENSE.md
|
39
44
|
- README.md
|
@@ -49,14 +54,13 @@ files:
|
|
49
54
|
- lib/thor/base.rb
|
50
55
|
- lib/thor/command.rb
|
51
56
|
- lib/thor/core_ext/hash_with_indifferent_access.rb
|
52
|
-
- lib/thor/core_ext/io_binary_read.rb
|
53
|
-
- lib/thor/core_ext/ordered_hash.rb
|
54
57
|
- lib/thor/error.rb
|
55
58
|
- lib/thor/group.rb
|
56
59
|
- lib/thor/invocation.rb
|
57
60
|
- lib/thor/line_editor.rb
|
58
61
|
- lib/thor/line_editor/basic.rb
|
59
62
|
- lib/thor/line_editor/readline.rb
|
63
|
+
- lib/thor/nested_context.rb
|
60
64
|
- lib/thor/parser.rb
|
61
65
|
- lib/thor/parser/argument.rb
|
62
66
|
- lib/thor/parser/arguments.rb
|
@@ -74,7 +78,13 @@ files:
|
|
74
78
|
homepage: http://whatisthor.com/
|
75
79
|
licenses:
|
76
80
|
- MIT
|
77
|
-
metadata:
|
81
|
+
metadata:
|
82
|
+
bug_tracker_uri: https://github.com/rails/thor/issues
|
83
|
+
changelog_uri: https://github.com/rails/thor/releases/tag/v1.2.1
|
84
|
+
documentation_uri: http://whatisthor.com/
|
85
|
+
source_code_uri: https://github.com/rails/thor/tree/v1.2.1
|
86
|
+
wiki_uri: https://github.com/rails/thor/wiki
|
87
|
+
rubygems_mfa_required: 'true'
|
78
88
|
post_install_message:
|
79
89
|
rdoc_options: []
|
80
90
|
require_paths:
|
@@ -83,15 +93,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
83
93
|
requirements:
|
84
94
|
- - ">="
|
85
95
|
- !ruby/object:Gem::Version
|
86
|
-
version:
|
96
|
+
version: 2.0.0
|
87
97
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
88
98
|
requirements:
|
89
99
|
- - ">="
|
90
100
|
- !ruby/object:Gem::Version
|
91
101
|
version: 1.3.5
|
92
102
|
requirements: []
|
93
|
-
|
94
|
-
rubygems_version: 2.6.12
|
103
|
+
rubygems_version: 3.2.32
|
95
104
|
signing_key:
|
96
105
|
specification_version: 4
|
97
106
|
summary: Thor is a toolkit for building powerful command-line interfaces.
|