thor 1.2.1 → 1.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 30e79d2b0a96e87c8e6348467db577c6ad1e9acbbbac5d375417bc3e5a2b7698
4
- data.tar.gz: 701f1ab842da90e599b96bd00d90481d716eb29e39e0283b5ff527c2033fc742
3
+ metadata.gz: 51ab2cb4ae4ac2fe79583c377aa7385d47206d1e47ac0de5090f6a02de60f603
4
+ data.tar.gz: 8ec9bc5cb0cb2288d8c0909aff4d05e649e48404d97ea339f9db6cf7498c05da
5
5
  SHA512:
6
- metadata.gz: 73b1ac80575d4422204cd8072950b5594739db3b6f3fde0f2f04359d51b1d4428524d25b9a3003ae9ec3f6be615cf635f3057bbc65558e6a17ba490ff045988b
7
- data.tar.gz: eb7761a5e6f3674cb3231398145978b0eb53a6fa2c10e4cb9e99d8d523988efcefc8cae5dd163b8a3d6ead7424422d58b92311c200790ad6e2416e3f9757a90e
6
+ metadata.gz: 0ed6c11335f2f33c1fe2f49f4552110b1fad06c59547bd06b92e49fd01fa5b5a261d5298d7fabf5ca8ff9a8708e2f2d4ecb26e330b8aa2a4e20514c2e113cb94
7
+ data.tar.gz: 912dfd2214bad858c184ce1a8994e1eab38acb9ccecf6aaf68f257dbfaa586fa7e427ff0e234ee5b99b738dae2539194a2d2c1943aed9bc3bfd2c527e941a12c
@@ -60,7 +60,7 @@ class Thor
60
60
  invoke_with_conflict_check do
61
61
  require "fileutils"
62
62
  FileUtils.mkdir_p(File.dirname(destination))
63
- File.open(destination, "wb") { |f| f.write render }
63
+ File.open(destination, "wb", config[:perm]) { |f| f.write render }
64
64
  end
65
65
  given_destination
66
66
  end
@@ -85,7 +85,7 @@ class Thor
85
85
  URI.send(:open, source) { |input| input.binmode.read }
86
86
  else
87
87
  source = File.expand_path(find_in_source_paths(source.to_s))
88
- open(source) { |input| input.binmode.read }
88
+ File.open(source) { |input| input.binmode.read }
89
89
  end
90
90
 
91
91
  destination ||= if block_given?
@@ -252,7 +252,7 @@ class Thor
252
252
  # flag<Regexp|String>:: the regexp or string to be replaced
253
253
  # replacement<String>:: the replacement, can be also given as a block
254
254
  # config<Hash>:: give :verbose => false to not log the status, and
255
- # :force => true, to force the replacement regardles of runner behavior.
255
+ # :force => true, to force the replacement regardless of runner behavior.
256
256
  #
257
257
  # ==== Example
258
258
  #
@@ -21,7 +21,7 @@ class Thor
21
21
  # gems.split(" ").map{ |gem| " config.gem :#{gem}" }.join("\n")
22
22
  # end
23
23
  #
24
- WARNINGS = { unchanged_no_flag: 'File unchanged! The supplied flag value not found!' }
24
+ WARNINGS = { unchanged_no_flag: 'File unchanged! Either the supplied flag value not found or the content has already been inserted!' }
25
25
 
26
26
  def insert_into_file(destination, *args, &block)
27
27
  data = block_given? ? block : args.shift
data/lib/thor/actions.rb CHANGED
@@ -175,7 +175,7 @@ class Thor
175
175
  shell.padding += 1 if verbose
176
176
  @destination_stack.push File.expand_path(dir, destination_root)
177
177
 
178
- # If the directory doesnt exist and we're not pretending
178
+ # If the directory doesn't exist and we're not pretending
179
179
  if !File.exist?(destination_root) && !pretend
180
180
  require "fileutils"
181
181
  FileUtils.mkdir_p(destination_root)
@@ -223,9 +223,10 @@ class Thor
223
223
 
224
224
  contents = if is_uri
225
225
  require "open-uri"
226
- URI.open(path, "Accept" => "application/x-thor-template", &:read)
226
+ # for ruby 2.1-2.4
227
+ URI.send(:open, path, "Accept" => "application/x-thor-template", &:read)
227
228
  else
228
- open(path, &:read)
229
+ File.open(path, &:read)
229
230
  end
230
231
 
231
232
  instance_eval(contents, path)
data/lib/thor/base.rb CHANGED
@@ -506,7 +506,7 @@ class Thor
506
506
  #
507
507
  def public_command(*names)
508
508
  names.each do |name|
509
- class_eval "def #{name}(*); super end"
509
+ class_eval "def #{name}(*); super end", __FILE__, __LINE__
510
510
  end
511
511
  end
512
512
  alias_method :public_task, :public_command
@@ -558,8 +558,7 @@ class Thor
558
558
  return if options.empty?
559
559
 
560
560
  list = []
561
- padding = options.map { |o| o.aliases.size }.max.to_i * 4
562
-
561
+ padding = options.map { |o| o.aliases_for_usage.size }.max.to_i
563
562
  options.each do |option|
564
563
  next if option.hide
565
564
  item = [option.usage(padding)]
@@ -610,7 +609,7 @@ class Thor
610
609
  def find_and_refresh_command(name) #:nodoc:
611
610
  if commands[name.to_s]
612
611
  commands[name.to_s]
613
- elsif command = all_commands[name.to_s] # rubocop:disable AssignmentInCondition
612
+ elsif command = all_commands[name.to_s] # rubocop:disable Lint/AssignmentInCondition
614
613
  commands[name.to_s] = command.clone
615
614
  else
616
615
  raise ArgumentError, "You supplied :for => #{name.inspect}, but the command #{name.inspect} could not be found."
@@ -618,7 +617,7 @@ class Thor
618
617
  end
619
618
  alias_method :find_and_refresh_task, :find_and_refresh_command
620
619
 
621
- # Everytime someone inherits from a Thor class, register the klass
620
+ # Every time someone inherits from a Thor class, register the klass
622
621
  # and file into baseclass.
623
622
  def inherited(klass)
624
623
  super(klass)
data/lib/thor/error.rb CHANGED
@@ -11,7 +11,15 @@ class Thor
11
11
  end
12
12
  end
13
13
 
14
- DidYouMean::Correctable
14
+ Module.new do
15
+ def to_s
16
+ super + DidYouMean.formatter.message_for(corrections)
17
+ end
18
+
19
+ def corrections
20
+ @corrections ||= self.class.const_get(:SpellChecker).new(self).corrections
21
+ end
22
+ end
15
23
  end
16
24
 
17
25
  # Thor::Error is raised when it's caused by wrong usage of thor classes. Those
@@ -100,16 +108,4 @@ class Thor
100
108
 
101
109
  class MalformattedArgumentError < InvocationError
102
110
  end
103
-
104
- if Correctable
105
- if DidYouMean.respond_to?(:correct_error)
106
- DidYouMean.correct_error(Thor::UndefinedCommandError, UndefinedCommandError::SpellChecker)
107
- DidYouMean.correct_error(Thor::UnknownArgumentError, UnknownArgumentError::SpellChecker)
108
- else
109
- DidYouMean::SPELL_CHECKERS.merge!(
110
- 'Thor::UndefinedCommandError' => UndefinedCommandError::SpellChecker,
111
- 'Thor::UnknownArgumentError' => UnknownArgumentError::SpellChecker
112
- )
113
- end
114
- end
115
111
  end
data/lib/thor/group.rb CHANGED
@@ -169,7 +169,7 @@ class Thor::Group
169
169
  # options are added to group_options hash. Options that already exists
170
170
  # in base_options are not added twice.
171
171
  #
172
- def get_options_from_invocations(group_options, base_options) #:nodoc: # rubocop:disable MethodLength
172
+ def get_options_from_invocations(group_options, base_options) #:nodoc:
173
173
  invocations.each do |name, from_option|
174
174
  value = if from_option
175
175
  option = class_options[name]
@@ -1,5 +1,5 @@
1
1
  class Thor
2
- class Arguments #:nodoc: # rubocop:disable ClassLength
2
+ class Arguments #:nodoc:
3
3
  NUMERIC = /[-+]?(\d*\.\d+|\d+)/
4
4
 
5
5
  # Receives an array of args and returns two arrays, one with arguments
@@ -58,7 +58,7 @@ class Thor
58
58
  default = nil
59
59
  if VALID_TYPES.include?(value)
60
60
  value
61
- elsif required = (value == :required) # rubocop:disable AssignmentInCondition
61
+ elsif required = (value == :required) # rubocop:disable Lint/AssignmentInCondition
62
62
  :string
63
63
  end
64
64
  when TrueClass, FalseClass
@@ -93,10 +93,14 @@ class Thor
93
93
  sample << ", [#{dasherize('no-' + human_name)}]" unless (name == "force") || name.start_with?("no-")
94
94
  end
95
95
 
96
+ aliases_for_usage.ljust(padding) + sample
97
+ end
98
+
99
+ def aliases_for_usage
96
100
  if aliases.empty?
97
- (" " * padding) << sample
101
+ ""
98
102
  else
99
- "#{aliases.join(', ')}, #{sample}"
103
+ "#{aliases.join(', ')}, "
100
104
  end
101
105
  end
102
106
 
@@ -1,5 +1,5 @@
1
1
  class Thor
2
- class Options < Arguments #:nodoc: # rubocop:disable ClassLength
2
+ class Options < Arguments #:nodoc:
3
3
  LONG_RE = /^(--\w+(?:-\w+)*)$/
4
4
  SHORT_RE = /^(-[a-z])$/i
5
5
  EQ_RE = /^(--\w+(?:-\w+)*|-[a-z])=(.*)$/i
@@ -85,7 +85,7 @@ class Thor
85
85
  super(arg)
86
86
  end
87
87
 
88
- def parse(args) # rubocop:disable MethodLength
88
+ def parse(args) # rubocop:disable Metrics/MethodLength
89
89
  @pile = args.dup
90
90
  @is_treated_as_value = false
91
91
  @parsing_options = true
@@ -101,7 +101,7 @@ class Thor
101
101
  unshift($1.split("").map { |f| "-#{f}" })
102
102
  next
103
103
  when EQ_RE
104
- unshift($2, is_value: true)
104
+ unshift($2, :is_value => true)
105
105
  switch = $1
106
106
  when SHORT_NUM
107
107
  unshift($2)
@@ -194,7 +194,7 @@ class Thor
194
194
  end
195
195
 
196
196
  def switch_option(arg)
197
- if match = no_or_skip?(arg) # rubocop:disable AssignmentInCondition
197
+ if match = no_or_skip?(arg) # rubocop:disable Lint/AssignmentInCondition
198
198
  @switches[arg] || @switches["--#{match}"]
199
199
  else
200
200
  @switches[arg]
@@ -41,7 +41,7 @@ instance_eval do
41
41
  def task(*)
42
42
  task = super
43
43
 
44
- if klass = Thor::RakeCompat.rake_classes.last # rubocop:disable AssignmentInCondition
44
+ if klass = Thor::RakeCompat.rake_classes.last # rubocop:disable Lint/AssignmentInCondition
45
45
  non_namespaced_name = task.name.split(":").last
46
46
 
47
47
  description = non_namespaced_name
@@ -59,7 +59,7 @@ instance_eval do
59
59
  end
60
60
 
61
61
  def namespace(name)
62
- if klass = Thor::RakeCompat.rake_classes.last # rubocop:disable AssignmentInCondition
62
+ if klass = Thor::RakeCompat.rake_classes.last # rubocop:disable Lint/AssignmentInCondition
63
63
  const_name = Thor::Util.camel_case(name.to_s).to_sym
64
64
  klass.const_set(const_name, Class.new(Thor))
65
65
  new_klass = klass.const_get(const_name)
data/lib/thor/runner.rb CHANGED
@@ -2,12 +2,10 @@ require_relative "../thor"
2
2
  require_relative "group"
3
3
 
4
4
  require "yaml"
5
- require "digest/md5"
5
+ require "digest/sha2"
6
6
  require "pathname"
7
7
 
8
- class Thor::Runner < Thor #:nodoc: # rubocop:disable ClassLength
9
- autoload :OpenURI, "open-uri"
10
-
8
+ class Thor::Runner < Thor #:nodoc:
11
9
  map "-T" => :list, "-i" => :install, "-u" => :update, "-v" => :version
12
10
 
13
11
  def self.banner(command, all = false, subcommand = false)
@@ -45,25 +43,37 @@ class Thor::Runner < Thor #:nodoc: # rubocop:disable ClassLength
45
43
 
46
44
  desc "install NAME", "Install an optionally named Thor file into your system commands"
47
45
  method_options :as => :string, :relative => :boolean, :force => :boolean
48
- def install(name) # rubocop:disable MethodLength
46
+ def install(name) # rubocop:disable Metrics/MethodLength
49
47
  initialize_thorfiles
50
48
 
51
- # If a directory name is provided as the argument, look for a 'main.thor'
52
- # command in said directory.
53
- begin
54
- if File.directory?(File.expand_path(name))
55
- base = File.join(name, "main.thor")
56
- package = :directory
57
- contents = open(base, &:read)
58
- else
59
- base = name
60
- package = :file
61
- contents = open(name, &:read)
49
+ is_uri = name =~ %r{^https?\://}
50
+
51
+ if is_uri
52
+ base = name
53
+ package = :file
54
+ require "open-uri"
55
+ begin
56
+ contents = URI.send(:open, name, &:read) # Using `send` for Ruby 2.4- support
57
+ rescue OpenURI::HTTPError
58
+ raise Error, "Error opening URI '#{name}'"
59
+ end
60
+ else
61
+ # If a directory name is provided as the argument, look for a 'main.thor'
62
+ # command in said directory.
63
+ begin
64
+ if File.directory?(File.expand_path(name))
65
+ base = File.join(name, "main.thor")
66
+ package = :directory
67
+ contents = File.open(base, &:read)
68
+ else
69
+ base = name
70
+ package = :file
71
+ require "open-uri"
72
+ contents = URI.send(:open, name, &:read) # for ruby 2.1-2.4
73
+ end
74
+ rescue Errno::ENOENT
75
+ raise Error, "Error opening file '#{name}'"
62
76
  end
63
- rescue OpenURI::HTTPError
64
- raise Error, "Error opening URI '#{name}'"
65
- rescue Errno::ENOENT
66
- raise Error, "Error opening file '#{name}'"
67
77
  end
68
78
 
69
79
  say "Your Thorfile contains:"
@@ -84,14 +94,14 @@ class Thor::Runner < Thor #:nodoc: # rubocop:disable ClassLength
84
94
  as = basename if as.empty?
85
95
  end
86
96
 
87
- location = if options[:relative] || name =~ %r{^https?://}
97
+ location = if options[:relative] || is_uri
88
98
  name
89
99
  else
90
100
  File.expand_path(name)
91
101
  end
92
102
 
93
103
  thor_yaml[as] = {
94
- :filename => Digest::MD5.hexdigest(name + as),
104
+ :filename => Digest::SHA256.hexdigest(name + as),
95
105
  :location => location,
96
106
  :namespaces => Thor::Util.namespaces_in_content(contents, base)
97
107
  }
@@ -182,7 +182,7 @@ class Thor
182
182
  # indent<Integer>:: Indent the first column by indent value.
183
183
  # colwidth<Integer>:: Force the first column to colwidth spaces wide.
184
184
  #
185
- def print_table(array, options = {}) # rubocop:disable MethodLength
185
+ def print_table(array, options = {}) # rubocop:disable Metrics/MethodLength
186
186
  return if array.empty?
187
187
 
188
188
  formats = []
@@ -425,7 +425,7 @@ class Thor
425
425
  end
426
426
 
427
427
  def unix?
428
- RUBY_PLATFORM =~ /(aix|darwin|linux|(net|free|open)bsd|cygwin|solaris|irix|hpux)/i
428
+ RUBY_PLATFORM =~ /(aix|darwin|linux|(net|free|open)bsd|cygwin|solaris)/i
429
429
  end
430
430
 
431
431
  def truncate(string, width)
@@ -105,7 +105,7 @@ class Thor
105
105
  end
106
106
 
107
107
  def are_colors_disabled?
108
- !ENV['NO_COLOR'].nil?
108
+ !ENV['NO_COLOR'].nil? && !ENV['NO_COLOR'].empty?
109
109
  end
110
110
 
111
111
  # Overwrite show_diff to show diff with colors if Diff::LCS is
data/lib/thor/util.rb CHANGED
@@ -90,7 +90,7 @@ class Thor
90
90
  def snake_case(str)
91
91
  return str.downcase if str =~ /^[A-Z_]+$/
92
92
  str.gsub(/\B[A-Z]/, '_\&').squeeze("_") =~ /_*(.*)/
93
- $+.downcase
93
+ Regexp.last_match(-1).downcase
94
94
  end
95
95
 
96
96
  # Receives a string and convert it to camel case. camel_case returns CamelCase.
@@ -150,7 +150,7 @@ class Thor
150
150
  # inside the sandbox to avoid namespacing conflicts.
151
151
  #
152
152
  def load_thorfile(path, content = nil, debug = false)
153
- content ||= File.binread(path)
153
+ content ||= File.read(path)
154
154
 
155
155
  begin
156
156
  Thor::Sandbox.class_eval(content, path)
@@ -189,7 +189,7 @@ class Thor
189
189
  # Returns the root where thor files are located, depending on the OS.
190
190
  #
191
191
  def thor_root
192
- File.join(user_home, ".thor").tr('\\', "/")
192
+ File.join(user_home, ".thor").tr("\\", "/")
193
193
  end
194
194
 
195
195
  # Returns the files in the thor root. On Windows thor_root will be something
@@ -236,7 +236,7 @@ class Thor
236
236
  # symlink points to 'ruby_install_name'
237
237
  ruby = alternate_ruby if linked_ruby == ruby_name || linked_ruby == ruby
238
238
  end
239
- rescue NotImplementedError # rubocop:disable HandleExceptions
239
+ rescue NotImplementedError # rubocop:disable Lint/HandleExceptions
240
240
  # just ignore on windows
241
241
  end
242
242
  end
data/lib/thor/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  class Thor
2
- VERSION = "1.2.1"
2
+ VERSION = "1.2.2"
3
3
  end
data/lib/thor.rb CHANGED
@@ -356,7 +356,7 @@ class Thor
356
356
  end
357
357
 
358
358
  # The method responsible for dispatching given the args.
359
- def dispatch(meth, given_args, given_opts, config) #:nodoc: # rubocop:disable MethodLength
359
+ def dispatch(meth, given_args, given_opts, config) #:nodoc:
360
360
  meth ||= retrieve_command_name(given_args)
361
361
  command = all_commands[normalize_command_name(meth)]
362
362
 
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: 1.2.1
4
+ version: 1.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yehuda Katz
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-01-04 00:00:00.000000000 Z
12
+ date: 2023-05-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -80,9 +80,9 @@ licenses:
80
80
  - MIT
81
81
  metadata:
82
82
  bug_tracker_uri: https://github.com/rails/thor/issues
83
- changelog_uri: https://github.com/rails/thor/releases/tag/v1.2.1
83
+ changelog_uri: https://github.com/rails/thor/releases/tag/v1.2.2
84
84
  documentation_uri: http://whatisthor.com/
85
- source_code_uri: https://github.com/rails/thor/tree/v1.2.1
85
+ source_code_uri: https://github.com/rails/thor/tree/v1.2.2
86
86
  wiki_uri: https://github.com/rails/thor/wiki
87
87
  rubygems_mfa_required: 'true'
88
88
  post_install_message:
@@ -100,7 +100,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
100
100
  - !ruby/object:Gem::Version
101
101
  version: 1.3.5
102
102
  requirements: []
103
- rubygems_version: 3.2.32
103
+ rubygems_version: 3.4.10
104
104
  signing_key:
105
105
  specification_version: 4
106
106
  summary: Thor is a toolkit for building powerful command-line interfaces.