Sha256: 6685e439b2841fe84ab978ecbfb943529b4f8b2ee73fab50e19751515ec4e9aa

Contents?: true

Size: 1.35 KB

Versions: 24

Compression:

Stored size: 1.35 KB

Contents

require 'delegate'
require 'active_support/core_ext/object/blank'

module JSONAPIonify::Api
  class Server
    extend JSONAPIonify::Autoload
    autoload_all

    attr_reader :api

    def initialize(api)
      @api = api
    end

    def call(env)
      Processor.new(env, api).response
    end

    class Processor
      attr_reader :request, :id, :more, :api

      def initialize(env, api)
        @api     = api
        @request = Request.new(env)
        request.path_info.split('/').tap(&:shift).tap do |parts|
          parts[-1]                                                 = File.basename(parts[-1], File.extname(parts[-1])) if parts[-1]
          @resource, @id, @relationship, @relationship_name, *@more = parts
        end
      end

      def response
        request.env['jsonapionify.resource_name'] = @resource if @resource
        request.env['jsonapionify.resource']      = resource if @resource
        request.env['jsonapionify.id']            = @id if @id
        @resource ? resource.process(request) : api_index
      rescue Errors::ResourceNotFound
        resource = @resource
        api.http_error(:not_found, request) do
          detail "Resource not found: #{resource}"
        end
      end

      private

      def api_index
        api.process_index(request)
      end

      def resource
        api.resource(@resource)
      end
    end
  end
end

Version data entries

24 entries across 24 versions & 1 rubygems

Version Path
jsonapionify-0.12.10 lib/jsonapionify/api/server.rb
jsonapionify-0.12.9 lib/jsonapionify/api/server.rb
jsonapionify-0.12.8 lib/jsonapionify/api/server.rb
jsonapionify-0.12.7 lib/jsonapionify/api/server.rb
jsonapionify-0.12.5 lib/jsonapionify/api/server.rb
jsonapionify-0.12.4 lib/jsonapionify/api/server.rb
jsonapionify-0.12.3 lib/jsonapionify/api/server.rb
jsonapionify-0.12.2 lib/jsonapionify/api/server.rb
jsonapionify-0.12.1 lib/jsonapionify/api/server.rb
jsonapionify-0.12.0 lib/jsonapionify/api/server.rb
jsonapionify-0.11.11 lib/jsonapionify/api/server.rb
jsonapionify-0.11.10 lib/jsonapionify/api/server.rb
jsonapionify-0.11.9 lib/jsonapionify/api/server.rb
jsonapionify-0.11.8 lib/jsonapionify/api/server.rb
jsonapionify-0.11.7 lib/jsonapionify/api/server.rb
jsonapionify-0.11.6 lib/jsonapionify/api/server.rb
jsonapionify-0.11.5 lib/jsonapionify/api/server.rb
jsonapionify-0.11.0 lib/jsonapionify/api/server.rb
jsonapionify-0.10.2 lib/jsonapionify/api/server.rb
jsonapionify-0.10.1 lib/jsonapionify/api/server.rb