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



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

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

#description(value = nil) ⇒ Object



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

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

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



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

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

#parameter(attributes = {}) ⇒ Object



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

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



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

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

#request_body(attributes = {}) ⇒ Object



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

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

#request_body_example(**kwargs) ⇒ Object



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

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

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



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

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



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

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



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

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