Skip to content

Commit b1e4ebb

Browse files
committed
Extract TextModeBuilder
1 parent 795bf03 commit b1e4ebb

4 files changed

Lines changed: 69 additions & 57 deletions

File tree

lib/remote_ruby/adapter_builder.rb

Lines changed: 9 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,10 @@ module RemoteRuby
66
class AdapterBuilder
77
attr_reader :adapter_params, :use_cache, :save_cache, :text_mode
88

9-
def initialize(adapter_klass: nil, use_cache: false, save_cache: false, text_mode: false, **params)
9+
def initialize(adapter_klass: nil, use_cache: false, save_cache: false, **params)
1010
@adapter_klass = adapter_klass
1111
@use_cache = use_cache
1212
@save_cache = save_cache
13-
@text_mode = text_mode
1413
@adapter_params = params
1514

1615
RemoteRuby.ensure_cache_dir if save_cache
@@ -26,46 +25,18 @@ def adapter_klass
2625
end
2726
end
2827

29-
def build(code_hash, out_tty: true, err_tty: true)
28+
def build(code_hash)
3029
res = adapter_klass.new(**adapter_params)
3130

3231
cache_mode = use_cache && cache_exists?(code_hash)
3332

34-
res = if cache_mode
35-
cache_adapter(code_hash, res.connection_name)
36-
elsif save_cache
37-
caching_adapter(res, code_hash)
38-
else
39-
res
40-
end
41-
42-
wrap_text_mode(res, cache_mode, out_tty, err_tty)
43-
end
44-
45-
def text_mode_params(adapter, cache_mode, out_tty, err_tty)
46-
tm_params = ::RemoteRuby::TextModeAdapter::DEFAULT_SETTINGS.merge(
47-
stdout_prefix: adapter.connection_name,
48-
stderr_prefix: adapter.connection_name
49-
)
50-
51-
tm_params = tm_params.merge(text_mode) if text_mode.is_a? Hash
52-
53-
disable_unless_tty = tm_params.delete(:disable_unless_tty) { |_| true }
54-
55-
tm_params[:stdout_prefix] = nil if disable_unless_tty && !out_tty
56-
tm_params[:stderr_prefix] = nil if disable_unless_tty && !err_tty
57-
tm_params[:cache_prefix] = nil unless cache_mode
58-
tm_params
59-
end
60-
61-
def wrap_text_mode(adapter, cache_mode, out_tty, err_tty)
62-
return adapter unless text_mode
63-
64-
tm_params = text_mode_params(adapter, cache_mode, out_tty, err_tty)
65-
66-
return adapter unless tm_params[:stdout_prefix] || tm_params[:stderr_prefix]
67-
68-
::RemoteRuby::TextModeAdapter.new(adapter, **tm_params)
33+
if cache_mode
34+
cache_adapter(code_hash, res.connection_name)
35+
elsif save_cache
36+
caching_adapter(res, code_hash)
37+
else
38+
res
39+
end
6940
end
7041

7142
def cache_adapter(code_hash, connection_name)

lib/remote_ruby/execution_context.rb

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
require 'remote_ruby/remote_context'
1212
require 'remote_ruby/remote_error'
1313
require 'remote_ruby/adapter_builder'
14+
require 'remote_ruby/text_mode_builder'
1415

1516
module RemoteRuby
1617
# This class is responsible for executing blocks on the remote host with the
@@ -20,6 +21,11 @@ def initialize(**params)
2021
add_plugins(params)
2122
configure_streams(params)
2223
@dump_code = params.delete(:dump_code) || false
24+
@text_mode_builder = RemoteRuby::TextModeBuilder.new(
25+
out_tty: out_stream.tty?,
26+
err_tty: err_stream.tty?,
27+
params: params
28+
)
2329
@adapter_builder = RemoteRuby::AdapterBuilder.new(**params)
2430
end
2531

@@ -45,7 +51,7 @@ def execute(locals = nil, &block)
4551

4652
private
4753

48-
attr_reader :dump_code, :in_stream, :out_stream, :err_stream, :plugins, :adapter_builder
54+
attr_reader :dump_code, :in_stream, :out_stream, :err_stream, :plugins, :adapter_builder, :text_mode_builder
4955

5056
def add_plugins(params)
5157
@plugins = ::RemoteRuby::Plugin.build_plugins(params)
@@ -79,7 +85,8 @@ def build_compiler(ruby_code, client_locals)
7985
def execute_code(compiler)
8086
write_code(compiler.code_hash, compiler.compiled_code)
8187

82-
adapter = adapter_builder.build(compiler.code_hash, out_tty: out_stream.tty?, err_tty: err_stream.tty?)
88+
adapter = adapter_builder.build(compiler.code_hash)
89+
adapter = text_mode_builder.build(adapter)
8390

8491
# rubocop:disable Security/MarshalLoad
8592
Marshal.load(adapter.open(compiler.compiled_code, in_stream, out_stream, err_stream))

lib/remote_ruby/text_mode_adapter.rb

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,26 +17,16 @@ class TextModeAdapter < ConnectionAdapter
1717
attr_reader :adapter, :stdout_prefix, :stderr_prefix, :cache_prefix, :stdout_mode, :stderr_mode,
1818
:cache_mode
1919

20-
# rubocop:disable Metrics/ParameterLists
21-
def initialize(
22-
adapter,
23-
stdout_prefix:,
24-
stderr_prefix:,
25-
cache_prefix:,
26-
stdout_mode:,
27-
stderr_mode:,
28-
cache_mode:
29-
)
20+
def initialize(adapter, **params)
3021
super()
3122
@adapter = adapter
32-
@stdout_prefix = stdout_prefix
33-
@stderr_prefix = stderr_prefix
34-
@cache_prefix = cache_prefix
35-
@stdout_mode = stdout_mode
36-
@stderr_mode = stderr_mode
37-
@cache_mode = cache_mode
23+
@stdout_prefix = params[:stdout_prefix]
24+
@stderr_prefix = params[:stderr_prefix]
25+
@cache_prefix = params[:cache_prefix]
26+
@stdout_mode = params[:stdout_mode]
27+
@stderr_mode = params[:stderr_mode]
28+
@cache_mode = params[:cache_mode]
3829
end
39-
# rubocop:enable Metrics/ParameterLists
4030

4131
def open(code, stdin, stdout, stderr)
4232
stdout_pref = "#{cache_prefix_string}#{stdout_prefix_string}"
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# frozen_string_literal: true
2+
3+
module RemoteRuby
4+
# Wraps the connection adapter in a text mode adapter if text mode is enabled.
5+
class TextModeBuilder
6+
attr_reader :out_tty, :err_tty, :text_mode
7+
8+
def initialize(params:, out_tty: true, err_tty: true)
9+
@out_tty = out_tty
10+
@err_tty = err_tty
11+
@text_mode = params.delete(:text_mode) || false
12+
end
13+
14+
def build(adapter)
15+
return adapter unless text_mode
16+
17+
cache_mode = adapter.is_a? CacheAdapter
18+
19+
tm_params = text_mode_params(adapter, cache_mode, out_tty, err_tty)
20+
21+
return adapter unless tm_params[:stdout_prefix] || tm_params[:stderr_prefix]
22+
23+
::RemoteRuby::TextModeAdapter.new(adapter, **tm_params)
24+
end
25+
26+
private
27+
28+
def text_mode_params(adapter, cache_mode, out_tty, err_tty)
29+
tm_params = ::RemoteRuby::TextModeAdapter::DEFAULT_SETTINGS.merge(
30+
stdout_prefix: adapter.connection_name,
31+
stderr_prefix: adapter.connection_name
32+
)
33+
34+
tm_params = tm_params.merge(text_mode) if text_mode.is_a? Hash
35+
36+
disable_unless_tty = tm_params.delete(:disable_unless_tty) { |_| true }
37+
38+
tm_params[:stdout_prefix] = nil if disable_unless_tty && !out_tty
39+
tm_params[:stderr_prefix] = nil if disable_unless_tty && !err_tty
40+
tm_params[:cache_prefix] = nil unless cache_mode
41+
tm_params
42+
end
43+
end
44+
end

0 commit comments

Comments
 (0)