committee 4.4.0 → 4.99.0.beta1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 108842305271b038db8a6a49bd4ec9da83ea573a5061144484f4704a4af278df
4
- data.tar.gz: 216360635fabf23f082f768594c4799ef4c71f3de4cf7ff7ffc4ac2b7fc5a72c
3
+ metadata.gz: e23e8ffb5db07547735711e16eccf1407a2788ef957e5e804b253cbee8c02eb0
4
+ data.tar.gz: 1be7ca76dc347c9f0d9b25523ac69a61dc660bcca7fc183f3542512c88fc7d29
5
5
  SHA512:
6
- metadata.gz: 417368733fb254f0211dd9ff6b273bf722db984325326816e3568ba7352da4079fb27c1405029d7191ae17e232d357041474f89ce6b7209c063911e8f4db26b3
7
- data.tar.gz: '05682d9aaf2688ef511484bdaca307c1ff63dcefbdf1e4b6dcece592db7a548c5fa7ee0bb3498f4f1b903e20f9944a58790c335fc7c69251bdf0c65e33e3b19c'
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
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-06-12 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
@@ -86,14 +86,14 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '0.6'
89
+ version: '0.8'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '0.6'
96
+ version: '0.8'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rake
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -322,11 +322,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
322
322
  version: 2.4.0
323
323
  required_rubygems_version: !ruby/object:Gem::Requirement
324
324
  requirements:
325
- - - ">="
325
+ - - ">"
326
326
  - !ruby/object:Gem::Version
327
- version: '0'
327
+ version: 1.3.1
328
328
  requirements: []
329
- rubygems_version: 3.2.3
329
+ rubygems_version: 3.3.3
330
330
  signing_key:
331
331
  specification_version: 4
332
332
  summary: A collection of Rack middleware to support JSON Schema.