swagger_docs_generator 0.2.0.pre.11 → 0.2.0.pre.12

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
  SHA1:
3
- metadata.gz: 0e45753803dd76bb3478784c1b0fe4d9d84a8812
4
- data.tar.gz: c0963b4195cb065a63cdef9262128b0ef339826b
3
+ metadata.gz: 9009aea8fd6b52d2b41879fc5cf447cd1249a3c1
4
+ data.tar.gz: e2cc9ae0b640d99f00709ae593f2b40309c2a84d
5
5
  SHA512:
6
- metadata.gz: c146f8a0015cd59c8a8ad53e991cb1551ebf5338d67b23536f536318721e4a0c5a52e0e6ea213698d763e7d86f7d9e097856eafe4c674dd2b5484b13a994e80d
7
- data.tar.gz: 1089f0afbd625f7f98cb87422998b53f102d33b3c71cf5a7e2732e12e0f97885f064fe01d7df23801e8629efa4561f7ab0db37d75757565d0b706179d6e6bec0
6
+ metadata.gz: 7b5ca89476be2063bfbd8adaa803ac202513c2eafebe8f66b4bfc1b2169c0780c523e252a184b2a66167f77bdba289b2ba3b744a3c1eef22a0d4437e82a29c04
7
+ data.tar.gz: 1ce5c6e6a13a1512ab5af25e08f0df314c125e16afdbc9c9f5d9fc5e8569cb8b741cc4316af015686865ea5054812ef272d982a84e586c6baec17d0fa027ebbc
@@ -17,18 +17,21 @@ module SwaggerDocsGenerator
17
17
  #
18
18
  # @see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md
19
19
  class Configuration
20
- attr_accessor :swagger, :base_path, :schemes, :consumes, :produces,
21
- :host, :paths, :definitions, :security_definitions,
22
- :security, :tags, :external_docs, :base_controller, :cleanning
20
+ # Accessors with default value
21
+ attr_accessor :swagger, :cleanning, :base_controller, :base_path
23
22
 
24
- SWAGGER = '2.0'
25
- CLEANNING = true
23
+ # Accessors without default value
24
+ attr_accessor :schemes, :consumes, :produces, :host, :external_docs,
25
+ :security, :definitions
26
+ # :external_docs, :security_definitions, :security
27
+ # :paths, :tags, :host
26
28
 
27
29
  # Initalize default value (and requried) for json swagger file
28
30
  def initialize
29
- @swagger = SWAGGER
31
+ @swagger = '2.0'
30
32
  @base_controller = ''
31
- @cleanning = CLEANNING
33
+ @base_path = '/'
34
+ @cleanning = true
32
35
  end
33
36
  end
34
37
 
@@ -11,13 +11,10 @@ module SwaggerDocsGenerator
11
11
  attr_accessor :title, :description, :terms_of_service, :contact, :license,
12
12
  :version
13
13
 
14
- TITLE = 'Title Example API'
15
- VERSION = '1.0.0'
16
-
17
14
  # Initialize required element
18
15
  def initialize
19
- @title = TITLE
20
- @version = VERSION
16
+ @title = 'Title Example API'
17
+ @version = '1.0.0'
21
18
  end
22
19
  end
23
20
 
@@ -15,11 +15,15 @@ module SwaggerDocsGenerator
15
15
  end
16
16
 
17
17
  def construct_swagger_file
18
- { definitions: find_models }
18
+ { definitions: search_definition }
19
19
  end
20
20
 
21
21
  private
22
22
 
23
+ def search_definition
24
+ find_models.merge!(find_in_controller)
25
+ end
26
+
23
27
  # :reek:NilCheck
24
28
  def find_models
25
29
  hash = {}
@@ -30,6 +34,21 @@ module SwaggerDocsGenerator
30
34
  hash
31
35
  end
32
36
 
37
+ def find_in_controller
38
+ hash = {}
39
+ controllers.each do |controller|
40
+ file = File.join(file_path, "#{controller.controller_name}.json")
41
+ hash.merge!(read_file(file)) if File.exist?(file)
42
+ end
43
+ hash
44
+ end
45
+
46
+ # :reek:UtilityFunction
47
+ def read_file(file)
48
+ json = JSON.parse(File.read(file))
49
+ json.key?('definitions') ? json['definitions'] : {}
50
+ end
51
+
33
52
  def each_controller(controller)
34
53
  @model = Model.new(controller)
35
54
  contruct_hash
@@ -30,7 +30,7 @@ module SwaggerDocsGenerator
30
30
  end
31
31
 
32
32
  def terms_of_service
33
- { terms_of_service: @config.terms_of_service }
33
+ { termsOfService: @config.terms_of_service }
34
34
  end
35
35
 
36
36
  def contact
@@ -17,5 +17,14 @@ module SwaggerDocsGenerator
17
17
  parse = ParserAction.new(controller, action, data)
18
18
  parse.adding_path
19
19
  end
20
+
21
+ def swagger_definition(controller, name, parameters)
22
+ parse = ParserDefinition.new(controller, name, parameters)
23
+ parse.adding_defintion
24
+ end
25
+
26
+ alias scontroller swagger_controller
27
+ alias sdoc swagger_doc
28
+ alias sdefinition swagger_definition
20
29
  end
21
30
  end
@@ -15,8 +15,7 @@ module SwaggerDocsGenerator
15
15
  def adding_tag
16
16
  json = JSON.parse(File.read(controller_file))
17
17
  File.open(controller_file, 'w') do |file|
18
- hash = construct_tags(@description)
19
- json['tags'].merge!(hash)
18
+ json['tags'].merge!(construct_tags)
20
19
  file.puts(JSON.pretty_generate(json))
21
20
  end
22
21
  end
@@ -33,8 +32,8 @@ module SwaggerDocsGenerator
33
32
  File.delete(controller_file) if File.exist?(controller_file)
34
33
  end
35
34
 
36
- def construct_tags(description)
37
- { name: controller_name, description: description }
35
+ def construct_tags
36
+ { name: controller_name, description: @description }
38
37
  end
39
38
  end
40
39
  end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SwaggerDocsGenerator
4
+ # # Parse Controller classes
5
+ #
6
+ # Parse controller classes in Rails application. It's create temporary file
7
+ # and adding automaticaly tags element.
8
+ class ParserDefinition < Parser
9
+ def initialize(controller, name, parameters)
10
+ super(controller)
11
+ @name = name
12
+ @parameters = parameters
13
+ end
14
+
15
+ def adding_defintion
16
+ json = JSON.parse(File.read(controller_file))
17
+ File.open(controller_file, 'w') do |file|
18
+ if json.key?('definitions')
19
+ json['definitions'].merge!(construct_definition)
20
+ else
21
+ json['definitions'] = construct_definition
22
+ end
23
+ file.puts(JSON.pretty_generate(json))
24
+ end
25
+ end
26
+
27
+ private
28
+
29
+ def construct_definition
30
+ { format_name => { type: 'object', properties: @parameters } }
31
+ end
32
+
33
+ def format_name
34
+ @name.tr(' ', '_').camelize
35
+ end
36
+ end
37
+ end
@@ -34,3 +34,4 @@ end
34
34
 
35
35
  require 'swagger_docs_generator/parser/controller'
36
36
  require 'swagger_docs_generator/parser/action'
37
+ require 'swagger_docs_generator/parser/definition'
data/spec/spec_helper.rb CHANGED
@@ -2,9 +2,19 @@
2
2
 
3
3
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
4
4
 
5
+ require 'rails'
5
6
  require 'bundler/setup'
6
7
  require 'swagger_docs_generator'
7
8
  require 'json-schema-rspec'
9
+ require 'pry'
10
+
11
+ Dir['spec/supporrt/**/*.rb'].each do |f|
12
+ require File.expand_path(f)
13
+ end
14
+
15
+ ::Dir.glob(::File.expand_path('../support/**/*.rb', __FILE__)).each do |f|
16
+ require_relative f
17
+ end
8
18
 
9
19
  RSpec.configure do |config|
10
20
  # Configure RSpec
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- RSpec.shared_examples 'variable exist' do |name|
4
- it name do
5
- expect(variable).not_to be nil
6
- end
3
+ RSpec.shared_examples 'variable exist' do |default|
4
+ it { expect(variable).to eql(default) }
5
+ end
6
+
7
+ RSpec.shared_examples 'variable does not exist' do
8
+ it { expect(variable).to be nil }
7
9
  end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.shared_examples 'configuration metadata is' do |method|
4
+ key = method.to_s.camelize(:lower).to_sym
5
+
6
+ include_examples 'metadata type is hash', method
7
+ it { expect(metadata.send(method)).to include(key) }
8
+ end
9
+
10
+ RSpec.shared_examples 'metadata type is hash' do |method|
11
+ it { expect(metadata.send(method)).to be_kind_of Hash }
12
+ end
13
+
14
+ RSpec.shared_examples 'metadata type is array' do |method|
15
+ it { expect(metadata.send(method)).to be_kind_of Array }
16
+ end
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe SwaggerDocsGenerator::Configuration, type: :gem,
6
+ broken: true,
7
+ name: :configuration do
8
+ before(:example) do
9
+ SwaggerDocsGenerator.configure do |config|
10
+ config.schemes = ['http']
11
+ config.consumes = 'application/vnd.github.v3.full+json'
12
+ config.produces = 'application/vnd.github+json'
13
+ config.host = 'http://example.com'
14
+ config.swagger = '2.2.4'
15
+ config.cleanning = false
16
+ config.base_controller = []
17
+ end
18
+ end
19
+
20
+ describe 'with customize value' do
21
+ context 'swagger' do
22
+ let(:variable) { SwaggerDocsGenerator.config.swagger }
23
+ it_behaves_like 'variable exist', '2.2.4'
24
+ end
25
+
26
+ context 'cleanning' do
27
+ let(:variable) { SwaggerDocsGenerator.config.cleanning }
28
+ it_behaves_like 'variable exist', false
29
+ end
30
+
31
+ context 'base_controller' do
32
+ let(:variable) { SwaggerDocsGenerator.config.base_controller }
33
+ it_behaves_like 'variable exist', []
34
+ end
35
+
36
+ context 'base_path' do
37
+ let(:variable) { SwaggerDocsGenerator.config.base_path }
38
+ it_behaves_like 'variable exist', '/'
39
+ end
40
+
41
+ context 'schemes' do
42
+ let(:variable) { SwaggerDocsGenerator.config.schemes }
43
+ it_behaves_like 'variable exist', ['http']
44
+ end
45
+
46
+ context 'consumes' do
47
+ let(:variable) { SwaggerDocsGenerator.config.consumes }
48
+ it_behaves_like 'variable exist', 'application/vnd.github.v3.full+json'
49
+ end
50
+
51
+ context 'produces' do
52
+ let(:variable) { SwaggerDocsGenerator.config.produces }
53
+ it_behaves_like 'variable exist', 'application/vnd.github+json'
54
+ end
55
+
56
+ context 'host' do
57
+ let(:variable) { SwaggerDocsGenerator.config.host }
58
+ it_behaves_like 'variable exist', 'http://example.com'
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe SwaggerDocsGenerator::Configuration, type: :gem,
6
+ name: :configuration do
7
+ describe 'with value default' do
8
+ context 'swagger' do
9
+ let(:variable) { SwaggerDocsGenerator.config.swagger }
10
+ it_behaves_like 'variable exist', '2.0'
11
+ end
12
+
13
+ context 'cleanning' do
14
+ let(:variable) { SwaggerDocsGenerator.config.cleanning }
15
+ it_behaves_like 'variable exist', true
16
+ end
17
+
18
+ context 'base_controller' do
19
+ let(:variable) { SwaggerDocsGenerator.config.base_controller }
20
+ it_behaves_like 'variable exist', ''
21
+ end
22
+
23
+ context 'base_path' do
24
+ let(:variable) { SwaggerDocsGenerator.config.base_path }
25
+ it_behaves_like 'variable exist', '/'
26
+ end
27
+
28
+ context 'schemes' do
29
+ let(:variable) { SwaggerDocsGenerator.config.schemes }
30
+ it_behaves_like 'variable does not exist'
31
+ end
32
+
33
+ context 'consumes' do
34
+ let(:variable) { SwaggerDocsGenerator.config.consumes }
35
+ it_behaves_like 'variable does not exist'
36
+ end
37
+
38
+ context 'produces' do
39
+ let(:variable) { SwaggerDocsGenerator.config.produces }
40
+ it_behaves_like 'variable does not exist'
41
+ end
42
+
43
+ context 'host' do
44
+ let(:variable) { SwaggerDocsGenerator.config.host }
45
+ it_behaves_like 'variable does not exist'
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'support/examples/configuration'
5
+
6
+ describe SwaggerDocsGenerator::ConfigurationInfo, type: :gem,
7
+ name: :configuration_info do
8
+ describe 'with valie default' do
9
+ context 'title' do
10
+ let(:variable) { SwaggerDocsGenerator.info.title }
11
+ it_behaves_like 'variable exist', 'Title Example API'
12
+ end
13
+
14
+ context 'version' do
15
+ let(:variable) { SwaggerDocsGenerator.info.version }
16
+ it_behaves_like 'variable exist', '1.0.0'
17
+ end
18
+ end
19
+ end
@@ -4,7 +4,8 @@ require 'spec_helper'
4
4
  require 'support/examples/generator'
5
5
 
6
6
  describe SwaggerDocsGenerator::Generator, type: :gem,
7
- name: :generator, broken: true do
7
+ broken: true,
8
+ name: :generator do
8
9
  before(:context) do
9
10
  @swag = SwaggerDocsGenerator::Generator.new
10
11
  @swagger_file = @swag.swagger_file
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe SwaggerDocsGenerator::MetadataConfiguration, type: :metadata,
6
+ name: :configuration do
7
+ let(:metadata) { SwaggerDocsGenerator::MetadataConfiguration.new }
8
+
9
+ include_examples 'configuration metadata is', :swagger
10
+ include_examples 'configuration metadata is', :base_path
11
+ include_examples 'configuration metadata is', :schemes
12
+ include_examples 'configuration metadata is', :host
13
+ include_examples 'configuration metadata is', :definitions
14
+ include_examples 'configuration metadata is', :external_docs
15
+ include_examples 'configuration metadata is', :security
16
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe SwaggerDocsGenerator::MetadataController, type: :metadata,
6
+ broken: true,
7
+ name: :configuration do
8
+ let(:metadata) { SwaggerDocsGenerator::MetadataController.new }
9
+
10
+ before(:context) do
11
+ class ApplicationController < ::ApplicationController
12
+ end
13
+ end
14
+
15
+ it { expect(metadata.send(:class_controller)).to be_kind_of Array }
16
+ it { expect(metadata.send(:array_controller)).to be_kind_of Array }
17
+ it { expect(metadata.send(:string_controller)).to be_kind_of String }
18
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe SwaggerDocsGenerator::MetadataInfo, type: :metadata,
6
+ name: :info do
7
+ let(:metadata) { SwaggerDocsGenerator::MetadataInfo.new }
8
+
9
+ include_examples 'configuration metadata is', :title
10
+ include_examples 'configuration metadata is', :version
11
+ include_examples 'configuration metadata is', :description
12
+ include_examples 'configuration metadata is', :terms_of_service
13
+ include_examples 'configuration metadata is', :contact
14
+ include_examples 'configuration metadata is', :license
15
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: swagger_docs_generator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0.pre.11
4
+ version: 0.2.0.pre.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - VAILLANT Jeremy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-16 00:00:00.000000000 Z
11
+ date: 2017-03-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -202,6 +202,20 @@ dependencies:
202
202
  - - ">="
203
203
  - !ruby/object:Gem::Version
204
204
  version: 1.7.3
205
+ - !ruby/object:Gem::Dependency
206
+ name: activesupport
207
+ requirement: !ruby/object:Gem::Requirement
208
+ requirements:
209
+ - - "~>"
210
+ - !ruby/object:Gem::Version
211
+ version: '4.2'
212
+ type: :development
213
+ prerelease: false
214
+ version_requirements: !ruby/object:Gem::Requirement
215
+ requirements:
216
+ - - "~>"
217
+ - !ruby/object:Gem::Version
218
+ version: '4.2'
205
219
  description: Generates swagger-ui json file for rails-api
206
220
  email:
207
221
  - jeremy@dazzl.tv
@@ -239,6 +253,7 @@ files:
239
253
  - lib/swagger_docs_generator/parser/actions/summary.rb
240
254
  - lib/swagger_docs_generator/parser/actions/tags.rb
241
255
  - lib/swagger_docs_generator/parser/controller.rb
256
+ - lib/swagger_docs_generator/parser/definition.rb
242
257
  - lib/swagger_docs_generator/parser/model.rb
243
258
  - lib/swagger_docs_generator/parser/models/active_record.rb
244
259
  - lib/swagger_docs_generator/parser/models/mongo.rb
@@ -248,10 +263,16 @@ files:
248
263
  - spec/spec_helper.rb
249
264
  - spec/support/examples/configuration.rb
250
265
  - spec/support/examples/generator.rb
266
+ - spec/support/examples/metadata.rb
251
267
  - spec/support/schemas/swagger.json
252
- - spec/swagger_docs_generator/configuration_spec.rb
268
+ - spec/swagger_docs_generator/configuration/configuration_customize_spec.rb
269
+ - spec/swagger_docs_generator/configuration/configuration_default_spec.rb
270
+ - spec/swagger_docs_generator/configuration/configuration_info_spec.rb
253
271
  - spec/swagger_docs_generator/gem_spec.rb
254
272
  - spec/swagger_docs_generator/generator_spec.rb
273
+ - spec/swagger_docs_generator/metadata/configuration_spec.rb
274
+ - spec/swagger_docs_generator/metadata/controller_spec.rb
275
+ - spec/swagger_docs_generator/metadata/info_spec.rb
255
276
  homepage: https://github.com/Dev-Crea/swagger-docs-generator
256
277
  licenses:
257
278
  - MIT
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
- require 'support/examples/configuration'
5
-
6
- describe SwaggerDocsGenerator::Configuration, type: :gem,
7
- name: :configuration do
8
- specify do
9
- expect { |config| SwaggerDocsGenerator.configure(&config) }.to yield_control
10
- end
11
-
12
- let(:conf) { SwaggerDocsGenerator.configure }
13
- let(:variable) { conf.swagger }
14
- it_behaves_like 'variable exist', 'swagger'
15
- end
16
-
17
- describe SwaggerDocsGenerator::ConfigurationInfo, type: :gem,
18
- name: :configuration_info do
19
- let(:conf) { SwaggerDocsGenerator.configure_info }
20
- let(:variable) { conf.title }
21
- it_behaves_like 'variable exist', 'title'
22
- let(:variable) { conf.version }
23
- it_behaves_like 'variable exist', 'version'
24
- end