lib/ruby_lsp_rails/railtie.rb in ruby-lsp-rails-0.1.0 vs lib/ruby_lsp_rails/railtie.rb in ruby-lsp-rails-0.2.0

- old
+ new

@@ -1,20 +1,38 @@ # typed: strict # frozen_string_literal: true -require "ruby_lsp_rails/middleware" +require "rails/railtie" +require "ruby_lsp_rails/rack_app" module RubyLsp module Rails class Railtie < ::Rails::Railtie - initializer "ruby_lsp_rails.setup" do |app| - app.config.middleware.insert_after(ActionDispatch::ShowExceptions, RubyLsp::Rails::Middleware) + config.ruby_lsp_rails = ActiveSupport::OrderedOptions.new + config.ruby_lsp_rails.server = true - config.after_initialize do |_app| + initializer "ruby_lsp_rails.setup" do |_app| + config.after_initialize do |app| + unless config.ruby_lsp_rails.server == false + app.routes.prepend do + T.bind(self, ActionDispatch::Routing::Mapper) + mount(RackApp.new => RackApp::BASE_PATH) + end + end + + # If we start the app with `bin/rails console` then `Rails::Server` is not defined. if defined?(::Rails::Server) ssl_enable, host, port = ::Rails::Server::Options.new.parse!(ARGV).values_at(:SSLEnable, :Host, :Port) app_uri = "#{ssl_enable ? "https" : "http"}://#{host}:#{port}" - File.write("#{::Rails.root}/tmp/app_uri.txt", app_uri) + app_uri_path = "#{::Rails.root}/tmp/app_uri.txt" + File.write(app_uri_path, app_uri) + + at_exit do + # The app_uri.txt file should only exist when the server is running. The extension uses its presence to + # report if the server is running or not. If the server is not running, some of the extension features + # will not be available. + File.delete(app_uri_path) if File.exist?(app_uri_path) + end end end end end end