swaggard 0.0.4

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.
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: