rswag-specs 1.3.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/rswag/specs.rb +0 -1
- data/lib/rswag/specs/example_helpers.rb +17 -1
- data/lib/rswag/specs/extended_schema.rb +3 -2
- data/lib/rswag/specs/request_factory.rb +35 -22
- metadata +17 -32
- data/lib/rswag/specs/version.rb +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aefe22cf5f08fa506055d2cc653241014d59b968
|
4
|
+
data.tar.gz: c8d0d80117885539b4fe8361c5a26b34cb90d5e2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 10cf3f7a2899a2b01cf34f183e36edcd6340f498d23a90711d5ff8259adc9ae0201678007fe01e5399b078091c1c202202f978c1382006e5073912c0e46124f1
|
7
|
+
data.tar.gz: 5063174caf14bc653bfaea6b5feb4ed97c0676a42f472942b573045bf840e96639aa51ff42fe406a17b323d0f093623af68f3713043addba794b344ad3b493bf
|
data/lib/rswag/specs.rb
CHANGED
@@ -14,7 +14,7 @@ module Rswag
|
|
14
14
|
api_metadata[:operation][:verb],
|
15
15
|
factory.build_fullpath(self),
|
16
16
|
factory.build_body(self),
|
17
|
-
factory.build_headers(self)
|
17
|
+
rackify_headers(factory.build_headers(self)) # Rails test infrastructure requires Rack headers
|
18
18
|
)
|
19
19
|
else
|
20
20
|
send(
|
@@ -36,6 +36,22 @@ module Rswag
|
|
36
36
|
|
37
37
|
private
|
38
38
|
|
39
|
+
def rackify_headers(headers)
|
40
|
+
name_value_pairs = headers.map do |name, value|
|
41
|
+
[
|
42
|
+
case name
|
43
|
+
when 'Accept' then 'HTTP_ACCEPT'
|
44
|
+
when 'Content-Type' then 'CONTENT_TYPE'
|
45
|
+
when 'Authorization' then 'HTTP_AUTHORIZATION'
|
46
|
+
else name
|
47
|
+
end,
|
48
|
+
value
|
49
|
+
]
|
50
|
+
end
|
51
|
+
|
52
|
+
Hash[ name_value_pairs ]
|
53
|
+
end
|
54
|
+
|
39
55
|
def rswag_config
|
40
56
|
::Rswag::Specs.config
|
41
57
|
end
|
@@ -3,16 +3,17 @@ require 'json-schema'
|
|
3
3
|
module Rswag
|
4
4
|
module Specs
|
5
5
|
class ExtendedSchema < JSON::Schema::Draft4
|
6
|
-
|
6
|
+
|
7
7
|
def initialize
|
8
8
|
super
|
9
9
|
@attributes['type'] = ExtendedTypeAttribute
|
10
10
|
@uri = URI.parse('http://tempuri.org/rswag/specs/extended_schema')
|
11
|
+
@names = ['http://tempuri.org/rswag/specs/extended_schema']
|
11
12
|
end
|
12
13
|
end
|
13
14
|
|
14
15
|
class ExtendedTypeAttribute < JSON::Schema::TypeV4Attribute
|
15
|
-
|
16
|
+
|
16
17
|
def self.validate(current_schema, data, fragments, processor, validator, options={})
|
17
18
|
return if data.nil? && current_schema.schema['x-nullable'] == true
|
18
19
|
super
|
@@ -32,13 +32,20 @@ module Rswag
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def build_headers(example)
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
h['CONTENT_TYPE'] = consumes.join(';') unless consumes.nil?
|
35
|
+
name_value_pairs = parameters_in(:header).map do |param|
|
36
|
+
[
|
37
|
+
param[:name],
|
38
|
+
example.send(param[:name]).to_s
|
39
|
+
]
|
41
40
|
end
|
41
|
+
|
42
|
+
# Add MIME type headers based on produces/consumes metadata
|
43
|
+
produces = @api_metadata[:operation][:produces] || @global_metadata[:produces]
|
44
|
+
consumes = @api_metadata[:operation][:consumes] || @global_metadata[:consumes]
|
45
|
+
name_value_pairs << [ 'Accept', produces.join(';') ] unless produces.nil?
|
46
|
+
name_value_pairs << [ 'Content-Type', consumes.join(';') ] unless consumes.nil?
|
47
|
+
|
48
|
+
Hash[ name_value_pairs ]
|
42
49
|
end
|
43
50
|
|
44
51
|
private
|
@@ -52,42 +59,48 @@ module Rswag
|
|
52
59
|
|
53
60
|
applicable_params
|
54
61
|
.map { |p| p['$ref'] ? resolve_parameter(p['$ref']) : p } # resolve any references
|
55
|
-
.concat(
|
62
|
+
.concat(security_parameters)
|
56
63
|
.select { |p| p[:in] == location }
|
57
64
|
end
|
58
65
|
|
59
66
|
def resolve_parameter(ref)
|
60
|
-
defined_params = @global_metadata[:parameters]
|
67
|
+
defined_params = @global_metadata[:parameters]
|
61
68
|
key = ref.sub('#/parameters/', '')
|
62
69
|
raise "Referenced parameter '#{ref}' must be defined" unless defined_params && defined_params[key]
|
63
70
|
defined_params[key]
|
64
71
|
end
|
65
72
|
|
66
|
-
def
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
# Then obtain the scheme definitions for those requirements
|
74
|
-
definitions = (@global_metadata[:securityDefinitions] || {}).slice(*requirements)
|
75
|
-
definitions.values.select { |d| d[:type] == :apiKey }
|
73
|
+
def security_parameters
|
74
|
+
applicable_security_schemes.map do |scheme|
|
75
|
+
if scheme[:type] == :apiKey
|
76
|
+
{ name: scheme[:name], type: :string, in: scheme[:in] }
|
77
|
+
else
|
78
|
+
{ name: 'Authorization', type: :string, in: :header } # use auth header for basic & oauth2
|
79
|
+
end
|
76
80
|
end
|
77
81
|
end
|
78
82
|
|
83
|
+
def applicable_security_schemes
|
84
|
+
# First figure out the security requirement applicable to the operation
|
85
|
+
requirements = @api_metadata[:operation][:security] || @global_metadata[:security]
|
86
|
+
scheme_names = requirements ? requirements.map { |r| r.keys.first } : []
|
87
|
+
|
88
|
+
# Then obtain the scheme definitions for those requirements
|
89
|
+
(@global_metadata[:securityDefinitions] || {}).slice(*scheme_names).values
|
90
|
+
end
|
91
|
+
|
79
92
|
def build_query_string_part(param, value)
|
80
93
|
return "#{param[:name]}=#{value.to_s}" unless param[:type].to_sym == :array
|
81
94
|
|
82
95
|
name = param[:name]
|
83
96
|
case param[:collectionFormat]
|
84
|
-
when :ssv
|
97
|
+
when :ssv
|
85
98
|
"#{name}=#{value.join(' ')}"
|
86
|
-
when :tsv
|
99
|
+
when :tsv
|
87
100
|
"#{name}=#{value.join('\t')}"
|
88
|
-
when :pipes
|
101
|
+
when :pipes
|
89
102
|
"#{name}=#{value.join('|')}"
|
90
|
-
when :multi
|
103
|
+
when :multi
|
91
104
|
value.map { |v| "#{name}=#{v}" }.join('&')
|
92
105
|
else
|
93
106
|
"#{name}=#{value.join(',')}" # csv is default
|
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rswag-specs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Richie Morris
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-07-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: activesupport
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
version: '3.1'
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '
|
22
|
+
version: '6.0'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -29,21 +29,27 @@ dependencies:
|
|
29
29
|
version: '3.1'
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '
|
32
|
+
version: '6.0'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
|
-
name:
|
34
|
+
name: railties
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
|
-
- - "
|
37
|
+
- - ">="
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: '1
|
39
|
+
version: '3.1'
|
40
|
+
- - "<"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '6.0'
|
40
43
|
type: :runtime
|
41
44
|
prerelease: false
|
42
45
|
version_requirements: !ruby/object:Gem::Requirement
|
43
46
|
requirements:
|
44
|
-
- - "
|
47
|
+
- - ">="
|
45
48
|
- !ruby/object:Gem::Version
|
46
|
-
version: '1
|
49
|
+
version: '3.1'
|
50
|
+
- - "<"
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '6.0'
|
47
53
|
- !ruby/object:Gem::Dependency
|
48
54
|
name: json-schema
|
49
55
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,26 +64,6 @@ dependencies:
|
|
58
64
|
- - "~>"
|
59
65
|
- !ruby/object:Gem::Version
|
60
66
|
version: '2.2'
|
61
|
-
- !ruby/object:Gem::Dependency
|
62
|
-
name: rspec-rails
|
63
|
-
requirement: !ruby/object:Gem::Requirement
|
64
|
-
requirements:
|
65
|
-
- - ">="
|
66
|
-
- !ruby/object:Gem::Version
|
67
|
-
version: '2.14'
|
68
|
-
- - "<"
|
69
|
-
- !ruby/object:Gem::Version
|
70
|
-
version: '4'
|
71
|
-
type: :runtime
|
72
|
-
prerelease: false
|
73
|
-
version_requirements: !ruby/object:Gem::Requirement
|
74
|
-
requirements:
|
75
|
-
- - ">="
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version: '2.14'
|
78
|
-
- - "<"
|
79
|
-
- !ruby/object:Gem::Version
|
80
|
-
version: '4'
|
81
67
|
description: Simplify API integration testing with a succinct rspec DSL and generate
|
82
68
|
Swagger files directly from your rspecs
|
83
69
|
email:
|
@@ -100,7 +86,6 @@ files:
|
|
100
86
|
- lib/rswag/specs/request_factory.rb
|
101
87
|
- lib/rswag/specs/response_validator.rb
|
102
88
|
- lib/rswag/specs/swagger_formatter.rb
|
103
|
-
- lib/rswag/specs/version.rb
|
104
89
|
- lib/tasks/rswag-specs_tasks.rake
|
105
90
|
homepage: https://github.com/domaindrivendev/rswag
|
106
91
|
licenses:
|
@@ -122,7 +107,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
122
107
|
version: '0'
|
123
108
|
requirements: []
|
124
109
|
rubyforge_project:
|
125
|
-
rubygems_version: 2.
|
110
|
+
rubygems_version: 2.6.12
|
126
111
|
signing_key:
|
127
112
|
specification_version: 4
|
128
113
|
summary: A Swagger-based DSL for rspec-rails & accompanying rake task for generating
|