swagger_autogenerate 1.2.7 → 1.2.9

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: 92cbfe4b2e0ca64b9e449776808ebff9817c60f5d8b03fee32797fd9954aa6ad
4
- data.tar.gz: 2c2ebf285f656b32c839dd781f599d338fc655cba177ea693cf2361defc5b385
3
+ metadata.gz: dafd89e33e58235dea22170057658250e81904936e750d53990d91e2de2f624c
4
+ data.tar.gz: d52401f1dd5aaeaef3a0fbf37ec9d78c924f3b78b2ef529f8169c50ce009566a
5
5
  SHA512:
6
- metadata.gz: 6ea1ca78404db1f3227a0c16b529ddf97225200c0ccffaf0ba3a39569d5e62f695159a8279e9ef418c0080824d66828952abf953f1cdbec9191ec4b1d89e8ee2
7
- data.tar.gz: 545a6631e980be453b483d03a2e834250b750f648bb415dc1a86849bdca92903d26eee478e11c3b3bd3b408f67a4c441ba1332921ee2c0e571fda17ef0140ebf
6
+ metadata.gz: 9c25c49469a803b38ce2e06804ab3c9eeeb74deceb8153c4291d7c988ebf66066ac9eda0213b25a83bbb1645ff7c6de4f5f56445061e3650fd1226b94948640e
7
+ data.tar.gz: 87d9405997af4cadb9cdfc552ff9bffc89fb65caa22c725d4248253264a50e9aa53dbfd1c18d78ffe5fe19cd0824ee2e5cd8836a73d3e607abb79ae41ba2e906
data/CHANGELOG.md CHANGED
@@ -19,6 +19,7 @@
19
19
  ## [1.2.4] - 2024-09-15
20
20
  ## [1.2.5] - 2024-09-15
21
21
  ## [1.2.6] - 2024-11-05
22
- ## [1.2.7] - 2024-11-05
22
+ ## [1.2.8] - 2024-11-05
23
+ ## [1.2.9] - 2025-11-24
23
24
 
24
25
  - Initial release
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- swagger_autogenerate (1.2.7)
4
+ swagger_autogenerate (1.2.9)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -216,8 +216,11 @@ module SwaggerAutogenerate
216
216
  def schema_data(value)
217
217
  type = schema_type(value)
218
218
  hash = { 'type' => type }
219
- hash['properties'] = {}
220
- hash['properties'] = properties_data(value) if type == 'object' && !value.nil?
219
+
220
+ if type == 'object'
221
+ # FIX: Removed additionalProperties: true as requested
222
+ hash['properties'] = (!value.nil? && value.present?) ? properties_data(value) : {}
223
+ end
221
224
 
222
225
  hash
223
226
  end
@@ -231,14 +234,35 @@ module SwaggerAutogenerate
231
234
  'object'
232
235
  end
233
236
 
234
- def set_parameters(parameters, parameter, required: false)
235
- return if parameter.blank?
237
+ def set_complex_parameter(parameters, name, in_type, value, required: false)
238
+ hash =
239
+ {
240
+ 'name' => name.to_s,
241
+ 'in' => in_type.to_s,
242
+ 'schema' => schema_data(value)
243
+ }
244
+
245
+ if in_type.to_s == 'query' && hash['schema']['type'] == 'object'
246
+ hash['style'] = 'deepObject'
247
+ hash['explode'] = true
248
+ end
236
249
 
237
- parameter.values.first.each do |key, value|
250
+ hash['required'] = required if required
251
+
252
+ parameters.push(hash)
253
+ end
254
+
255
+ def set_individual_parameters(parameters, parameter_set, required: false)
256
+ return if parameter_set.blank?
257
+
258
+ in_type = parameter_set.keys.first.to_s
259
+ params_hash = parameter_set.values.first
260
+
261
+ params_hash.each do |key, value|
238
262
  hash =
239
263
  {
240
264
  'name' => key.to_s,
241
- 'in' => parameter.keys.first.to_s,
265
+ 'in' => in_type,
242
266
  'schema' => schema_data(value),
243
267
  'example' => example(value)
244
268
  }
@@ -415,8 +439,6 @@ module SwaggerAutogenerate
415
439
 
416
440
  def merge_array_schemas(schemas)
417
441
  return {} if schemas.empty?
418
-
419
- # Attempt to merge all schemas into a single schema
420
442
  schemas.reduce do |merged, schema|
421
443
  merge_properties(merged, schema)
422
444
  end
@@ -458,9 +480,7 @@ module SwaggerAutogenerate
458
480
 
459
481
  def content_body(data)
460
482
  hash = {}
461
- # hash.merge!(content_json(data))
462
483
  hash.merge!(json_to_content_form_data(data))
463
-
464
484
  { 'content' => hash }
465
485
  end
466
486
 
@@ -504,9 +524,16 @@ module SwaggerAutogenerate
504
524
  def parameters
505
525
  parameters = []
506
526
 
507
- set_parameters(parameters, path_parameters, required: true)
508
- set_parameters(parameters, request_parameters) if request.request_parameters.blank?
509
- set_parameters(parameters, query_parameters)
527
+ # 1. Path Parameters
528
+ set_individual_parameters(parameters, path_parameters, required: true)
529
+
530
+ # 2. Query Parameters
531
+ query_parameters.each do |name, value|
532
+ set_complex_parameter(parameters, name.to_s, 'query', value)
533
+ end
534
+
535
+ # 3. Request Parameters
536
+ set_individual_parameters(parameters, request_parameters) if request.request_parameters.blank?
510
537
 
511
538
  parameters
512
539
  end
@@ -516,7 +543,7 @@ module SwaggerAutogenerate
516
543
  end
517
544
 
518
545
  def query_parameters
519
- { query: request.query_parameters }
546
+ request.query_parameters
520
547
  end
521
548
 
522
549
  def path_parameters
@@ -575,7 +602,7 @@ module SwaggerAutogenerate
575
602
 
576
603
  def example_description
577
604
  body_ = request_parameters.values.first.present? ? { 'body_params' => request_parameters.values.first&.as_json }: nil
578
- query_ = query_parameters.values.first.present? ? { 'query_params' => query_parameters.values.first&.as_json } : nil
605
+ query_ = query_parameters.present? ? { 'query_params' => query_parameters&.as_json } : nil
579
606
  path_ = path_parameters.values.first.present? ? { 'path_params' => path_parameters.values.first&.as_json }: nil
580
607
 
581
608
  [path_, query_, body_].
@@ -631,7 +658,7 @@ module SwaggerAutogenerate
631
658
  def add_properties_to_schema(last_example, main_path = yaml_file['paths'][current_path])
632
659
  if with_payload_properties
633
660
  parameters = {}
634
- parameters.merge!(request_parameters.values.first, query_parameters.values.first, path_parameters.values.first)
661
+ parameters.merge!(request_parameters.values.first, query_parameters, path_parameters.values.first)
635
662
  hash = {
636
663
  last_example => build_properties(parameters.as_json)
637
664
  }
@@ -652,10 +679,15 @@ module SwaggerAutogenerate
652
679
  end
653
680
  end
654
681
 
682
+ # FIX: Run check_parameters and check_parameter sequentially so explicit logic runs
655
683
  def apply_yaml_file_changes
656
- (check_path || check_method || check_status) &&
657
- (check_parameters || check_parameter) &&
658
- (check_request_bodys || check_request_body)
684
+ check_path
685
+ check_method
686
+ check_status
687
+ check_parameters
688
+ check_parameter
689
+ check_request_bodys
690
+ check_request_body
659
691
  end
660
692
 
661
693
  def old_paths
@@ -709,17 +741,44 @@ module SwaggerAutogenerate
709
741
  end
710
742
  end
711
743
 
744
+ # FIX: Stop overwriting parameters. Only initialize if missing.
712
745
  def check_parameters
713
- if old_paths[current_path][request.method.downcase]['parameters'].blank? || old_paths.dig(current_path, request.method.downcase, 'responses')&.key?('200')
714
- yaml_file['paths'][current_path][request.method.downcase]['parameters'] = paths.dig(current_path, request.method.downcase, 'parameters') if paths.dig(current_path, request.method.downcase, 'parameters').present?
746
+ if old_paths[current_path][request.method.downcase]['parameters'].nil?
747
+ yaml_file['paths'][current_path][request.method.downcase]['parameters'] = []
715
748
  end
716
749
  end
717
750
 
751
+ # FIX: Merge logic for schemas
718
752
  def check_parameter
719
- param_names = Array.wrap(paths[current_path][request.method.downcase]['parameters']&.pluck('name')) - Array.wrap(yaml_file['paths'][current_path][request.method.downcase]['parameters']&.pluck('name'))
720
- param_names.each do |param_name|
721
- param = paths[current_path][request.method.downcase]['parameters'].find { |parameter| parameter['name'] == param_name }
722
- yaml_file['paths'][current_path][request.method.downcase]['parameters'].push(param)
753
+ current_params = paths[current_path][request.method.downcase]['parameters'] || []
754
+
755
+ # Ensure existing parameters list exists
756
+ yaml_file['paths'][current_path][request.method.downcase]['parameters'] ||= []
757
+ existing_params_list = yaml_file['paths'][current_path][request.method.downcase]['parameters']
758
+
759
+ current_params.each do |param|
760
+ # Check if parameter with same name AND 'in' location exists
761
+ existing_param = existing_params_list.find { |p| p['name'] == param['name'] && p['in'] == param['in'] }
762
+
763
+ if existing_param
764
+ # If it exists, merge the schemas (accumulate properties)
765
+ merge_param_schemas(existing_param, param)
766
+ else
767
+ # If it is new, just add it
768
+ existing_params_list.push(param)
769
+ end
770
+ end
771
+ end
772
+
773
+ # Helper method to merge schema properties of object parameters
774
+ def merge_param_schemas(existing, new_param)
775
+ # We only merge if both are objects and have schemas
776
+ if existing.dig('schema', 'type') == 'object' && new_param.dig('schema', 'type') == 'object'
777
+ existing_props = existing.dig('schema', 'properties') || {}
778
+ new_props = new_param.dig('schema', 'properties') || {}
779
+
780
+ # Merge new properties into existing ones (Accumulate keys)
781
+ existing['schema']['properties'] = existing_props.merge(new_props)
723
782
  end
724
783
  end
725
784
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SwaggerAutogenerate
4
- VERSION = "1.2.7"
4
+ VERSION = "1.2.9"
5
5
  end
@@ -12,6 +12,16 @@ module SwaggerAutogenerate
12
12
  SwaggerTrace.new(request, response).call
13
13
  end
14
14
  end
15
+
16
+ if defined?(RSpec) && SwaggerAutogenerate.allow_swagger?
17
+ require 'rspec/rails'
18
+
19
+ RSpec.configure do |config|
20
+ config.before(:each) do |example|
21
+ SwaggerAutogenerate::SwaggerTrace.rspec_description = example&.metadata.dig(:example_group, :description)
22
+ end
23
+ end
24
+ end
15
25
  end
16
26
 
17
27
  def self.allow_swagger?
@@ -19,13 +29,3 @@ module SwaggerAutogenerate
19
29
  Rails.env.send("#{SwaggerTrace.environment_name.to_s}?")
20
30
  end
21
31
  end
22
-
23
- if defined?(RSpec) && SwaggerAutogenerate.allow_swagger?
24
- require 'rspec/rails'
25
-
26
- RSpec.configure do |config|
27
- config.before(:each) do |example|
28
- SwaggerAutogenerate::SwaggerTrace.rspec_description = example&.metadata.dig(:example_group, :description)
29
- end
30
- end
31
- end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: swagger_autogenerate
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.7
4
+ version: 1.2.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - MohammedBuraiah
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-11-05 00:00:00.000000000 Z
11
+ date: 2025-11-24 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Generating Swagger YAML Automatically Based on Existing Test Cases in
14
14
  Ruby on Rails
@@ -56,7 +56,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
56
56
  - !ruby/object:Gem::Version
57
57
  version: '0'
58
58
  requirements: []
59
- rubygems_version: 3.1.6
59
+ rubygems_version: 3.3.27
60
60
  signing_key:
61
61
  specification_version: 4
62
62
  summary: Automating Swagger YAML generation in Ruby on Rails offers a range of benefits