Class: ApiValidator::ResponseExpectation

Inherits:
Object
  • Object
show all
Defined in:
lib/api-validator/response_expectation.rb,
lib/api-validator/response_expectation/results.rb

Defined Under Namespace

Classes: Results

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(validator, options = {}, &block) ⇒ ResponseExpectation

Returns a new instance of ResponseExpectation.



7
8
9
10
11
12
# File 'lib/api-validator/response_expectation.rb', line 7

def initialize(validator, options = {}, &block)
  @validator, @block = validator, block
  initialize_headers(options.delete(:headers))
  initialize_status(options.delete(:status))
  initialize_schema(options.delete(:schema))
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args, &block) ⇒ Object



81
82
83
84
85
86
87
# File 'lib/api-validator/response_expectation.rb', line 81

def method_missing(method, *args, &block)
  if respond_to_method_missing?(method)
    @validator.send(method, *args, &block)
  else
    super
  end
end

Instance Attribute Details

#status_validatorObject

Returns the value of attribute status_validator.



6
7
8
# File 'lib/api-validator/response_expectation.rb', line 6

def status_validator
  @status_validator
end

Instance Method Details

#expect_headers(expected_headers) ⇒ Object



57
58
59
# File 'lib/api-validator/response_expectation.rb', line 57

def expect_headers(expected_headers)
  header_validators << ApiValidator::Header.new(expected_headers)
end

#expect_post_type(type_uri) ⇒ Object



61
62
63
64
# File 'lib/api-validator/response_expectation.rb', line 61

def expect_post_type(type_uri)
  response_filters << proc { |response| response.env['expected_post_type'] = type_uri }
  type_uri
end

#expect_properties(properties) ⇒ Object



49
50
51
# File 'lib/api-validator/response_expectation.rb', line 49

def expect_properties(properties)
  json_validators << ApiValidator::Json.new(properties)
end

#expect_schema(expected_schema, path = nil) ⇒ Object



53
54
55
# File 'lib/api-validator/response_expectation.rb', line 53

def expect_schema(expected_schema, path=nil)
  schema_validators << ApiValidator::JsonSchema.new(expected_schema, path)
end

#expectationsObject



45
46
47
# File 'lib/api-validator/response_expectation.rb', line 45

def expectations
  [status_validator].compact + header_validators + schema_validators + json_validators
end

#header_validatorsObject



37
38
39
# File 'lib/api-validator/response_expectation.rb', line 37

def header_validators
  @header_validators ||= []
end

#initialize_headers(expected_headers) ⇒ Object



14
15
16
17
# File 'lib/api-validator/response_expectation.rb', line 14

def initialize_headers(expected_headers)
  return unless expected_headers
  self.header_validators << ApiValidator::Header.new(expected_headers)
end

#initialize_schema(expected_schema) ⇒ Object



24
25
26
27
# File 'lib/api-validator/response_expectation.rb', line 24

def initialize_schema(expected_schema)
  return unless expected_schema
  schema_validators << ApiValidator::JsonSchema.new(expected_schema)
end

#initialize_status(expected_status) ⇒ Object



19
20
21
22
# File 'lib/api-validator/response_expectation.rb', line 19

def initialize_status(expected_status)
  return unless expected_status
  self.status_validator = ApiValidator::Status.new(expected_status)
end

#json_validatorsObject



29
30
31
# File 'lib/api-validator/response_expectation.rb', line 29

def json_validators
  @json_validators ||= []
end

#respond_to_method_missing?(method) ⇒ Boolean

Returns:

  • (Boolean)


77
78
79
# File 'lib/api-validator/response_expectation.rb', line 77

def respond_to_method_missing?(method)
  @validator.respond_to?(method)
end

#response_filtersObject



41
42
43
# File 'lib/api-validator/response_expectation.rb', line 41

def response_filters
  @response_filters ||= []
end

#runObject



66
67
68
69
70
# File 'lib/api-validator/response_expectation.rb', line 66

def run
  return unless @block
  response = instance_eval(&@block)
  Results.new(response, validate(response))
end

#schema_validatorsObject



33
34
35
# File 'lib/api-validator/response_expectation.rb', line 33

def schema_validators
  @schema_validators ||= []
end

#validate(response) ⇒ Object



72
73
74
75
# File 'lib/api-validator/response_expectation.rb', line 72

def validate(response)
  response_filters.each { |filter| filter.call(response) }
  expectations.map { |expectation| expectation.validate(response) }
end