Sha256: 9712a5ecf066a88bbb2897d6da8cd7c6ed79f4f86ab3d7af90a03d2feca22c0d

Contents?: true

Size: 1.25 KB

Versions: 1

Compression:

Stored size: 1.25 KB

Contents

require 'forwardable'

module ServiceContract
  module Avro
    class Endpoint < AbstractEndpoint
      extend Forwardable
      def_delegators :definition, :name, :response, :request

      def description
        [request_method, path].join(" ")
      end

      def doc
        definition.respond_to?(:doc) ? definition.doc : nil
      end

      def response_type
        Type.build(response)
      end

      def parameters
        request.fields.map{|field| Parameter.new(field) }
      end

      protected

      def request_method
        case name
        when "create"
          "POST"
        when "update"
          "PUT"
        when "destroy"
          "DELETE"
        else
          "GET"
        end
      end

      def path
        case name
        when "index", "create"
          protocol.path
        when "show", "destroy", "update"
          File.join(protocol.path, ":id")
        else
          if member?
            File.join(protocol.path, ":id", name)
          else
            File.join(protocol.path, name)
          end
        end
      end

      # seems kinda hacky
      def member?
        first_param_type = parameters.first.type
        first_param_type.complex? && first_param_type.name == protocol.main_type
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
service_contract-0.0.10 lib/service_contract/avro/endpoint.rb