committee 4.4.0 → 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: 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.