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 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