rspec-rails-api 0.6.2 → 0.7.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: ac74e8f8e66d510a436cd3b1736dfa47aee2824e4d862987cca9c9f6a2c63fba
4
- data.tar.gz: 8c73eae6f88c3888d82c9f44de5283741791efbe9e4f109c1c55c675ea918b1c
3
+ metadata.gz: 063a556e42014a4511564abe16c657d4957ae13e51a884b9813ba1c168a3ba57
4
+ data.tar.gz: 35917b290d4121f22208ca686f13408cea7889f5c349d39e018a606710efb0f9
5
5
  SHA512:
6
- metadata.gz: efccea1dd2ab627e4e6097f07657ecbd60f119495ccd447f5bb8ccc109d513580749e744b78de0d8af7045ac75dbbcc70ea0217e29a4b0ea538531625a05fbc8
7
- data.tar.gz: cdaaea4e65313a040713981cf0cfea6e72d847773b39b0b87b0d78cf2e0a685e9f1e331003cea5bf219d29fec2ca145e60628e0076eee7f43494c8c7801dca41
6
+ metadata.gz: ffb97e91dde2e69050a7b38399511e902a0b9c62807af391269fd66e84379752c2883897639c8c36633ba6f85ffbb00abfa5cc89c050653943ce4cbab2a7cbf4
7
+ data.tar.gz: 92f2182d34c8b83f8201975eb6d0551ec96cf1ca563668a2acd073eec549403c047c3ab73f9d11b6fe974529ce5a9c2cec02eecacecddcbf0cd7831c7ea13cfa
data/CHANGELOG.md CHANGED
@@ -18,6 +18,31 @@ Maintenance, in case of rework, dependencies change
18
18
 
19
19
  ## [Unreleased]
20
20
 
21
+ ## [0.7.0] - 2024-01-24
22
+
23
+ ### Fixed
24
+
25
+ - [BREAKING] Don't add `name` property in security schemes that should not have one.
26
+ Only `type: :apiKey` should have one, so the `name` argument of `add_security_scheme` has been removed. Specify it
27
+ when it is required/accepted only.
28
+ ```rb
29
+ # Change:
30
+ # ref name schema
31
+ renderer.add_security_scheme :basic, "Basic authentication", { type: "http", scheme: "basic" }
32
+ renderer.add_security_scheme :api_key, "API key authentication", { type: "apiKey", in: "header" }
33
+ # To:
34
+ # ref schema
35
+ renderer.add_security_scheme :basic, type: "http", scheme: "basic"
36
+ renderer.add_security_scheme :api_key, name: "API key authentication", type: "apiKey", in: "header"
37
+ ```
38
+
39
+ ## [0.6.3] - 2024-01-24
40
+
41
+ ### Fixed
42
+
43
+ - `required` fields/parameters now can be false
44
+ - Querystring parameters are better handled and documented: no more need to specify the whole querystring in URL
45
+
21
46
  ## [0.6.2] - 2024-01-17
22
47
 
23
48
  ### Fixed
@@ -76,7 +101,7 @@ Maintenance, in case of rework, dependencies change
76
101
  prefix
77
102
 
78
103
  ### Fixed
79
- -
104
+
80
105
  - Fixed an error when an object is defined with an attribute named `type`.
81
106
 
82
107
  ## [0.4.0] - 2021-12-19
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.7.0)
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
 
@@ -38,12 +38,10 @@ module RSpec
38
38
  # Adds a security scheme definition to the API documentation
39
39
  #
40
40
  # @param reference [Symbol] Reference to use in the tests
41
- # @param name [String] Human friendly name
42
41
  # @param definition [Hash] Security scheme definition as per https://swagger.io/specification/#security-scheme-object
43
- def add_security_scheme(reference, name, definition)
42
+ def add_security_scheme(reference, definition)
44
43
  raise "Security scheme #{reference} is already defined" if @api_security.key? reference
45
44
 
46
- definition[:name] = name unless reference == :basic
47
45
  @api_security[reference] = definition
48
46
  end
49
47
 
@@ -267,7 +265,7 @@ module RSpec
267
265
  parameter = {
268
266
  name: name.to_s,
269
267
  description: param[:description].presence&.strip || '',
270
- required: param[:required] || true,
268
+ required: param[:required] != false,
271
269
  in: param[:scope].to_s,
272
270
  schema: {
273
271
  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.7.0'
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.7.0
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-02-02 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: []