rswag-specs 1.3.0 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 307d940edb577fca0b1d8f443f2766817f8f24c8
4
- data.tar.gz: 968032d3e4db670d8ef1a896c2e1b9a67286206c
3
+ metadata.gz: aefe22cf5f08fa506055d2cc653241014d59b968
4
+ data.tar.gz: c8d0d80117885539b4fe8361c5a26b34cb90d5e2
5
5
  SHA512:
6
- metadata.gz: 72d4307cda84e17964e7833eb7f93ba9c0c7c78da4c2c39b7678df9ca9aa544335fcf5e21ec5ea1bbb1039a9181a6ee84d4a7498b42611a48c6641b16603f1ee
7
- data.tar.gz: 38bc59177dbd13f3d27d57ea1eaaeed95ced505dd54e2407f970e08d46e44118d5d65a4c5bd853add2d18cc73157c0474f1b233f99070b0355480ab90176c7d9
6
+ metadata.gz: 10cf3f7a2899a2b01cf34f183e36edcd6340f498d23a90711d5ff8259adc9ae0201678007fe01e5399b078091c1c202202f978c1382006e5073912c0e46124f1
7
+ data.tar.gz: 5063174caf14bc653bfaea6b5feb4ed97c0676a42f472942b573045bf840e96639aa51ff42fe406a17b323d0f093623af68f3713043addba794b344ad3b493bf
@@ -1,5 +1,4 @@
1
1
  require 'rspec/core'
2
- require 'rswag/specs/version'
3
2
  require 'rswag/specs/example_group_helpers'
4
3
  require 'rswag/specs/example_helpers'
5
4
  require 'rswag/specs/configuration'
@@ -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
- headers = Hash[ parameters_in(:header).map { |p| [ p[:name], example.send(p[:name]).to_s ] } ]
36
- headers.tap do |h|
37
- produces = @api_metadata[:operation][:produces] || @global_metadata[:produces]
38
- consumes = @api_metadata[:operation][:consumes] || @global_metadata[:consumes]
39
- h['ACCEPT'] = produces.join(';') unless produces.nil?
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(resolve_api_key_parameters)
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 resolve_api_key_parameters
67
- @api_key_params ||= begin
68
- # First figure out the security requirement applicable to the operation
69
- global_requirements = (@global_metadata[:security] || [] ).map { |r| r.keys.first }
70
- operation_requirements = (@api_metadata[:operation][:security] || [] ).map { |r| r.keys.first }
71
- requirements = global_requirements | operation_requirements
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.3.0
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-05-19 00:00:00.000000000 Z
11
+ date: 2017-07-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rails
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: '5.2'
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: '5.2'
32
+ version: '6.0'
33
33
  - !ruby/object:Gem::Dependency
34
- name: json
34
+ name: railties
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - "~>"
37
+ - - ">="
38
38
  - !ruby/object:Gem::Version
39
- version: '1.8'
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.8'
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.5.1
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
@@ -1,5 +0,0 @@
1
- module Rswag
2
- module Specs
3
- VERSION = '1.3.0'
4
- end
5
- end