swaggard 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +178 -0
  4. data/Rakefile +24 -0
  5. data/app/assets/fonts/swaggard/droid-sans-v6-latin-700.eot +0 -0
  6. data/app/assets/fonts/swaggard/droid-sans-v6-latin-700.svg +411 -0
  7. data/app/assets/fonts/swaggard/droid-sans-v6-latin-700.ttf +0 -0
  8. data/app/assets/fonts/swaggard/droid-sans-v6-latin-700.woff +0 -0
  9. data/app/assets/fonts/swaggard/droid-sans-v6-latin-700.woff2 +0 -0
  10. data/app/assets/fonts/swaggard/droid-sans-v6-latin-regular.eot +0 -0
  11. data/app/assets/fonts/swaggard/droid-sans-v6-latin-regular.svg +403 -0
  12. data/app/assets/fonts/swaggard/droid-sans-v6-latin-regular.ttf +0 -0
  13. data/app/assets/fonts/swaggard/droid-sans-v6-latin-regular.woff +0 -0
  14. data/app/assets/fonts/swaggard/droid-sans-v6-latin-regular.woff2 +0 -0
  15. data/app/assets/images/swaggard/logo_small.png +0 -0
  16. data/app/assets/images/swaggard/pet_store_api.png +0 -0
  17. data/app/assets/images/swaggard/throbber.gif +0 -0
  18. data/app/assets/images/swaggard/wordnik_api.png +0 -0
  19. data/app/assets/javascripts/swaggard/application.js +24 -0
  20. data/app/assets/javascripts/swaggard/lib/MD5.js +319 -0
  21. data/app/assets/javascripts/swaggard/lib/backbone-min.js +15 -0
  22. data/app/assets/javascripts/swaggard/lib/handlebars-1.0.rc.1.js +1920 -0
  23. data/app/assets/javascripts/swaggard/lib/handlebars-2.0.0.js +28 -0
  24. data/app/assets/javascripts/swaggard/lib/highlight.7.3.pack.js +1 -0
  25. data/app/assets/javascripts/swaggard/lib/jquery-1.8.0.min.js +2 -0
  26. data/app/assets/javascripts/swaggard/lib/jquery.ba-bbq.min.js +18 -0
  27. data/app/assets/javascripts/swaggard/lib/jquery.slideto.min.js +1 -0
  28. data/app/assets/javascripts/swaggard/lib/jquery.wiggle.min.js +8 -0
  29. data/app/assets/javascripts/swaggard/lib/marked.js +1272 -0
  30. data/app/assets/javascripts/swaggard/lib/shred.bundle.js +2765 -0
  31. data/app/assets/javascripts/swaggard/lib/swagger-client.js +3294 -0
  32. data/app/assets/javascripts/swaggard/lib/swagger.js +794 -0
  33. data/app/assets/javascripts/swaggard/lib/underscore-min.js +32 -0
  34. data/app/assets/javascripts/swaggard/swagger-ui.js +2240 -0
  35. data/app/assets/javascripts/swaggard/swagger-ui_org.js +2005 -0
  36. data/app/assets/stylesheets/swaggard/application.css +16 -0
  37. data/app/assets/stylesheets/swaggard/reset.css +125 -0
  38. data/app/assets/stylesheets/swaggard/screen.css.scss +1256 -0
  39. data/app/assets/stylesheets/swaggard/typography.css.scss +26 -0
  40. data/app/controllers/swaggard/application_controller.rb +4 -0
  41. data/app/controllers/swaggard/swagger_controller.rb +21 -0
  42. data/app/views/swaggard/swagger/index.html.erb +74 -0
  43. data/config/routes.rb +3 -0
  44. data/lib/swaggard.rb +92 -0
  45. data/lib/swaggard/api_definition.rb +52 -0
  46. data/lib/swaggard/configuration.rb +82 -0
  47. data/lib/swaggard/engine.rb +18 -0
  48. data/lib/swaggard/parsers/controllers.rb +30 -0
  49. data/lib/swaggard/parsers/models.rb +29 -0
  50. data/lib/swaggard/parsers/routes.rb +54 -0
  51. data/lib/swaggard/swagger/definition.rb +24 -0
  52. data/lib/swaggard/swagger/operation.rb +98 -0
  53. data/lib/swaggard/swagger/parameters/base.rb +21 -0
  54. data/lib/swaggard/swagger/parameters/body.rb +67 -0
  55. data/lib/swaggard/swagger/parameters/form.rb +32 -0
  56. data/lib/swaggard/swagger/parameters/list.rb +46 -0
  57. data/lib/swaggard/swagger/parameters/path.rb +21 -0
  58. data/lib/swaggard/swagger/parameters/query.rb +32 -0
  59. data/lib/swaggard/swagger/path.rb +24 -0
  60. data/lib/swaggard/swagger/property.rb +23 -0
  61. data/lib/swaggard/swagger/response.rb +45 -0
  62. data/lib/swaggard/swagger/tag.rb +28 -0
  63. data/lib/swaggard/swagger/type.rb +72 -0
  64. data/lib/swaggard/version.rb +5 -0
  65. data/spec/fixtures/api.json +1 -0
  66. data/spec/fixtures/dummy/app/controllers/application_controller.rb +2 -0
  67. data/spec/fixtures/dummy/app/controllers/pets_controller.rb +15 -0
  68. data/spec/fixtures/dummy/config/application.rb +15 -0
  69. data/spec/fixtures/dummy/config/environments/development.rb +5 -0
  70. data/spec/fixtures/dummy/config/routes.rb +5 -0
  71. data/spec/fixtures/dummy/log/development.log +0 -0
  72. data/spec/integration/swaggard_spec.rb +19 -0
  73. data/spec/spec_helper.rb +27 -0
  74. metadata +210 -0
@@ -0,0 +1,45 @@
1
+ module Swaggard
2
+ module Swagger
3
+ class Response
4
+
5
+ attr_reader :status_code
6
+
7
+ def initialize(status_code, value)
8
+ @status_code = status_code
9
+ parse(value)
10
+ end
11
+
12
+ def to_doc
13
+ {
14
+ 'schema' => response_model
15
+ }
16
+ end
17
+
18
+ private
19
+
20
+ def parse(value)
21
+ @is_array_response = value =~ /Array/
22
+ @response_class = if @is_array_response
23
+ value.match(/^Array<(.*)>$/)[1]
24
+ else
25
+ value
26
+ end
27
+ end
28
+
29
+ def response_model
30
+ if @is_array_response
31
+ {
32
+ 'type' => 'array',
33
+ 'items' => {
34
+ '$ref' => "#/definitions/#@response_class"
35
+ }
36
+ }
37
+ else
38
+ { '$ref' => "#/definitions/#@response_class" }
39
+ end
40
+
41
+ end
42
+
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,28 @@
1
+ module Swaggard
2
+ module Swagger
3
+ class Tag
4
+
5
+ attr_accessor :name, :description
6
+
7
+ attr_reader :controller_class
8
+
9
+ def initialize(yard_object)
10
+ @yard_name = yard_object.name
11
+ @controller_class = "#{yard_object.namespace}::#{yard_object.name}".constantize
12
+
13
+ tag = yard_object.tags.find { |tag| tag.tag_name == 'tag' }
14
+
15
+ @name = tag ? tag.text : "#{@controller_class.controller_path}"
16
+ @description = yard_object.docstring || ''
17
+ end
18
+
19
+ def to_doc
20
+ {
21
+ 'name' => @name,
22
+ 'description' => @description
23
+ }
24
+ end
25
+
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,72 @@
1
+ module Swaggard
2
+ module Swagger
3
+ class Type
4
+
5
+ attr_reader :name
6
+
7
+ def self.new(types)
8
+ type = super
9
+
10
+ all[type.name] = type
11
+
12
+ type
13
+ end
14
+
15
+ def self.all
16
+ @all ||= {}
17
+ end
18
+
19
+ def initialize(types)
20
+ parse(types)
21
+ end
22
+
23
+ def to_doc
24
+ doc = if @is_array
25
+ { 'type' => 'array' }
26
+ else
27
+ { type_tag => type_name }
28
+ end
29
+
30
+
31
+ doc.merge!({ 'items' => { type_tag => type_name } }) if @is_array
32
+
33
+ doc
34
+ end
35
+
36
+ private
37
+
38
+ def parse(types)
39
+ parts = types.first.split(/[<>]/)
40
+
41
+ @name = parts.last
42
+ @is_array = parts.grep(/array/i).any?
43
+ end
44
+
45
+ # TODO: have this look at resource listing?
46
+ def ref?
47
+ self.class.all[@name].present?
48
+ end
49
+
50
+ def model_name
51
+ ref? ? @name : nil
52
+ end
53
+
54
+ def type_tag
55
+ if ref?
56
+ '$ref'
57
+ else
58
+ 'type'
59
+ end
60
+ end
61
+
62
+ def type_name
63
+ if ref?
64
+ "#/definitions/#{name}"
65
+ else
66
+ name
67
+ end
68
+ end
69
+
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,5 @@
1
+ module Swaggard
2
+
3
+ VERSION = '0.0.4'
4
+
5
+ end
@@ -0,0 +1 @@
1
+ {"swagger":"2.0","info":{"description":"","version":"0.1","title":"","termsOfService":"","contact":{"email":""},"license":{"name":"","url":""}},"host":"","basePath":null,"tags":[{"name":"pets","description":"This document describes the API for interacting with Pet resources"}],"schemes":["http"],"paths":{"/pets":{"get":{"tags":["pets"],"summary":"return a list of Pets","description":"","operationId":"index","consumes":["application/xml","application/json"],"produces":["application/xml","application/json"],"parameters":[],"responses":{}}},"/pets/{id}":{"get":{"tags":["pets"],"summary":"return a Pet","description":"","operationId":"show","consumes":["application/xml","application/json"],"produces":["application/xml","application/json"],"parameters":[{"in":"query","name":"id","description":"The ID for the Pet","required":false,"type":"integer"},{"in":"path","name":"id","description":"Scope response to id","required":true,"type":"string"}],"responses":{}}}},"definitions":{}}
@@ -0,0 +1,2 @@
1
+ class ApplicationController < ActionController::Base
2
+ end
@@ -0,0 +1,15 @@
1
+ # This document describes the API for interacting with Pet resources
2
+ class PetsController < ApplicationController
3
+
4
+ # return a list of Pets
5
+ #
6
+ def index
7
+ end
8
+
9
+ # return a Pet
10
+ #
11
+ # @query_parameter [Integer] id The ID for the Pet
12
+ def show
13
+ end
14
+
15
+ end
@@ -0,0 +1,15 @@
1
+ require 'action_controller/railtie'
2
+
3
+ # Load Swaggard
4
+ require File.expand_path('../../../../../lib/swaggard', __FILE__)
5
+
6
+ module Dummy
7
+ class Application < Rails::Application
8
+ config.root = File.expand_path('../../', __FILE__)
9
+
10
+ # Disable the asset pipeline.
11
+ config.assets.enabled = false
12
+ end
13
+ end
14
+
15
+ Dummy::Application.initialize!
@@ -0,0 +1,5 @@
1
+ Dummy::Application.configure do
2
+ config.cache_classes = true
3
+ config.eager_load = true
4
+ config.cache_store = :null_store
5
+ end
@@ -0,0 +1,5 @@
1
+ Dummy::Application.routes.draw do
2
+
3
+ resources :pets, only: [:index, :show]
4
+
5
+ end
File without changes
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ describe Swaggard, '.get_doc' do
4
+
5
+ let(:controller_path) { File.expand_path('../../fixtures/dummy/app/controllers/pets_controller.rb', __FILE__) }
6
+ let(:api_json) { File.read(File.expand_path('../../fixtures/api.json', __FILE__)) }
7
+
8
+ it 'generates swagger json' do
9
+ Swaggard.configure do |config|
10
+ config.controllers_path = controller_path
11
+ config.routes = Dummy::Application.routes.routes
12
+ end
13
+
14
+ swagger_json = JSON.dump(Swaggard.get_doc)
15
+
16
+ expect(swagger_json).to eq(api_json)
17
+ end
18
+
19
+ end
@@ -0,0 +1,27 @@
1
+ require 'simplecov'
2
+ SimpleCov.start
3
+
4
+ ENV["RAILS_ENV"] = "development"
5
+
6
+ require 'bundler/setup'
7
+
8
+ require 'rspec'
9
+ require 'mocha/api'
10
+ require 'bourne'
11
+
12
+ # Load Rails, which loads our swaggard
13
+ require File.expand_path('../fixtures/dummy/config/application.rb', __FILE__)
14
+
15
+ # require File.expand_path('../../lib/swaggard', __FILE__)
16
+
17
+ # Dir["./spec/support/**/*.rb"].each {|f| require f}
18
+
19
+ RSpec.configure do |config|
20
+ config.treat_symbols_as_metadata_keys_with_true_values = true
21
+ config.run_all_when_everything_filtered = true
22
+ config.filter_run :focus
23
+
24
+ config.mock_with :mocha
25
+
26
+ config.order = 'random'
27
+ end
metadata ADDED
@@ -0,0 +1,210 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: swaggard
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.4
5
+ platform: ruby
6
+ authors:
7
+ - Adrian Gomez
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-03-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '4.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: sass-rails
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bourne
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: simplecov
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: yard
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: Generate swagger documentation for your Rails REST API using YARD
98
+ email:
99
+ - adrian.gomez@moove-it.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - MIT-LICENSE
105
+ - README.md
106
+ - Rakefile
107
+ - app/assets/fonts/swaggard/droid-sans-v6-latin-700.eot
108
+ - app/assets/fonts/swaggard/droid-sans-v6-latin-700.svg
109
+ - app/assets/fonts/swaggard/droid-sans-v6-latin-700.ttf
110
+ - app/assets/fonts/swaggard/droid-sans-v6-latin-700.woff
111
+ - app/assets/fonts/swaggard/droid-sans-v6-latin-700.woff2
112
+ - app/assets/fonts/swaggard/droid-sans-v6-latin-regular.eot
113
+ - app/assets/fonts/swaggard/droid-sans-v6-latin-regular.svg
114
+ - app/assets/fonts/swaggard/droid-sans-v6-latin-regular.ttf
115
+ - app/assets/fonts/swaggard/droid-sans-v6-latin-regular.woff
116
+ - app/assets/fonts/swaggard/droid-sans-v6-latin-regular.woff2
117
+ - app/assets/images/swaggard/logo_small.png
118
+ - app/assets/images/swaggard/pet_store_api.png
119
+ - app/assets/images/swaggard/throbber.gif
120
+ - app/assets/images/swaggard/wordnik_api.png
121
+ - app/assets/javascripts/swaggard/application.js
122
+ - app/assets/javascripts/swaggard/lib/MD5.js
123
+ - app/assets/javascripts/swaggard/lib/backbone-min.js
124
+ - app/assets/javascripts/swaggard/lib/handlebars-1.0.rc.1.js
125
+ - app/assets/javascripts/swaggard/lib/handlebars-2.0.0.js
126
+ - app/assets/javascripts/swaggard/lib/highlight.7.3.pack.js
127
+ - app/assets/javascripts/swaggard/lib/jquery-1.8.0.min.js
128
+ - app/assets/javascripts/swaggard/lib/jquery.ba-bbq.min.js
129
+ - app/assets/javascripts/swaggard/lib/jquery.slideto.min.js
130
+ - app/assets/javascripts/swaggard/lib/jquery.wiggle.min.js
131
+ - app/assets/javascripts/swaggard/lib/marked.js
132
+ - app/assets/javascripts/swaggard/lib/shred.bundle.js
133
+ - app/assets/javascripts/swaggard/lib/swagger-client.js
134
+ - app/assets/javascripts/swaggard/lib/swagger.js
135
+ - app/assets/javascripts/swaggard/lib/underscore-min.js
136
+ - app/assets/javascripts/swaggard/swagger-ui.js
137
+ - app/assets/javascripts/swaggard/swagger-ui_org.js
138
+ - app/assets/stylesheets/swaggard/application.css
139
+ - app/assets/stylesheets/swaggard/reset.css
140
+ - app/assets/stylesheets/swaggard/screen.css.scss
141
+ - app/assets/stylesheets/swaggard/typography.css.scss
142
+ - app/controllers/swaggard/application_controller.rb
143
+ - app/controllers/swaggard/swagger_controller.rb
144
+ - app/views/swaggard/swagger/index.html.erb
145
+ - config/routes.rb
146
+ - lib/swaggard.rb
147
+ - lib/swaggard/api_definition.rb
148
+ - lib/swaggard/configuration.rb
149
+ - lib/swaggard/engine.rb
150
+ - lib/swaggard/parsers/controllers.rb
151
+ - lib/swaggard/parsers/models.rb
152
+ - lib/swaggard/parsers/routes.rb
153
+ - lib/swaggard/swagger/definition.rb
154
+ - lib/swaggard/swagger/operation.rb
155
+ - lib/swaggard/swagger/parameters/base.rb
156
+ - lib/swaggard/swagger/parameters/body.rb
157
+ - lib/swaggard/swagger/parameters/form.rb
158
+ - lib/swaggard/swagger/parameters/list.rb
159
+ - lib/swaggard/swagger/parameters/path.rb
160
+ - lib/swaggard/swagger/parameters/query.rb
161
+ - lib/swaggard/swagger/path.rb
162
+ - lib/swaggard/swagger/property.rb
163
+ - lib/swaggard/swagger/response.rb
164
+ - lib/swaggard/swagger/tag.rb
165
+ - lib/swaggard/swagger/type.rb
166
+ - lib/swaggard/version.rb
167
+ - spec/fixtures/api.json
168
+ - spec/fixtures/dummy/app/controllers/application_controller.rb
169
+ - spec/fixtures/dummy/app/controllers/pets_controller.rb
170
+ - spec/fixtures/dummy/config/application.rb
171
+ - spec/fixtures/dummy/config/environments/development.rb
172
+ - spec/fixtures/dummy/config/routes.rb
173
+ - spec/fixtures/dummy/log/development.log
174
+ - spec/integration/swaggard_spec.rb
175
+ - spec/spec_helper.rb
176
+ homepage: https://github.com/Moove-it/swaggard
177
+ licenses:
178
+ - MIT
179
+ metadata: {}
180
+ post_install_message:
181
+ rdoc_options: []
182
+ require_paths:
183
+ - lib
184
+ required_ruby_version: !ruby/object:Gem::Requirement
185
+ requirements:
186
+ - - ">="
187
+ - !ruby/object:Gem::Version
188
+ version: '0'
189
+ required_rubygems_version: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - ">="
192
+ - !ruby/object:Gem::Version
193
+ version: '0'
194
+ requirements: []
195
+ rubyforge_project:
196
+ rubygems_version: 2.4.6
197
+ signing_key:
198
+ specification_version: 4
199
+ summary: 'Swaggard: Swagger Rails REST API doc using yard YARD'
200
+ test_files:
201
+ - spec/fixtures/api.json
202
+ - spec/fixtures/dummy/app/controllers/application_controller.rb
203
+ - spec/fixtures/dummy/app/controllers/pets_controller.rb
204
+ - spec/fixtures/dummy/config/application.rb
205
+ - spec/fixtures/dummy/config/environments/development.rb
206
+ - spec/fixtures/dummy/config/routes.rb
207
+ - spec/fixtures/dummy/log/development.log
208
+ - spec/integration/swaggard_spec.rb
209
+ - spec/spec_helper.rb
210
+ has_rdoc: