committee 4.4.0.rc1 → 4.99.0.beta1

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: 3a1c74892e2e3abf70f99999312c39aa6e85d0fe8323b73d534ff231c3d7f443
4
- data.tar.gz: 0be5e25f5dc94b28aa1d0055f7403e2ca8e59199567d128a7ea2d459a833d4cd
3
+ metadata.gz: e23e8ffb5db07547735711e16eccf1407a2788ef957e5e804b253cbee8c02eb0
4
+ data.tar.gz: 1be7ca76dc347c9f0d9b25523ac69a61dc660bcca7fc183f3542512c88fc7d29
5
5
  SHA512:
6
- metadata.gz: 1c8f4286e8be5cd6331e8ca323963bed83c2e0e2960037a78fa0aa78e23f3d684ee931336a4f5e4ce55f4b7dd83f7cf9873ea704979ed53e5cbc47599f3ebc98
7
- data.tar.gz: bc840cb4285ecc917613162d6b9837c419e88464a96724b06bf90f07236bf725cc5d099e17c8ecc5cc64f948ff5b35a513a9387ed948c56bcad664d71487313d
6
+ metadata.gz: a2f1c3954b0ef564de03ba7f0c6364b8727f611acbe4e8c2ed5fdd99e1934dede243f81948d4d8a130f912cd89503ae0e9b3b04cf1617ca137847e3fdbaff4da
7
+ data.tar.gz: e8cfc2d5705bb4e3ff2284ab1e80f9c2a0022cf7c2099a66f71aabaed2c9d9c6ff4b35786779ca9b6630a0bfcffd6b40e6813a8c98fdf52c870e849292141f5d
@@ -80,10 +80,18 @@ module Committee
80
80
 
81
81
  query_param = unpacker.unpack_query_params(request)
82
82
 
83
+ order = if validator_option.parameter_overwite_by_rails_rule
84
+ # (high priority) path_hash_key -> query_param -> request_body_hash
85
+ [request.env[validator_option.request_body_hash_key], query_param, request.env[validator_option.path_hash_key]]
86
+ else
87
+ # (high priority) path_hash_key -> request_body_hash -> query_param
88
+ [query_param, request.env[validator_option.request_body_hash_key], request.env[validator_option.path_hash_key]]
89
+ end
90
+
83
91
  request.env[validator_option.params_key] = Committee::Utils.indifferent_hash
84
- request.env[validator_option.params_key].merge!(Committee::Utils.deep_copy(query_param))
85
- request.env[validator_option.params_key].merge!(Committee::Utils.deep_copy(request.env[validator_option.request_body_hash_key]))
86
- request.env[validator_option.params_key].merge!(Committee::Utils.deep_copy(request.env[validator_option.path_hash_key]))
92
+ order.each do |param|
93
+ request.env[validator_option.params_key].merge!(Committee::Utils.deep_copy(param))
94
+ end
87
95
  end
88
96
 
89
97
  def copy_coerced_data_to_query_hash(request)
@@ -16,7 +16,8 @@ module Committee
16
16
  :coerce_recursive,
17
17
  :optimistic_json,
18
18
  :validate_success_only,
19
- :parse_response_by_content_type
19
+ :parse_response_by_content_type,
20
+ :parameter_overwite_by_rails_rule
20
21
 
21
22
  # Non-boolean options:
22
23
  attr_reader :headers_key,
@@ -31,7 +32,7 @@ module Committee
31
32
  @headers_key = options[:headers_key] || "committee.headers"
32
33
  @params_key = options[:params_key] || "committee.params"
33
34
  @query_hash_key = if options[:query_hash_key].nil?
34
- Committee.warn_deprecated('Committee: please set query_hash_key = rack.request.query_hash because we\'ll change default value in next major version.')
35
+ Committee.warn_deprecated('Committee: please set query_hash_key = rack.request.query_hash because we\'ll change default value to "committee.query_hash" in next major version.')
35
36
  'rack.request.query_hash'
36
37
  else
37
38
  options.fetch(:query_hash_key)
@@ -54,6 +55,12 @@ module Committee
54
55
  else
55
56
  options.fetch(:parse_response_by_content_type)
56
57
  end
58
+ @parameter_overwite_by_rails_rule = if options[:parameter_overwite_by_rails_rule].nil?
59
+ Committee.warn_deprecated('Committee: please set parameter_overwite_by_rails_rule = false because we\'ll change default value to "true" in next major version.')
60
+ false
61
+ else
62
+ options.fetch(:parameter_overwite_by_rails_rule)
63
+ end
57
64
 
58
65
  # Boolean options and have a different value by default
59
66
  @allow_get_body = options.fetch(:allow_get_body, schema.driver.default_allow_get_body)
@@ -412,34 +412,114 @@ describe Committee::Middleware::RequestValidation do
412
412
  get "/coerce_path_params/1"
413
413
  end
414
414
 
415
- it "corce string and save path hash" do
416
- @app = new_rack_app_with_lambda(lambda do |env|
417
- assert_equal env['committee.params']['integer'], 21
418
- assert_equal env['committee.params'][:integer], 21
419
- assert_equal env['committee.path_hash']['integer'], 21
420
- assert_equal env['committee.path_hash'][:integer], 21
421
- [204, {}, []]
422
- end, schema: open_api_3_schema)
415
+ describe "overwrite same parameter (old rule)" do
416
+ # (high priority) path_hash_key -> request_body_hash -> query_param
417
+ it "set query parameter to committee.params and query hash" do
418
+ @app = new_rack_app_with_lambda(lambda do |env|
419
+ assert_equal env['committee.params']['integer'], 42
420
+ assert_equal env['committee.params'][:integer], 42
421
+ assert_equal env['rack.request.query_hash']['integer'], 42
422
+ #assert_equal env['rack.request.query_hash'][:integer], 42 # this isn't hash indifferent hash because we use rack.request.query_hash
423
+ [204, {}, []]
424
+ end, schema: open_api_3_schema)
425
+
426
+ header "Content-Type", "application/json"
427
+ post '/overwrite_same_parameter?integer=42'
428
+ assert_equal 204, last_response.status
429
+ end
423
430
 
424
- header "Content-Type", "application/json"
425
- post '/parameter_option_test/21'
426
- assert_equal 204, last_response.status
431
+ it "request body precedence over query parameter" do
432
+ @app = new_rack_app_with_lambda(lambda do |env|
433
+ assert_equal env['committee.params']['integer'], 21
434
+ assert_equal env['committee.params'][:integer], 21
435
+ assert_equal env['committee.request_body_hash']['integer'], 21
436
+ assert_equal env['committee.request_body_hash'][:integer], 21
437
+ assert_equal env['rack.request.query_hash']['integer'], 21 # we can't use query_parameter :(
438
+ #assert_equal env['rack.request.query_hash'][:integer], 21 # this isn't hash indifferent hash because we use rack.request.query_hash
439
+ [204, {}, []]
440
+ end, schema: open_api_3_schema)
441
+
442
+ params = {integer: 21}
443
+
444
+ header "Content-Type", "application/json"
445
+ post '/overwrite_same_parameter?integer=42', JSON.generate(params)
446
+ assert_equal 204, last_response.status
447
+ end
448
+
449
+ it "path parameter precedence over request body" do
450
+ @app = new_rack_app_with_lambda(lambda do |env|
451
+ assert_equal env['committee.params']['integer'], 84
452
+ assert_equal env['committee.params'][:integer], 84
453
+ assert_equal env['committee.path_hash']['integer'], 84
454
+ assert_equal env['committee.path_hash'][:integer], 84
455
+ assert_equal env['committee.request_body_hash']['integer'], 21
456
+ assert_equal env['committee.request_body_hash'][:integer], 21
457
+ assert_equal env['rack.request.query_hash']['integer'], 84 # we can't use query_parameter :(
458
+ #assert_equal env['rack.request.query_hash'][:integer], 21 # this isn't hash indifferent hash because we use rack.request.query_hash
459
+ [204, {}, []]
460
+ end, schema: open_api_3_schema)
461
+
462
+ params = {integer: 21}
463
+
464
+ header "Content-Type", "application/json"
465
+ post '/overwrite_same_parameter/84?integer=42', JSON.generate(params)
466
+ assert_equal 204, last_response.status
467
+ end
427
468
  end
428
469
 
429
- it "corce string and save request body hash" do
430
- @app = new_rack_app_with_lambda(lambda do |env|
431
- assert_equal env['committee.params']['integer'], 21 # use path parameter
432
- assert_equal env['committee.params'][:integer], 21
433
- assert_equal env['committee.request_body_hash']['integer'], 42
434
- assert_equal env['committee.request_body_hash'][:integer], 42
435
- [204, {}, []]
436
- end, schema: open_api_3_schema)
437
-
438
- params = {integer: 42}
470
+ describe "overwrite same parameter (new rule and seme to Rails)" do
471
+ # (high priority) path_hash_key -> query_param -> request_body_hash
472
+ it "set request body to committee.params and query hash" do
473
+ @app = new_rack_app_with_lambda(lambda do |env|
474
+ assert_equal env['committee.params']['integer'], 21
475
+ assert_equal env['committee.params'][:integer], 21
476
+ assert_equal env['committee.request_body_hash']['integer'], 21
477
+ assert_equal env['committee.request_body_hash'][:integer], 21
478
+ [204, {}, []]
479
+ end, schema: open_api_3_schema, parameter_overwite_by_rails_rule: true)
480
+
481
+ params = {integer: 21}
482
+
483
+ header "Content-Type", "application/json"
484
+ post '/overwrite_same_parameter', JSON.generate(params)
485
+ assert_equal 204, last_response.status
486
+ end
439
487
 
440
- header "Content-Type", "application/json"
441
- post '/parameter_option_test/21', JSON.generate(params)
442
- assert_equal 204, last_response.status
488
+ it "query parameter precedence over request body" do
489
+ @app = new_rack_app_with_lambda(lambda do |env|
490
+ assert_equal env['committee.params']['integer'], 42
491
+ assert_equal env['committee.params'][:integer], 42
492
+ assert_equal env['committee.request_body_hash']['integer'], 21
493
+ assert_equal env['committee.request_body_hash'][:integer], 21
494
+ assert_equal env['rack.request.query_hash']['integer'], 42 # we can't use query_parameter :(
495
+ [204, {}, []]
496
+ end, schema: open_api_3_schema, parameter_overwite_by_rails_rule: true)
497
+
498
+ params = {integer: 21}
499
+
500
+ header "Content-Type", "application/json"
501
+ post '/overwrite_same_parameter?integer=42', JSON.generate(params)
502
+ assert_equal 204, last_response.status
503
+ end
504
+
505
+ it "path path parameter precedence over query parameter" do
506
+ @app = new_rack_app_with_lambda(lambda do |env|
507
+ assert_equal env['committee.params']['integer'], 84
508
+ assert_equal env['committee.params'][:integer], 84
509
+ assert_equal env['committee.request_body_hash']['integer'], 21
510
+ assert_equal env['committee.request_body_hash'][:integer], 21
511
+ assert_equal env['rack.request.query_hash']['integer'], 84 # we can't use query_parameter :(
512
+ assert_equal env['committee.path_hash']['integer'], 84
513
+ assert_equal env['committee.path_hash'][:integer], 84
514
+ [204, {}, []]
515
+ end, schema: open_api_3_schema, parameter_overwite_by_rails_rule: true)
516
+
517
+ params = {integer: 21}
518
+
519
+ header "Content-Type", "application/json"
520
+ post '/overwrite_same_parameter/84?integer=42', JSON.generate(params)
521
+ assert_equal 204, last_response.status
522
+ end
443
523
  end
444
524
 
445
525
  it "unpacker test" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: committee
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.4.0.rc1
4
+ version: 4.99.0.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brandur
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2021-05-31 00:00:00.000000000 Z
13
+ date: 2023-01-24 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: json_schema
@@ -53,6 +53,9 @@ dependencies:
53
53
  - - ">="
54
54
  - !ruby/object:Gem::Version
55
55
  version: 0.11.1
56
+ - - "<"
57
+ - !ruby/object:Gem::Version
58
+ version: '1.0'
56
59
  type: :runtime
57
60
  prerelease: false
58
61
  version_requirements: !ruby/object:Gem::Requirement
@@ -60,6 +63,9 @@ dependencies:
60
63
  - - ">="
61
64
  - !ruby/object:Gem::Version
62
65
  version: 0.11.1
66
+ - - "<"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.0'
63
69
  - !ruby/object:Gem::Dependency
64
70
  name: minitest
65
71
  requirement: !ruby/object:Gem::Requirement
@@ -80,14 +86,14 @@ dependencies:
80
86
  requirements:
81
87
  - - "~>"
82
88
  - !ruby/object:Gem::Version
83
- version: '0.6'
89
+ version: '0.8'
84
90
  type: :development
85
91
  prerelease: false
86
92
  version_requirements: !ruby/object:Gem::Requirement
87
93
  requirements:
88
94
  - - "~>"
89
95
  - !ruby/object:Gem::Version
90
- version: '0.6'
96
+ version: '0.8'
91
97
  - !ruby/object:Gem::Dependency
92
98
  name: rake
93
99
  requirement: !ruby/object:Gem::Requirement
@@ -320,7 +326,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
320
326
  - !ruby/object:Gem::Version
321
327
  version: 1.3.1
322
328
  requirements: []
323
- rubygems_version: 3.2.3
329
+ rubygems_version: 3.3.3
324
330
  signing_key:
325
331
  specification_version: 4
326
332
  summary: A collection of Rack middleware to support JSON Schema.