class JsRoutes::Middleware

A Rack middleware that automatically updates routes file whenever routes.rb is modified

Inspired by github.com/fnando/i18n-js/blob/main/lib/i18n/js/middleware.rb

Public Class Methods

new(app) click to toggle source
# File lib/js_routes/middleware.rb, line 17
def initialize(app)
  @app = app
  @routes_file = T.let(Rails.root.join("config/routes.rb"), Pathname)
  @mtime = T.let(nil, T.nilable(Time))
end

Public Instance Methods

call(env) click to toggle source
# File lib/js_routes/middleware.rb, line 24
def call(env)
  update_js_routes
  @app.call(env)
end

Protected Instance Methods

regenerate() click to toggle source
# File lib/js_routes/middleware.rb, line 41
def regenerate
  JsRoutes.generate!(typed: true)
end
routes_mtime() click to toggle source
# File lib/js_routes/middleware.rb, line 46
def routes_mtime
  File.mtime(@routes_file)
rescue Errno::ENOENT
  nil
end
update_js_routes() click to toggle source
# File lib/js_routes/middleware.rb, line 32
def update_js_routes
  new_mtime = routes_mtime
  unless new_mtime == @mtime
    regenerate
    @mtime = new_mtime
  end
end