swagger_autogenerate 1.0.1 → 1.0.3

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: 5a79f228421fcf8a16a00e06ca839087079f3682a75b59a60db6b80711010958
4
- data.tar.gz: f8ee425bfb9d3a65905ebd1a03c527b2d55b52590f217b5e2a400760f964d373
3
+ metadata.gz: b3f7b9b67269b270dff6c7ec738c7b4ef8cafa149494c41e74671b0a193bc9d1
4
+ data.tar.gz: dadf1b845cb96e70f375a245d606b0b4a487b6a945e8ea2508bb102d9e0fbca3
5
5
  SHA512:
6
- metadata.gz: b5867cf7d6d7dd713a5eb84eb2a1f9f222ad7c9e299a99a572fdad5596ddb181d9a47c217cc32345b4cae98aac8af09c9684738cd526d4b481f8282ae932bc90
7
- data.tar.gz: 4e58b9f677e91a2811bbbd866ab948f0a5976312e5c7a8df1584337c4dc32d149cb6dd7bac946210abaf4fc14058bcde3ca76419055704d467ff965e830e23d4
6
+ metadata.gz: 261b31e5e7c4d02f72c3a60c0262d7034210685e690d66babc899c006886bcf4887380e8d0e58904eafa433552fc56f7ee4ac0ffe7c58c2654c2c9c216c2a3ac
7
+ data.tar.gz: 28034a707e1568ecf04a668427b186729ea92a9709e847d4db6a29d59a02fd866fd394ed6f10e3fa26e34b51d2438309fa4047f0acbf6b86a5e36cdb9aad7821
data/CHANGELOG.md CHANGED
@@ -1,6 +1,7 @@
1
1
  ## [Unreleased]
2
2
 
3
3
  ## [0.1.1] - 2024-05-27
4
- ## [1.0.1] - 2024-05-31
4
+ ## [1.0.2] - 2024-05-31
5
+ ## [1.0.3] - 2024-05-31
5
6
 
6
7
  - Initial release
data/README.md CHANGED
@@ -7,6 +7,12 @@ automating Swagger YAML generation in Ruby on Rails offers a range of benefits f
7
7
 
8
8
  The gem automatically observes the request/response patterns during the execution of test scenarios, generating accurate Swagger YAML files that reflect the API's behavior. developers and consumers can better understand and interact with the APIs.
9
9
 
10
+ ## Dependencies
11
+
12
+ The SwaggerAutogenerate gem depends on the rspec-rails gem, which brings the RSpec testing framework to Ruby on Rails.
13
+ Please install rspec-rails first: https://github.com/rspec/rspec-rails
14
+ Then continue the installation process.
15
+
10
16
  ## Installation
11
17
 
12
18
  1) Open your Gemfile located at ./Gemfile
@@ -18,7 +24,9 @@ The gem automatically observes the request/response patterns during the executio
18
24
  end
19
25
  ```
20
26
  3) Install the gem and add to the application's Gemfile by executing:
21
- $ bundle install
27
+ ```
28
+ bundle install
29
+ ```
22
30
 
23
31
  ## Configuration
24
32
 
@@ -31,6 +39,11 @@ To configure the swagger_autogenerate gem in your Rails application, follow thes
31
39
  ```
32
40
  include SwaggerAutogenerate if Rails.env.test? && ENV['SWAGGER'].present?
33
41
  ```
42
+ in the #Example-step you will set the ENV['SWAGGER'],
43
+
44
+ By setting the ENV['SWAGGER'] environment variable, you can specify the path to the new file,
45
+ whether it's a specific file (e.g., ../myfile.yaml) or a directory (e.g., ../docs).
46
+ This flexibility ensures that the documentation can be easily integrated into your project's structure and workflow.
34
47
 
35
48
  ### Step 2 (optional)
36
49
  1) Create a file called swagger_autogenerate.rb in the ./config/initializers
@@ -56,7 +69,7 @@ To generate Swagger YAML documentation for the APIs implemented in the Employees
56
69
  $ spec/your_path/employees_controller_spec.rb
57
70
  This file should contain the test scenarios for each action (e.g., index, show, create) of the controller.
58
71
 
59
- 3)Run the spec code using the rspec command and set the environment variable SWAGGER to the desired YAML file name. For example:
72
+ 3) Run the spec code using the rspec command and set the environment variable SWAGGER to the desired YAML file name. For example:
60
73
  ```
61
74
  SWAGGER='employee_apis.yaml' rspec spec/your_path/employees_controller_spec.rb
62
75
  ```
@@ -69,7 +82,3 @@ that the generated documentation will depend on the test scenarios defined in yo
69
82
  ## License
70
83
 
71
84
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
72
-
73
- ## Code of Conduct
74
-
75
- Everyone interacting in the SwaggerAutogenerate project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/swagger_autogenerate/blob/master/CODE_OF_CONDUCT.md).
@@ -1,31 +1,40 @@
1
1
  require_relative 'swagger_public_methods'
2
+ require_relative 'configuration'
2
3
 
3
4
  module SwaggerAutogenerate
4
5
  class SwaggerTrace
5
- WITH_CONFIG = true
6
- WITH_MULTIPLE_EXAMPLES = true
7
- WITH_EXAMPLE_DESCRIPTION = true
8
- WITH_RESPONSE_DESCRIPTION = true
9
- SWAGGER_ENVIRONMENT_VARIABLE = 'SWAGGER'
10
-
11
6
  include SwaggerPublicMethods
12
7
 
13
8
  def initialize(request, response)
9
+ @with_config = ::SwaggerAutogenerate.configuration.with_config
10
+ @with_multiple_examples = ::SwaggerAutogenerate.configuration.with_multiple_examples
11
+ @with_example_description = ::SwaggerAutogenerate.configuration.with_example_description
12
+ @with_response_description = ::SwaggerAutogenerate.configuration.with_response_description
14
13
  @request = request
15
14
  @response = response
16
- @paths = {}
15
+ @@paths = {}
17
16
  end
18
17
 
19
18
  def call
20
- if ENV[SWAGGER_ENVIRONMENT_VARIABLE].present?
19
+ if ENV[swagger_environment_variable].present?
21
20
  read_swagger_trace
22
21
  write_swagger_trace
23
22
  end
24
23
  end
25
24
 
25
+ def self.swagger_environment_variable
26
+ ::SwaggerAutogenerate.configuration.swagger_environment_variable
27
+ end
28
+
29
+ def swagger_environment_variable
30
+ SwaggerTrace.swagger_environment_variable
31
+ end
32
+
26
33
  private
27
34
 
28
- attr_reader :request, :response, :current_path, :yaml_file
35
+ attr_reader :request, :response, :current_path, :yaml_file, :configuration,
36
+ :with_config, :with_multiple_examples, :with_example_description,
37
+ :with_response_description
29
38
 
30
39
  # main methods
31
40
 
@@ -51,13 +60,13 @@ module SwaggerAutogenerate
51
60
  }
52
61
 
53
62
  hash[method].except!('requestBody') if hash[method]['requestBody'].blank?
54
- @paths[path.to_s] ||= {}
55
- @paths[path.to_s].merge!(hash)
63
+ paths[path.to_s] ||= {}
64
+ paths[path.to_s].merge!(hash)
56
65
  end
57
66
 
58
67
  def write_swagger_trace
59
- if @paths[current_path][request.method.downcase].present?
60
- @paths[current_path][request.method.downcase]['responses'] = swagger_response
68
+ if paths[current_path][request.method.downcase].present?
69
+ paths[current_path][request.method.downcase]['responses'] = swagger_response
61
70
  end
62
71
 
63
72
  if File.exist?(swagger_location)
@@ -69,8 +78,8 @@ module SwaggerAutogenerate
69
78
 
70
79
  def create_file
71
80
  File.open(swagger_location, 'w') do |file|
72
- data = WITH_CONFIG ? swagger_config : {}
73
- data['paths'] = @paths
81
+ data = with_config ? swagger_config : {}
82
+ data['paths'] = paths
74
83
  organize_result(data['paths'])
75
84
  data = data.to_hash
76
85
  result = add_quotes_to_dates(YAML.dump(data))
@@ -85,15 +94,15 @@ module SwaggerAutogenerate
85
94
  permitted_classes: [Symbol, Date, ActiveSupport::HashWithIndifferentAccess]
86
95
  )
87
96
 
88
- return create_file if @yaml_file.nil? || @yaml_file['paths'].nil?
97
+ return create_file if yaml_file.nil? || yaml_file['paths'].nil?
89
98
 
90
- @yaml_file.merge!(swagger_config) if WITH_CONFIG
99
+ yaml_file.merge!(swagger_config) if with_config
91
100
 
92
101
  apply_yaml_file_changes
93
- organize_result(@yaml_file['paths'])
94
- @yaml_file = convert_to_hash(@yaml_file)
102
+ organize_result(yaml_file['paths'])
103
+ @yaml_file = convert_to_hash(yaml_file)
95
104
  File.open(swagger_location, 'w') do |file|
96
- result = add_quotes_to_dates(YAML.dump(@yaml_file))
105
+ result = add_quotes_to_dates(YAML.dump(yaml_file))
97
106
  file.write(result)
98
107
  end
99
108
  end
@@ -185,7 +194,7 @@ module SwaggerAutogenerate
185
194
  swagger_response = { 'file' => 'file/data' }
186
195
  end
187
196
 
188
- hash['description'] = response_description if WITH_RESPONSE_DESCRIPTION
197
+ hash['description'] = response_description if with_response_description
189
198
  hash['headers'] = {} # response.headers
190
199
  hash['content'] = content_json_example(swagger_response)
191
200
 
@@ -298,7 +307,7 @@ module SwaggerAutogenerate
298
307
  # Static
299
308
 
300
309
  def paths
301
- @paths ||= {}
310
+ @@paths ||= {}
302
311
  end
303
312
 
304
313
  def security
@@ -315,10 +324,10 @@ module SwaggerAutogenerate
315
324
  def swagger_location
316
325
  return @swagger_location if instance_variable_defined?(:@swagger_location)
317
326
 
318
- if ENV[SWAGGER_ENVIRONMENT_VARIABLE].include?('.yaml') || ENV[SWAGGER_ENVIRONMENT_VARIABLE].include?('.yml')
319
- @swagger_location = Rails.root.join(ENV.fetch(SWAGGER_ENVIRONMENT_VARIABLE, nil).to_s).to_s
327
+ if ENV[swagger_environment_variable].include?('.yaml') || ENV[swagger_environment_variable].include?('.yml')
328
+ @swagger_location = Rails.root.join(ENV.fetch(swagger_environment_variable, nil).to_s).to_s
320
329
  else
321
- directory_path = Rails.root.join(ENV.fetch(SWAGGER_ENVIRONMENT_VARIABLE, nil).to_s).to_s
330
+ directory_path = Rails.root.join(ENV.fetch(swagger_environment_variable, nil).to_s).to_s
322
331
  FileUtils.mkdir_p(directory_path) unless File.directory?(directory_path)
323
332
  @swagger_location = "#{directory_path}/#{tags.first}.yaml"
324
333
  end
@@ -344,7 +353,7 @@ module SwaggerAutogenerate
344
353
  }
345
354
  }
346
355
  }
347
- hash['application/json']['examples']['example-0']['description'] = "payload => #{example_description}" if WITH_EXAMPLE_DESCRIPTION && !example_description.empty?
356
+ hash['application/json']['examples']['example-0']['description'] = "payload => #{example_description}" if with_example_description && !example_description.empty?
348
357
 
349
358
  hash
350
359
  end
@@ -386,7 +395,7 @@ module SwaggerAutogenerate
386
395
  unless old_examples.value?(current_example)
387
396
  last_example = json_example_plus_one(old_examples.keys.last)
388
397
  last_example ||= 'example-0'
389
- last_example = 'example-0' unless WITH_MULTIPLE_EXAMPLES
398
+ last_example = 'example-0' unless with_multiple_examples
390
399
  yaml_file['paths'][current_path][request.method.downcase]['responses'][response.status.to_s]['content']['application/json']['examples'][last_example] = current_example
391
400
  end
392
401
 
@@ -420,7 +429,7 @@ module SwaggerAutogenerate
420
429
 
421
430
  def check_path
422
431
  unless old_paths.key?(current_path)
423
- yaml_file['paths'].merge!({ current_path => @paths[current_path] })
432
+ yaml_file['paths'].merge!({ current_path => paths[current_path] })
424
433
  end
425
434
  end
426
435
 
@@ -444,29 +453,29 @@ module SwaggerAutogenerate
444
453
 
445
454
  def check_parameters
446
455
  if old_paths[current_path][request.method.downcase]['parameters'].blank?
447
- yaml_file['paths'][current_path][request.method.downcase]['parameters'] = @paths[current_path][request.method.downcase]['parameters']
456
+ yaml_file['paths'][current_path][request.method.downcase]['parameters'] = paths[current_path][request.method.downcase]['parameters']
448
457
  end
449
458
  end
450
459
 
451
460
  def check_parameter
452
- param_names = @paths[current_path][request.method.downcase]['parameters'].pluck('name') - yaml_file['paths'][current_path][request.method.downcase]['parameters'].pluck('name')
461
+ param_names = paths[current_path][request.method.downcase]['parameters'].pluck('name') - yaml_file['paths'][current_path][request.method.downcase]['parameters'].pluck('name')
453
462
  param_names.each do |param_name|
454
- param = @paths[current_path][request.method.downcase]['parameters'].find { |parameter| parameter['name'] == param_name }
463
+ param = paths[current_path][request.method.downcase]['parameters'].find { |parameter| parameter['name'] == param_name }
455
464
  yaml_file['paths'][current_path][request.method.downcase]['parameters'].push(param)
456
465
  end
457
466
  end
458
467
 
459
468
  def check_request_bodys
460
- if @paths[current_path][request.method.downcase]['requestBody'].present? && old_paths[current_path][request.method.downcase]['requestBody'].nil?
461
- yaml_file['paths'][current_path][request.method.downcase]['requestBody'] = @paths[current_path][request.method.downcase]['requestBody']
469
+ if paths[current_path][request.method.downcase]['requestBody'].present? && old_paths[current_path][request.method.downcase]['requestBody'].nil?
470
+ yaml_file['paths'][current_path][request.method.downcase]['requestBody'] = paths[current_path][request.method.downcase]['requestBody']
462
471
  end
463
472
  end
464
473
 
465
474
  def check_request_body
466
- if @paths[current_path][request.method.downcase]['requestBody'].present?
467
- param_names = @paths[current_path][request.method.downcase]['requestBody']['content']['multipart/form-data']['schema']['properties'].keys - yaml_file['paths'][current_path][request.method.downcase]['requestBody']['content']['multipart/form-data']['schema']['properties'].keys
475
+ if paths[current_path][request.method.downcase]['requestBody'].present?
476
+ param_names = paths[current_path][request.method.downcase]['requestBody']['content']['multipart/form-data']['schema']['properties'].keys - yaml_file['paths'][current_path][request.method.downcase]['requestBody']['content']['multipart/form-data']['schema']['properties'].keys
468
477
  param_names.each do |param_name|
469
- param = @paths[current_path][request.method.downcase]['requestBody']['content']['multipart/form-data']['schema']['properties'].select { |parameter| parameter == param_name }
478
+ param = paths[current_path][request.method.downcase]['requestBody']['content']['multipart/form-data']['schema']['properties'].select { |parameter| parameter == param_name }
470
479
  yaml_file['paths'][current_path][request.method.downcase]['requestBody']['content']['multipart/form-data']['schema']['properties'].merge!(param)
471
480
  end
472
481
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SwaggerAutogenerate
4
- VERSION = "1.0.1"
4
+ VERSION = "1.0.3"
5
5
  end
@@ -5,7 +5,7 @@ module SwaggerAutogenerate
5
5
  require_relative 'swagger_autogenerate/swagger_trace.rb'
6
6
 
7
7
  included do
8
- if defined?(Rails) && Rails.env.test? && ENV[SwaggerTrace::SWAGGER_ENVIRONMENT_VARIABLE].present?
8
+ if defined?(Rails) && ENV[SwaggerTrace.swagger_environment_variable].present?
9
9
  def process_action(*args)
10
10
  super
11
11
 
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: swagger_autogenerate
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - MohammedBuraiah
@@ -31,6 +31,7 @@ files:
31
31
  - sig/swagger_autogenerate.rbs
32
32
  - swagger_autogenerate-0.1.0.gem
33
33
  - swagger_autogenerate-0.1.1.gem
34
+ - swagger_autogenerate-1.0.2.gem
34
35
  - swagger_autogenerate.gemspec
35
36
  homepage: https://github.com/MohammedBuraiah/swagger_autogenerate
36
37
  licenses: