swagger_rails 1.0.0.pre.beta → 1.0.0.pre.beta2

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: fbbe5654c93a933a0238d3727ea570c95578efc4
4
- data.tar.gz: 400ddf26eb5d0eef9daed9341652c49307942f86
3
+ metadata.gz: 92af79c8cb42efd72ea5b79b5b8f0979d9bc0bfa
4
+ data.tar.gz: 04b02dc891f0bc7843d8b02c442fcff10e0bb8f9
5
5
  SHA512:
6
- metadata.gz: 813fe6d095a303656cf97fe4804e5644482e8a106979dbf469c6fa7975e751e82568be60f0fa9a63279e5eaa000ca043b0e04708fe60450d70887c5eabd76931
7
- data.tar.gz: 5d5d1f837cbabf9227a5926f76eba01e3976a243eb2dfcb23eec62b9ad249f7554ed993bdc78ab019a3bddd4b4f61043b0ec7c2aa8cfd166ae5179440568097b
6
+ metadata.gz: ab65f619c9007bcb3d6e6b45c1c205f3fa8f47f1a60a0a4d82fdb9059f720591bf54b830afab08c57ff1434bfeb2d9e11aab47d4c0f2a7eec9b3636d3f7b4093
7
+ data.tar.gz: ca6014484ff29a056c1c2f009580843e5a665872e33094c549bdfa02fd53d6701e4f7c2a124678210b552ab447964a9f58848a5409a57314e26bc7ca083e13eb
@@ -3,7 +3,7 @@ module SwaggerRails
3
3
 
4
4
  def index
5
5
  @discovery_paths = Hash[
6
- SwaggerRails.swagger_docs.map do |path, doc|
6
+ SwaggerRails.config.swagger_docs.map do |path, doc|
7
7
  [ "#{root_path}#{path}", doc[:info][:title] ]
8
8
  end
9
9
  ]
@@ -6,7 +6,7 @@ module SwaggerRails
6
6
  source_root File.expand_path('../templates', __FILE__)
7
7
 
8
8
  def add_swagger_dir
9
- empty_directory('config/swagger/v1')
9
+ empty_directory('swagger/v1')
10
10
  end
11
11
 
12
12
  def add_initializer
@@ -1,13 +1,16 @@
1
1
  SwaggerRails.configure do |c|
2
2
 
3
- # Define your swagger documents and provide global metadata
4
- # Describe actual operations in your spec/test files
5
- c.swagger_doc 'v1/swagger.json' do
3
+ # Define your swagger documents and provide any global metadata here
4
+ # (Individual operations are generated from your spec/test files)
5
+ c.swagger_doc 'v1/swagger.json',
6
6
  {
7
+ swagger: '2.0',
7
8
  info: {
8
9
  title: 'API V1',
9
10
  version: 'v1'
10
11
  }
11
12
  }
12
- end
13
+
14
+ # Specify a location to output generated swagger files
15
+ c.swagger_dir File.expand_path('../../../swagger', __FILE__)
13
16
  end
data/lib/swagger_rails.rb CHANGED
@@ -2,23 +2,32 @@ require "swagger_rails/engine"
2
2
 
3
3
  module SwaggerRails
4
4
 
5
- def self.configure
6
- yield self
5
+ class Configuration
6
+ attr_reader :swagger_docs, :swagger_dir_string
7
+
8
+ def initialize
9
+ @swagger_docs = {}
10
+ @swagger_dir_string = nil
11
+ end
12
+
13
+ def swagger_doc(path, doc)
14
+ @swagger_docs[path] = doc
15
+ end
16
+
17
+ def swagger_dir(dir_string)
18
+ @swagger_dir_string = dir_string
19
+ end
7
20
  end
8
21
 
9
22
  class << self
10
- @@swagger_docs = {}
23
+ attr_reader :config
11
24
 
12
- def swagger_doc(path, &block)
13
- @@swagger_docs[path] = block
25
+ def configure
26
+ yield config
14
27
  end
15
28
 
16
- def swagger_docs
17
- Hash[
18
- @@swagger_docs.map do |path, factory|
19
- [ path, factory.call.merge(swagger: '2.0') ]
20
- end
21
- ]
29
+ def config
30
+ @config ||= Configuration.new
22
31
  end
23
32
  end
24
33
  end
@@ -6,7 +6,7 @@ module SwaggerRails
6
6
  isolate_namespace SwaggerRails
7
7
 
8
8
  initializer 'swagger_rails.initialize' do |app|
9
- middleware.use SwaggerDocs, File.join(app.root, 'config', 'swagger')
9
+ middleware.use SwaggerDocs, SwaggerRails.config.swagger_dir_string
10
10
  middleware.use SwaggerUi, "#{root}/bower_components/swagger-ui/dist"
11
11
  end
12
12
  end
@@ -49,12 +49,20 @@ module SwaggerRails
49
49
  end
50
50
 
51
51
  def run_test!
52
+ if metadata.has_key?(:swagger_doc)
53
+ swagger_doc = SwaggerRails.config.swagger_docs[metadata[:swagger_doc]]
54
+ else
55
+ swagger_doc = SwaggerRails.config.swagger_docs.values.first
56
+ end
57
+
58
+ test_visitor = SwaggerRails::TestVisitor.new(swagger_doc)
59
+
52
60
  before do |example|
53
- SwaggerRails::TestVisitor.instance.submit_request!(self, example.metadata)
61
+ test_visitor.submit_request!(self, example.metadata)
54
62
  end
55
63
 
56
64
  it "returns a #{metadata[:response_code]} status" do |example|
57
- SwaggerRails::TestVisitor.instance.assert_response!(self, example.metadata)
65
+ test_visitor.assert_response!(self, example.metadata)
58
66
  end
59
67
  end
60
68
  end
@@ -9,9 +9,10 @@ module SwaggerRails
9
9
  :example_group_finished,
10
10
  :stop
11
11
 
12
- def initialize(output)
12
+ def initialize(output, config=SwaggerRails.config)
13
13
  @output = output
14
- @swagger_docs = SwaggerRails.swagger_docs
14
+ @swagger_docs = config.swagger_docs
15
+ @swagger_dir_string = config.swagger_dir_string
15
16
 
16
17
  @output.puts 'Generating Swagger Docs ...'
17
18
  end
@@ -20,14 +21,14 @@ module SwaggerRails
20
21
  metadata = notification.group.metadata
21
22
  return unless metadata.has_key?(:response_code)
22
23
 
24
+ swagger_doc = @swagger_docs[metadata[:swagger_doc]] || @swagger_docs.values.first
23
25
  swagger_data = swagger_data_from(metadata)
24
- swagger_doc = @swagger_docs[metadata[:docs_path]] || @swagger_docs.values.first
25
26
  swagger_doc.deep_merge!(swagger_data)
26
27
  end
27
28
 
28
29
  def stop(notification)
29
30
  @swagger_docs.each do |path, doc|
30
- file_path = File.join(Rails.root, 'config/swagger', path)
31
+ file_path = File.join(@swagger_dir_string, path)
31
32
 
32
33
  File.open(file_path, 'w') do |file|
33
34
  file.write(JSON.pretty_generate(doc))
@@ -50,11 +51,19 @@ module SwaggerRails
50
51
  end
51
52
 
52
53
  def operation_from(metadata)
53
- metadata.slice(:summary, :consumes, :produces, :parameters).tap do |operation|
54
- operation[:responses] = {
55
- metadata[:response_code] => metadata[:response]
56
- }
57
- end
54
+ {
55
+ tags: [ find_root_of(metadata)[:description] ] ,
56
+ summary: metadata[:summary],
57
+ consumes: metadata[:consumes],
58
+ produces: metadata[:produces],
59
+ parameters: metadata[:parameters],
60
+ responses: { metadata[:response_code] => metadata[:response] }
61
+ }
62
+ end
63
+
64
+ def find_root_of(metadata)
65
+ parent = metadata[:parent_example_group]
66
+ parent.nil? ? metadata : find_root_of(parent)
58
67
  end
59
68
  end
60
69
  end
@@ -1,8 +1,9 @@
1
- require 'singleton'
2
-
3
1
  module SwaggerRails
4
2
  class TestVisitor
5
- include Singleton
3
+
4
+ def initialize(swagger_doc)
5
+ @swagger_doc = swagger_doc
6
+ end
6
7
 
7
8
  def submit_request!(test, metadata)
8
9
  params_data = params_data_for(test, metadata[:parameters])
@@ -35,6 +36,7 @@ module SwaggerRails
35
36
  path_params_data.each do |param_data|
36
37
  path.sub!("\{#{param_data[:name]}\}", param_data[:value].to_s)
37
38
  end
39
+ path.prepend(@swagger_doc[:basePath] || '')
38
40
  end
39
41
  end
40
42
 
@@ -1,3 +1,3 @@
1
1
  module SwaggerRails
2
- VERSION = "1.0.0-beta"
2
+ VERSION = "1.0.0-beta2"
3
3
  end
@@ -4,9 +4,10 @@
4
4
  # end
5
5
 
6
6
  require 'rspec/core/rake_task'
7
+ require 'swagger_rails'
7
8
 
8
9
  desc 'Generate Swagger JSON files from integration specs'
9
10
  RSpec::Core::RakeTask.new('swaggerize') do |t|
10
- t.pattern = 'spec/integration/**/*_spec.rb'
11
+ t.pattern = 'spec/requests/**/*_spec.rb, spec/api/**/*_spec.rb, spec/integration/**/*_spec.rb'
11
12
  t.rspec_opts = [ '--format SwaggerRails::RSpec::Formatter', '--dry-run' ]
12
13
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: swagger_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.pre.beta
4
+ version: 1.0.0.pre.beta2
5
5
  platform: ruby
6
6
  authors:
7
7
  - domaindrivendev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-26 00:00:00.000000000 Z
11
+ date: 2016-05-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -44,12 +44,10 @@ dependencies:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
46
  version: '3.0'
47
- description: Use the provided DSL to accurately test and describe API operations in
48
- your spec files. Then, you can easily generate corresponding swagger.json files
49
- and serve them up with an embedded version of swagger-ui. This means you can complement
50
- your API with a slick discovery UI to assist consumers with their integration efforts.
51
- Best of all, it requires minimal coding and maintenance, allowing you to focus on
52
- building an awesome API!
47
+ description: Use the provided DSL to describe and test API operations in your spec
48
+ files. Then, you can easily generate corresponding swagger.json files and serve
49
+ them up with an embedded version of swagger-ui. Best of all, it requires minimal
50
+ coding and maintenance, allowing you to focus on building an awesome API!
53
51
  email:
54
52
  - domaindrivendev@gmail.com
55
53
  executables: []
@@ -112,7 +110,6 @@ files:
112
110
  - lib/generators/swagger_rails/custom_ui/files/index.html.erb
113
111
  - lib/generators/swagger_rails/install/USAGE
114
112
  - lib/generators/swagger_rails/install/install_generator.rb
115
- - lib/generators/swagger_rails/install/templates/swagger.json
116
113
  - lib/generators/swagger_rails/install/templates/swagger_rails.rb
117
114
  - lib/swagger_rails.rb
118
115
  - lib/swagger_rails/engine.rb
@@ -146,7 +143,7 @@ rubyforge_project:
146
143
  rubygems_version: 2.4.8
147
144
  signing_key:
148
145
  specification_version: 4
149
- summary: Leverage your api/integration test specs to generate swagger descriptions
150
- for Rails-based API's
146
+ summary: Generate API documentation, including a slick discovery/playground UI, directly
147
+ from your rspec integration specs
151
148
  test_files: []
152
149
  has_rdoc:
@@ -1,45 +0,0 @@
1
- {
2
- "swagger": "2.0",
3
- "info": {
4
- "version": "0.0.0",
5
- "title": "[Enter a description for your API here]",
6
- "description": "The docs below are powered by the default swagger.json that gets installed with swagger_rails. You'll need to update it to describe your API. See here for the complete swagger spec - https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md"
7
- },
8
- "paths": {
9
- "/a/sample/resource": {
10
- "post": {
11
- "tags": [
12
- "a/sample/resource"
13
- ],
14
- "description": "Create a new sample resource",
15
- "parameters": [
16
- {
17
- "name": "body",
18
- "in": "body",
19
- "schema": {
20
- "$ref": "#/definitions/CreateSampleResource"
21
- }
22
- }
23
- ],
24
- "responses": {
25
- "200": {
26
- "description": "Ok"
27
- }
28
- }
29
- }
30
- }
31
- },
32
- "definitions": {
33
- "CreateSampleResource": {
34
- "properties": {
35
- "name": {
36
- "type": "string"
37
- },
38
- "date_time": {
39
- "type": "string",
40
- "format": "date-time"
41
- }
42
- }
43
- }
44
- }
45
- }