swagger_ui_generator 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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.
|