Sha256: 625d381305335abe725e4f16da739e4867e63ddd675a05892687d67d05aa43c3

Contents?: true

Size: 1.16 KB

Versions: 7

Compression:

Stored size: 1.16 KB

Contents

module JSONAPIonify::Api
  module Base::AppBuilder

    def self.extended(klass)
      klass.class_eval do
        extend JSONAPIonify::InheritedAttributes
        inherited_array_attribute :middleware
      end
    end

    def use(*args, &block)
      middleware << [args, block]
    end

    def call(env)
      app.call(env)
    end

    private

    def app
      api = self
      Rack::Builder.new do
        use Rack::ShowExceptions
        use Rack::CommonLogger
        use Base::Reloader unless ENV['RACK_ENV'] == 'production'
        map "/docs" do
          run ->(env) {
            request = JSONAPIonify::Api::Server::Request.new env
            if request.path_info.present?
              return [301, { 'location' => request.path.chomp(request.path_info) }, []]
            end
            response = Rack::Response.new
            response.write api.documentation_output(request)
            response.finish
          }
        end
        map "/" do
          use Rack::MethodOverride
          api.middleware.each do |args, block|
            use(*args, &block)
          end
          run JSONAPIonify::Api::Server.new(api)
        end
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
jsonapionify-0.12.10 lib/jsonapionify/api/base/app_builder.rb
jsonapionify-0.12.9 lib/jsonapionify/api/base/app_builder.rb
jsonapionify-0.12.8 lib/jsonapionify/api/base/app_builder.rb
jsonapionify-0.12.7 lib/jsonapionify/api/base/app_builder.rb
jsonapionify-0.12.5 lib/jsonapionify/api/base/app_builder.rb
jsonapionify-0.12.4 lib/jsonapionify/api/base/app_builder.rb
jsonapionify-0.12.3 lib/jsonapionify/api/base/app_builder.rb