rspec-rails-api 0.6.2 → 0.6.3

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: ac74e8f8e66d510a436cd3b1736dfa47aee2824e4d862987cca9c9f6a2c63fba
4
- data.tar.gz: 8c73eae6f88c3888d82c9f44de5283741791efbe9e4f109c1c55c675ea918b1c
3
+ metadata.gz: 4a96138e6fbb4608ddbf6a4e03912e3e2e262610bc0f98dadf5ad2c26a756ce8
4
+ data.tar.gz: 8bfaf96bafa6a8420db600978af05499e398d06ae6db0d18cfdc7cde86c68119
5
5
  SHA512:
6
- metadata.gz: efccea1dd2ab627e4e6097f07657ecbd60f119495ccd447f5bb8ccc109d513580749e744b78de0d8af7045ac75dbbcc70ea0217e29a4b0ea538531625a05fbc8
7
- data.tar.gz: cdaaea4e65313a040713981cf0cfea6e72d847773b39b0b87b0d78cf2e0a685e9f1e331003cea5bf219d29fec2ca145e60628e0076eee7f43494c8c7801dca41
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
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rspec-rails-api (0.6.2)
4
+ rspec-rails-api (0.6.3)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
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?full=:full_post' do
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
- full_post: { type: :boolean, required: false, description: 'Returns the full post if `true`, or only an excerpt' } }
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 an defaults to `true`.
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
- url.gsub(/(?::(\w*))/) do |e|
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] = true unless field[:required] == false
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] || true,
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
- raise "#{name} not found in URL #{@current_url}"
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] || true,
270
+ required: param[:required] != false,
271
271
  in: param[:scope].to_s,
272
272
  schema: {
273
273
  type: PARAM_TYPES[param[:type]][:type],
@@ -3,7 +3,7 @@
3
3
  module RSpec
4
4
  module Rails
5
5
  module Api
6
- VERSION = '0.6.2'
6
+ VERSION = '0.6.3'
7
7
  end
8
8
  end
9
9
  end
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.2
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-17 00:00:00.000000000 Z
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: []