87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
# File 'lib/terminalwire/rails.rb', line 87
def handle(adapter:, env:)
logger.info "ThorServer: Running #{@cli_class.inspect}"
while message = adapter.read
case message
in { event: "initialization", protocol:, program: { arguments: }, entitlement: }
context = Terminalwire::Server::Context.new(adapter:, entitlement:)
exit_code = 0
begin
@cli_class.terminalwire arguments:, context: do |cli|
cli.default_url_options[:host] = env["HTTP_HOST"]
end
rescue ::Thor::UndefinedCommandError, ::Thor::InvocationError => e
context.stdout.puts e.message
rescue ::StandardError => e
handler_error_message = " \#{e.class.name} (\#{e.message})\n\n \#{e.backtrace.join(\"\\n\")}\n ERROR\n\n ::Rails.logger.error(handler_error_message)\n # Report the error to Rails' notification system\n ::Rails.error.report(e, handled: true)\n\n if ::Rails.application.config.consider_all_requests_local\n # Show the full error message with stack trace in development\n context.stderr.puts handler_error_message\n else\n # Show a generic message in production\n context.stderr.puts error_message\n end\n exit_code = 1\n ensure\n context.exit exit_code\n end\n end\n end\nend\n"
|