Sha256: 3b48da3bbed648453643dd41f77a6c0fd6d698b2e5731541a55f8545c0c47069

Contents?: true

Size: 1.29 KB

Versions: 2

Compression:

Stored size: 1.29 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?
        return false if parameters.empty?

        first_param_type = parameters.first.type
        first_param_type.complex? && first_param_type.name == protocol.main_type
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
service_contract-0.1.1 lib/service_contract/avro/endpoint.rb
service_contract-0.1.0 lib/service_contract/avro/endpoint.rb