Sha256: 1a17e027299c90976d83214e9d42f6ca4ab0f1661b7f0e1b6287208946e5ac8b

Contents?: true

Size: 1.87 KB

Versions: 11

Compression:

Stored size: 1.87 KB

Contents

require 'delegate'

module Restspec
  module Stores
    # Provides methods for the {EndpointStore} object.
    class EndpointStoreDelegator < SimpleDelegator
      # Stores an endpoint. It uses the {Restspec::Endpoints::Endpoint#full_name full_name}
      # method of the endpoint to use as the key for the endpoint itself.
      #
      # @param endpoint [Restspec::Endpoints::Endpoint] the endpoint to store.
      # @return [Restspec::Endpoints::Endpoint] the endpoint inserted.
      def store(endpoint)
        self[endpoint.full_name] = endpoint
      end

      # Get is just an alias for Hash#[]
      # @return [Restspec::Endpoints::Endpoint, nil] the endpoint found.
      def get(endpoint_name)
        self[endpoint_name]
      end

      # Get an endpoint by the schema, name and a role.
      #
      # @example
      #   # Let's assume in the store there are 3 endpoints
      #   # called :show, in different namespaces.
      #
      #   Restspec::EndpointStore.get_by_schema_name_and_role(:book, :show, :response)
      #   # => this will only return the one whose schema is :book and are suitable for response.
      #
      # @return [Restspec::Endpoints::Endpoint, nil] the endpoint found.
      def get_by_schema_name_and_role(schema_name, endpoint_name, role)
        values.find do |endpoint|
          endpoint.name == endpoint_name && endpoint.schema_for(role).try(:name) == schema_name
        end
      end
    end

    # The Endpoint Store is a Hash extended using {Stores::EndpointStoreDelegator}
    # This is where we store the endpoints to tests.
    #
    # It's important to note that, because this is a Hash, there can't be
    # two endpoint with the same full name. There can't be two endpoints
    # called `books/index` for example.
    EndpointStore = EndpointStoreDelegator.new(Hash.new)
  end

  # (see Stores::EndpointStore)
  EndpointStore = Stores::EndpointStore
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
restspec-0.3.2 lib/restspec/stores/endpoint_store.rb
restspec-0.3.1 lib/restspec/stores/endpoint_store.rb
restspec-0.3.0 lib/restspec/stores/endpoint_store.rb
restspec-0.2.6 lib/restspec/stores/endpoint_store.rb
restspec-0.2.5 lib/restspec/stores/endpoint_store.rb
restspec-0.2.4 lib/restspec/stores/endpoint_store.rb
restspec-0.2.3 lib/restspec/stores/endpoint_store.rb
restspec-0.2.2 lib/restspec/stores/endpoint_store.rb
restspec-0.2.1 lib/restspec/stores/endpoint_store.rb
restspec-0.2 lib/restspec/stores/endpoint_store.rb
restspec-0.1 lib/restspec/stores/endpoint_store.rb