Module: OpenapiRuby::Adapters::RSpec::ExampleGroupHelpers

Defined in:
lib/openapi_ruby/adapters/rspec.rb

Overview

Class-level DSL methods extended onto :openapi example groups. All methods are inherited by nested describe/context/it_behaves_like blocks. Data is stored in RSpec metadata which propagates to child groups.

Instance Method Summary collapse

Instance Method Details

#consumes(*content_types) ⇒ Object



57
58
59
# File 'lib/openapi_ruby/adapters/rspec.rb', line 57

def consumes(*content_types)
  [:openapi_operation]&.consumes(*content_types)
end

#description(value = nil) ⇒ Object



52
53
54
55
# File 'lib/openapi_ruby/adapters/rspec.rb', line 52

def description(value = nil)
  return super() if value.nil?
  [:openapi_operation]&.description(value)
end

#header(name, attributes = {}) ⇒ Object



87
88
89
# File 'lib/openapi_ruby/adapters/rspec.rb', line 87

def header(name, attributes = {})
  [:openapi_response]&.header(name, attributes)
end

#parameter(attributes = {}) ⇒ Object



38
39
40
41
42
43
44
# File 'lib/openapi_ruby/adapters/rspec.rb', line 38

def parameter(attributes = {})
  if [:openapi_operation]
    [:openapi_operation].parameter(attributes)
  elsif [:openapi_path_context]
    [:openapi_path_context].parameter(attributes)
  end
end

#path(template, &block) ⇒ Object



14
15
16
17
18
19
20
21
22
23
# File 'lib/openapi_ruby/adapters/rspec.rb', line 14

def path(template, &block)
  schema_name = [:openapi_schema_name]
  context = DSL::Context.new(template, schema_name: schema_name)

  describe template do
    [:openapi_path_context] = context
    instance_eval(&block) if block
    DSL::MetadataStore.register(context)
  end
end

#produces(*content_types) ⇒ Object



61
62
63
# File 'lib/openapi_ruby/adapters/rspec.rb', line 61

def produces(*content_types)
  [:openapi_operation]&.produces(*content_types)
end

#request_body(attributes = {}) ⇒ Object



65
66
67
# File 'lib/openapi_ruby/adapters/rspec.rb', line 65

def request_body(attributes = {})
  [:openapi_operation]&.request_body(attributes)
end

#request_body_example(**kwargs) ⇒ Object



69
70
71
# File 'lib/openapi_ruby/adapters/rspec.rb', line 69

def request_body_example(**kwargs)
  [:openapi_operation]&.request_body_example(**kwargs)
end

#response(status_code, description, hidden: false, &block) ⇒ Object



73
74
75
76
77
78
79
80
81
# File 'lib/openapi_ruby/adapters/rspec.rb', line 73

def response(status_code, description, hidden: false, &block)
  operation = [:openapi_operation]
  response_ctx = operation.response(status_code, description, hidden: hidden)

  context "response #{status_code} #{description}" do
    [:openapi_response] = response_ctx
    instance_eval(&block) if block
  end
end

#run_test!(description = nil, &block) ⇒ Object



91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/openapi_ruby/adapters/rspec.rb', line 91

def run_test!(description = nil, &block)
  response_ctx = [:openapi_response]

  before do |example|
    submit_openapi_request(example.)
  end

  it(description || "returns #{response_ctx.status_code}") do |example|
    assert_openapi_response(example.)
    instance_eval(&block) if block
  end
end

#schema(definition) ⇒ Object



83
84
85
# File 'lib/openapi_ruby/adapters/rspec.rb', line 83

def schema(definition)
  [:openapi_response]&.schema(definition)
end