rspec-rails-api 0.6.2 → 0.6.3
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/CHANGELOG.md +7 -0
- data/Gemfile.lock +1 -1
- data/README.md +21 -3
- data/lib/rspec/rails/api/dsl/example.rb +15 -3
- data/lib/rspec/rails/api/metadata.rb +3 -5
- data/lib/rspec/rails/api/open_api_renderer.rb +1 -1
- data/lib/rspec/rails/api/version.rb +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4a96138e6fbb4608ddbf6a4e03912e3e2e262610bc0f98dadf5ad2c26a756ce8
|
4
|
+
data.tar.gz: 8bfaf96bafa6a8420db600978af05499e398d06ae6db0d18cfdc7cde86c68119
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '04593f5aed1d220b4293da9571e9e8dfffef8564b49c76a64598c28565094cd14b6dfaf828074de51604cb5e861eaac35a536c9774edf227770f984929481d39'
|
7
|
+
data.tar.gz: 7857727829cf0e9df507566f31fc01ec6f1da45cbd0181cf8340f6f96245f0f0935eb5dc7f01c8b607335e98a9e0c7f6bedad5a44ec7d19bec8c058256732b83
|
data/CHANGELOG.md
CHANGED
@@ -18,6 +18,13 @@ Maintenance, in case of rework, dependencies change
|
|
18
18
|
|
19
19
|
## [Unreleased]
|
20
20
|
|
21
|
+
## [0.6.3] - 2024-01-24
|
22
|
+
|
23
|
+
### Fixed
|
24
|
+
|
25
|
+
- `required` fields/parameters now can be false
|
26
|
+
- Querystring parameters are better handled and documented: no more need to specify the whole querystring in URL
|
27
|
+
|
21
28
|
## [0.6.2] - 2024-01-17
|
22
29
|
|
23
30
|
### Fixed
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -451,13 +451,31 @@ These methods are available:
|
|
451
451
|
|
452
452
|
Defines the path parameters that are used in the URL.
|
453
453
|
|
454
|
+
Any field that is not referenced in the URL will end in querystring parameters.
|
455
|
+
|
454
456
|
```ruby
|
455
|
-
on_get '/api/users/:id/posts/:post_slug
|
457
|
+
on_get '/api/users/:id/posts/:post_slug' do
|
456
458
|
path_params fields: {
|
459
|
+
# "path" parameters
|
457
460
|
id: { type: :integer, description: 'The user ID' },
|
458
461
|
post_slug: { type: :string, description: 'The post slug' },
|
459
|
-
|
462
|
+
# "query" parameters
|
463
|
+
full_post: { type: :boolean, required: false, description: 'Returns the full post if `true`, or only an excerpt' },
|
464
|
+
}
|
465
|
+
# ...
|
466
|
+
end
|
467
|
+
```
|
460
468
|
|
469
|
+
If the querystring parameters are visible in the URL for some reason, they will still be treated as `query` parameters:
|
470
|
+
|
471
|
+
```ruby
|
472
|
+
on_get '/api/users/:id?full_bio=:full_bio_flag' do
|
473
|
+
path_params fields: {
|
474
|
+
# "path" parameters
|
475
|
+
id: { type: :integer, description: 'The user ID' },
|
476
|
+
# "query" parameters
|
477
|
+
full_bio_flag: { type: :boolean, required: false, description: 'Returns the full biography' },
|
478
|
+
}
|
461
479
|
# ...
|
462
480
|
end
|
463
481
|
```
|
@@ -465,7 +483,7 @@ end
|
|
465
483
|
- `type` is the field type (check _entity definition_ for a list).
|
466
484
|
- `description` should be some valid
|
467
485
|
[CommonMark](https://commonmark.org/)
|
468
|
-
- `required` is optional
|
486
|
+
- `required` is optional and defaults to `true`.
|
469
487
|
|
470
488
|
Alternative with defined parameters:
|
471
489
|
|
@@ -128,15 +128,20 @@ module RSpec
|
|
128
128
|
end
|
129
129
|
|
130
130
|
##
|
131
|
-
# Replace path params by values
|
131
|
+
# Replace path params by values and completes querystring
|
132
132
|
#
|
133
133
|
# @param url [String] Url definition
|
134
134
|
# @param request_params [Hash] Request parameters
|
135
135
|
#
|
136
136
|
# @return [String] Actual path to visit
|
137
|
-
def prepare_request_url(url, request_params)
|
138
|
-
|
137
|
+
def prepare_request_url(url, request_params) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
138
|
+
used_path_params = []
|
139
|
+
|
140
|
+
# Replace any ":xyz" in url
|
141
|
+
url = url.gsub(/(?::(\w*))/) do |e|
|
139
142
|
symbol = e.sub(':', '').to_sym
|
143
|
+
used_path_params << symbol
|
144
|
+
|
140
145
|
if request_params.key?(symbol)
|
141
146
|
request_params[symbol]
|
142
147
|
elsif respond_to?(symbol)
|
@@ -145,6 +150,13 @@ module RSpec
|
|
145
150
|
puts "! Define #{symbol} (let(:#{symbol}){ value }) or pass it to 'visit'"
|
146
151
|
end
|
147
152
|
end
|
153
|
+
|
154
|
+
# Use everything else in query string
|
155
|
+
uri = URI.parse(url)
|
156
|
+
query_params = request_params.select { |k| used_path_params.exclude? k }
|
157
|
+
uri.query = URI.encode_www_form(query_params) unless query_params.blank?
|
158
|
+
|
159
|
+
uri.to_s
|
148
160
|
end
|
149
161
|
|
150
162
|
##
|
@@ -72,7 +72,7 @@ module RSpec
|
|
72
72
|
raise "Parameter #{name} is already defined" if @parameters[name]
|
73
73
|
|
74
74
|
fields.each_value do |field|
|
75
|
-
field[:required] =
|
75
|
+
field[:required] = field[:required] != false
|
76
76
|
field[:schema] = { type: field[:of] } if field[:type] == :array && PRIMITIVES.include?(field[:of])
|
77
77
|
end
|
78
78
|
@parameters[name] = fields
|
@@ -97,7 +97,7 @@ module RSpec
|
|
97
97
|
Utils.deep_set(@resources, [@current_resource, 'paths', @current_url, 'path_params', name],
|
98
98
|
description: field[:description] || nil,
|
99
99
|
type: field[:type] || nil,
|
100
|
-
required: field[:required]
|
100
|
+
required: field[:required] != false,
|
101
101
|
scope: scope)
|
102
102
|
end
|
103
103
|
end
|
@@ -282,10 +282,8 @@ module RSpec
|
|
282
282
|
def path_param_scope(url_chunks, name)
|
283
283
|
if /:#{name}/.match?(url_chunks[0])
|
284
284
|
:path
|
285
|
-
elsif url_chunks[1] && /:#{name}/ =~ url_chunks[1]
|
286
|
-
:query
|
287
285
|
else
|
288
|
-
|
286
|
+
:query
|
289
287
|
end
|
290
288
|
end
|
291
289
|
|
@@ -267,7 +267,7 @@ module RSpec
|
|
267
267
|
parameter = {
|
268
268
|
name: name.to_s,
|
269
269
|
description: param[:description].presence&.strip || '',
|
270
|
-
required: param[:required]
|
270
|
+
required: param[:required] != false,
|
271
271
|
in: param[:scope].to_s,
|
272
272
|
schema: {
|
273
273
|
type: PARAM_TYPES[param[:type]][:type],
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-rails-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Manuel Tancoigne
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-01-
|
11
|
+
date: 2024-01-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -222,7 +222,7 @@ metadata:
|
|
222
222
|
bug_tracker_uri: https://gitlab.com/experimentslabs/rspec-rails-api/issues
|
223
223
|
changelog_uri: https://gitlab.com/experimentslabs/rspec-rails-api/blob/master/CHANGELOG.md
|
224
224
|
rubygems_mfa_required: 'true'
|
225
|
-
post_install_message:
|
225
|
+
post_install_message:
|
226
226
|
rdoc_options: []
|
227
227
|
require_paths:
|
228
228
|
- lib
|
@@ -238,7 +238,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
238
238
|
version: '0'
|
239
239
|
requirements: []
|
240
240
|
rubygems_version: 3.4.1
|
241
|
-
signing_key:
|
241
|
+
signing_key:
|
242
242
|
specification_version: 4
|
243
243
|
summary: Tests standard Rails API responses and generate doc
|
244
244
|
test_files: []
|