swagalicious 0.3.1 → 0.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/Gemfile.lock +28 -2
- data/lib/swagalicious.rb +8 -8
- data/lib/swagalicious/example_helpers.rb +12 -2
- data/lib/swagalicious/response_validator.rb +1 -1
- data/lib/swagalicious/swagger_formatter.rb +18 -1
- data/lib/swagalicious/version.rb +1 -1
- data/swagalicious.gemspec +4 -1
- metadata +37 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5b54b885038cd908b12fb7779ba5dad6700c25844d436aae339cffbf909b8b60
|
4
|
+
data.tar.gz: 6247d5ba551693f405b2139fcfeee3b679a821c0fe9db091e076f5ab4ef88c01
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 24117c44ed8d2b1632ddce6cf817bfb13fe308897535da97c0f1bc5daca7649b41c81dd8558269f11f6454f5e21c7b7504a1a3d5f6ad6d891ec856d880da0550
|
7
|
+
data.tar.gz: 42d867c31ca4d7ee5f5d5f0023b30330cb971abed696cf989cacc0dbc788dd05464d81586122e2b9d06f3636cb65bc666b124995e05bfd35b955824abd0c617f
|
data/Gemfile.lock
CHANGED
@@ -1,28 +1,48 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
swagalicious (0.
|
4
|
+
swagalicious (0.3.1)
|
5
5
|
faraday (~> 1.3.0)
|
6
6
|
json-schema (~> 2.8.1)
|
7
7
|
oj (~> 3.11.0)
|
8
|
-
rack-test (~> 1.1.0)
|
9
8
|
rspec (~> 3.10.0)
|
10
9
|
|
11
10
|
GEM
|
12
11
|
remote: https://rubygems.org/
|
13
12
|
specs:
|
13
|
+
activesupport (6.1.1)
|
14
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
15
|
+
i18n (>= 1.6, < 2)
|
16
|
+
minitest (>= 5.1)
|
17
|
+
tzinfo (~> 2.0)
|
18
|
+
zeitwerk (~> 2.3)
|
14
19
|
addressable (2.7.0)
|
15
20
|
public_suffix (>= 2.0.2, < 5.0)
|
21
|
+
byebug (11.1.3)
|
22
|
+
coderay (1.1.3)
|
23
|
+
concurrent-ruby (1.1.8)
|
16
24
|
diff-lcs (1.4.4)
|
25
|
+
factory_bot (6.1.0)
|
26
|
+
activesupport (>= 5.0.0)
|
17
27
|
faraday (1.3.0)
|
18
28
|
faraday-net_http (~> 1.0)
|
19
29
|
multipart-post (>= 1.2, < 3)
|
20
30
|
ruby2_keywords
|
21
31
|
faraday-net_http (1.0.1)
|
32
|
+
i18n (1.8.7)
|
33
|
+
concurrent-ruby (~> 1.0)
|
22
34
|
json-schema (2.8.1)
|
23
35
|
addressable (>= 2.4)
|
36
|
+
method_source (1.0.0)
|
37
|
+
minitest (5.14.3)
|
24
38
|
multipart-post (2.1.1)
|
25
39
|
oj (3.11.0)
|
40
|
+
pry (0.13.1)
|
41
|
+
coderay (~> 1.1)
|
42
|
+
method_source (~> 1.0)
|
43
|
+
pry-byebug (3.9.0)
|
44
|
+
byebug (~> 11.0)
|
45
|
+
pry (~> 0.13.0)
|
26
46
|
public_suffix (4.0.6)
|
27
47
|
rack (2.2.3)
|
28
48
|
rack-test (1.1.0)
|
@@ -42,11 +62,17 @@ GEM
|
|
42
62
|
rspec-support (~> 3.10.0)
|
43
63
|
rspec-support (3.10.1)
|
44
64
|
ruby2_keywords (0.0.4)
|
65
|
+
tzinfo (2.0.4)
|
66
|
+
concurrent-ruby (~> 1.0)
|
67
|
+
zeitwerk (2.4.2)
|
45
68
|
|
46
69
|
PLATFORMS
|
47
70
|
ruby
|
48
71
|
|
49
72
|
DEPENDENCIES
|
73
|
+
factory_bot (~> 6.1.0)
|
74
|
+
pry-byebug (~> 3.9.0)
|
75
|
+
rack-test (~> 1.1.0)
|
50
76
|
rake (~> 12.0)
|
51
77
|
rspec (~> 3.0)
|
52
78
|
swagalicious!
|
data/lib/swagalicious.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require "rspec/core"
|
2
2
|
|
3
|
-
require_relative "swagalicious/version"
|
3
|
+
require_relative "./swagalicious/version"
|
4
4
|
|
5
5
|
class Swagalicious
|
6
6
|
class Error < StandardError; end
|
@@ -9,13 +9,13 @@ class Swagalicious
|
|
9
9
|
@config ||= Swagalicious::Configuration.new(RSpec.configuration)
|
10
10
|
end
|
11
11
|
|
12
|
-
require_relative "swagalicious/configuration"
|
13
|
-
require_relative "swagalicious/example_group_helpers"
|
14
|
-
require_relative "swagalicious/example_helpers"
|
15
|
-
require_relative "swagalicious/extended_schema"
|
16
|
-
require_relative "swagalicious/request_factory"
|
17
|
-
require_relative "swagalicious/response_validator"
|
18
|
-
require_relative "swagalicious/swagger_formatter"
|
12
|
+
require_relative "./swagalicious/configuration"
|
13
|
+
require_relative "./swagalicious/example_group_helpers"
|
14
|
+
require_relative "./swagalicious/example_helpers"
|
15
|
+
require_relative "./swagalicious/extended_schema"
|
16
|
+
require_relative "./swagalicious/request_factory"
|
17
|
+
require_relative "./swagalicious/response_validator"
|
18
|
+
require_relative "./swagalicious/swagger_formatter"
|
19
19
|
|
20
20
|
::RSpec::Core::ExampleGroup.define_example_group_method :path
|
21
21
|
|
@@ -49,12 +49,22 @@ class Swagalicious
|
|
49
49
|
|
50
50
|
@body = Oj.load(body, symbol_keys: true)
|
51
51
|
|
52
|
+
metadata[:paths] ||= []
|
53
|
+
metadata[:paths] << request[:path]
|
54
|
+
|
52
55
|
if request[:payload]
|
53
56
|
metadata[:response][:request] = Oj.load(request[:payload])
|
54
57
|
end
|
55
58
|
|
56
|
-
metadata[:response][:examples]
|
57
|
-
|
59
|
+
metadata[:response][:examples] ||= {}
|
60
|
+
|
61
|
+
mime_types = metadata[:response][:produces] || ["application/json"]
|
62
|
+
full_title = "#{metadata[:operation][:summary]}: #{metadata[:description]}"
|
63
|
+
|
64
|
+
mime_types.each do |mime_type|
|
65
|
+
metadata[:response][:examples][mime_type] ||= {}
|
66
|
+
metadata[:response][:examples][mime_type][full_title] = @body
|
67
|
+
end
|
58
68
|
|
59
69
|
# Validates response matches the proper schema
|
60
70
|
Swagalicious::ResponseValidator.new.validate!(metadata, response)
|
@@ -44,7 +44,7 @@ class Swagalicious
|
|
44
44
|
.merge(schemas)
|
45
45
|
|
46
46
|
errors = JSON::Validator.fully_validate(validation_schema, body)
|
47
|
-
raise UnexpectedResponse, "Expected response body to match schema: #{errors
|
47
|
+
raise UnexpectedResponse, "Expected response body to match schema: #{errors.join(", ")}" unless errors.empty?
|
48
48
|
end
|
49
49
|
|
50
50
|
def definitions_or_component_schemas(swagger_doc, version)
|
@@ -92,6 +92,19 @@ class Swagalicious
|
|
92
92
|
def metadata_to_swagger(metadata)
|
93
93
|
response_code = metadata[:response][:code]
|
94
94
|
response = metadata[:response].reject { |k, _v| k == :code }
|
95
|
+
examples = response.delete(:examples) || []
|
96
|
+
|
97
|
+
examples.each do |mime_type, titles|
|
98
|
+
titles.each do |title, example|
|
99
|
+
next unless response[:content][mime_type]
|
100
|
+
|
101
|
+
response[:content][mime_type][:examples] ||= {}
|
102
|
+
|
103
|
+
response[:content][mime_type][:examples][title] ||= {}
|
104
|
+
|
105
|
+
response[:content][mime_type][:examples][title][:value] = example
|
106
|
+
end
|
107
|
+
end
|
95
108
|
|
96
109
|
verb = metadata[:operation][:verb]
|
97
110
|
operation = metadata[:operation]
|
@@ -125,7 +138,11 @@ class Swagalicious
|
|
125
138
|
|
126
139
|
mime_list.each do |mime_type|
|
127
140
|
# TODO upgrade to have content-type specific schema
|
128
|
-
|
141
|
+
body = target_node
|
142
|
+
.fetch(:body, {})
|
143
|
+
.fetch(mime_type, {})
|
144
|
+
|
145
|
+
target_node[:content][mime_type] = { schema: schema }.merge(body)
|
129
146
|
end
|
130
147
|
end
|
131
148
|
|
data/lib/swagalicious/version.rb
CHANGED
data/swagalicious.gemspec
CHANGED
@@ -27,6 +27,9 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.add_dependency "faraday", "~> 1.3.0"
|
28
28
|
spec.add_dependency "json-schema", "~> 2.8.1"
|
29
29
|
spec.add_dependency "oj", "~> 3.11.0"
|
30
|
-
spec.add_dependency "rack-test", "~> 1.1.0"
|
31
30
|
spec.add_dependency "rspec", "~> 3.10.0"
|
31
|
+
|
32
|
+
spec.add_development_dependency "factory_bot", "~> 6.1.0"
|
33
|
+
spec.add_development_dependency "pry-byebug", "~> 3.9.0"
|
34
|
+
spec.add_development_dependency "rack-test", "~> 1.1.0"
|
32
35
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: swagalicious
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eugene Howe
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-01-
|
11
|
+
date: 2021-01-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -53,33 +53,61 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 3.11.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 3.10.0
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
68
|
+
version: 3.10.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: factory_bot
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
76
|
-
type: :
|
75
|
+
version: 6.1.0
|
76
|
+
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
82
|
+
version: 6.1.0
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: pry-byebug
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 3.9.0
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 3.9.0
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rack-test
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 1.1.0
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 1.1.0
|
83
111
|
description: This gem is almost a straight copy and paste of https://github.com/rswag/rswag/tree/master/rswag-specs
|
84
112
|
with the Rails specific code stripped out so it can be used in Rack applications
|
85
113
|
that don't use Rails.
|