Class: ActionSpec::Doc::Dsl

Inherits:
Object
  • Object
show all
Defined in:
lib/action_spec/doc/dsl.rb

Constant Summary collapse

PARAM_LOCATIONS =
%i[header path query cookie].freeze
RESPONSE_MEDIA_TYPES =
%i[json form].freeze

Instance Method Summary collapse

Constructor Details

#initialize(endpoint) ⇒ Dsl

Returns a new instance of Dsl.



8
9
10
11
# File 'lib/action_spec/doc/dsl.rb', line 8

def initialize(endpoint)
  @endpoint = endpoint
  @scopes = []
end

Instance Method Details

#body(media_type, data: {}, required: false) ⇒ Object



31
32
33
# File 'lib/action_spec/doc/dsl.rb', line 31

def body(media_type, data: {}, required: false, **)
  add_body(media_type, data, required:)
end

#body!(media_type, data: {}) ⇒ Object



35
36
37
# File 'lib/action_spec/doc/dsl.rb', line 35

def body!(media_type, data: {}, **)
  add_body(media_type, data, required: true)
end

#data(name, type = String, **options) ⇒ Object



55
56
57
# File 'lib/action_spec/doc/dsl.rb', line 55

def data(name, type = String, **options)
  add_body(:form, { name => options.merge(type:) })
end

#error(code, description = nil, media_type = nil, desc: nil, **options) ⇒ Object



90
91
92
# File 'lib/action_spec/doc/dsl.rb', line 90

def error(code, description = nil, media_type = nil, desc: nil, **options)
  response(code, description, media_type, desc: desc || "Error", **options)
end

#errors(code, examples = nil, media_type = nil, desc: "Error", **options) ⇒ Object



94
95
96
# File 'lib/action_spec/doc/dsl.rb', line 94

def errors(code, examples = nil, media_type = nil, desc: "Error", **options)
  response(code, nil, media_type, desc:, examples: examples || options, **options.except(*Array((examples || options).keys)))
end

#form(data:, **options) ⇒ Object



47
48
49
# File 'lib/action_spec/doc/dsl.rb', line 47

def form(data:, **options)
  body(:form, data:, **options)
end

#form!(data:, **options) ⇒ Object



51
52
53
# File 'lib/action_spec/doc/dsl.rb', line 51

def form!(data:, **options)
  body!(:form, data:, **options)
end

#json(data:, **options) ⇒ Object



39
40
41
# File 'lib/action_spec/doc/dsl.rb', line 39

def json(data:, **options)
  body(:json, data:, **options)
end

#json!(data:, **options) ⇒ Object



43
44
45
# File 'lib/action_spec/doc/dsl.rb', line 43

def json!(data:, **options)
  body!(:json, data:, **options)
end

#openapi(enabled) ⇒ Object



67
68
69
# File 'lib/action_spec/doc/dsl.rb', line 67

def openapi(enabled)
  endpoint.options[:openapi] = enabled
end

#response(code, description = nil, media_type = nil, desc: nil, data: nil, example: nil, examples: nil, **options) ⇒ Object



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/action_spec/doc/dsl.rb', line 73

def response(code, description = nil, media_type = nil, desc: nil, data: nil, example: nil, examples: nil, **options)
  description, media_type = normalize_response_arguments(description, media_type)
  schema, example, examples = normalize_response_body(description, data:, example:, examples:, options:)
  endpoint.add_response(
    code,
    Response.new(
      code:,
      description: resolved_description(description, desc),
      media_type: media_type || ActionSpec.config.default_response_media_type,
      schema:,
      example:,
      examples:,
      options:
    )
  )
end

#scope(name, compact: nil, compact_blank: nil, &block) ⇒ Object



59
60
61
62
63
64
65
# File 'lib/action_spec/doc/dsl.rb', line 59

def scope(name, compact: nil, compact_blank: nil, &block)
  endpoint.request.register_scope(name, compact:, compact_blank:)
  scopes.push(name.to_sym)
  instance_exec(&block)
ensure
  scopes.pop
end