module CLI::UI::StdoutRouter
Constants
- NotEnabled
- WRITE_WITHOUT_CLI_UI
Attributes
duplicate_output_to[RW]
Public Class Methods
assert_enabled!()
click to toggle source
# File lib/cli/ui/stdout_router.rb, line 178 def assert_enabled! raise NotEnabled unless enabled? end
current_id()
click to toggle source
# File lib/cli/ui/stdout_router.rb, line 174 def current_id Thread.current[:cliui_output_id] end
disable()
click to toggle source
# File lib/cli/ui/stdout_router.rb, line 205 def disable return false unless enabled?($stdout) && enabled?($stderr) deactivate($stdout) deactivate($stderr) true end
enable()
click to toggle source
# File lib/cli/ui/stdout_router.rb, line 194 def enable return false if enabled?($stdout) || enabled?($stderr) activate($stdout, :stdout) activate($stderr, :stderr) true end
enabled?(stream = $stdout)
click to toggle source
# File lib/cli/ui/stdout_router.rb, line 201 def enabled?(stream = $stdout) stream.respond_to?(WRITE_WITHOUT_CLI_UI) end
ensure_activated()
click to toggle source
TODO: remove this
# File lib/cli/ui/stdout_router.rb, line 190 def ensure_activated enable unless enabled? end
with_enabled() { || ... }
click to toggle source
# File lib/cli/ui/stdout_router.rb, line 182 def with_enabled enable yield ensure disable end
with_id(on_streams:) { |id| ... }
click to toggle source
# File lib/cli/ui/stdout_router.rb, line 154 def with_id(on_streams:) unless on_streams.is_a?(Array) && on_streams.all? { |s| s.respond_to?(:write) } raise ArgumentError, <<~EOF on_streams must be an array of objects that respond to `write` These do not respond to write #{on_streams.reject { |s| s.respond_to?(:write) }.map.with_index { |s| s.class.to_s }.join("\n")} EOF end require 'securerandom' id = format('%05d', rand(10**5)) Thread.current[:cliui_output_id] = { id: id, streams: on_streams, } yield(id) ensure Thread.current[:cliui_output_id] = nil end
Private Class Methods
activate(stream, streamname)
click to toggle source
# File lib/cli/ui/stdout_router.rb, line 220 def activate(stream, streamname) writer = StdoutRouter::Writer.new(stream, streamname) raise if stream.respond_to?(WRITE_WITHOUT_CLI_UI) stream.singleton_class.send(:alias_method, WRITE_WITHOUT_CLI_UI, :write) stream.define_singleton_method(:write) do |*args| writer.write(*args) end end
deactivate(stream)
click to toggle source
# File lib/cli/ui/stdout_router.rb, line 214 def deactivate(stream) sc = stream.singleton_class sc.send(:remove_method, :write) sc.send(:alias_method, :write, WRITE_WITHOUT_CLI_UI) end