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 +4 -4
- data/CHANGELOG.md +2 -1
- data/Gemfile.lock +1 -1
- data/lib/swagger_autogenerate/swagger_trace.rb +84 -25
- data/lib/swagger_autogenerate/version.rb +1 -1
- data/lib/swagger_autogenerate.rb +10 -10
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: dafd89e33e58235dea22170057658250e81904936e750d53990d91e2de2f624c
|
|
4
|
+
data.tar.gz: d52401f1dd5aaeaef3a0fbf37ec9d78c924f3b78b2ef529f8169c50ce009566a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9c25c49469a803b38ce2e06804ab3c9eeeb74deceb8153c4291d7c988ebf66066ac9eda0213b25a83bbb1645ff7c6de4f5f56445061e3650fd1226b94948640e
|
|
7
|
+
data.tar.gz: 87d9405997af4cadb9cdfc552ff9bffc89fb65caa22c725d4248253264a50e9aa53dbfd1c18d78ffe5fe19cd0824ee2e5cd8836a73d3e607abb79ae41ba2e906
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -216,8 +216,11 @@ module SwaggerAutogenerate
|
|
|
216
216
|
def schema_data(value)
|
|
217
217
|
type = schema_type(value)
|
|
218
218
|
hash = { 'type' => type }
|
|
219
|
-
|
|
220
|
-
|
|
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
|
|
235
|
-
|
|
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
|
-
|
|
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' =>
|
|
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
|
-
|
|
508
|
-
|
|
509
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
|
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
|
-
|
|
657
|
-
|
|
658
|
-
|
|
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'].
|
|
714
|
-
yaml_file['paths'][current_path][request.method.downcase]['parameters'] =
|
|
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
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
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
|
|
data/lib/swagger_autogenerate.rb
CHANGED
|
@@ -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.
|
|
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:
|
|
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.
|
|
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
|