swagalicious 1.1.2 → 2.0.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
  SHA256:
3
- metadata.gz: 4ca52a8e05e2526715dbe6aa1adb367871fa7a4223fd8fe0ee3149f9fe359320
4
- data.tar.gz: 3d3c99f74587e2597f0903a2bfc871e3ed7b15509de9a3a80bc90b0184eae5d9
3
+ metadata.gz: db96b90cafb99e7b2a59562be7588b11c0901522b796eee416820c26649125b0
4
+ data.tar.gz: d79fe5dbfab29895efc34f3efd216100e6da011679221bf7cd31790e2f9a08e2
5
5
  SHA512:
6
- metadata.gz: 345fc5a8d989328ce28f076e08ed5f3a4f62e0bfb6e28a3e1553af30332dd5d5ca5b55d36192d0709a6177b91917b71e82420902cc4887c2b623bdc0a7d093e3
7
- data.tar.gz: 05f683d0306a80565d593e4bc86eb1079977677a991150ccfddfc99484f414f4c5b64d602794e637e6a68999102e89d20299f9a2db9ee1873d9506c924e54e4e
6
+ metadata.gz: 75c6e5395e8fdb026a6e6067bac80b04b904851f9fd5635c7a9137326ab0354ea0117ae0c28bdb0e5cc52b23773bf4264f82d9dc3f132cce11997784c4cb14b2
7
+ data.tar.gz: e9dbd71dd735faa4779bb95f8862e841d698966307c7dbfc04156bd38c6857bfc94fae355d01452cfdad096ee913e18f45b670406c0fc4bfe150920e1dc09209
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- swagalicious (1.1.1)
4
+ swagalicious (2.0.0)
5
5
  faraday (~> 2.0)
6
6
  faraday-rack
7
7
  json-schema
@@ -13,100 +13,123 @@ PATH
13
13
  GEM
14
14
  remote: https://rubygems.org/
15
15
  specs:
16
- activesupport (6.1.6)
16
+ activesupport (7.1.3.4)
17
+ base64
18
+ bigdecimal
17
19
  concurrent-ruby (~> 1.0, >= 1.0.2)
20
+ connection_pool (>= 2.2.5)
21
+ drb
18
22
  i18n (>= 1.6, < 2)
19
23
  minitest (>= 5.1)
24
+ mutex_m
20
25
  tzinfo (~> 2.0)
21
- zeitwerk (~> 2.3)
22
- addressable (2.8.5)
26
+ addressable (2.8.6)
23
27
  public_suffix (>= 2.0.2, < 6.0)
24
28
  ast (2.4.2)
29
+ base64 (0.2.0)
30
+ bigdecimal (3.1.8)
25
31
  byebug (11.1.3)
26
32
  coderay (1.1.3)
27
- concurrent-ruby (1.1.10)
28
- diff-lcs (1.5.0)
29
- factory_bot (6.1.0)
33
+ concurrent-ruby (1.3.3)
34
+ connection_pool (2.4.1)
35
+ diff-lcs (1.5.1)
36
+ drb (2.2.1)
37
+ factory_bot (6.4.6)
30
38
  activesupport (>= 5.0.0)
31
- faraday (2.7.10)
32
- faraday-net_http (>= 2.0, < 3.1)
33
- ruby2_keywords (>= 0.0.4)
34
- faraday-net_http (3.0.2)
39
+ faraday (2.9.1)
40
+ faraday-net_http (>= 2.0, < 3.2)
41
+ faraday-net_http (3.1.0)
42
+ net-http
35
43
  faraday-rack (2.0.0)
36
44
  faraday (~> 2.0)
37
- i18n (1.10.0)
45
+ i18n (1.14.5)
38
46
  concurrent-ruby (~> 1.0)
39
- json (2.6.3)
40
- json-schema (4.0.0)
47
+ json (2.7.2)
48
+ json-schema (4.3.0)
41
49
  addressable (>= 2.8)
42
- method_source (1.0.0)
43
- minitest (5.16.1)
44
- oj (3.16.0)
45
- ox (2.14.17)
46
- parallel (1.22.1)
47
- parser (3.2.1.0)
50
+ language_server-protocol (3.17.0.3)
51
+ method_source (1.1.0)
52
+ minitest (5.23.1)
53
+ mutex_m (0.2.0)
54
+ net-http (0.4.1)
55
+ uri
56
+ oj (3.16.4)
57
+ bigdecimal (>= 3.0)
58
+ ox (2.14.18)
59
+ parallel (1.25.1)
60
+ parser (3.3.3.0)
48
61
  ast (~> 2.4.1)
49
- pry (0.13.1)
62
+ racc
63
+ pry (0.14.2)
50
64
  coderay (~> 1.1)
51
65
  method_source (~> 1.0)
52
- pry-byebug (3.9.0)
66
+ pry-byebug (3.10.1)
53
67
  byebug (~> 11.0)
54
- pry (~> 0.13.0)
55
- public_suffix (5.0.3)
56
- rack (3.0.8)
68
+ pry (>= 0.13, < 0.15)
69
+ public_suffix (5.1.1)
70
+ racc (1.8.0)
71
+ rack (3.1.3)
57
72
  rack-test (2.1.0)
58
73
  rack (>= 1.3)
59
74
  rainbow (3.1.1)
60
75
  rake (12.3.3)
61
- regexp_parser (2.7.0)
62
- rexml (3.2.5)
63
- rspec (3.11.0)
64
- rspec-core (~> 3.11.0)
65
- rspec-expectations (~> 3.11.0)
66
- rspec-mocks (~> 3.11.0)
67
- rspec-core (3.11.0)
68
- rspec-support (~> 3.11.0)
69
- rspec-expectations (3.11.0)
76
+ regexp_parser (2.9.2)
77
+ rexml (3.3.0)
78
+ strscan
79
+ rspec (3.13.0)
80
+ rspec-core (~> 3.13.0)
81
+ rspec-expectations (~> 3.13.0)
82
+ rspec-mocks (~> 3.13.0)
83
+ rspec-core (3.13.0)
84
+ rspec-support (~> 3.13.0)
85
+ rspec-expectations (3.13.1)
70
86
  diff-lcs (>= 1.2.0, < 2.0)
71
- rspec-support (~> 3.11.0)
72
- rspec-mocks (3.11.1)
87
+ rspec-support (~> 3.13.0)
88
+ rspec-mocks (3.13.1)
73
89
  diff-lcs (>= 1.2.0, < 2.0)
74
- rspec-support (~> 3.11.0)
75
- rspec-support (3.11.0)
76
- rubocop (1.48.0)
90
+ rspec-support (~> 3.13.0)
91
+ rspec-support (3.13.1)
92
+ rubocop (1.64.1)
77
93
  json (~> 2.3)
94
+ language_server-protocol (>= 3.17.0)
78
95
  parallel (~> 1.10)
79
- parser (>= 3.2.0.0)
96
+ parser (>= 3.3.0.2)
80
97
  rainbow (>= 2.2.2, < 4.0)
81
98
  regexp_parser (>= 1.8, < 3.0)
82
99
  rexml (>= 3.2.5, < 4.0)
83
- rubocop-ast (>= 1.26.0, < 2.0)
100
+ rubocop-ast (>= 1.31.1, < 2.0)
84
101
  ruby-progressbar (~> 1.7)
85
102
  unicode-display_width (>= 2.4.0, < 3.0)
86
- rubocop-ast (1.27.0)
87
- parser (>= 3.2.1.0)
88
- rubocop-capybara (2.17.1)
103
+ rubocop-ast (1.31.3)
104
+ parser (>= 3.3.1.0)
105
+ rubocop-capybara (2.21.0)
89
106
  rubocop (~> 1.41)
90
- rubocop-rspec (2.19.0)
91
- rubocop (~> 1.33)
107
+ rubocop-factory_bot (2.26.1)
108
+ rubocop (~> 1.61)
109
+ rubocop-rspec (2.31.0)
110
+ rubocop (~> 1.40)
92
111
  rubocop-capybara (~> 2.17)
112
+ rubocop-factory_bot (~> 2.22)
113
+ rubocop-rspec_rails (~> 2.28)
114
+ rubocop-rspec_rails (2.29.1)
115
+ rubocop (~> 1.61)
93
116
  ruby-progressbar (1.13.0)
94
- ruby2_keywords (0.0.5)
95
- tzinfo (2.0.4)
117
+ strscan (3.1.0)
118
+ tzinfo (2.0.6)
96
119
  concurrent-ruby (~> 1.0)
97
- unicode-display_width (2.4.2)
98
- zeitwerk (2.6.0)
120
+ unicode-display_width (2.5.0)
121
+ uri (0.13.0)
99
122
 
100
123
  PLATFORMS
101
124
  ruby
102
125
 
103
126
  DEPENDENCIES
104
- factory_bot (~> 6.1.0)
105
- pry-byebug (~> 3.9.0)
127
+ factory_bot (~> 6.1)
128
+ pry-byebug
106
129
  rake (~> 12.0)
107
130
  rspec (~> 3.0)
108
- rubocop (~> 1.48.0)
109
- rubocop-rspec (~> 2.19.0)
131
+ rubocop (~> 1.48)
132
+ rubocop-rspec (~> 2.19)
110
133
  swagalicious!
111
134
 
112
135
  BUNDLED WITH
@@ -38,6 +38,13 @@ class Swagalicious
38
38
  end
39
39
  end
40
40
 
41
+ def logger
42
+ @swagger_format ||= begin
43
+ @rspec_config.swagalicious_logger = ::Logger.new($stdout) if @rspec_config.swagalicious_logger.nil?
44
+ @rspec_config.swagalicious_logger
45
+ end
46
+ end
47
+
41
48
  def get_swagger_doc(name)
42
49
  return swagger_docs.values.first if name.nil?
43
50
  raise ConfigurationError, "Unknown swagger_doc '#{name}'" unless swagger_docs[name]
@@ -47,7 +47,7 @@ class Swagalicious
47
47
 
48
48
  def security_version(scheme_names, swagger_doc)
49
49
  if swagger_doc.key?(:securityDefinitions)
50
- puts "Swagalicious: WARNING: securityDefinitions is replaced in OpenAPI3! Rename to components/securitySchemes (in swagger_helper.rb)"
50
+ @config.logger.warn "Swagalicious: WARNING: securityDefinitions is replaced in OpenAPI3! Rename to components/securitySchemes (in swagger_helper.rb)"
51
51
  swagger_doc[:components] ||= { securitySchemes: swagger_doc[:securityDefinitions] }
52
52
  swagger_doc.delete(:securityDefinitions)
53
53
  end
@@ -65,7 +65,7 @@ class Swagalicious
65
65
 
66
66
  def key_version(ref, swagger_doc)
67
67
  if ref.start_with?("#/parameters/")
68
- puts "Swagalicious: WARNING: #/parameters/ refs are replaced in OpenAPI3! Rename to #/components/parameters/"
68
+ @config.logger.warn "Swagalicious: WARNING: #/parameters/ refs are replaced in OpenAPI3! Rename to #/components/parameters/"
69
69
  ref.sub("#/parameters/", "").to_sym
70
70
  else
71
71
  ref.sub("#/components/parameters/", "").to_sym
@@ -74,7 +74,7 @@ class Swagalicious
74
74
 
75
75
  def definition_version(swagger_doc)
76
76
  if swagger_doc.key?(:parameters)
77
- puts "Swagalicious: WARNING: parameters is replaced in OpenAPI3! Rename to components/parameters (in swagger_helper.rb)"
77
+ @config.logger.warn "Swagalicious: WARNING: parameters is replaced in OpenAPI3! Rename to components/parameters (in swagger_helper.rb)"
78
78
  swagger_doc[:parameters]
79
79
  else
80
80
  components = swagger_doc[:components] || {}
@@ -105,19 +105,48 @@ class Swagalicious
105
105
 
106
106
  def build_query_string_part(param, value)
107
107
  name = param[:name]
108
- return "#{name}=#{value}" unless param[:type].to_sym == :array
109
-
110
- case param[:collectionFormat]
111
- when :ssv
112
- "#{name}=#{value.join(" ")}"
113
- when :tsv
114
- "#{name}=#{value.join("\t")}"
115
- when :pipes
116
- "#{name}=#{value.join("|")}"
117
- when :multi
118
- value.map { |v| "#{name}=#{v}" }.join("&")
108
+ if param[:type]
109
+ @config.logger.warn "Swagalicious: WARNING: type is replaced in OpenAPI3! Rename to schema[type] in query param definition for #{name}"
110
+ param[:schema] ||= {}
111
+ param[:schema][:type] = param.delete(:type)
112
+ end
113
+ return "#{name}=#{value}" unless (param.dig(:schema, :type) || "").to_sym == :array
114
+
115
+ unless param[:schema]
116
+ @config.logger.warn "Schema was not specified for #{name}"
117
+ end
118
+
119
+ if param[:collection_format] || param[:collectionFormat]
120
+ @config.logger.warn "Swagalicious: WARNING: collection_format is replaced in OpenAPI3! Rename to style/explode in query param definition for #{name}"
121
+ format = params[:collection_format] || param[:collectionFormat]
122
+ case format
123
+ when :multi
124
+ param[:style] = :form
125
+ param[:explode] = true
126
+ when :ssv
127
+ param[:style] = :spaceDelimited
128
+ param[:explode] = false
129
+ when :pipes
130
+ param[:style] = :pipeDelimited
131
+ param[:explode] = false
132
+ else
133
+ param[:style] = :form
134
+ param[:explode] = false
135
+ end
136
+ end
137
+
138
+ style = param[:style] || :form
139
+ explode = param[:explode] || false
140
+
141
+ case style
142
+ when :spaceDelimited
143
+ explode ? value.map { |v| "#{name}=#{v}" }.join("&") : "#{name}=#{value.join(" ")}"
144
+ when :pipeDelimited
145
+ explode ? value.map { |v| "#{name}=#{v}" }.join("&") : "#{name}=#{value.join("|")}"
146
+ when :form
147
+ explode ? value.map { |v| "#{name}=#{v}" }.join("&") : "#{name}=#{value.join(",")}"
119
148
  else
120
- "#{name}=#{value.join(",")}" # csv is default
149
+ raise "Invalid combination"
121
150
  end
122
151
  end
123
152
 
@@ -52,7 +52,7 @@ class Swagalicious
52
52
  swagger_doc.slice(:definitions)
53
53
  else # Openapi3
54
54
  if swagger_doc.key?(:definitions)
55
- puts "Swagger::Specs: WARNING: definitions is replaced in OpenAPI3! Rename to components/schemas (in swagger_helper.rb)"
55
+ @config.logger.warn "Swagger::Specs: WARNING: definitions is replaced in OpenAPI3! Rename to components/schemas (in swagger_helper.rb)"
56
56
  swagger_doc.slice(:definitions)
57
57
  else
58
58
  components = swagger_doc[:components] || {}
@@ -45,7 +45,7 @@ class Swagalicious
45
45
  FileUtils.mkdir_p dirname unless File.exist?(dirname)
46
46
 
47
47
  File.open(file_path, "w") do |file|
48
- file.write(pretty_generate(merged_doc))
48
+ file.write(pretty_generate(merged_doc.except(:metadata)))
49
49
  end
50
50
 
51
51
  @output.puts "Swagger doc generated at #{file_path}"
@@ -104,6 +104,7 @@ class Swagalicious
104
104
 
105
105
  operation[:parameters].reject! { |p| p[:in] == :body || p[:in] == :formData }
106
106
  end
107
+ remove_invalid_operation_keys!(operation)
107
108
 
108
109
  path_template = metadata[:path_item][:template]
109
110
  path_item = metadata[:path_item]
@@ -119,7 +120,7 @@ class Swagalicious
119
120
 
120
121
  def upgrade_response_produces!(swagger_doc, metadata)
121
122
  # Accept header
122
- mime_list = Array(metadata[:operation].delete(:produces) || swagger_doc[:produces])
123
+ mime_list = Array(metadata[:operation].delete(:produces) || swagger_doc.dig(:metadata, :produces))
123
124
  target_node = metadata[:response]
124
125
  upgrade_content!(mime_list, target_node)
125
126
  metadata[:response].delete(:schema)
@@ -157,7 +158,7 @@ class Swagalicious
157
158
  def upgrade_servers!(swagger_doc)
158
159
  return unless swagger_doc[:servers].nil? && swagger_doc.key?(:schemes)
159
160
 
160
- puts "Swagalicious: WARNING: schemes, host, and basePath are replaced in OpenAPI3! Rename to array of servers[{url}] (in swagger_helper.rb)"
161
+ @config.logger.warn "Swagalicious: WARNING: schemes, host, and basePath are replaced in OpenAPI3! Rename to array of servers[{url}] (in swagger_helper.rb)"
161
162
 
162
163
  swagger_doc[:servers] = { urls: [] }
163
164
  swagger_doc[:schemes].each do |scheme|
@@ -177,17 +178,17 @@ class Swagalicious
177
178
  schemes.each do |name, v|
178
179
  next unless v.key?(:flow)
179
180
 
180
- puts "Swagalicious: WARNING: securityDefinitions flow is replaced in OpenAPI3! Rename to components/securitySchemes/#{name}/flows[] (in swagger_helper.rb)"
181
+ @config.logger.warn "Swagalicious: WARNING: securityDefinitions flow is replaced in OpenAPI3! Rename to components/securitySchemes/#{name}/flows[] (in swagger_helper.rb)"
181
182
 
182
183
  flow = swagger_doc[:components][:securitySchemes][name].delete(:flow).to_s
183
184
 
184
185
  if flow == "accessCode"
185
- puts "Swagalicious: WARNING: securityDefinitions accessCode is replaced in OpenAPI3! Rename to clientCredentials (in swagger_helper.rb)"
186
+ @config.logger.warn "Swagalicious: WARNING: securityDefinitions accessCode is replaced in OpenAPI3! Rename to clientCredentials (in swagger_helper.rb)"
186
187
  flow = "authorizationCode"
187
188
  end
188
189
 
189
190
  if flow == "application"
190
- puts "Swagalicious: WARNING: securityDefinitions application is replaced in OpenAPI3! Rename to authorizationCode (in swagger_helper.rb)"
191
+ @config.logger.warn "Swagalicious: WARNING: securityDefinitions application is replaced in OpenAPI3! Rename to authorizationCode (in swagger_helper.rb)"
191
192
  flow = "clientCredentials"
192
193
  end
193
194
 
@@ -1,3 +1,3 @@
1
1
  class Swagalicious
2
- VERSION = "1.1.2"
2
+ VERSION = "2.0.0"
3
3
  end
data/lib/swagalicious.rb CHANGED
@@ -30,6 +30,7 @@ class Swagalicious
30
30
  c.add_setting :swagger_root
31
31
  c.add_setting :swagger_docs
32
32
  c.add_setting :swagger_dry_run
33
+ c.add_setting :swagalicious_logger
33
34
 
34
35
  if defined?(Rails) && defined?(RSpec::Rails)
35
36
  c.include RSpec::Rails::RequestExampleGroup, type: :doc
data/swagalicious.gemspec CHANGED
@@ -32,8 +32,8 @@ Gem::Specification.new do |spec|
32
32
  spec.add_dependency "rack-test"
33
33
  spec.add_dependency "rspec", "~> 3"
34
34
 
35
- spec.add_development_dependency "rubocop", "~> 1.48.0"
36
- spec.add_development_dependency "rubocop-rspec", "~> 2.19.0"
37
- spec.add_development_dependency "factory_bot", "~> 6.1.0"
38
- spec.add_development_dependency "pry-byebug", "~> 3.9.0"
35
+ spec.add_development_dependency "rubocop", "~> 1.48"
36
+ spec.add_development_dependency "rubocop-rspec", "~> 2.19"
37
+ spec.add_development_dependency "factory_bot", "~> 6.1"
38
+ spec.add_development_dependency "pry-byebug"
39
39
  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: 1.1.2
4
+ version: 2.0.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: 2023-08-18 00:00:00.000000000 Z
11
+ date: 2024-08-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -114,56 +114,56 @@ dependencies:
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: 1.48.0
117
+ version: '1.48'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: 1.48.0
124
+ version: '1.48'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: rubocop-rspec
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: 2.19.0
131
+ version: '2.19'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: 2.19.0
138
+ version: '2.19'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: factory_bot
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
143
  - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: 6.1.0
145
+ version: '6.1'
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
- version: 6.1.0
152
+ version: '6.1'
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: pry-byebug
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
- - - "~>"
157
+ - - ">="
158
158
  - !ruby/object:Gem::Version
159
- version: 3.9.0
159
+ version: '0'
160
160
  type: :development
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
- - - "~>"
164
+ - - ">="
165
165
  - !ruby/object:Gem::Version
166
- version: 3.9.0
166
+ version: '0'
167
167
  description: This gem is almost a straight copy and paste of https://github.com/rswag/rswag/tree/master/rswag-specs
168
168
  with the Rails specific code stripped out so it can be used in Rack applications
169
169
  that don't use Rails.
@@ -217,7 +217,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
217
217
  - !ruby/object:Gem::Version
218
218
  version: '0'
219
219
  requirements: []
220
- rubygems_version: 3.2.33
220
+ rubygems_version: 3.5.9
221
221
  signing_key:
222
222
  specification_version: 4
223
223
  summary: RSwag without Rails