mount_doc 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.
Files changed (105) hide show
  1. data/.gitignore +18 -0
  2. data/Gemfile +16 -0
  3. data/Guardfile +33 -0
  4. data/LICENSE +22 -0
  5. data/README.md +49 -0
  6. data/Rakefile +2 -0
  7. data/app/assets/stylesheets/mount_doc.css.scss +148 -0
  8. data/app/controllers/mount_doc/application_controller.rb +6 -0
  9. data/app/controllers/mount_doc/mount_doc_controller.rb +77 -0
  10. data/app/helpers/mount_doc/mount_doc_helper.rb +104 -0
  11. data/app/views/layouts/mount_doc.slim +55 -0
  12. data/app/views/mount_doc/mount_doc/action_doc.slim +57 -0
  13. data/app/views/mount_doc/mount_doc/controller_doc.slim +14 -0
  14. data/app/views/mount_doc/mount_doc/index.slim +1 -0
  15. data/app/views/mount_doc/mount_doc/not_found.slim +3 -0
  16. data/config/routes.rb +7 -0
  17. data/lib/mount_doc.rb +11 -0
  18. data/lib/mount_doc/config.rb +74 -0
  19. data/lib/mount_doc/document.rb +38 -0
  20. data/lib/mount_doc/rails.rb +6 -0
  21. data/lib/mount_doc/rails/engine.rb +10 -0
  22. data/lib/mount_doc/rails/generators.rb +5 -0
  23. data/lib/mount_doc/rails/generators/initialize_generator.rb +5 -0
  24. data/lib/mount_doc/rails/route_set.rb +19 -0
  25. data/lib/mount_doc/string_patch.rb +1 -0
  26. data/lib/mount_doc/version.rb +3 -0
  27. data/mount_doc.gemspec +23 -0
  28. data/spec/lib/mount_doc/config_spec.rb +73 -0
  29. data/spec/lib/mount_doc/document_spec.rb +17 -0
  30. data/spec/lib/mount_doc/rails/engine_spec.rb +7 -0
  31. data/spec/lib/mount_doc/rails/route_set_spec.rb +16 -0
  32. data/spec/lib/mount_doc/rails_spec.rb +16 -0
  33. data/spec/mock/rails_3.2.3/.gitignore +15 -0
  34. data/spec/mock/rails_3.2.3/Gemfile +40 -0
  35. data/spec/mock/rails_3.2.3/README.rdoc +261 -0
  36. data/spec/mock/rails_3.2.3/Rakefile +7 -0
  37. data/spec/mock/rails_3.2.3/app/assets/images/rails.png +0 -0
  38. data/spec/mock/rails_3.2.3/app/assets/javascripts/api/documents.js.coffee +3 -0
  39. data/spec/mock/rails_3.2.3/app/assets/javascripts/application.js +15 -0
  40. data/spec/mock/rails_3.2.3/app/assets/javascripts/users.js.coffee +3 -0
  41. data/spec/mock/rails_3.2.3/app/assets/stylesheets/api/documents.css.scss +3 -0
  42. data/spec/mock/rails_3.2.3/app/assets/stylesheets/application.css +13 -0
  43. data/spec/mock/rails_3.2.3/app/assets/stylesheets/scaffolds.css.scss +56 -0
  44. data/spec/mock/rails_3.2.3/app/assets/stylesheets/users.css.scss +3 -0
  45. data/spec/mock/rails_3.2.3/app/controllers/api/documents_controller.rb +121 -0
  46. data/spec/mock/rails_3.2.3/app/controllers/application_controller.rb +3 -0
  47. data/spec/mock/rails_3.2.3/app/controllers/users_controller.rb +83 -0
  48. data/spec/mock/rails_3.2.3/app/helpers/api/documents_helper.rb +2 -0
  49. data/spec/mock/rails_3.2.3/app/helpers/application_helper.rb +2 -0
  50. data/spec/mock/rails_3.2.3/app/helpers/users_helper.rb +2 -0
  51. data/spec/mock/rails_3.2.3/app/mailers/.gitkeep +0 -0
  52. data/spec/mock/rails_3.2.3/app/models/.gitkeep +0 -0
  53. data/spec/mock/rails_3.2.3/app/models/api.rb +5 -0
  54. data/spec/mock/rails_3.2.3/app/models/api/document.rb +3 -0
  55. data/spec/mock/rails_3.2.3/app/models/user.rb +3 -0
  56. data/spec/mock/rails_3.2.3/app/views/api/documents/_form.html.erb +17 -0
  57. data/spec/mock/rails_3.2.3/app/views/api/documents/edit.html.erb +6 -0
  58. data/spec/mock/rails_3.2.3/app/views/api/documents/index.html.erb +21 -0
  59. data/spec/mock/rails_3.2.3/app/views/api/documents/new.html.erb +5 -0
  60. data/spec/mock/rails_3.2.3/app/views/api/documents/show.html.erb +5 -0
  61. data/spec/mock/rails_3.2.3/app/views/layouts/application.html.erb +14 -0
  62. data/spec/mock/rails_3.2.3/app/views/users/_form.html.erb +17 -0
  63. data/spec/mock/rails_3.2.3/app/views/users/edit.html.erb +6 -0
  64. data/spec/mock/rails_3.2.3/app/views/users/index.html.erb +21 -0
  65. data/spec/mock/rails_3.2.3/app/views/users/new.html.erb +5 -0
  66. data/spec/mock/rails_3.2.3/app/views/users/show.html.erb +5 -0
  67. data/spec/mock/rails_3.2.3/config.ru +4 -0
  68. data/spec/mock/rails_3.2.3/config/application.rb +65 -0
  69. data/spec/mock/rails_3.2.3/config/boot.rb +6 -0
  70. data/spec/mock/rails_3.2.3/config/database.yml +25 -0
  71. data/spec/mock/rails_3.2.3/config/environment.rb +5 -0
  72. data/spec/mock/rails_3.2.3/config/environments/development.rb +38 -0
  73. data/spec/mock/rails_3.2.3/config/environments/production.rb +67 -0
  74. data/spec/mock/rails_3.2.3/config/environments/test.rb +37 -0
  75. data/spec/mock/rails_3.2.3/config/initializers/backtrace_silencers.rb +7 -0
  76. data/spec/mock/rails_3.2.3/config/initializers/inflections.rb +15 -0
  77. data/spec/mock/rails_3.2.3/config/initializers/mime_types.rb +5 -0
  78. data/spec/mock/rails_3.2.3/config/initializers/secret_token.rb +7 -0
  79. data/spec/mock/rails_3.2.3/config/initializers/session_store.rb +8 -0
  80. data/spec/mock/rails_3.2.3/config/initializers/wrap_parameters.rb +14 -0
  81. data/spec/mock/rails_3.2.3/config/locales/en.yml +5 -0
  82. data/spec/mock/rails_3.2.3/config/routes.rb +63 -0
  83. data/spec/mock/rails_3.2.3/db/migrate/20120423193431_create_users.rb +8 -0
  84. data/spec/mock/rails_3.2.3/db/migrate/20120426181820_create_api_documents.rb +8 -0
  85. data/spec/mock/rails_3.2.3/db/schema.rb +21 -0
  86. data/spec/mock/rails_3.2.3/db/seeds.rb +7 -0
  87. data/spec/mock/rails_3.2.3/doc/README_FOR_APP +2 -0
  88. data/spec/mock/rails_3.2.3/doc//343/201/206/343/202/223/343/201/223/343/201/227/343/201/237/343/201/204.rdoc +3 -0
  89. data/spec/mock/rails_3.2.3/lib/assets/.gitkeep +0 -0
  90. data/spec/mock/rails_3.2.3/lib/tasks/.gitkeep +0 -0
  91. data/spec/mock/rails_3.2.3/log/.gitkeep +0 -0
  92. data/spec/mock/rails_3.2.3/public/404.html +26 -0
  93. data/spec/mock/rails_3.2.3/public/422.html +26 -0
  94. data/spec/mock/rails_3.2.3/public/500.html +25 -0
  95. data/spec/mock/rails_3.2.3/public/favicon.ico +0 -0
  96. data/spec/mock/rails_3.2.3/public/index.html +241 -0
  97. data/spec/mock/rails_3.2.3/public/robots.txt +5 -0
  98. data/spec/mock/rails_3.2.3/script/rails +6 -0
  99. data/spec/mock/rails_3.2.3/vendor/assets/javascripts/.gitkeep +0 -0
  100. data/spec/mock/rails_3.2.3/vendor/assets/stylesheets/.gitkeep +0 -0
  101. data/spec/mock/rails_3.2.3/vendor/plugins/.gitkeep +0 -0
  102. data/spec/requests/mount_doc_request_spec.rb +34 -0
  103. data/spec/requests/users_request_spec.rb +10 -0
  104. data/spec/spec_helper.rb +34 -0
  105. metadata +313 -0
@@ -0,0 +1,55 @@
1
+ doctype 5
2
+ html
3
+ head
4
+ meta charset="UTF-8"
5
+ title
6
+ = @page_title
7
+ | - † MountDoc †
8
+ = stylesheet_link_tag :mount_doc
9
+ body
10
+
11
+ article#main
12
+ = yield.force_encoding('utf-8')
13
+
14
+ aside#side-index
15
+
16
+ - if mount_doc_config.visible_components.include?(:files)
17
+ div#files-index
18
+ h6 Files
19
+
20
+ ul
21
+ - for file in files
22
+ li
23
+ a(href="#{url_for(:controller => 'mount_doc', :action => 'file_doc', :id => file)}")
24
+ = file
25
+
26
+ - if mount_doc_config.visible_components.include?(:urls)
27
+ div#urls-index
28
+ h6 URLs
29
+
30
+ ul
31
+ - for route in routes
32
+ li
33
+ a(href="#{url_for(:controller => 'mount_doc', :action => 'action_doc', :ctrl_id => route[:controller].gsub('/', '::'), :id => route[:action])}")
34
+ span.method= route[:method]
35
+ = route[:path]
36
+
37
+ - if mount_doc_config.visible_components.include?(:controllers)
38
+ div#controllers-index
39
+ h6 Controllers
40
+
41
+ ul
42
+ - for controller in controllers
43
+ li
44
+ a(href="#{url_for(:controller => 'mount_doc', :action => 'controller_doc', :id => controller.gsub('/', '::'))}")
45
+ = controller.camelize
46
+
47
+ - if mount_doc_config.visible_components.include?(:models)
48
+ div#models-index
49
+ h6 Models
50
+
51
+ ul
52
+ - for model in models
53
+ li
54
+ a(href="#{url_for(:model => 'mount_doc', :action => 'model_doc', :id => model.gsub('/', '::'))}")
55
+ = model.camelize
@@ -0,0 +1,57 @@
1
+
2
+ - if @document.tags('deprecated').size > 0
3
+ p.deprecated DEPRECATED: #{@document.tags('deprecated').first.text}
4
+
5
+ h1
6
+ = @controller_name.gsub('::', '/').camelize + '#' +@action_name
7
+ - if @document.tags('version').size > 0
8
+ | (v#{@document.tags('version').first.text})
9
+
10
+ ul.urls
11
+ - for route in routes_for(@controller_name.gsub('::', '/'), @action_name)
12
+ li
13
+ span.method= route[:method]
14
+ = route[:path]
15
+
16
+ == markup @document.docstring.to_s
17
+
18
+ - if @document.tags('param').size > 0
19
+ h2 Params
20
+
21
+ ul.params
22
+ - for param in @document.tags('param')
23
+ li
24
+ | ( #{param.types.map(&:downcase).join(', ')} ) <code><b>#{param.name}</b></code> &mdash; <small>#{param.text}</small>
25
+ - if (options = @document.tags('option').select{|opt| opt.name == param.name }).size > 0
26
+ ul
27
+ - for option in options
28
+ li ( #{option.pair.types.map(&:downcase).join(', ')} ) <code><b>#{option.pair.name}</b></code> &mdash; <small>#{option.pair.text}</small>
29
+
30
+ - if @document.tags('example').size > 0
31
+ h2 Example
32
+
33
+ - for example in @document.tags('example')
34
+ h3= example.name
35
+ pre
36
+ code= example.text
37
+
38
+ - if @document.tags('response').size > 0
39
+ h2 Response
40
+
41
+ - for response in @document.tags('response')
42
+ pre
43
+ span.type= response.name.to_s.upcase
44
+ code== syntaxhighlight response.name, response.text
45
+
46
+ - if @document.tags('todo').size > 0
47
+ h2 ToDo
48
+
49
+ - for todo in @document.tags('todo')
50
+ == markup todo.text
51
+
52
+ h2 Code
53
+
54
+ p
55
+ code= @document.file.sub(Rails.root.to_s, '')
56
+ pre
57
+ code== syntaxhighlight :ruby, @document.source
@@ -0,0 +1,14 @@
1
+ h1= @controller_name.gsub('::', '/').camelize
2
+
3
+ == markup @document.docstring.to_s
4
+
5
+ - for action in actions(@document)
6
+ h2
7
+ a href="#{url_for(controller: 'mount_doc', action: 'action_doc', ctrl_id: @controller_name, id: action[:method].name)}"
8
+ = action[:method].name
9
+ ul.urls
10
+ - for route in action[:routes]
11
+ li
12
+ span.method= route[:method]
13
+ = route[:path]
14
+ == markup action[:method].docstring.summary.sub(/\.\Z/, '')
@@ -0,0 +1 @@
1
+ p paragraph
@@ -0,0 +1,3 @@
1
+ h1 Not Found
2
+
3
+ p ご指定のファイルは見つかりません
@@ -0,0 +1,7 @@
1
+ MountDoc::Engine.routes.draw do
2
+ match 'controllers/:id' => 'mount_doc#controller_doc'
3
+ match 'controllers/:ctrl_id/actions/:id' => 'mount_doc#action_doc'
4
+ match 'models/:id' => 'mount_doc#model_doc'
5
+ match 'files/*id' => 'mount_doc#file_doc'
6
+ match '/' => 'mount_doc#index', :as => 'mount_doc_root'
7
+ end
@@ -0,0 +1,11 @@
1
+ require 'rails'
2
+
3
+ module MountDoc
4
+ autoload :VERSION, "mount_doc/version"
5
+ autoload :Config, "mount_doc/config"
6
+ autoload :Document, "mount_doc/document"
7
+ end
8
+
9
+ require 'mount_doc/string_patch'
10
+ require 'mount_doc/rails'
11
+ require 'mount_doc/rails/generators'
@@ -0,0 +1,74 @@
1
+ require 'mount_doc'
2
+
3
+ module MountDoc::Config
4
+ mattr_reader :auto_mount
5
+ def auto_mount=(bool)
6
+ @@auto_mount = !!bool
7
+ end
8
+ module_function :auto_mount=
9
+ def auto_mount?; @@auto_mount; end
10
+ module_function :auto_mount?
11
+ mattr_reader :auto_mount_path
12
+ def auto_mount_path=(path)
13
+ @@auto_mount_path = path.to_s
14
+ end
15
+ module_function :auto_mount_path=
16
+
17
+ mattr_reader :visible_private_methods
18
+ def visible_private_methods=(visible)
19
+ @@visible_private_methods = !!visible
20
+ end
21
+ module_function :visible_private_methods=
22
+ def visible_private_methods?; @@visible_private_methods; end
23
+ module_function :visible_private_methods?
24
+
25
+ mattr_reader :visible_protected_methods
26
+ def visible_protected_methods=(visible)
27
+ @@visible_protected_methods = !!visible
28
+ end
29
+ module_function :visible_protected_methods=
30
+ def visible_protected_methods?; @@visible_protected_methods; end
31
+ module_function :visible_protected_methods?
32
+
33
+ Components = [
34
+ :files,
35
+ :urls,
36
+ :controllers
37
+ ]
38
+ mattr_reader :visible_components
39
+ def visible_components=(components)
40
+ components.select!{|component| Components.include?(component) }
41
+ @@visible_components = components
42
+ end
43
+ module_function :visible_components=
44
+
45
+ mattr_reader :doc_file_path
46
+ def doc_file_path=(path)
47
+ @@doc_file_path = path.to_s
48
+ end
49
+ module_function :doc_file_path=
50
+
51
+ mattr_reader :markup
52
+ def markup=(path)
53
+ @@markup = path.to_s
54
+ end
55
+ module_function :markup=
56
+
57
+ DefaultSettings = {
58
+ auto_mount: false,
59
+ auto_mount_path: '/doc',
60
+ visible_private_methods: false,
61
+ visible_protected_methods: false,
62
+ visible_components: Components,
63
+ doc_file_path: 'doc',
64
+ markup: :rdoc
65
+ }
66
+ def defaults!
67
+ DefaultSettings.each_pair do | name, val |
68
+ self.send("#{name}=", val)
69
+ end
70
+ end
71
+ module_function :defaults!
72
+
73
+ self.defaults!
74
+ end
@@ -0,0 +1,38 @@
1
+ require 'mount_doc'
2
+ require 'yard'
3
+
4
+ YARD::Tags::Library.define_tag "Response", :response, :with_title_and_text
5
+
6
+ class MountDoc::Document
7
+ attr_reader :type, :name, :doc_object
8
+
9
+ def initialize(type, name)
10
+ @type = type
11
+ @name = name
12
+
13
+ load_file
14
+ end
15
+
16
+ def load_file(type = @type, name = @name)
17
+ case type
18
+ when :controller
19
+ load_controller(name)
20
+ when :model
21
+ load_model(name)
22
+ end
23
+ end
24
+
25
+ def load_controller(name)
26
+ controller_name = name.gsub('::', '/').camelize + 'Controller'
27
+ file_path = File.join(::Rails.root, 'app/controllers', "#{controller_name.underscore}.rb")
28
+ YARD.parse(file_path)
29
+ @doc_object = P(controller_name)
30
+ end
31
+
32
+ def load_model(name)
33
+ model_name = name.gsub('::', '/').camelize
34
+ file_path = File.join(::Rails.root, 'app/models', "#{model_name.underscore}.rb")
35
+ YARD.parse(file_path)
36
+ @doc_object = P(model_name)
37
+ end
38
+ end
@@ -0,0 +1,6 @@
1
+ require 'mount_doc'
2
+
3
+ module MountDoc::Rails
4
+ end
5
+ require 'mount_doc/rails/route_set'
6
+ require 'mount_doc/rails/engine'
@@ -0,0 +1,10 @@
1
+ require 'mount_doc'
2
+
3
+ class MountDoc::Engine < ::Rails::Engine
4
+ isolate_namespace MountDoc
5
+
6
+ config.mount_doc = MountDoc::Config
7
+
8
+ initializer "config.mount" do
9
+ end
10
+ end
@@ -0,0 +1,5 @@
1
+ require 'mount_doc'
2
+
3
+ module MountDoc::Generators
4
+ end
5
+ require 'mount_doc/rails/generators/initialize_generator'
@@ -0,0 +1,5 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'mount_doc/rails/generators'
3
+
4
+ class MountDoc::Generators::InitializeGenerator < Rails::Generators::Base
5
+ end if Rails.const_defined?(:Generators)
@@ -0,0 +1,19 @@
1
+ require 'mount_doc'
2
+ require 'action_dispatch/routing/route_set'
3
+
4
+ class ActionDispatch::Routing::RouteSet
5
+ def finalize_with_mount_doc!
6
+ result = finalize_without_mount_doc!
7
+
8
+ begin
9
+ self.eval_block(lambda{
10
+ mount MountDoc::Engine => MountDoc::Config.auto_mount_path
11
+ }) if MountDoc::Config.auto_mount? && self.named_routes.get(:mount_doc_rails_engine).nil?
12
+
13
+ true
14
+ end
15
+
16
+ result
17
+ end
18
+ alias_method_chain :finalize!, :mount_doc
19
+ end
@@ -0,0 +1 @@
1
+ require 'mount_doc'
@@ -0,0 +1,3 @@
1
+ module MountDoc
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/mount_doc/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Sho Kusano"]
6
+ gem.email = ["rosylilly@aduca.org"]
7
+ gem.description = %q{Supporting Build APIs on Rails}
8
+ gem.summary = %q{Railsで書かれたアクションにコメントを書くと、動的にドキュメントを生成し、その結果をRailsアプリにマウントする}
9
+ gem.homepage = "https://github.com/rosylilly/mount_doc"
10
+
11
+ gem.files = `git ls-files`.split($\)
12
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
+ gem.name = "mount_doc"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = MountDoc::VERSION
17
+
18
+ gem.add_dependency('rails', '~> 3.2')
19
+ gem.add_dependency('github-markup', '~> 0.7')
20
+ gem.add_dependency('slim', '~> 1.2')
21
+ gem.add_dependency('yard', '~> 0.8')
22
+ gem.add_dependency('coderay', '~> 1.0')
23
+ end
@@ -0,0 +1,73 @@
1
+ require 'spec_helper'
2
+
3
+ describe MountDoc::Config do
4
+ describe :auto_mount do
5
+ subject{ MountDoc::Config.auto_mount? }
6
+ it("default: false"){ should be_false }
7
+
8
+ it("writable boolean"){
9
+ MountDoc::Config.auto_mount = 1
10
+ should be_true
11
+ }
12
+ end
13
+
14
+ describe :auto_mount_path do
15
+ subject { MountDoc::Config.auto_mount_path }
16
+
17
+ it("default: /doc"){ should == '/doc' }
18
+
19
+ it('writable string'){
20
+ MountDoc::Config.auto_mount_path = 1
21
+ should == '1'
22
+ }
23
+ end
24
+
25
+ describe :visible_private_methods do
26
+ subject{ MountDoc::Config.visible_private_methods? }
27
+
28
+ it("default: false"){ should be_false }
29
+
30
+ it("writable boolean"){
31
+ MountDoc::Config.visible_private_methods = 1
32
+ should be_true
33
+ }
34
+ end
35
+
36
+ describe :visible_protected_methods do
37
+ subject{ MountDoc::Config.visible_protected_methods? }
38
+
39
+ it("default: false"){ should be_false }
40
+
41
+ it("writable boolean"){
42
+ MountDoc::Config.visible_protected_methods = 1
43
+ should be_true
44
+ }
45
+ end
46
+
47
+ describe :visible_components do
48
+ subject{ MountDoc::Config.visible_components }
49
+
50
+ it("default: MountDoc::Config::Components"){ should == MountDoc::Config::Components }
51
+
52
+ it("writable MountDoc::Config::Components"){
53
+ MountDoc::Config.visible_components = [:urls, :invalid, :controllers]
54
+ should == [:urls, :controllers]
55
+ }
56
+ end
57
+
58
+ describe :doc_file_path do
59
+ subject{ MountDoc::Config.doc_file_path }
60
+
61
+ it("default: 'doc'"){ should == 'doc' }
62
+ end
63
+
64
+ describe :defaults! do
65
+ subject{ MountDoc::Config }
66
+
67
+ it("set default"){
68
+ subject.visible_protected_methods = true
69
+ subject.defaults!
70
+ subject.visible_protected_methods.should be_false
71
+ }
72
+ end
73
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe MountDoc::Document do
4
+ describe "initialize from file" do
5
+ it "controller" do
6
+ doc = MountDoc::Document.new(:controller, "api::documents")
7
+
8
+ doc.doc_object.name.should == :DocumentsController
9
+ end
10
+
11
+ it "model" do
12
+ doc = MountDoc::Document.new(:model, "api::document")
13
+
14
+ doc.doc_object.name.should == :Document
15
+ end
16
+ end
17
+ end