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

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
  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
- }