swagger_ui_generator 0.0.1
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 +7 -0
- data/.gitignore +19 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +69 -0
- data/Rakefile +23 -0
- data/lib/generators/swagger_ui_generator/install/install_generator.rb +22 -0
- data/lib/generators/swagger_ui_generator/install/templates/public/api-docs.html.erb +73 -0
- data/lib/generators/swagger_ui_generator/install/templates/public/swagger/css/highlight.default.css +135 -0
- data/lib/generators/swagger_ui_generator/install/templates/public/swagger/css/screen.css +1070 -0
- data/lib/generators/swagger_ui_generator/install/templates/public/swagger/lib/backbone-min.js +38 -0
- data/lib/generators/swagger_ui_generator/install/templates/public/swagger/lib/handlebars-1.0.0.js +2278 -0
- data/lib/generators/swagger_ui_generator/install/templates/public/swagger/lib/highlight.7.3.pack.js +1 -0
- data/lib/generators/swagger_ui_generator/install/templates/public/swagger/lib/jquery-1.8.0.min.js +2 -0
- data/lib/generators/swagger_ui_generator/install/templates/public/swagger/lib/jquery.ba-bbq.min.js +18 -0
- data/lib/generators/swagger_ui_generator/install/templates/public/swagger/lib/jquery.slideto.min.js +1 -0
- data/lib/generators/swagger_ui_generator/install/templates/public/swagger/lib/jquery.wiggle.min.js +8 -0
- data/lib/generators/swagger_ui_generator/install/templates/public/swagger/lib/shred.bundle.js +2765 -0
- data/lib/generators/swagger_ui_generator/install/templates/public/swagger/lib/shred/content.js +193 -0
- data/lib/generators/swagger_ui_generator/install/templates/public/swagger/lib/swagger.js +1311 -0
- data/lib/generators/swagger_ui_generator/install/templates/public/swagger/lib/underscore-min.js +32 -0
- data/lib/generators/swagger_ui_generator/install/templates/public/swagger/swagger-ui.js +2129 -0
- data/lib/generators/swagger_ui_generator/install/templates/public/swagger/throbber.gif +0 -0
- data/lib/swagger_ui_generator.rb +5 -0
- data/lib/swagger_ui_generator/importer.rb +97 -0
- data/lib/swagger_ui_generator/version.rb +3 -0
- data/swagger_ui_generator.gemspec +28 -0
- data/test/lib/generators/swagger_ui_generator/install_generator_test.rb +73 -0
- data/test/test_helper.rb +19 -0
- data/vendor/swagger-ui/.gitignore +22 -0
- data/vendor/swagger-ui/.npmignore +7 -0
- data/vendor/swagger-ui/Cakefile +132 -0
- data/vendor/swagger-ui/README.md +110 -0
- data/vendor/swagger-ui/dist/css/highlight.default.css +135 -0
- data/vendor/swagger-ui/dist/css/screen.css +1070 -0
- data/vendor/swagger-ui/dist/images/logo_small.png +0 -0
- data/vendor/swagger-ui/dist/images/pet_store_api.png +0 -0
- data/vendor/swagger-ui/dist/images/throbber.gif +0 -0
- data/vendor/swagger-ui/dist/images/wordnik_api.png +0 -0
- data/vendor/swagger-ui/dist/index.html +78 -0
- data/vendor/swagger-ui/dist/lib/backbone-min.js +38 -0
- data/vendor/swagger-ui/dist/lib/handlebars-1.0.0.js +2278 -0
- data/vendor/swagger-ui/dist/lib/highlight.7.3.pack.js +1 -0
- data/vendor/swagger-ui/dist/lib/jquery-1.8.0.min.js +2 -0
- data/vendor/swagger-ui/dist/lib/jquery.ba-bbq.min.js +18 -0
- data/vendor/swagger-ui/dist/lib/jquery.slideto.min.js +1 -0
- data/vendor/swagger-ui/dist/lib/jquery.wiggle.min.js +8 -0
- data/vendor/swagger-ui/dist/lib/shred.bundle.js +2765 -0
- data/vendor/swagger-ui/dist/lib/shred/content.js +193 -0
- data/vendor/swagger-ui/dist/lib/swagger.js +1311 -0
- data/vendor/swagger-ui/dist/lib/underscore-min.js +32 -0
- data/vendor/swagger-ui/dist/swagger-ui.js +2129 -0
- data/vendor/swagger-ui/dist/swagger-ui.min.js +1 -0
- data/vendor/swagger-ui/lib/backbone-min.js +38 -0
- data/vendor/swagger-ui/lib/handlebars-1.0.0.js +2278 -0
- data/vendor/swagger-ui/lib/highlight.7.3.pack.js +1 -0
- data/vendor/swagger-ui/lib/jquery-1.8.0.min.js +2 -0
- data/vendor/swagger-ui/lib/jquery.ba-bbq.min.js +18 -0
- data/vendor/swagger-ui/lib/jquery.slideto.min.js +1 -0
- data/vendor/swagger-ui/lib/jquery.wiggle.min.js +8 -0
- data/vendor/swagger-ui/lib/shred.bundle.js +2765 -0
- data/vendor/swagger-ui/lib/shred/content.js +193 -0
- data/vendor/swagger-ui/lib/swagger.js +1311 -0
- data/vendor/swagger-ui/lib/underscore-min.js +32 -0
- data/vendor/swagger-ui/package.json +26 -0
- data/vendor/swagger-ui/src/main/coffeescript/SwaggerUi.coffee +101 -0
- data/vendor/swagger-ui/src/main/coffeescript/view/ContentTypeView.coffee +14 -0
- data/vendor/swagger-ui/src/main/coffeescript/view/HeaderView.coffee +37 -0
- data/vendor/swagger-ui/src/main/coffeescript/view/MainView.coffee +18 -0
- data/vendor/swagger-ui/src/main/coffeescript/view/OperationView.coffee +318 -0
- data/vendor/swagger-ui/src/main/coffeescript/view/ParameterContentTypeView.coffee +14 -0
- data/vendor/swagger-ui/src/main/coffeescript/view/ParameterView.coffee +57 -0
- data/vendor/swagger-ui/src/main/coffeescript/view/ResourceView.coffee +21 -0
- data/vendor/swagger-ui/src/main/coffeescript/view/ResponseContentTypeView.coffee +14 -0
- data/vendor/swagger-ui/src/main/coffeescript/view/SignatureView.coffee +51 -0
- data/vendor/swagger-ui/src/main/coffeescript/view/StatusCodeView.coffee +11 -0
- data/vendor/swagger-ui/src/main/html/css/highlight.default.css +135 -0
- data/vendor/swagger-ui/src/main/html/css/screen.css +1070 -0
- data/vendor/swagger-ui/src/main/html/images/logo_small.png +0 -0
- data/vendor/swagger-ui/src/main/html/images/pet_store_api.png +0 -0
- data/vendor/swagger-ui/src/main/html/images/throbber.gif +0 -0
- data/vendor/swagger-ui/src/main/html/images/wordnik_api.png +0 -0
- data/vendor/swagger-ui/src/main/html/index.html +78 -0
- data/vendor/swagger-ui/src/main/javascript/doc.js +184 -0
- data/vendor/swagger-ui/src/main/less/reset.less +50 -0
- data/vendor/swagger-ui/src/main/less/screen.less +67 -0
- data/vendor/swagger-ui/src/main/less/specs.less +1004 -0
- data/vendor/swagger-ui/src/main/template/content_type.handlebars +10 -0
- data/vendor/swagger-ui/src/main/template/main.handlebars +22 -0
- data/vendor/swagger-ui/src/main/template/operation.handlebars +85 -0
- data/vendor/swagger-ui/src/main/template/param.handlebars +30 -0
- data/vendor/swagger-ui/src/main/template/param_list.handlebars +25 -0
- data/vendor/swagger-ui/src/main/template/param_readonly.handlebars +15 -0
- data/vendor/swagger-ui/src/main/template/param_readonly_required.handlebars +15 -0
- data/vendor/swagger-ui/src/main/template/param_required.handlebars +31 -0
- data/vendor/swagger-ui/src/main/template/parameter_content_type.handlebars +10 -0
- data/vendor/swagger-ui/src/main/template/resource.handlebars +27 -0
- data/vendor/swagger-ui/src/main/template/response_content_type.handlebars +10 -0
- data/vendor/swagger-ui/src/main/template/signature.handlebars +18 -0
- data/vendor/swagger-ui/src/main/template/status_code.handlebars +2 -0
- data/vendor/swagger-ui/src/test/spec.html +26 -0
- data/vendor/swagger-ui/src/test/swagger-ui-spec.coffee +49 -0
- data/vendor/swagger-ui/swagger-ui.json +20 -0
- metadata +240 -0
|
Binary file
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
require 'fileutils'
|
|
2
|
+
require 'nokogiri'
|
|
3
|
+
|
|
4
|
+
module SwaggerUiGenerator
|
|
5
|
+
class Importer
|
|
6
|
+
def import
|
|
7
|
+
cleanup
|
|
8
|
+
ensure_directory_structure
|
|
9
|
+
copy_dependencies
|
|
10
|
+
generate_template
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def cleanup
|
|
14
|
+
FileUtils.rm_rf Dir[destination_path("**/*")]
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def ensure_directory_structure
|
|
18
|
+
FileUtils.mkdir_p destination_path("public/swagger")
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def copy_dependencies
|
|
22
|
+
generate_script_with_custom_throbber_path
|
|
23
|
+
|
|
24
|
+
%w( lib css ).each do |dir|
|
|
25
|
+
src = source_path("#{ dir }/*")
|
|
26
|
+
dst = destination_path("public/swagger/#{ dir }")
|
|
27
|
+
|
|
28
|
+
FileUtils.mkdir_p dst
|
|
29
|
+
FileUtils.cp_r Dir[src], dst
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
FileUtils.cp source_path("images/throbber.gif"), destination_path("public/swagger")
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def generate_script_with_custom_throbber_path
|
|
36
|
+
script = IO.read(source_path('swagger-ui.js')).gsub(%r{'images/throbber.gif'}, "'/swagger/throbber.gif'")
|
|
37
|
+
File.open(destination_path("public/swagger/swagger-ui.js"), 'w') do |js|
|
|
38
|
+
js.write script
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def generate_template
|
|
43
|
+
ui_doc.at('title').content = "__@title__"
|
|
44
|
+
|
|
45
|
+
script_el = ui_doc.at('script:not([src])')
|
|
46
|
+
script = script_el.content.split(/\n/).map do |line|
|
|
47
|
+
if line =~ /url:\s*"http/
|
|
48
|
+
' url: window.location.protocol + "//" + window.location.host + "__@api_spec_path__",'
|
|
49
|
+
else
|
|
50
|
+
line
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
script_el.native_content = script.join("\n")
|
|
54
|
+
|
|
55
|
+
(ui_doc / 'script[src]').each do |el|
|
|
56
|
+
el['src'] = "/swagger/#{ el['src'] }"
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
(ui_doc / 'link[rel="stylesheet"]').each do |el|
|
|
60
|
+
el['href'] = "/swagger/#{ el['href'] }" if el['href'].start_with? 'css'
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
ui_doc.at('a#logo').remove
|
|
64
|
+
(ui_doc / 'form#api_selector .icon-btn').each { |el| el.remove }
|
|
65
|
+
|
|
66
|
+
File.open(destination_path("public/api-docs.html.erb"), 'w') do |out|
|
|
67
|
+
out.write ui_doc.to_xhtml(indent:2, indent_text:" ").gsub(/__(.*)__/, '<%= \1 %>')
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def source_path(path)
|
|
72
|
+
source_base.join(path)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def destination_path(path)
|
|
76
|
+
destination_base.join(path)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
private
|
|
80
|
+
|
|
81
|
+
def ui_doc
|
|
82
|
+
@ui_doc ||= Nokogiri::HTML(IO.read(source_path("index.html")).gsub("\r\n", "\n"))
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def source_base
|
|
86
|
+
@src ||= relative_path("../../../vendor/swagger-ui/dist")
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def destination_base
|
|
90
|
+
@dst ||= relative_path("../../generators/swagger_ui_generator/install/templates")
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def relative_path(path)
|
|
94
|
+
Pathname.new(File.expand_path(path, __FILE__))
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
|
+
require 'swagger_ui_generator/version'
|
|
5
|
+
|
|
6
|
+
Gem::Specification.new do |spec|
|
|
7
|
+
spec.name = "swagger_ui_generator"
|
|
8
|
+
spec.version = SwaggerUiGenerator::VERSION
|
|
9
|
+
spec.authors = ["Solomon White"]
|
|
10
|
+
spec.email = ["rubysolo@gmail.com"]
|
|
11
|
+
spec.summary = %q{Swagger UI Generator}
|
|
12
|
+
spec.description = %q{Rails generator to build Swagger UI API doc viewer}
|
|
13
|
+
spec.homepage = "http://github.com/rubysolo/swagger_ui_generator"
|
|
14
|
+
spec.license = "MIT"
|
|
15
|
+
|
|
16
|
+
spec.files = `git ls-files`.split($/)
|
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
|
19
|
+
spec.require_paths = ["lib"]
|
|
20
|
+
|
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.5"
|
|
22
|
+
spec.add_development_dependency "pry-nav"
|
|
23
|
+
spec.add_development_dependency "rake"
|
|
24
|
+
spec.add_development_dependency "rails", ">= 3.1"
|
|
25
|
+
|
|
26
|
+
spec.add_runtime_dependency "railties", ">= 3.1"
|
|
27
|
+
spec.add_runtime_dependency "nokogiri"
|
|
28
|
+
end
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
require 'generators/swagger_ui_generator/install/install_generator'
|
|
3
|
+
require 'nokogiri'
|
|
4
|
+
|
|
5
|
+
class InstallGeneratorTest < Rails::Generators::TestCase
|
|
6
|
+
tests SwaggerUiGenerator::Generators::InstallGenerator
|
|
7
|
+
destination Rails.root
|
|
8
|
+
|
|
9
|
+
setup :prepare_destination
|
|
10
|
+
|
|
11
|
+
test "generates swagger ui app" do
|
|
12
|
+
run_generator
|
|
13
|
+
|
|
14
|
+
assert_file "public/swagger/swagger-ui.js"
|
|
15
|
+
assert_file "public/api-docs.html", %r{/swagger/swagger-ui.js}
|
|
16
|
+
|
|
17
|
+
css_files = %w(
|
|
18
|
+
highlight.default.css
|
|
19
|
+
screen.css
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
css_files.each do |css|
|
|
23
|
+
assert_file "public/swagger/css/#{ css }"
|
|
24
|
+
assert_file "public/api-docs.html", %r{/swagger/css/#{ css }}
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
js_files = %w(
|
|
28
|
+
shred.bundle.js
|
|
29
|
+
jquery-1.8.0.min.js
|
|
30
|
+
jquery.slideto.min.js
|
|
31
|
+
jquery.wiggle.min.js
|
|
32
|
+
jquery.ba-bbq.min.js
|
|
33
|
+
handlebars-1.0.0.js
|
|
34
|
+
underscore-min.js
|
|
35
|
+
backbone-min.js
|
|
36
|
+
swagger.js
|
|
37
|
+
highlight.7.3.pack.js
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
js_files.each do |js|
|
|
41
|
+
assert_file "public/swagger/lib/#{ js }"
|
|
42
|
+
assert_file "public/api-docs.html", %r{/swagger/lib/#{ js }}
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
test "uses default location for @api_spec_path" do
|
|
47
|
+
run_generator
|
|
48
|
+
assert_file "public/api-docs.html", %r{window\.location\.host \+ "/swagger/api-docs.json"}
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
test "uses custom location for @api_spec_path" do
|
|
52
|
+
run_generator %w(--api-spec-path /api/v2/docs.json)
|
|
53
|
+
assert_file "public/api-docs.html", %r{window\.location\.host \+ "/api/v2/docs.json"}
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
test "does not modify font stylesheet" do
|
|
57
|
+
run_generator
|
|
58
|
+
assert_file "public/api-docs.html" do |html|
|
|
59
|
+
doc = Nokogiri::HTML(html)
|
|
60
|
+
css_hrefs = (doc / 'link[rel="stylesheet"]').map { |el| el['href'] }
|
|
61
|
+
font_href = css_hrefs.reject { |href| href.start_with? '/swagger' }.first
|
|
62
|
+
|
|
63
|
+
assert font_href
|
|
64
|
+
assert_equal 'https://fonts.googleapis.com/css?family=Droid+Sans:400,700', font_href
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
test 'imports the throbber gif and modifies the path appropriately' do
|
|
69
|
+
run_generator
|
|
70
|
+
assert_file "public/swagger/throbber.gif"
|
|
71
|
+
assert_file "public/swagger/swagger-ui.js", %r{'/swagger/throbber.gif'}
|
|
72
|
+
end
|
|
73
|
+
end
|
data/test/test_helper.rb
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require 'bundler'
|
|
2
|
+
Bundler.require
|
|
3
|
+
|
|
4
|
+
require 'test/unit'
|
|
5
|
+
require 'rails/all'
|
|
6
|
+
require 'rails/generators'
|
|
7
|
+
require 'rails/generators/test_case'
|
|
8
|
+
|
|
9
|
+
class TestApp < Rails::Application
|
|
10
|
+
config.root = File.dirname(__FILE__)
|
|
11
|
+
end
|
|
12
|
+
Rails.application = TestApp
|
|
13
|
+
|
|
14
|
+
module Rails
|
|
15
|
+
def self.root
|
|
16
|
+
@root ||= File.expand_path(File.join(File.dirname(__FILE__), '..', 'tmp', 'rails'))
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
Rails.application.config.root = Rails.root
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
wordnik*.zip
|
|
2
|
+
.DS_STORE
|
|
3
|
+
*.ipr
|
|
4
|
+
*.iml
|
|
5
|
+
*.iws
|
|
6
|
+
lib/*.jar
|
|
7
|
+
META-INF/
|
|
8
|
+
web/
|
|
9
|
+
index
|
|
10
|
+
lib/*.zip
|
|
11
|
+
dk/
|
|
12
|
+
index_dict
|
|
13
|
+
logs
|
|
14
|
+
src/main/java/com/wordnik/env/Version.scala
|
|
15
|
+
lib/*.pom
|
|
16
|
+
version.properties
|
|
17
|
+
reports/*
|
|
18
|
+
.sass-cache
|
|
19
|
+
swagger-ui.sublime-workspace
|
|
20
|
+
.idea
|
|
21
|
+
.project
|
|
22
|
+
node_modules/*
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
fs = require 'fs'
|
|
2
|
+
path = require 'path'
|
|
3
|
+
{exec} = require 'child_process'
|
|
4
|
+
less = require 'less'
|
|
5
|
+
|
|
6
|
+
sourceFiles = [
|
|
7
|
+
'SwaggerUi'
|
|
8
|
+
'view/HeaderView'
|
|
9
|
+
'view/MainView'
|
|
10
|
+
'view/ResourceView'
|
|
11
|
+
'view/OperationView'
|
|
12
|
+
'view/StatusCodeView'
|
|
13
|
+
'view/ParameterView'
|
|
14
|
+
'view/SignatureView'
|
|
15
|
+
'view/ContentTypeView'
|
|
16
|
+
'view/ResponseContentTypeView'
|
|
17
|
+
'view/ParameterContentTypeView'
|
|
18
|
+
]
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
task 'clean', 'Removes distribution', ->
|
|
22
|
+
console.log 'Clearing dist...'
|
|
23
|
+
exec 'rm -rf dist'
|
|
24
|
+
|
|
25
|
+
task 'dist', 'Build a distribution', ->
|
|
26
|
+
console.log "Build distribution in ./dist"
|
|
27
|
+
fs.mkdirSync('dist') if not path.existsSync('dist')
|
|
28
|
+
fs.mkdirSync('dist/lib') if not path.existsSync('dist/lib')
|
|
29
|
+
|
|
30
|
+
appContents = new Array remaining = sourceFiles.length
|
|
31
|
+
for file, index in sourceFiles then do (file, index) ->
|
|
32
|
+
console.log " : Reading src/main/coffeescript/#{file}.coffee"
|
|
33
|
+
fs.readFile "src/main/coffeescript/#{file}.coffee", 'utf8', (err, fileContents) ->
|
|
34
|
+
throw err if err
|
|
35
|
+
appContents[index] = fileContents
|
|
36
|
+
precompileTemplates() if --remaining is 0
|
|
37
|
+
|
|
38
|
+
precompileTemplates= ->
|
|
39
|
+
console.log ' : Precompiling templates...'
|
|
40
|
+
templateFiles = fs.readdirSync('src/main/template')
|
|
41
|
+
templateContents = new Array remaining = templateFiles.length
|
|
42
|
+
for file, index in templateFiles then do (file, index) ->
|
|
43
|
+
console.log " : Compiling src/main/template/#{file}"
|
|
44
|
+
exec "handlebars src/main/template/#{file} -f dist/_#{file}.js", (err, stdout, stderr) ->
|
|
45
|
+
throw err if err
|
|
46
|
+
fs.readFile 'dist/_' + file + '.js', 'utf8', (err, fileContents) ->
|
|
47
|
+
throw err if err
|
|
48
|
+
templateContents[index] = fileContents
|
|
49
|
+
fs.unlink 'dist/_' + file + '.js'
|
|
50
|
+
if --remaining is 0
|
|
51
|
+
templateContents.push '\n\n'
|
|
52
|
+
fs.writeFile 'dist/_swagger-ui-templates.js', templateContents.join('\n\n'), 'utf8', (err) ->
|
|
53
|
+
throw err if err
|
|
54
|
+
build()
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
build = ->
|
|
58
|
+
console.log ' : Collecting Coffeescript source...'
|
|
59
|
+
|
|
60
|
+
appContents.push '\n\n'
|
|
61
|
+
fs.writeFile 'dist/_swagger-ui.coffee', appContents.join('\n\n'), 'utf8', (err) ->
|
|
62
|
+
throw err if err
|
|
63
|
+
console.log ' : Compiling...'
|
|
64
|
+
exec 'coffee --compile dist/_swagger-ui.coffee', (err, stdout, stderr) ->
|
|
65
|
+
throw err if err
|
|
66
|
+
fs.unlink 'dist/_swagger-ui.coffee'
|
|
67
|
+
console.log ' : Combining with javascript...'
|
|
68
|
+
exec 'cat src/main/javascript/doc.js dist/_swagger-ui-templates.js dist/_swagger-ui.js > dist/swagger-ui.js', (err, stdout, stderr) ->
|
|
69
|
+
throw err if err
|
|
70
|
+
fs.unlink 'dist/_swagger-ui.js'
|
|
71
|
+
fs.unlink 'dist/_swagger-ui-templates.js'
|
|
72
|
+
console.log ' : Minifying all...'
|
|
73
|
+
exec 'java -jar "./bin/yuicompressor-2.4.7.jar" --type js -o ' + 'dist/swagger-ui.min.js ' + 'dist/swagger-ui.js', (err, stdout, stderr) ->
|
|
74
|
+
throw err if err
|
|
75
|
+
lessc()
|
|
76
|
+
|
|
77
|
+
lessc = ->
|
|
78
|
+
# Someone who knows CoffeeScript should make this more Coffee-licious
|
|
79
|
+
console.log ' : Compiling LESS...'
|
|
80
|
+
|
|
81
|
+
less.render fs.readFileSync("src/main/less/screen.less", 'utf8'), (err, css) ->
|
|
82
|
+
console.log err
|
|
83
|
+
fs.writeFileSync("src/main/html/css/screen.css", css)
|
|
84
|
+
pack()
|
|
85
|
+
|
|
86
|
+
pack = ->
|
|
87
|
+
console.log ' : Packaging...'
|
|
88
|
+
exec 'cp -r lib dist'
|
|
89
|
+
console.log ' : Copied swagger-ui libs'
|
|
90
|
+
exec 'cp -r node_modules/swagger-client/lib/swagger.js dist/lib'
|
|
91
|
+
console.log ' : Copied swagger dependencies'
|
|
92
|
+
exec 'cp -r src/main/html/* dist'
|
|
93
|
+
console.log ' : Copied html dependencies'
|
|
94
|
+
console.log ' !'
|
|
95
|
+
|
|
96
|
+
task 'spec', "Run the test suite", ->
|
|
97
|
+
exec "open spec.html", (err, stdout, stderr) ->
|
|
98
|
+
throw err if err
|
|
99
|
+
|
|
100
|
+
task 'watch', 'Watch source files for changes and autocompile', ->
|
|
101
|
+
# Function which watches all files in the passed directory
|
|
102
|
+
watchFiles = (dir) ->
|
|
103
|
+
files = fs.readdirSync(dir)
|
|
104
|
+
for file, index in files then do (file, index) ->
|
|
105
|
+
console.log " : " + dir + "/#{file}"
|
|
106
|
+
fs.watchFile dir + "/#{file}", (curr, prev) ->
|
|
107
|
+
if +curr.mtime isnt +prev.mtime
|
|
108
|
+
invoke 'dist'
|
|
109
|
+
|
|
110
|
+
notify "Watching source files for changes..."
|
|
111
|
+
|
|
112
|
+
# Watch specific source files
|
|
113
|
+
for file, index in sourceFiles then do (file, index) ->
|
|
114
|
+
console.log " : " + "src/main/coffeescript/#{file}.coffee"
|
|
115
|
+
fs.watchFile "src/main/coffeescript/#{file}.coffee", (curr, prev) ->
|
|
116
|
+
if +curr.mtime isnt +prev.mtime
|
|
117
|
+
invoke 'dist'
|
|
118
|
+
|
|
119
|
+
# watch all files in these folders
|
|
120
|
+
watchFiles("src/main/template")
|
|
121
|
+
watchFiles("src/main/javascript")
|
|
122
|
+
watchFiles("src/main/html")
|
|
123
|
+
watchFiles("src/main/less")
|
|
124
|
+
watchFiles("src/test")
|
|
125
|
+
|
|
126
|
+
notify = (message) ->
|
|
127
|
+
return unless message?
|
|
128
|
+
console.log message
|
|
129
|
+
# options =
|
|
130
|
+
# title: 'CoffeeScript'
|
|
131
|
+
# image: 'bin/CoffeeScript.png'
|
|
132
|
+
# try require('growl') message, options
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
Swagger UI
|
|
2
|
+
==========
|
|
3
|
+
|
|
4
|
+
Swagger UI is part of [Swagger](http://swagger.wordnik.com/) project. The Swagger project allows you to produce, visualize and consume your OWN RESTful services. No proxy or 3rd party services required. Do it your own way.
|
|
5
|
+
|
|
6
|
+
Swagger UI is a dependency-free collection of HTML, Javascript, and CSS assets that dynamically
|
|
7
|
+
generate beautiful documentation and sandbox from a [Swagger-compliant](https://github.com/wordnik/swagger-core/wiki) API. Because Swagger UI has no dependencies, you can host it in any server environment, or on your local machine.
|
|
8
|
+
|
|
9
|
+
How to Use It
|
|
10
|
+
-------------
|
|
11
|
+
|
|
12
|
+
### Download
|
|
13
|
+
You can use the swagger-ui code AS-IS! No need to build or recompile--just clone this repo and use the pre-built files in the `dist` folder. If you like swagger-ui as-is, stop here.
|
|
14
|
+
|
|
15
|
+
### Build
|
|
16
|
+
You can rebuild swagger-ui on your own to tweak it or just so you can say you did. To do so, follow these steps:
|
|
17
|
+
|
|
18
|
+
1. install [handlebars](http://handlebarsjs.com/)
|
|
19
|
+
2. install java
|
|
20
|
+
3. npm install
|
|
21
|
+
4. npm run-script build
|
|
22
|
+
5. You should see the distribution under the dist folder. Open ./dist/index.html to launch Swagger UI in a browser
|
|
23
|
+
|
|
24
|
+
### Use
|
|
25
|
+
Once you open the Swagger UI, it will load the [Swagger Petstore](http://petstore.swagger.wordnik.com/api/api-docs) service and show its APIs. You can enter your own server url and click explore to view the API.
|
|
26
|
+
|
|
27
|
+
### Customize
|
|
28
|
+
You may choose to customize Swagger UI for your organization. Here is an overview of whats in its various directories:
|
|
29
|
+
|
|
30
|
+
- dist: Contains a distribution which you can deploy on a server or load from your local machine.
|
|
31
|
+
- bin: Contains files used by swagger-ui for its build/test. These are not required by the distribution.
|
|
32
|
+
- lib: Contains javascript dependencies which swagger-ui depends on
|
|
33
|
+
- node_modules: Contains node modules which swagger-ui uses for its development.
|
|
34
|
+
- src
|
|
35
|
+
- src/main/coffeescript: main code in CoffeeScript
|
|
36
|
+
- src/main/templates: [handlebars](http://handlebarsjs.com/) templates used to render swagger-ui
|
|
37
|
+
- src/main/html: the html files, some images and css
|
|
38
|
+
- src/main/javascript: some legacy javascript referenced by CoffeeScript code
|
|
39
|
+
|
|
40
|
+
### SwaggerUi
|
|
41
|
+
To use swagger-ui you should take a look at the [source of swagger-ui html page](https://github.com/wordnik/swagger-ui/tree/master/src/main/html) and customize it. This basically requires you to instantiate a SwaggerUi object and call load() on it as below:
|
|
42
|
+
|
|
43
|
+
```javascript
|
|
44
|
+
window.swaggerUi = new SwaggerUi({
|
|
45
|
+
url:"http://petstore.swagger.wordnik.com/api/api-docs",
|
|
46
|
+
dom_id:"swagger-ui-container"
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
window.swaggerUi.load();
|
|
50
|
+
```
|
|
51
|
+
* *url* parameter should point to a resource listing url as per [Swagger Spec](https://github.com/wordnik/swagger-core/wiki)
|
|
52
|
+
* *dom_id parameter* is the the id of a dom element inside which SwaggerUi will put the user interface for swagger
|
|
53
|
+
* *booleanValues* SwaggerUI renders boolean data types as a dropdown. By default it provides a 'true' and 'false' string as the possible choices. You can use this parameter to change the values in dropdown to be something else, for example 0 and 1 by setting booleanValues to new Array(0, 1)
|
|
54
|
+
* *docExpansion* controls how the API listing is displayed. It can be set to 'none' (default), 'list' (shows operations for each resource), or 'full' (fully expanded: shows operations and their details)
|
|
55
|
+
* *onComplete* is a callback function parameter which can be passed to be notified of when SwaggerUI has completed rendering successfully.
|
|
56
|
+
* *onFailure* is a callback function parameter which can be passed to be notified of when SwaggerUI encountered a failure was unable to render.
|
|
57
|
+
* All other parameters are explained in greater detail below
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
### HTTP Methods and API Invocation
|
|
61
|
+
swagger-ui supports invocation of all HTTP methods APIs including GET, PUT, POST, DELETE, PATCH, OPTIONS. These are handled in the [swagger-js](https://github.com/wordnik/swagger-js) project, please see there for specifics on their usage.
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
### Header Parameters
|
|
65
|
+
Header params are supported through a pluggable mechanism in [swagger-js](https://github.com/wordnik/swagger-js). You can see the [index.html](https://github.com/wordnik/swagger-ui/blob/master/dist/index.html) for a sample of how to dynamically set headers:
|
|
66
|
+
|
|
67
|
+
```js
|
|
68
|
+
// add a new ApiKeyAuthorization when the api-key changes in the ui.
|
|
69
|
+
$('#input_apiKey').change(function() {
|
|
70
|
+
var key = $('#input_apiKey')[0].value;
|
|
71
|
+
if(key && key.trim() != "") {
|
|
72
|
+
window.authorizations.add("key", new ApiKeyAuthorization("api_key", key, "header"));
|
|
73
|
+
}
|
|
74
|
+
})
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
This will add header `api_key` with value `key` on every call to the server. You can substitute `query` to send the values as a query param.
|
|
78
|
+
|
|
79
|
+
### Custom Header Parameters - (For Basic auth etc)
|
|
80
|
+
If you have some header parameters which you need to send with every request, use the headers as below:
|
|
81
|
+
|
|
82
|
+
```js
|
|
83
|
+
window.authorizations.add("key", new ApiKeyAuthorization("Authorization", "XXXX", "header"));
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Note! You can pass multiple header params on a single request, just use unique names for them (`key` is used in the above example).
|
|
87
|
+
|
|
88
|
+
How to Improve It
|
|
89
|
+
-----------------
|
|
90
|
+
|
|
91
|
+
Create your own fork of [wordnik/swagger-ui](https://github.com/wordnik/swagger-ui)
|
|
92
|
+
|
|
93
|
+
To share your changes, [submit a pull request](https://github.com/wordnik/swagger-ui/pull/new/master).
|
|
94
|
+
|
|
95
|
+
Since the javascript files are compiled from coffeescript, please submit changes in the *.coffee files! We have to reject changes only in the .js files as they will be lost on each build of the ui.
|
|
96
|
+
|
|
97
|
+
License
|
|
98
|
+
-------
|
|
99
|
+
|
|
100
|
+
Copyright 2011-2013 Wordnik, Inc.
|
|
101
|
+
|
|
102
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
103
|
+
you may not use this file except in compliance with the License.
|
|
104
|
+
You may obtain a copy of the License at [apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0)
|
|
105
|
+
|
|
106
|
+
Unless required by applicable law or agreed to in writing, software
|
|
107
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
108
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
109
|
+
See the License for the specific language governing permissions and
|
|
110
|
+
limitations under the License.
|