Sha256: f50b6e36b2a5b6137bd7dfd5f3223ed37ea0dd62c83fb42de6d2437f28de5d1f

Contents?: true

Size: 1.07 KB

Versions: 2

Compression:

Stored size: 1.07 KB

Contents

require 'rack'

module Motel

  class Lobby

    def initialize(app)
      @app = app
    end

    def call(env)
      request = Rack::Request.new(env)

      name = tenant_name(request)

      if name
        if ActiveRecord::Base.motel.tenant?(name)
          ActiveRecord::Base.motel.current_tenant = name
          @app.call(env)
        else
          path = ActiveRecord::Base.motel.nonexistent_tenant_page
          file = File.expand_path(path) if path
          body = (File.exists?(file.to_s)) ? File.read(file) : "Nonexistent #{name} tenant"
          [404, {"Content-Type" => "text/html", "Content-Length" => body.size.to_s}, [body]]
        end
      else
        ActiveRecord::Base.motel.current_tenant = nil
        @app.call(env)
      end
    end

    private

      def tenant_name(request)
        if ActiveRecord::Base.motel.admission_criteria
          regex = Regexp.new(ActiveRecord::Base.motel.admission_criteria)
          name = request.path.match(regex)
          name[1] if name
        else
         request.host.split('.').first
        end
      end

  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
motel-activerecord-1.0.1 lib/motel/lobby.rb
motel-activerecord-1.0.0 lib/motel/lobby.rb