styleseek/hyperdrive

View on GitHub
lib/hyperdrive/server.rb

Summary

Maintainability
A
1 hr
Test Coverage
# encoding: utf-8

module Hyperdrive
  class Server
    def self.call(env)
      server.call(env)
    end

    private

    def self.server
      Rack::Builder.new do
        use Rack::Lint
        use Rack::Runtime
        use Rack::MethodOverride
        use Rack::Head
        use Rack::ConditionalGet
        use Hyperdrive::Middleware::Error
        use Hyperdrive::Middleware::Accept
        use Rack::Deflater
        use Rack::ETag, "max-age=0,private,must-revalidate", "public,max-age=3600,s-maxage=3600"

        map '/' do
          run Hyperdrive::HATEOAS
        end

        hyperdrive.resources.each do |key, resource|
          map resource.endpoint do
            use Hyperdrive::Middleware::Resource, resource
            use Hyperdrive::Middleware::RequestMethod
            use Hyperdrive::Middleware::ParseJSONBody
            use Hyperdrive::Middleware::SanitizeParams
            use Hyperdrive::Middleware::Charset
            use Hyperdrive::Middleware::Pagination
            use Hyperdrive::Middleware::RequiredParams
            use Hyperdrive::Middleware::CORS, hyperdrive.config[:cors]
            use Hyperdrive::Middleware::ContentNegotiation
            run Hyperdrive::Endpoint
          end
        end
      end.to_app
    end
  end
end