Sha256: 70a868498926ebacb6051ca1ed810c14c5eaf73a2260cfd7054c0e403dfdeee2

Contents?: true

Size: 1.64 KB

Versions: 47

Compression:

Stored size: 1.64 KB

Contents

# All roads lead here
#
# 1. AWS Lambda: PostsController - Rack::Adapter - Jets.application.call
# 2. Local server:  config.ru - run Jet.application - Jets.application.call
#
# Then eventually:
#
#   Jets.application.call - Middleware stack - Jets::Controller::Middleware::Main
#
module Jets::Controller::Middleware
  class Main
    def initialize(env)
      @env = env
      @controller = env['jets.controller']
      @event = env['lambda.event']
      @context = env['lambda.context']
      @meth = env['lambda.meth']
    end

    def call
      ENV['JETS_HOST'] = jets_host # Dirty to use what's essentially a global variable but unsure how else to achieve
      dup.call!
    end

    def call!
      setup
      @controller.dispatch! # Returns triplet
    end

    # Common setup logical at this point of middleware processing right before
    # calling any controller actions.
    def setup
      # We already recreated a mimic rack env earlier as part of the very first
      # middleware layer. However, by the time the rack env reaches the main middleware
      # it could had been updated by other middlewares. We update the env here again.
      @controller.request.set_env!(@env)
      # This allows sesison helpers to work. Sessions are managed by
      # the Rack::Session::Cookie middleware by default.
      @controller.session = @env['rack.session'] || {}
    end

    def jets_host
      protocol = @event.dig('headers', 'X-Forwarded-Proto') || @env['rack.url_scheme']
      default = "#{protocol}://#{@env['HTTP_HOST']}"
      Jets.config.helpers.host || default
    end

    def self.call(env)
      instance = new(env)
      instance.call
    end
  end
end

Version data entries

47 entries across 47 versions & 2 rubygems

Version Path
jets-3.0.6 lib/jets/controller/middleware/main.rb
jets-3.0.5 lib/jets/controller/middleware/main.rb
jets-3.0.4 lib/jets/controller/middleware/main.rb
jets-3.0.3 lib/jets/controller/middleware/main.rb
jets-3.0.2 lib/jets/controller/middleware/main.rb
jets-3.0.1 lib/jets/controller/middleware/main.rb
jets-3.0.0 lib/jets/controller/middleware/main.rb