Class: Rack::SpaApp
- Inherits:
-
Object
- Object
- Rack::SpaApp
- Defined in:
- lib/rack/spa_app.rb
Class Method Summary collapse
-
.dependencies(build_folder, immutable: true, enforce_ssl: true, service_worker_allowed: nil, index_bytes: nil) ⇒ Object
Return Rack middleware dependencies for the SPA app.
- .install(builder, dependencies) ⇒ Object
- .run(builder) ⇒ Object
- .run_spa_app(builder, build_folder, enforce_ssl: true, immutable: true, index_bytes: nil, **kw) ⇒ Object
Class Method Details
.dependencies(build_folder, immutable: true, enforce_ssl: true, service_worker_allowed: nil, index_bytes: nil) ⇒ Object
Return Rack middleware dependencies for the SPA app.
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/rack/spa_app.rb', line 18 def self.dependencies( build_folder, immutable: true, enforce_ssl: true, service_worker_allowed: nil, index_bytes: nil ) index_bytes ||= File.read("#{build_folder}/index.html") result = [] result << [Rack::SslEnforcer, {redirect_html: false}] if enforce_ssl result << [Rack::ConditionalGet, {}] result << [Rack::ETag, {}] result << [Rack::Immutable, {match: immutable.is_a?(TrueClass) ? nil : immutable}] if immutable result << [Rack::SpaRewrite, {index_bytes:, html_only: true}] result << [Rack::ServiceWorkerAllowed, {scope: service_worker_allowed}] if service_worker_allowed result << [Rack::Static, {urls: [""], root: build_folder.to_s, cascade: true}] result << [Rack::SpaRewrite, {index_bytes:, html_only: false}] return result end |
.install(builder, dependencies) ⇒ Object
38 39 40 |
# File 'lib/rack/spa_app.rb', line 38 def self.install(builder, dependencies) dependencies.each { |cls, opts| builder.use(cls, **opts) } end |
.run(builder) ⇒ Object
42 43 44 |
# File 'lib/rack/spa_app.rb', line 42 def self.run(builder) builder.run Rack::LambdaApp.new(->(_) { raise "Should not see SpaApp fallback" }) end |
.run_spa_app(builder, build_folder, enforce_ssl: true, immutable: true, index_bytes: nil, **kw) ⇒ Object
46 47 48 49 50 |
# File 'lib/rack/spa_app.rb', line 46 def self.run_spa_app(builder, build_folder, enforce_ssl: true, immutable: true, index_bytes: nil, **kw) deps = self.dependencies(build_folder, enforce_ssl:, immutable:, index_bytes:, **kw) self.install(builder, deps) self.run(builder) end |