Class: Interpol::Endpoint

Inherits:
Object
  • Object
show all
Includes:
HashFetcher
Defined in:
lib/interpol/endpoint.rb

Overview

Represents an endpoint. Instances of this class are constructed based on the endpoint definitions in the YAML files.

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from HashFetcher

#fetch_from

Constructor Details

#initialize(endpoint_hash) ⇒ Endpoint

Returns a new instance of Endpoint.



44
45
46
47
48
49
50
51
52
# File 'lib/interpol/endpoint.rb', line 44

def initialize(endpoint_hash)
  @name        = fetch_from(endpoint_hash, 'name')
  @route       = fetch_from(endpoint_hash, 'route')
  @method      = fetch_from(endpoint_hash, 'method').downcase.to_sym

  @definitions_hash, @all_definitions = extract_definitions_from(endpoint_hash)

  validate_name!
end

Instance Attribute Details

#methodObject (readonly)

Returns the value of attribute method.



42
43
44
# File 'lib/interpol/endpoint.rb', line 42

def method
  @method
end

#nameObject (readonly)

Returns the value of attribute name.



42
43
44
# File 'lib/interpol/endpoint.rb', line 42

def name
  @name
end

#routeObject (readonly)

Returns the value of attribute route.



42
43
44
# File 'lib/interpol/endpoint.rb', line 42

def route
  @route
end

Instance Method Details

#available_request_versionsObject



74
75
76
# File 'lib/interpol/endpoint.rb', line 74

def available_request_versions
  available_versions_matching &:request?
end

#available_response_versionsObject



78
79
80
# File 'lib/interpol/endpoint.rb', line 78

def available_response_versions
  available_versions_matching &:response?
end

#definitionsObject



82
83
84
85
86
87
88
89
90
91
92
# File 'lib/interpol/endpoint.rb', line 82

def definitions
  # sort all requests before all responses
  # sort higher version numbers before lower version numbers
  @sorted_definitions ||= @all_definitions.sort do |x, y|
    if x.message_type == y.message_type
      y.version <=> x.version
    else
      x.message_type <=> y.message_type
    end
  end
end

#find_definition(version, message_type, &block) ⇒ Object



62
63
64
# File 'lib/interpol/endpoint.rb', line 62

def find_definition(version, message_type, &block)
  @definitions_hash.fetch([message_type, version], &block)
end

#find_definition!(version, message_type) ⇒ Object



54
55
56
57
58
59
60
# File 'lib/interpol/endpoint.rb', line 54

def find_definition!(version, message_type)
  find_definition(version, message_type) do
    message = "No definition found for #{name} endpoint for version #{version}"
    message << " and message_type #{message_type}"
    raise NoEndpointDefinitionFoundError.new(message)
  end
end

#find_example_for!(version, message_type) ⇒ Object



66
67
68
# File 'lib/interpol/endpoint.rb', line 66

def find_example_for!(version, message_type)
  find_definition!(version, message_type).first.examples.first
end

#find_example_status_code_for!(version) ⇒ Object



70
71
72
# File 'lib/interpol/endpoint.rb', line 70

def find_example_status_code_for!(version)
  find_definition!(version, 'response').first.example_status_code
end

#route_matches?(path) ⇒ Boolean

Returns:

  • (Boolean)


94
95
96
# File 'lib/interpol/endpoint.rb', line 94

def route_matches?(path)
  path =~ route_regex
end