Skip to content

Commit 5749585

Browse files
Change to open api spec 3.0
1 parent 03abdc6 commit 5749585

23 files changed

+282
-155
lines changed

lib/rspec_api_documentation.rb

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,20 +52,27 @@ module Writers
5252
module OpenApi
5353
extend ActiveSupport::Autoload
5454

55+
autoload :Components
56+
autoload :Contact
57+
autoload :ExternalDocs
58+
autoload :Flow
59+
autoload :Header
5560
autoload :Helper
56-
autoload :Node
57-
autoload :Root
5861
autoload :Info
59-
autoload :Contact
6062
autoload :License
61-
autoload :Path
62-
autoload :Tag
63+
autoload :Media
64+
autoload :Node
6365
autoload :Operation
6466
autoload :Parameter
67+
autoload :Path
68+
autoload :RequestBody
6569
autoload :Response
66-
autoload :Header
70+
autoload :Root
6771
autoload :Schema
68-
autoload :SecuritySchema
72+
autoload :SecurityScheme
73+
autoload :Server
74+
autoload :Tag
75+
autoload :Variable
6976
end
7077

7178
module Views
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
module RspecApiDocumentation
2+
module OpenApi
3+
class Components < Node
4+
add_setting :schemas, :schema => { '' => Schema }
5+
add_setting :responses, :schema => { '' => Response }
6+
add_setting :parameters, :schema => { '' => Parameter }
7+
add_setting :headers, :schema => { '' => Header }
8+
add_setting :securitySchemes, :schema => { '' => SecurityScheme }
9+
add_setting :links
10+
add_setting :callbacks
11+
end
12+
end
13+
end
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
module RspecApiDocumentation
22
module OpenApi
33
class Contact < Node
4-
add_setting :name, :default => 'API Support'
5-
add_setting :url, :default => 'http://www.open-api.io/support'
6-
add_setting :email, :default => '[email protected]'
4+
add_setting :name
5+
add_setting :url
6+
add_setting :email
77
end
88
end
99
end
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
module RspecApiDocumentation
2+
module OpenApi
3+
class ExternalDocs < Node
4+
add_setting :description
5+
add_setting :url, :required => true
6+
end
7+
end
8+
end
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
module RspecApiDocumentation
2+
module OpenApi
3+
class Flow < Node
4+
add_setting :authorizationUrl, :required => true
5+
add_setting :tokenUrl, :required => true
6+
add_setting :refreshUrl
7+
add_setting :scopes, :required => true
8+
end
9+
end
10+
end
Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
module RspecApiDocumentation
22
module OpenApi
33
class Header < Node
4-
add_setting :description, :default => ''
5-
add_setting :type, :required => true, :default => lambda { |header|
6-
Helper.extract_type(header.public_send('x-example-value'))
7-
}
8-
add_setting :format
9-
add_setting 'x-example-value'
4+
add_setting :description
5+
add_setting :required
6+
add_setting :deprecated
7+
# add_setting :allowEmptyValue
8+
# add_setting :style
9+
# add_setting :explode
10+
# add_setting :allowReserved
11+
add_setting :schema, :schema => Schema
12+
add_setting :example
13+
# add_setting :examples, :schema => { '' => Example }
14+
# add_setting :content, :schema => { '' => Media }
1015
end
1116
end
1217
end

lib/rspec_api_documentation/open_api/helper.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ def extract_type(value)
1616
end
1717

1818
def extract_items(value, opts = {})
19-
result = {type: extract_type(value)}
19+
result = { type: extract_type(value) }
2020
if result[:type] == :array
2121
result[:items] = extract_items(value[0], opts)
2222
else

lib/rspec_api_documentation/open_api/info.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ module RspecApiDocumentation
22
module OpenApi
33
class Info < Node
44
add_setting :title, :default => 'OpenAPI Specification', :required => true
5-
add_setting :description, :default => 'This is a sample server Petstore server.'
6-
add_setting :termsOfService, :default => 'http://open-api.io/terms/'
7-
add_setting :contact, :default => Contact.new, :schema => Contact
8-
add_setting :license, :default => License.new, :schema => License
5+
add_setting :description
6+
add_setting :termsOfService
7+
add_setting :contact, :schema => Contact
8+
add_setting :license, :schema => License
99
add_setting :version, :default => '1.0.0', :required => true
1010
end
1111
end
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
module RspecApiDocumentation
2+
module OpenApi
3+
class Media < Node
4+
add_setting :schema, :schema => Schema
5+
add_setting :example
6+
# add_setting :examples, :schema => { '' => Example }
7+
# add_setting :encoding, :schema => { '' => Encoding }
8+
end
9+
end
10+
end

lib/rspec_api_documentation/open_api/node.rb

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,13 @@ def add_setting(name, opts = {})
6464
settings[name] = opts[:value] if opts[:value]
6565

6666
define_singleton_method("#{name}_schema") { opts[:schema] || NilClass }
67-
define_singleton_method("#{name}=") { |value| settings[name] = value }
67+
define_singleton_method("#{name}=") do |value|
68+
if setting[name].is_a?(Hash) && value.is_a?(Hash)
69+
value.each { |k, v| setting[name][k] = setting[name][k] ? setting[name][k].merge(v) : v }
70+
else
71+
settings[name] = value
72+
end
73+
end
6874
define_singleton_method("#{name}") do
6975
if settings.has_key?(name)
7076
settings[name]

0 commit comments

Comments
 (0)