bundler 1.8.9 → 1.9.0.pre
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of bundler might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.travis.yml +9 -7
- data/CHANGELOG.md +8 -33
- data/Rakefile +51 -8
- data/lib/bundler/cli/gem.rb +20 -1
- data/lib/bundler/cli/install.rb +1 -1
- data/lib/bundler/definition.rb +8 -12
- data/lib/bundler/dep_proxy.rb +2 -2
- data/lib/bundler/installer.rb +12 -18
- data/lib/bundler/resolver.rb +168 -383
- data/lib/bundler/rubygems_ext.rb +1 -1
- data/lib/bundler/rubygems_integration.rb +6 -14
- data/lib/bundler/runtime.rb +3 -0
- data/lib/bundler/shared_helpers.rb +12 -7
- data/lib/bundler/source.rb +0 -5
- data/lib/bundler/source/path.rb +2 -1
- data/lib/bundler/source/path/installer.rb +0 -2
- data/lib/bundler/source/rubygems.rb +9 -11
- data/lib/bundler/templates/newgem/Rakefile.tt +0 -1
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +1 -1
- data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo.rb +5 -0
- data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo/dependency_graph.rb +266 -0
- data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo/errors.rb +69 -0
- data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo/gem_metadata.rb +3 -0
- data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo/modules/specification_provider.rb +90 -0
- data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo/modules/ui.rb +63 -0
- data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo/resolution.rb +412 -0
- data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo/resolver.rb +43 -0
- data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo/state.rb +43 -0
- data/lib/bundler/vendor/{thor.rb → thor-0.19.1/lib/thor.rb} +57 -53
- data/lib/bundler/vendor/{thor → thor-0.19.1/lib/thor}/actions.rb +34 -34
- data/lib/bundler/vendor/{thor → thor-0.19.1/lib/thor}/actions/create_file.rb +7 -7
- data/lib/bundler/vendor/{thor → thor-0.19.1/lib/thor}/actions/create_link.rb +2 -2
- data/lib/bundler/vendor/{thor → thor-0.19.1/lib/thor}/actions/directory.rb +11 -11
- data/lib/bundler/vendor/{thor → thor-0.19.1/lib/thor}/actions/empty_directory.rb +2 -2
- data/lib/bundler/vendor/{thor → thor-0.19.1/lib/thor}/actions/file_manipulation.rb +14 -14
- data/lib/bundler/vendor/{thor → thor-0.19.1/lib/thor}/actions/inject_into_file.rb +24 -24
- data/lib/bundler/vendor/{thor → thor-0.19.1/lib/thor}/base.rb +71 -71
- data/lib/bundler/vendor/{thor → thor-0.19.1/lib/thor}/command.rb +8 -8
- data/lib/bundler/vendor/{thor → thor-0.19.1/lib/thor}/core_ext/hash_with_indifferent_access.rb +2 -2
- data/lib/bundler/vendor/{thor → thor-0.19.1/lib/thor}/core_ext/io_binary_read.rb +1 -1
- data/lib/bundler/vendor/{thor → thor-0.19.1/lib/thor}/core_ext/ordered_hash.rb +2 -2
- data/lib/bundler/vendor/{thor → thor-0.19.1/lib/thor}/error.rb +3 -3
- data/lib/bundler/vendor/{thor → thor-0.19.1/lib/thor}/group.rb +27 -27
- data/lib/bundler/vendor/{thor → thor-0.19.1/lib/thor}/invocation.rb +16 -11
- data/lib/bundler/vendor/thor-0.19.1/lib/thor/line_editor.rb +17 -0
- data/lib/bundler/vendor/{thor → thor-0.19.1/lib/thor}/line_editor/basic.rb +2 -2
- data/lib/bundler/vendor/{thor → thor-0.19.1/lib/thor}/line_editor/readline.rb +7 -7
- data/lib/bundler/vendor/thor-0.19.1/lib/thor/parser.rb +4 -0
- data/lib/bundler/vendor/{thor → thor-0.19.1/lib/thor}/parser/argument.rb +7 -7
- data/lib/bundler/vendor/{thor → thor-0.19.1/lib/thor}/parser/arguments.rb +10 -10
- data/lib/bundler/vendor/{thor → thor-0.19.1/lib/thor}/parser/option.rb +14 -10
- data/lib/bundler/vendor/{thor → thor-0.19.1/lib/thor}/parser/options.rb +12 -12
- data/lib/bundler/vendor/{thor → thor-0.19.1/lib/thor}/rake_compat.rb +14 -14
- data/lib/bundler/vendor/{thor → thor-0.19.1/lib/thor}/runner.rb +76 -76
- data/lib/bundler/vendor/{thor → thor-0.19.1/lib/thor}/shell.rb +18 -18
- data/lib/bundler/vendor/{thor → thor-0.19.1/lib/thor}/shell/basic.rb +31 -30
- data/lib/bundler/vendor/{thor → thor-0.19.1/lib/thor}/shell/color.rb +10 -10
- data/lib/bundler/vendor/{thor → thor-0.19.1/lib/thor}/shell/html.rb +28 -28
- data/lib/bundler/vendor/{thor → thor-0.19.1/lib/thor}/util.rb +61 -61
- data/lib/bundler/vendor/thor-0.19.1/lib/thor/version.rb +3 -0
- data/lib/bundler/vendored_molinillo.rb +5 -0
- data/lib/bundler/vendored_thor.rb +3 -6
- data/lib/bundler/version.rb +1 -1
- metadata +44 -35
- data/lib/bundler/vendor/.document +0 -0
- data/lib/bundler/vendor/thor/line_editor.rb +0 -17
- data/lib/bundler/vendor/thor/parser.rb +0 -4
- data/lib/bundler/vendor/thor/version.rb +0 -3
@@ -1,21 +1,21 @@
|
|
1
|
-
require
|
1
|
+
require "rbconfig"
|
2
2
|
|
3
|
-
class Thor
|
3
|
+
class Bundler::Thor
|
4
4
|
module Base
|
5
5
|
class << self
|
6
6
|
attr_writer :shell
|
7
7
|
|
8
|
-
# Returns the shell used in all Thor classes. If you are in a Unix platform
|
8
|
+
# Returns the shell used in all Bundler::Thor classes. If you are in a Unix platform
|
9
9
|
# it will use a colored log, otherwise it will use a basic one without color.
|
10
10
|
#
|
11
11
|
def shell
|
12
|
-
@shell ||= if ENV[
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
12
|
+
@shell ||= if ENV["THOR_SHELL"] && ENV["THOR_SHELL"].size > 0
|
13
|
+
Bundler::Thor::Shell.const_get(ENV["THOR_SHELL"])
|
14
|
+
elsif RbConfig::CONFIG["host_os"] =~ /mswin|mingw/ && !ENV["ANSICON"]
|
15
|
+
Bundler::Thor::Shell::Basic
|
16
|
+
else
|
17
|
+
Bundler::Thor::Shell::Color
|
18
|
+
end
|
19
19
|
end
|
20
20
|
end
|
21
21
|
end
|
@@ -24,9 +24,9 @@ class Thor
|
|
24
24
|
SHELL_DELEGATED_METHODS = [:ask, :error, :set_color, :yes?, :no?, :say, :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, "thor/shell/basic"
|
28
|
+
autoload :Color, "thor/shell/color"
|
29
|
+
autoload :HTML, "thor/shell/html"
|
30
30
|
|
31
31
|
# Add shell to initialize config values.
|
32
32
|
#
|
@@ -35,11 +35,11 @@ class Thor
|
|
35
35
|
#
|
36
36
|
# ==== Examples
|
37
37
|
#
|
38
|
-
# class MyScript < Thor
|
38
|
+
# class MyScript < Bundler::Thor
|
39
39
|
# argument :first, :type => :numeric
|
40
40
|
# end
|
41
41
|
#
|
42
|
-
# MyScript.new [1.0], { :foo => :bar }, :shell => Thor::Shell::Basic.new
|
42
|
+
# MyScript.new [1.0], { :foo => :bar }, :shell => Bundler::Thor::Shell::Basic.new
|
43
43
|
#
|
44
44
|
def initialize(args = [], options = {}, config = {})
|
45
45
|
super
|
@@ -47,10 +47,10 @@ class Thor
|
|
47
47
|
shell.base ||= self if shell.respond_to?(:base)
|
48
48
|
end
|
49
49
|
|
50
|
-
# Holds the shell for the given Thor instance. If no shell is given,
|
51
|
-
# it gets a default shell from Thor::Base.shell.
|
50
|
+
# Holds the shell for the given Bundler::Thor instance. If no shell is given,
|
51
|
+
# it gets a default shell from Bundler::Thor::Base.shell.
|
52
52
|
def shell
|
53
|
-
@shell ||= Thor::Base.shell.new
|
53
|
+
@shell ||= Bundler::Thor::Base.shell.new
|
54
54
|
end
|
55
55
|
|
56
56
|
# Common methods that are delegated to the shell.
|
@@ -1,6 +1,7 @@
|
|
1
|
-
require
|
1
|
+
require "tempfile"
|
2
|
+
require "io/console" if RUBY_VERSION > "1.9.2"
|
2
3
|
|
3
|
-
class Thor
|
4
|
+
class Bundler::Thor
|
4
5
|
module Shell
|
5
6
|
class Basic # rubocop:disable ClassLength
|
6
7
|
attr_accessor :base
|
@@ -75,9 +76,9 @@ class Thor
|
|
75
76
|
# ==== Example
|
76
77
|
# say("I know you knew that.")
|
77
78
|
#
|
78
|
-
def say(message =
|
79
|
+
def say(message = "", color = nil, force_new_line = (message.to_s !~ /( |\t)\Z/))
|
79
80
|
buffer = prepare_message(message, *color)
|
80
|
-
buffer << "\n" if force_new_line && !message.end_with?("\n")
|
81
|
+
buffer << "\n" if force_new_line && !message.to_s.end_with?("\n")
|
81
82
|
|
82
83
|
stdout.print(buffer)
|
83
84
|
stdout.flush
|
@@ -90,7 +91,7 @@ class Thor
|
|
90
91
|
#
|
91
92
|
def say_status(status, message, log_status = true)
|
92
93
|
return if quiet? || log_status == false
|
93
|
-
spaces =
|
94
|
+
spaces = " " * (padding + 1)
|
94
95
|
color = log_status.is_a?(Symbol) ? log_status : :green
|
95
96
|
|
96
97
|
status = status.to_s.rjust(12)
|
@@ -162,17 +163,17 @@ class Thor
|
|
162
163
|
maximas << maxima
|
163
164
|
if index == colcount - 1
|
164
165
|
# Don't output 2 trailing spaces when printing the last column
|
165
|
-
formats <<
|
166
|
+
formats << "%-s"
|
166
167
|
else
|
167
168
|
formats << "%-#{maxima + 2}s"
|
168
169
|
end
|
169
170
|
end
|
170
171
|
|
171
|
-
formats[0] = formats[0].insert(0,
|
172
|
-
formats <<
|
172
|
+
formats[0] = formats[0].insert(0, " " * indent)
|
173
|
+
formats << "%s"
|
173
174
|
|
174
175
|
array.each do |row|
|
175
|
-
sentence =
|
176
|
+
sentence = ""
|
176
177
|
|
177
178
|
row.each_with_index do |column, index|
|
178
179
|
maxima = maximas[index]
|
@@ -210,12 +211,12 @@ class Thor
|
|
210
211
|
paras = message.split("\n\n")
|
211
212
|
|
212
213
|
paras.map! do |unwrapped|
|
213
|
-
unwrapped.strip.gsub(/\n/,
|
214
|
+
unwrapped.strip.gsub(/\n/, " ").squeeze(" ").gsub(/.{1,#{width}}(?:\s|\Z)/) { ($& + 5.chr).gsub(/\n\005/, "\n").gsub(/\005/, "\n") }
|
214
215
|
end
|
215
216
|
|
216
217
|
paras.each do |para|
|
217
218
|
para.split("\n").each do |line|
|
218
|
-
stdout.puts line.insert(0,
|
219
|
+
stdout.puts line.insert(0, " " * indent)
|
219
220
|
end
|
220
221
|
stdout.puts unless para == paras.last
|
221
222
|
end
|
@@ -231,7 +232,7 @@ class Thor
|
|
231
232
|
#
|
232
233
|
def file_collision(destination) # rubocop:disable MethodLength
|
233
234
|
return true if @always_force
|
234
|
-
options = block_given? ?
|
235
|
+
options = block_given? ? "[Ynaqdh]" : "[Ynaqh]"
|
235
236
|
|
236
237
|
loop do
|
237
238
|
answer = ask(
|
@@ -240,18 +241,18 @@ class Thor
|
|
240
241
|
)
|
241
242
|
|
242
243
|
case answer
|
243
|
-
when is?(:yes), is?(:force),
|
244
|
+
when is?(:yes), is?(:force), ""
|
244
245
|
return true
|
245
246
|
when is?(:no), is?(:skip)
|
246
247
|
return false
|
247
248
|
when is?(:always)
|
248
249
|
return @always_force = true
|
249
250
|
when is?(:quit)
|
250
|
-
say
|
251
|
+
say "Aborting..."
|
251
252
|
fail SystemExit
|
252
253
|
when is?(:diff)
|
253
254
|
show_diff(destination, yield) if block_given?
|
254
|
-
say
|
255
|
+
say "Retrying..."
|
255
256
|
else
|
256
257
|
say file_collision_help
|
257
258
|
end
|
@@ -261,8 +262,8 @@ class Thor
|
|
261
262
|
# This code was copied from Rake, available under MIT-LICENSE
|
262
263
|
# Copyright (c) 2003, 2004 Jim Weirich
|
263
264
|
def terminal_width
|
264
|
-
if ENV[
|
265
|
-
result = ENV[
|
265
|
+
if ENV["THOR_COLUMNS"]
|
266
|
+
result = ENV["THOR_COLUMNS"].to_i
|
266
267
|
else
|
267
268
|
result = unix? ? dynamic_width : 80
|
268
269
|
end
|
@@ -271,9 +272,9 @@ class Thor
|
|
271
272
|
80
|
272
273
|
end
|
273
274
|
|
274
|
-
# Called if something goes wrong during the execution. This is used by Thor
|
275
|
+
# Called if something goes wrong during the execution. This is used by Bundler::Thor
|
275
276
|
# internally and should not be used inside your scripts. If something went
|
276
|
-
# wrong, you can always raise an exception. If you raise a Thor::Error, it
|
277
|
+
# wrong, you can always raise an exception. If you raise a Bundler::Thor::Error, it
|
277
278
|
# will be rescued and wrapped in the method below.
|
278
279
|
#
|
279
280
|
def error(statement)
|
@@ -281,7 +282,7 @@ class Thor
|
|
281
282
|
end
|
282
283
|
|
283
284
|
# Apply color to the given string with optional bold. Disabled in the
|
284
|
-
# Thor::Shell::Basic class.
|
285
|
+
# Bundler::Thor::Shell::Basic class.
|
285
286
|
#
|
286
287
|
def set_color(string, *args) #:nodoc:
|
287
288
|
string
|
@@ -333,7 +334,7 @@ class Thor
|
|
333
334
|
end
|
334
335
|
|
335
336
|
def show_diff(destination, content) #:nodoc:
|
336
|
-
diff_cmd = ENV[
|
337
|
+
diff_cmd = ENV["THOR_DIFF"] || ENV["RAILS_DIFF"] || "diff -u"
|
337
338
|
|
338
339
|
Tempfile.open(File.basename(destination), File.dirname(destination)) do |temp|
|
339
340
|
temp.write content
|
@@ -352,11 +353,11 @@ class Thor
|
|
352
353
|
end
|
353
354
|
|
354
355
|
def dynamic_width_stty
|
355
|
-
%x
|
356
|
+
%x(stty size 2>/dev/null).split[1].to_i
|
356
357
|
end
|
357
358
|
|
358
359
|
def dynamic_width_tput
|
359
|
-
%x
|
360
|
+
%x(tput cols 2>/dev/null).to_i
|
360
361
|
end
|
361
362
|
|
362
363
|
def unix?
|
@@ -369,18 +370,18 @@ class Thor
|
|
369
370
|
if chars.length <= width
|
370
371
|
chars.join
|
371
372
|
else
|
372
|
-
( chars[0, width - 3].join) +
|
373
|
+
( chars[0, width - 3].join) + "..."
|
373
374
|
end
|
374
375
|
end
|
375
376
|
end
|
376
377
|
|
377
|
-
if
|
378
|
+
if "".respond_to?(:encode)
|
378
379
|
def as_unicode
|
379
380
|
yield
|
380
381
|
end
|
381
382
|
else
|
382
383
|
def as_unicode
|
383
|
-
old, $KCODE = $KCODE,
|
384
|
+
old, $KCODE = $KCODE, "U"
|
384
385
|
yield
|
385
386
|
ensure
|
386
387
|
$KCODE = old
|
@@ -389,15 +390,15 @@ class Thor
|
|
389
390
|
|
390
391
|
def ask_simply(statement, color, options)
|
391
392
|
default = options[:default]
|
392
|
-
message = [statement, ("(#{default})" if default), nil].uniq.join(
|
393
|
+
message = [statement, ("(#{default})" if default), nil].uniq.join(" ")
|
393
394
|
message = prepare_message(message, color)
|
394
|
-
result = Thor::LineEditor.readline(message, options)
|
395
|
+
result = Bundler::Thor::LineEditor.readline(message, options)
|
395
396
|
|
396
397
|
return unless result
|
397
398
|
|
398
399
|
result.strip!
|
399
400
|
|
400
|
-
if default && result ==
|
401
|
+
if default && result == ""
|
401
402
|
default
|
402
403
|
else
|
403
404
|
result
|
@@ -408,7 +409,7 @@ class Thor
|
|
408
409
|
answer_set = options[:limited_to]
|
409
410
|
correct_answer = nil
|
410
411
|
until correct_answer
|
411
|
-
answers = answer_set.join(
|
412
|
+
answers = answer_set.join(", ")
|
412
413
|
answer = ask_simply("#{statement} [#{answers}]", color, options)
|
413
414
|
correct_answer = answer_set.include?(answer) ? answer : nil
|
414
415
|
say("Your response must be one of: [#{answers}]. Please try again.") unless correct_answer
|
@@ -1,9 +1,9 @@
|
|
1
|
-
require
|
1
|
+
require "thor/shell/basic"
|
2
2
|
|
3
|
-
class Thor
|
3
|
+
class Bundler::Thor
|
4
4
|
module Shell
|
5
|
-
# Inherit from Thor::Shell::Basic and add set_color behavior. Check
|
6
|
-
# Thor::Shell::Basic to see all available methods.
|
5
|
+
# Inherit from Bundler::Thor::Shell::Basic and add set_color behavior. Check
|
6
|
+
# Bundler::Thor::Shell::Basic to see all available methods.
|
7
7
|
#
|
8
8
|
class Color < Basic
|
9
9
|
# Embed in a String to clear all previous ANSI sequences.
|
@@ -89,7 +89,7 @@ class Thor
|
|
89
89
|
foreground, bold = colors
|
90
90
|
foreground = self.class.const_get(foreground.to_s.upcase) if foreground.is_a?(Symbol)
|
91
91
|
|
92
|
-
bold = bold ? BOLD :
|
92
|
+
bold = bold ? BOLD : ""
|
93
93
|
"#{bold}#{foreground}#{string}#{CLEAR}"
|
94
94
|
end
|
95
95
|
end
|
@@ -104,7 +104,7 @@ class Thor
|
|
104
104
|
# available.
|
105
105
|
#
|
106
106
|
def show_diff(destination, content) #:nodoc:
|
107
|
-
if diff_lcs_loaded? && ENV[
|
107
|
+
if diff_lcs_loaded? && ENV["THOR_DIFF"].nil? && ENV["RAILS_DIFF"].nil?
|
108
108
|
actual = File.binread(destination).to_s.split("\n")
|
109
109
|
content = content.to_s.split("\n")
|
110
110
|
|
@@ -118,11 +118,11 @@ class Thor
|
|
118
118
|
|
119
119
|
def output_diff_line(diff) #:nodoc:
|
120
120
|
case diff.action
|
121
|
-
when
|
121
|
+
when "-"
|
122
122
|
say "- #{diff.old_element.chomp}", :red, true
|
123
|
-
when
|
123
|
+
when "+"
|
124
124
|
say "+ #{diff.new_element.chomp}", :green, true
|
125
|
-
when
|
125
|
+
when "!"
|
126
126
|
say "- #{diff.old_element.chomp}", :red, true
|
127
127
|
say "+ #{diff.new_element.chomp}", :green, true
|
128
128
|
else
|
@@ -138,7 +138,7 @@ class Thor
|
|
138
138
|
return @diff_lcs_loaded unless @diff_lcs_loaded.nil?
|
139
139
|
|
140
140
|
@diff_lcs_loaded = begin
|
141
|
-
require
|
141
|
+
require "diff/lcs"
|
142
142
|
true
|
143
143
|
rescue LoadError
|
144
144
|
false
|
@@ -1,47 +1,47 @@
|
|
1
|
-
require
|
1
|
+
require "thor/shell/basic"
|
2
2
|
|
3
|
-
class Thor
|
3
|
+
class Bundler::Thor
|
4
4
|
module Shell
|
5
|
-
# Inherit from Thor::Shell::Basic and add set_color behavior. Check
|
6
|
-
# Thor::Shell::Basic to see all available methods.
|
5
|
+
# Inherit from Bundler::Thor::Shell::Basic and add set_color behavior. Check
|
6
|
+
# Bundler::Thor::Shell::Basic to see all available methods.
|
7
7
|
#
|
8
8
|
class HTML < Basic
|
9
9
|
# The start of an HTML bold sequence.
|
10
|
-
BOLD =
|
10
|
+
BOLD = "font-weight: bold"
|
11
11
|
|
12
12
|
# Set the terminal's foreground HTML color to black.
|
13
|
-
BLACK =
|
13
|
+
BLACK = "color: black"
|
14
14
|
# Set the terminal's foreground HTML color to red.
|
15
|
-
RED =
|
15
|
+
RED = "color: red"
|
16
16
|
# Set the terminal's foreground HTML color to green.
|
17
|
-
GREEN =
|
17
|
+
GREEN = "color: green"
|
18
18
|
# Set the terminal's foreground HTML color to yellow.
|
19
|
-
YELLOW =
|
19
|
+
YELLOW = "color: yellow"
|
20
20
|
# Set the terminal's foreground HTML color to blue.
|
21
|
-
BLUE =
|
21
|
+
BLUE = "color: blue"
|
22
22
|
# Set the terminal's foreground HTML color to magenta.
|
23
|
-
MAGENTA =
|
23
|
+
MAGENTA = "color: magenta"
|
24
24
|
# Set the terminal's foreground HTML color to cyan.
|
25
|
-
CYAN =
|
25
|
+
CYAN = "color: cyan"
|
26
26
|
# Set the terminal's foreground HTML color to white.
|
27
|
-
WHITE =
|
27
|
+
WHITE = "color: white"
|
28
28
|
|
29
29
|
# Set the terminal's background HTML color to black.
|
30
|
-
ON_BLACK =
|
30
|
+
ON_BLACK = "background-color: black"
|
31
31
|
# Set the terminal's background HTML color to red.
|
32
|
-
ON_RED =
|
32
|
+
ON_RED = "background-color: red"
|
33
33
|
# Set the terminal's background HTML color to green.
|
34
|
-
ON_GREEN =
|
34
|
+
ON_GREEN = "background-color: green"
|
35
35
|
# Set the terminal's background HTML color to yellow.
|
36
|
-
ON_YELLOW =
|
36
|
+
ON_YELLOW = "background-color: yellow"
|
37
37
|
# Set the terminal's background HTML color to blue.
|
38
|
-
ON_BLUE =
|
38
|
+
ON_BLUE = "background-color: blue"
|
39
39
|
# Set the terminal's background HTML color to magenta.
|
40
|
-
ON_MAGENTA =
|
40
|
+
ON_MAGENTA = "background-color: magenta"
|
41
41
|
# Set the terminal's background HTML color to cyan.
|
42
|
-
ON_CYAN =
|
42
|
+
ON_CYAN = "background-color: cyan"
|
43
43
|
# Set the terminal's background HTML color to white.
|
44
|
-
ON_WHITE =
|
44
|
+
ON_WHITE = "background-color: white"
|
45
45
|
|
46
46
|
# Set color by using a string or one of the defined constants. If a third
|
47
47
|
# option is set to true, it also adds bold to the string. This is based
|
@@ -66,9 +66,9 @@ class Thor
|
|
66
66
|
# ==== Example
|
67
67
|
# ask("What is your name?")
|
68
68
|
#
|
69
|
-
# TODO: Implement #ask for Thor::Shell::HTML
|
69
|
+
# TODO: Implement #ask for Bundler::Thor::Shell::HTML
|
70
70
|
def ask(statement, color = nil)
|
71
|
-
fail NotImplementedError,
|
71
|
+
fail NotImplementedError, "Implement #ask for Bundler::Thor::Shell::HTML"
|
72
72
|
end
|
73
73
|
|
74
74
|
protected
|
@@ -81,7 +81,7 @@ class Thor
|
|
81
81
|
# available.
|
82
82
|
#
|
83
83
|
def show_diff(destination, content) #:nodoc:
|
84
|
-
if diff_lcs_loaded? && ENV[
|
84
|
+
if diff_lcs_loaded? && ENV["THOR_DIFF"].nil? && ENV["RAILS_DIFF"].nil?
|
85
85
|
actual = File.binread(destination).to_s.split("\n")
|
86
86
|
content = content.to_s.split("\n")
|
87
87
|
|
@@ -95,11 +95,11 @@ class Thor
|
|
95
95
|
|
96
96
|
def output_diff_line(diff) #:nodoc:
|
97
97
|
case diff.action
|
98
|
-
when
|
98
|
+
when "-"
|
99
99
|
say "- #{diff.old_element.chomp}", :red, true
|
100
|
-
when
|
100
|
+
when "+"
|
101
101
|
say "+ #{diff.new_element.chomp}", :green, true
|
102
|
-
when
|
102
|
+
when "!"
|
103
103
|
say "- #{diff.old_element.chomp}", :red, true
|
104
104
|
say "+ #{diff.new_element.chomp}", :green, true
|
105
105
|
else
|
@@ -115,7 +115,7 @@ class Thor
|
|
115
115
|
return @diff_lcs_loaded unless @diff_lcs_loaded.nil?
|
116
116
|
|
117
117
|
@diff_lcs_loaded = begin
|
118
|
-
require
|
118
|
+
require "diff/lcs"
|
119
119
|
true
|
120
120
|
rescue LoadError
|
121
121
|
false
|
@@ -1,6 +1,6 @@
|
|
1
|
-
require
|
1
|
+
require "rbconfig"
|
2
2
|
|
3
|
-
class Thor
|
3
|
+
class Bundler::Thor
|
4
4
|
module Sandbox #:nodoc:
|
5
5
|
end
|
6
6
|
|
@@ -8,30 +8,30 @@ class Thor
|
|
8
8
|
#
|
9
9
|
# 1) Methods to convert thor namespaces to constants and vice-versa.
|
10
10
|
#
|
11
|
-
# Thor::Util.namespace_from_thor_class(Foo::Bar::Baz) #=> "foo:bar:baz"
|
11
|
+
# Bundler::Thor::Util.namespace_from_thor_class(Foo::Bar::Baz) #=> "foo:bar:baz"
|
12
12
|
#
|
13
13
|
# 2) Loading thor files and sandboxing:
|
14
14
|
#
|
15
|
-
# Thor::Util.load_thorfile("~/.thor/foo")
|
15
|
+
# Bundler::Thor::Util.load_thorfile("~/.thor/foo")
|
16
16
|
#
|
17
17
|
module Util
|
18
18
|
class << self
|
19
|
-
# Receives a namespace and search for it in the Thor::Base subclasses.
|
19
|
+
# Receives a namespace and search for it in the Bundler::Thor::Base subclasses.
|
20
20
|
#
|
21
21
|
# ==== Parameters
|
22
22
|
# namespace<String>:: The namespace to search for.
|
23
23
|
#
|
24
24
|
def find_by_namespace(namespace)
|
25
25
|
namespace = "default#{namespace}" if namespace.empty? || namespace =~ /^:/
|
26
|
-
Thor::Base.subclasses.detect { |klass| klass.namespace == namespace }
|
26
|
+
Bundler::Thor::Base.subclasses.detect { |klass| klass.namespace == namespace }
|
27
27
|
end
|
28
28
|
|
29
|
-
# Receives a constant and converts it to a Thor namespace. Since Thor
|
29
|
+
# Receives a constant and converts it to a Bundler::Thor namespace. Since Bundler::Thor
|
30
30
|
# commands can be added to a sandbox, this method is also responsable 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
|
34
|
-
# older versions of Thor. On current versions, if you need to get the
|
34
|
+
# older versions of Bundler::Thor. On current versions, if you need to get the
|
35
35
|
# namespace from a class, just call namespace on it.
|
36
36
|
#
|
37
37
|
# ==== Parameters
|
@@ -41,8 +41,8 @@ class Thor
|
|
41
41
|
# String:: If we receive Foo::Bar::Baz it returns "foo:bar:baz"
|
42
42
|
#
|
43
43
|
def namespace_from_thor_class(constant)
|
44
|
-
constant = constant.to_s.gsub(/^Thor::Sandbox::/,
|
45
|
-
constant = snake_case(constant).squeeze(
|
44
|
+
constant = constant.to_s.gsub(/^Bundler::Thor::Sandbox::/, "")
|
45
|
+
constant = snake_case(constant).squeeze(":")
|
46
46
|
constant
|
47
47
|
end
|
48
48
|
|
@@ -56,13 +56,13 @@ class Thor
|
|
56
56
|
# Array[Object]
|
57
57
|
#
|
58
58
|
def namespaces_in_content(contents, file = __FILE__)
|
59
|
-
old_constants = Thor::Base.subclasses.dup
|
60
|
-
Thor::Base.subclasses.clear
|
59
|
+
old_constants = Bundler::Thor::Base.subclasses.dup
|
60
|
+
Bundler::Thor::Base.subclasses.clear
|
61
61
|
|
62
62
|
load_thorfile(file, contents)
|
63
63
|
|
64
|
-
new_constants = Thor::Base.subclasses.dup
|
65
|
-
Thor::Base.subclasses.replace(old_constants)
|
64
|
+
new_constants = Bundler::Thor::Base.subclasses.dup
|
65
|
+
Bundler::Thor::Base.subclasses.replace(old_constants)
|
66
66
|
|
67
67
|
new_constants.map! { |c| c.namespace }
|
68
68
|
new_constants.compact!
|
@@ -73,9 +73,9 @@ class Thor
|
|
73
73
|
#
|
74
74
|
def thor_classes_in(klass)
|
75
75
|
stringfied_constants = klass.constants.map { |c| c.to_s }
|
76
|
-
Thor::Base.subclasses.select do |subclass|
|
76
|
+
Bundler::Thor::Base.subclasses.select do |subclass|
|
77
77
|
next unless subclass.name
|
78
|
-
stringfied_constants.include?(subclass.name.gsub("#{klass.name}::",
|
78
|
+
stringfied_constants.include?(subclass.name.gsub("#{klass.name}::", ""))
|
79
79
|
end
|
80
80
|
end
|
81
81
|
|
@@ -89,7 +89,7 @@ class Thor
|
|
89
89
|
#
|
90
90
|
def snake_case(str)
|
91
91
|
return str.downcase if str =~ /^[A-Z_]+$/
|
92
|
-
str.gsub(/\B[A-Z]/, '_\&').squeeze(
|
92
|
+
str.gsub(/\B[A-Z]/, '_\&').squeeze("_") =~ /_*(.*)/
|
93
93
|
$+.downcase
|
94
94
|
end
|
95
95
|
|
@@ -103,43 +103,43 @@ class Thor
|
|
103
103
|
#
|
104
104
|
def camel_case(str)
|
105
105
|
return str if str !~ /_/ && str =~ /[A-Z]+.*/
|
106
|
-
str.split(
|
106
|
+
str.split("_").map { |i| i.capitalize }.join
|
107
107
|
end
|
108
108
|
|
109
|
-
# Receives a namespace and tries to retrieve a Thor or Thor::Group class
|
109
|
+
# Receives a namespace and tries to retrieve a Bundler::Thor or Bundler::Thor::Group class
|
110
110
|
# from it. It first searches for a class using the all the given namespace,
|
111
111
|
# if it's not found, removes the highest entry and searches for the class
|
112
112
|
# again. If found, returns the highest entry as the class name.
|
113
113
|
#
|
114
114
|
# ==== Examples
|
115
115
|
#
|
116
|
-
# class Foo::Bar < Thor
|
116
|
+
# class Foo::Bar < Bundler::Thor
|
117
117
|
# def baz
|
118
118
|
# end
|
119
119
|
# end
|
120
120
|
#
|
121
|
-
# class Baz::Foo < Thor::Group
|
121
|
+
# class Baz::Foo < Bundler::Thor::Group
|
122
122
|
# end
|
123
123
|
#
|
124
|
-
# Thor::Util.namespace_to_thor_class("foo:bar") #=> Foo::Bar, nil # will invoke default command
|
125
|
-
# Thor::Util.namespace_to_thor_class("baz:foo") #=> Baz::Foo, nil
|
126
|
-
# Thor::Util.namespace_to_thor_class("foo:bar:baz") #=> Foo::Bar, "baz"
|
124
|
+
# Bundler::Thor::Util.namespace_to_thor_class("foo:bar") #=> Foo::Bar, nil # will invoke default command
|
125
|
+
# Bundler::Thor::Util.namespace_to_thor_class("baz:foo") #=> Baz::Foo, nil
|
126
|
+
# Bundler::Thor::Util.namespace_to_thor_class("foo:bar:baz") #=> Foo::Bar, "baz"
|
127
127
|
#
|
128
128
|
# ==== Parameters
|
129
129
|
# namespace<String>
|
130
130
|
#
|
131
131
|
def find_class_and_command_by_namespace(namespace, fallback = true)
|
132
|
-
if namespace.include?(
|
133
|
-
pieces = namespace.split(
|
132
|
+
if namespace.include?(":") # look for a namespaced command
|
133
|
+
pieces = namespace.split(":")
|
134
134
|
command = pieces.pop
|
135
|
-
klass = Thor::Util.find_by_namespace(pieces.join(
|
135
|
+
klass = Bundler::Thor::Util.find_by_namespace(pieces.join(":"))
|
136
136
|
end
|
137
|
-
unless klass # look for a Thor::Group with the right name
|
138
|
-
klass, command = Thor::Util.find_by_namespace(namespace), nil
|
137
|
+
unless klass # look for a Bundler::Thor::Group with the right name
|
138
|
+
klass, command = Bundler::Thor::Util.find_by_namespace(namespace), nil
|
139
139
|
end
|
140
140
|
if !klass && fallback # try a command in the default namespace
|
141
141
|
command = namespace
|
142
|
-
klass = Thor::Util.find_by_namespace(
|
142
|
+
klass = Bundler::Thor::Util.find_by_namespace("")
|
143
143
|
end
|
144
144
|
[klass, command]
|
145
145
|
end
|
@@ -152,7 +152,7 @@ class Thor
|
|
152
152
|
content ||= File.binread(path)
|
153
153
|
|
154
154
|
begin
|
155
|
-
Thor::Sandbox.class_eval(content, path)
|
155
|
+
Bundler::Thor::Sandbox.class_eval(content, path)
|
156
156
|
rescue StandardError => e
|
157
157
|
$stderr.puts("WARNING: unable to load thorfile #{path.inspect}: #{e.message}")
|
158
158
|
if debug
|
@@ -164,31 +164,31 @@ class Thor
|
|
164
164
|
end
|
165
165
|
|
166
166
|
def user_home # rubocop:disable MethodLength
|
167
|
-
@@user_home ||= if ENV[
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
167
|
+
@@user_home ||= if ENV["HOME"]
|
168
|
+
ENV["HOME"]
|
169
|
+
elsif ENV["USERPROFILE"]
|
170
|
+
ENV["USERPROFILE"]
|
171
|
+
elsif ENV["HOMEDRIVE"] && ENV["HOMEPATH"]
|
172
|
+
File.join(ENV["HOMEDRIVE"], ENV["HOMEPATH"])
|
173
|
+
elsif ENV["APPDATA"]
|
174
|
+
ENV["APPDATA"]
|
175
|
+
else
|
176
|
+
begin
|
177
|
+
File.expand_path("~")
|
178
|
+
rescue
|
179
|
+
if File::ALT_SEPARATOR
|
180
|
+
"C:/"
|
181
|
+
else
|
182
|
+
"/"
|
183
|
+
end
|
184
|
+
end
|
185
|
+
end
|
186
186
|
end
|
187
187
|
|
188
188
|
# Returns the root where thor files are located, depending on the OS.
|
189
189
|
#
|
190
190
|
def thor_root
|
191
|
-
File.join(user_home,
|
191
|
+
File.join(user_home, ".thor").gsub(/\\/, "/")
|
192
192
|
end
|
193
193
|
|
194
194
|
# Returns the files in the thor root. On Windows thor_root will be something
|
@@ -202,15 +202,15 @@ class Thor
|
|
202
202
|
files = Dir["#{escape_globs(thor_root)}/*"]
|
203
203
|
|
204
204
|
files.map! do |file|
|
205
|
-
File.directory?(file) ? File.join(file,
|
205
|
+
File.directory?(file) ? File.join(file, "main.thor") : file
|
206
206
|
end
|
207
207
|
end
|
208
208
|
|
209
|
-
# Where to look for Thor files.
|
209
|
+
# Where to look for Bundler::Thor files.
|
210
210
|
#
|
211
211
|
def globs_for(path)
|
212
212
|
path = escape_globs(path)
|
213
|
-
["#{path}/Thorfile", "#{path}/*.thor", "#{path}/tasks/*.thor", "#{path}/lib/tasks/*.thor"]
|
213
|
+
["#{path}/Bundler::Thorfile", "#{path}/*.thor", "#{path}/tasks/*.thor", "#{path}/lib/tasks/*.thor"]
|
214
214
|
end
|
215
215
|
|
216
216
|
# Return the path to the ruby interpreter taking into account multiple
|
@@ -218,15 +218,15 @@ class Thor
|
|
218
218
|
#
|
219
219
|
def ruby_command # rubocop:disable MethodLength
|
220
220
|
@ruby_command ||= begin
|
221
|
-
ruby_name = RbConfig::CONFIG[
|
222
|
-
ruby = File.join(RbConfig::CONFIG[
|
223
|
-
ruby << RbConfig::CONFIG[
|
221
|
+
ruby_name = RbConfig::CONFIG["ruby_install_name"]
|
222
|
+
ruby = File.join(RbConfig::CONFIG["bindir"], ruby_name)
|
223
|
+
ruby << RbConfig::CONFIG["EXEEXT"]
|
224
224
|
|
225
225
|
# avoid using different name than ruby (on platforms supporting links)
|
226
|
-
if ruby_name !=
|
226
|
+
if ruby_name != "ruby" && File.respond_to?(:readlink)
|
227
227
|
begin
|
228
|
-
alternate_ruby = File.join(RbConfig::CONFIG[
|
229
|
-
alternate_ruby << RbConfig::CONFIG[
|
228
|
+
alternate_ruby = File.join(RbConfig::CONFIG["bindir"], "ruby")
|
229
|
+
alternate_ruby << RbConfig::CONFIG["EXEEXT"]
|
230
230
|
|
231
231
|
# ruby is a symlink
|
232
232
|
if File.symlink? alternate_ruby
|
@@ -251,7 +251,7 @@ class Thor
|
|
251
251
|
#
|
252
252
|
# ==== Examples
|
253
253
|
#
|
254
|
-
# Thor::Util.escape_globs('[apps]') # => '\[apps\]'
|
254
|
+
# Bundler::Thor::Util.escape_globs('[apps]') # => '\[apps\]'
|
255
255
|
#
|
256
256
|
# ==== Parameters
|
257
257
|
# String
|