Skip to content

Commit fcab061

Browse files
authored
Merge pull request rails#50814 from Shopify/improve-rails-console
Improve Rails console's IRB autocompletion control
2 parents 93b83f9 + 4d6714f commit fcab061

File tree

3 files changed

+40
-60
lines changed

3 files changed

+40
-60
lines changed

railties/lib/rails/commands/console/console_command.rb

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,9 @@ class IRBConsole
1616
def initialize
1717
require "irb"
1818
require "irb/completion"
19-
IRB::WorkSpace.prepend(BacktraceCleaner)
2019

21-
if !Rails.env.local?
22-
# Use env var here so users can override them with env var too
23-
ENV["IRB_USE_AUTOCOMPLETE"] ||= "false"
24-
end
20+
IRB::WorkSpace.prepend(BacktraceCleaner)
21+
IRB::ExtendCommandBundle.include(Rails::ConsoleMethods)
2522
end
2623

2724
def name
@@ -31,6 +28,10 @@ def name
3128
def start
3229
IRB.setup(nil)
3330

31+
if !Rails.env.local? && !ENV.key?("IRB_USE_AUTOCOMPLETE")
32+
IRB.conf[:USE_AUTOCOMPLETE] = false
33+
end
34+
3435
env = colorized_env
3536

3637
IRB.conf[:PROMPT][:RAILS_PROMPT] = {
@@ -108,9 +109,6 @@ def start
108109
puts "Loading #{Rails.env} environment (Rails #{Rails.version})"
109110
end
110111

111-
if defined?(console::ExtendCommandBundle)
112-
console::ExtendCommandBundle.include(Rails::ConsoleMethods)
113-
end
114112
console.start
115113
end
116114
end

railties/test/application/console_test.rb

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ def spawn_console(options, wait_for_prompt: true, env: {})
140140
end
141141

142142
def test_sandbox
143-
options = "--sandbox -- --nocolorize"
143+
options = "--sandbox"
144144
spawn_console(options)
145145

146146
write_prompt "Post.count", "=> 0"
@@ -172,7 +172,7 @@ def test_sandbox_by_default
172172
config.sandbox_by_default = true
173173
RUBY
174174

175-
options = "-e production -- --verbose --nocolorize"
175+
options = "-e production -- --verbose"
176176
spawn_console(options)
177177

178178
write_prompt "puts Rails.application.sandbox", "puts Rails.application.sandbox\r\ntrue"
@@ -184,7 +184,7 @@ def test_sandbox_by_default_with_no_sandbox
184184
config.sandbox_by_default = true
185185
RUBY
186186

187-
options = "-e production --no-sandbox -- --verbose --nocolorize"
187+
options = "-e production --no-sandbox -- --verbose"
188188
spawn_console(options)
189189

190190
write_prompt "puts Rails.application.sandbox", "puts Rails.application.sandbox\r\nfalse"
@@ -196,15 +196,15 @@ def test_sandbox_by_default_with_development_environment
196196
config.sandbox_by_default = true
197197
RUBY
198198

199-
options = "-- --verbose --nocolorize"
199+
options = "-- --verbose"
200200
spawn_console(options)
201201

202202
write_prompt "puts Rails.application.sandbox", "puts Rails.application.sandbox\r\nfalse"
203203
@primary.puts "quit"
204204
end
205205

206206
def test_environment_option_and_irb_option
207-
options = "-e test -- --verbose --nocolorize"
207+
options = "-e test -- --verbose"
208208
spawn_console(options)
209209

210210
write_prompt "a = 1", "a = 1"
@@ -213,21 +213,21 @@ def test_environment_option_and_irb_option
213213
end
214214

215215
def test_production_console_prompt
216-
options = "-e production -- --nocolorize"
216+
options = "-e production"
217217
spawn_console(options)
218218

219219
write_prompt "123", "prod:001> 123"
220220
end
221221

222222
def test_development_console_prompt
223-
options = "-e development -- --nocolorize"
223+
options = "-e development"
224224
spawn_console(options)
225225

226226
write_prompt "123", "dev:001> 123"
227227
end
228228

229229
def test_test_console_prompt
230-
options = "-e test -- --nocolorize"
230+
options = "-e test"
231231
spawn_console(options)
232232

233233
write_prompt "123", "test:001> 123"
@@ -240,11 +240,32 @@ def test_console_respects_user_defined_prompt_mode
240240
RUBY
241241
irbrc.close
242242

243-
options = "-e test -- --nocolorize"
243+
options = "-e test"
244244
spawn_console(options, env: { "IRBRC" => irbrc.path })
245245

246246
write_prompt "123", ">> 123"
247247
ensure
248248
File.unlink(irbrc)
249249
end
250+
251+
def test_console_disables_IRB_auto_completion_in_non_local
252+
options = "-e production -- --verbose"
253+
spawn_console(options)
254+
255+
write_prompt "IRB.conf[:USE_AUTOCOMPLETE]", "IRB.conf[:USE_AUTOCOMPLETE]\r\n=> false"
256+
end
257+
258+
def test_console_accepts_override_on_IRB_auto_completion_flag
259+
options = "-e production -- --verbose"
260+
spawn_console(options, env: { "IRB_USE_AUTOCOMPLETE" => "true" })
261+
262+
write_prompt "IRB.conf[:USE_AUTOCOMPLETE]", "IRB.conf[:USE_AUTOCOMPLETE]\r\n=> true"
263+
end
264+
265+
def test_console_doesnt_disable_IRB_auto_completion_in_local
266+
options = "-e development -- --verbose"
267+
spawn_console(options)
268+
269+
write_prompt "IRB.conf[:USE_AUTOCOMPLETE]", "IRB.conf[:USE_AUTOCOMPLETE]\r\n=> true"
270+
end
250271
end

railties/test/commands/console_test.rb

Lines changed: 4 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -58,47 +58,6 @@ def test_console_defaults_to_IRB
5858
assert_equal "IRB", Rails::Console.new(app).console.name
5959
end
6060

61-
def test_console_disables_IRB_auto_completion_in_non_local
62-
original_use_autocomplete = ENV["IRB_USE_AUTOCOMPLETE"]
63-
ENV["IRB_USE_AUTOCOMPLETE"] = nil
64-
65-
with_rack_env "production" do
66-
app = build_app(nil)
67-
assert_not_predicate Rails.env, :local?
68-
assert_equal "IRB", Rails::Console.new(app).console.name
69-
assert_equal "false", ENV["IRB_USE_AUTOCOMPLETE"]
70-
end
71-
ensure
72-
ENV["IRB_USE_AUTOCOMPLETE"] = original_use_autocomplete
73-
end
74-
75-
def test_console_accepts_override_on_IRB_auto_completion_flag
76-
original_use_autocomplete = ENV["IRB_USE_AUTOCOMPLETE"]
77-
ENV["IRB_USE_AUTOCOMPLETE"] = "true"
78-
79-
with_rack_env "production" do
80-
app = build_app(nil)
81-
assert_equal "IRB", Rails::Console.new(app).console.name
82-
assert_equal "true", ENV["IRB_USE_AUTOCOMPLETE"]
83-
end
84-
ensure
85-
ENV["IRB_USE_AUTOCOMPLETE"] = original_use_autocomplete
86-
end
87-
88-
def test_console_doesnt_disable_IRB_auto_completion_in_local
89-
original_use_autocomplete = ENV["IRB_USE_AUTOCOMPLETE"]
90-
ENV["IRB_USE_AUTOCOMPLETE"] = nil
91-
92-
with_rails_env nil do
93-
app = build_app(nil)
94-
assert_predicate Rails.env, :local?
95-
assert_equal "IRB", Rails::Console.new(app).console.name
96-
assert_nil ENV["IRB_USE_AUTOCOMPLETE"]
97-
end
98-
ensure
99-
ENV["IRB_USE_AUTOCOMPLETE"] = original_use_autocomplete
100-
end
101-
10261
def test_prompt_env_colorization
10362
irb_console = Rails::Console::IRBConsole.new
10463
red = "\e[31m"
@@ -186,7 +145,7 @@ def app
186145
end
187146

188147
def build_app(console)
189-
mocked_console = Class.new do
148+
mocked_app = Class.new do
190149
attr_accessor :sandbox
191150
attr_reader :console, :disable_sandbox, :sandbox_by_default
192151

@@ -199,9 +158,11 @@ def config
199158
end
200159

201160
def load_console
161+
require "rails/console/app"
162+
require "rails/console/helpers"
202163
end
203164
end
204-
mocked_console.new(console)
165+
mocked_app.new(console)
205166
end
206167

207168
def parse_arguments(args)

0 commit comments

Comments
 (0)