swagalicious 1.1.2 → 2.0.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
  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