rapi_doc 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm ruby-1.9.2-p180@rapidoc --create
data/Gemfile ADDED
@@ -0,0 +1,13 @@
1
+ source "http://rubygems.org"
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+
6
+ # Add dependencies to develop your gem here.
7
+ # Include everything needed to run rake, tests, features, etc.
8
+ group :development do
9
+ gem "shoulda", ">= 0"
10
+ gem "bundler", "~> 1.0.0"
11
+ gem "jeweler", "~> 1.6.4"
12
+ gem "rcov", ">= 0"
13
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,20 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ git (1.2.5)
5
+ jeweler (1.6.4)
6
+ bundler (~> 1.0)
7
+ git (>= 1.2.5)
8
+ rake
9
+ rake (0.9.2.2)
10
+ rcov (0.9.11)
11
+ shoulda (2.11.3)
12
+
13
+ PLATFORMS
14
+ ruby
15
+
16
+ DEPENDENCIES
17
+ bundler (~> 1.0.0)
18
+ jeweler (~> 1.6.4)
19
+ rcov
20
+ shoulda
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Husein Choroomi
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README ADDED
@@ -0,0 +1,44 @@
1
+ @WIP
2
+ Based on RAPI Doc by Jaap van der Meer found here: http://code.google.com/p/rapidoc/
3
+
4
+ Rails API Doc Generator
5
+ Original Author: JPM van der Meer
6
+ Modified By: Chelsea Robb
7
+ =======================
8
+ With API DOC one can generate code for a Restful Rails API.
9
+ It generates a set of HTML views in the public directory. Parses the desired controllers and generates appropriate views.
10
+ Currently does not read routes.rb and requires manual entry of routes
11
+
12
+ =INSTALL
13
+ gem install rapi_doc
14
+
15
+ ==Layout files
16
+ You can find documentation layouts in config/rapi_doc
17
+
18
+ index.html.erb is used for index page.
19
+ resource.html.erb is used for individual controllers.
20
+
21
+ ==Usage
22
+ Run 'rake rapi_doc' to generate config and layout files. (TODO: Add a separte rake task to generate config files)
23
+ Modify config file by adding your controllers, e.g.:
24
+
25
+ users:
26
+ location: "/users"
27
+ controller_name: "users_controller.rb"
28
+
29
+ Then invoke the generation by calling:
30
+ rake rapi_doc
31
+
32
+ ==Documentation Example
33
+
34
+ =begin apidoc
35
+ url:: /users
36
+ method:: GET
37
+ access:: FREE
38
+ return:: [JSON|XML] - list of user objects
39
+ param:: page:int - the page, default is 1
40
+ param:: per_page:int - max items per page, default is 10
41
+
42
+ Get a list of all users in the system with pagination. Defaults to 10 per page
43
+ =end
44
+
data/Rakefile ADDED
@@ -0,0 +1,53 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
+ gem.name = "rapi_doc"
18
+ gem.homepage = "http://github.com/hchoroomi/rapi_doc"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{Rails API Doc Generator}
21
+ gem.description = %Q{Rails API Doc Generator}
22
+ gem.email = "hchoroomi@gmail.com"
23
+ gem.authors = ["Husein Choroomi"]
24
+ # dependencies defined in Gemfile
25
+ end
26
+ Jeweler::RubygemsDotOrgTasks.new
27
+
28
+ require 'rake/testtask'
29
+ Rake::TestTask.new(:test) do |test|
30
+ test.libs << 'lib' << 'test'
31
+ test.pattern = 'test/**/test_*.rb'
32
+ test.verbose = true
33
+ end
34
+
35
+ require 'rcov/rcovtask'
36
+ Rcov::RcovTask.new do |test|
37
+ test.libs << 'test'
38
+ test.pattern = 'test/**/test_*.rb'
39
+ test.verbose = true
40
+ test.rcov_opts << '--exclude "gems/*"'
41
+ end
42
+
43
+ task :default => :test
44
+
45
+ require 'rake/rdoctask'
46
+ Rake::RDocTask.new do |rdoc|
47
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
48
+
49
+ rdoc.rdoc_dir = 'rdoc'
50
+ rdoc.title = "rapi_doc #{version}"
51
+ rdoc.rdoc_files.include('README*')
52
+ rdoc.rdoc_files.include('lib/**/*.rb')
53
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ require 'rapi_doc'
data/install.rb ADDED
@@ -0,0 +1 @@
1
+ # Install hook code here
data/lib/config.rb ADDED
@@ -0,0 +1,25 @@
1
+ module Config
2
+ def config_dir
3
+ File.join(::Rails.root.to_s, 'config/rapi_doc')
4
+ end
5
+
6
+ def template_dir
7
+ File.join(File.dirname(__FILE__), '/../templates')
8
+ end
9
+
10
+ def config_file(location)
11
+ File.join(find_location(location), 'config.yml')
12
+ end
13
+
14
+ def index_layout_file(location)
15
+ File.join(find_location(location), 'index.html.erb')
16
+ end
17
+
18
+ def resource_layout_file(location)
19
+ File.join(find_location(location), 'resource.html.erb')
20
+ end
21
+
22
+ def find_location(location)
23
+ location == :target ? config_dir : template_dir
24
+ end
25
+ end
data/lib/doc_util.rb ADDED
@@ -0,0 +1,6 @@
1
+ class DocUtil
2
+ # print some erb code to a template
3
+ def self.print_erb(str, show=false)
4
+ (show ? "<%= " : "<% ") + str + " %>"
5
+ end
6
+ end
data/lib/method_doc.rb ADDED
@@ -0,0 +1,32 @@
1
+ # This class holds methods about a doc.
2
+ class MethodDoc
3
+ attr_accessor :scope, :content, :request, :response, :code
4
+
5
+ def initialize(type)
6
+ @scope = type
7
+ @variables = []
8
+ @content = ""
9
+ @code = ""
10
+ @request = ""
11
+ @response = ""
12
+ end
13
+
14
+
15
+ def add_variable(name, value)
16
+ if name == "param"
17
+ @variables << value
18
+ return
19
+ end
20
+
21
+ eval("@#{name}= \"#{value}\"")
22
+
23
+ if name == "json"
24
+ puts "Found json:"
25
+ puts @json
26
+ end
27
+ end
28
+
29
+ def get_binding
30
+ binding
31
+ end
32
+ end
@@ -0,0 +1,9 @@
1
+ require 'rails'
2
+
3
+ module RapiDoc
4
+ class Railtie < Rails::Railtie
5
+ rake_tasks do
6
+ load 'rapi_doc/tasks/rapi_doc_tasks.rake'
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,24 @@
1
+ desc "Generate the API Documentation"
2
+ task :rapi_doc do
3
+ begin
4
+ yml = YAML::load(File.open(config_file(:target)))
5
+ rescue
6
+ FileUtils.mkdir(config_dir) if (!File.directory?(config_dir))
7
+ [config_file(:template), index_layout_file(:template), resource_layout_file(:template)].each do |_file|
8
+ FileUtils.cp _file, config_dir
9
+ puts "Generated config/rapi_doc/#{File.basename(_file)}" # TODO Add instructions for users to update the config file
10
+ end
11
+ end
12
+
13
+ # Generating documentations
14
+ if yml
15
+ resources = []
16
+ yml.keys.each do |key|
17
+ resources << ResourceDoc.new(key, yml[key]["location"], yml[key]["controller_name"])
18
+ end
19
+
20
+ # generate the apidoc
21
+ RAPIDoc.new(resources)
22
+ end
23
+ end
24
+
data/lib/rapi_doc.rb ADDED
@@ -0,0 +1,69 @@
1
+ require 'erb'
2
+ require 'fileutils'
3
+ require 'doc_util'
4
+ require 'resource_doc'
5
+ require 'config'
6
+ require 'rapi_doc/railtie' if defined?(Rails)
7
+
8
+ include Config # TODO FIXME
9
+
10
+ class RAPIDoc
11
+
12
+ # Initalize the ApiDocGenerator
13
+ def initialize(resources)
14
+ puts "Apidoc started..."
15
+ @resources = resources
16
+ generate_templates!
17
+ move_structure!
18
+ puts "Finished."
19
+ end
20
+
21
+ # Iterates over the resources creates views for them.
22
+ # Creates an index file
23
+ def generate_templates!
24
+
25
+ @resources.each do |r|
26
+ r.parse_apidoc!
27
+ r.generate_view!(@resources, temp_dir)
28
+ end
29
+ generate_index!
30
+ copy_styles!
31
+ end
32
+
33
+ # generate the index file for the api views
34
+ def generate_index!
35
+ template = ""
36
+ File.open(index_layout_file(:target)).each { |line| template << line }
37
+ parsed = ERB.new(template).result(binding)
38
+ File.open(File.join(temp_dir, "index.html"), 'w') { |file| file.write parsed }
39
+ end
40
+
41
+ def move_structure!
42
+ target_folder = "#{::Rails.root.to_s}/public/apidoc/"
43
+ Dir.mkdir(target_folder) if (!File.directory?(target_folder))
44
+
45
+ Dir.new(temp_dir).each do |d|
46
+ if d =~ /^[a-zA-Z]+\.(html|css)$/ # Only want to copy over the .html files, not the .erb templates
47
+ FileUtils.cp File.join(temp_dir + d), target_folder + d
48
+ end
49
+
50
+ #Clean up the no longer needed files
51
+ filepath = "#{temp_dir}/#{d}"
52
+ File.delete(filepath) unless File.directory?(filepath)
53
+ end
54
+ end
55
+
56
+ def copy_styles!
57
+ Dir[File.join(File.dirname(__FILE__), '..', 'templates/*')].each do |f|
58
+ if f =~ /[\/a-zA-Z\.]+\.css$/i
59
+ FileUtils.cp f, temp_dir
60
+ end
61
+ end
62
+ end
63
+
64
+ private
65
+
66
+ def temp_dir
67
+ @temp_dir ||= "#{Dir.mktmpdir("apidoc")}/"
68
+ end
69
+ end
@@ -0,0 +1,124 @@
1
+ require 'method_doc'
2
+
3
+ # ResourceDoc holds the information a resource contains. It parses the class header and also the
4
+ # method documentation, which will be contained in MethodDoc.
5
+ class ResourceDoc
6
+
7
+ attr_reader :name, :resource_location, :controller_name, :function_blocks, :class_block
8
+
9
+ # Initializes RAPIDoc.
10
+ def initialize(name, resource_location, controller_name, options = {})
11
+ @name = name
12
+ @standard_methods = options[:standard_methods] || [:put, :post, :get, :delete]
13
+ @resource_location, @controller_name = resource_location, controller_name
14
+ @function_blocks = []
15
+ @method_codes = []
16
+ @header_code = ""
17
+
18
+ unless File.exist?(controller_location)
19
+ raise "Unable to find or open controller. Make sure it's set properly in config/rapidoc/config.yml File: #{controller_location}"
20
+ end
21
+ end
22
+
23
+ # returns the location of the controller that is to be parsed
24
+ def controller_location
25
+ "#{::Rails.root.to_s}/app/controllers/#{controller_name}"
26
+ end
27
+
28
+ def get_binding
29
+ binding
30
+ end
31
+
32
+ # parse the controller
33
+ def parse_apidoc!
34
+ current_api_block = nil
35
+ current_scope = :none
36
+ block_holder = []
37
+ lineno = 0
38
+ inclass = false
39
+
40
+ File.open(controller_location).each do |line|
41
+ if line =~ /=begin apidoc/
42
+ current_scope = !inclass ? :class : :function
43
+ current_api_block = MethodDoc.new(current_scope)
44
+ elsif line =~ /=end/
45
+ if current_api_block.nil?
46
+ puts "#{controller_location}:#{lineno} - No starttag for =end found"
47
+ exit
48
+ elsif current_api_block.scope == :class
49
+ @class_block = current_api_block
50
+ elsif current_api_block.scope == :function
51
+ @function_blocks << current_api_block
52
+ end
53
+ current_api_block = nil
54
+ current_scope = :none
55
+ elsif line =~ /class/
56
+ inclass = true
57
+ elsif line =~ /::response-end::/
58
+ current_scope = :function
59
+ elsif line =~ /::request-end::/
60
+ current_scope = :function
61
+ elsif current_scope == :response
62
+ current_api_block.response += "#{line}"
63
+ elsif current_scope == :request
64
+ current_api_block.request += "#{line}"
65
+ elsif current_scope == :class || current_scope == :function # check if we are looking at a api block
66
+ # strip the # on the line
67
+ #line = line[1..line.length].lstrip.rstrip
68
+ # check if we are dealing with a variable
69
+ # something in the format: # varname:: sometext
70
+ if result = /(\w+)\:\:\s*(.+)/.match(line)
71
+ if result[1] == "response" || result[1] == "request"
72
+ puts "="*30
73
+ puts "found response"
74
+ puts "="*30; puts ""
75
+ puts line
76
+ current_scope = result[1].to_sym
77
+ else
78
+ current_api_block.add_variable(result[1], result[2])
79
+ end
80
+ else
81
+ # add line to block
82
+ current_api_block.content << line
83
+ end
84
+ end
85
+ lineno += 1
86
+ end
87
+
88
+ puts "Generated #{name}.html"
89
+ end
90
+
91
+ def generate_view!(resources, temp_dir)
92
+ @resources = resources
93
+ @header_code = get_parsed_header unless @class_block.nil?
94
+ function_blocks.each do |mb|
95
+ @method_codes << get_parsed_method(mb)
96
+ end
97
+ # write it to a file
98
+ template = ""
99
+ File.open(resource_layout_file(:target)).each { |line| template << line }
100
+ parsed = ERB.new(template).result(binding)
101
+ File.open(File.join(temp_dir, name + ".html"), 'w') { |file| file.write parsed }
102
+ end
103
+
104
+
105
+ def get_parsed_header
106
+ template = ""
107
+ File.open(File.join(File.dirname(__FILE__), '..', 'templates', '_resource_header.html.erb')).each { |line| template << line }
108
+
109
+ puts "-"*30
110
+ puts ">>> inside: get_parsed_header"
111
+ puts ERB.new(template).result(@class_block.get_binding)
112
+ puts "-"*30; puts ""
113
+
114
+ return ERB.new(template).result(@class_block.get_binding)
115
+ end
116
+
117
+
118
+ def get_parsed_method(method_block)
119
+ template = ""
120
+ File.open(File.join(File.dirname(__FILE__), '..', 'templates', '_resource_method.html.erb')).each { |line| template << line }
121
+ return ERB.new(template).result(method_block.get_binding)
122
+ end
123
+
124
+ end
@@ -0,0 +1,18 @@
1
+ <h1><%=@name %></h1>
2
+ <p class="summary"><%=@content %></p>
3
+
4
+ <% if @xml || @json %>
5
+ <h2>Representations</h2>
6
+
7
+ <% if @json %>
8
+ <a name="json"></a>
9
+ <strong>JSON representation:</strong> <br /><a href="javascript:$('#jsonrep').toggle()">(toggle code)</a><br />
10
+ <textarea style="width:100%;height:200px;display:none;" id="jsonrep"><%=@json %></textarea><br />
11
+ <% end %>
12
+
13
+ <% if @xml %>
14
+ <a name="xml"></a>
15
+ <strong>XML representation:</strong> <br /><a href="javascript:$('#xmlrep').toggle()">(toggle code)</a><br/>
16
+ <textarea style="width:100%;height:200px;display:none;" id="xmlrep"><%=@xml %></textarea>
17
+ <% end %>
18
+ <% end %>
@@ -0,0 +1,39 @@
1
+ <div id="method">
2
+
3
+ <%
4
+ splitted = @method
5
+ str = @method
6
+ str = "<span id='http_verb'>#{str}</span>"
7
+ %>
8
+ <p class='description'><strong>Description:</strong> <%=@content %></p>
9
+
10
+ <h2><%=str %><%=@url %></h2>
11
+
12
+ <% if @access %>
13
+ <strong>Access:</strong> <%=@access %><br />
14
+ <% end %>
15
+
16
+ <% if @return %>
17
+ <strong>Return:</strong>
18
+ <%=@return %>
19
+ <br />
20
+ <% end %>
21
+
22
+ <% if @variables %>
23
+ <strong>Parameters:</strong>
24
+ <ul>
25
+ <% @variables.each do |v| %><li><%=v %></li><% end %>
26
+ </ul>
27
+ <% end %>
28
+
29
+ <% unless @request.blank? %>
30
+ <strong>Request:</strong>
31
+ <pre class="code"><code><%= @request %></code></pre>
32
+ <% end %>
33
+
34
+ <% unless @response.blank? %>
35
+ <strong>Response:</strong>
36
+ <pre class="code"><code><%= @response %></code></pre>
37
+ <% end %>
38
+
39
+ </div>
@@ -0,0 +1,3 @@
1
+ #users:
2
+ # location: "/users"
3
+ # controller_name: "users_controller.rb"
@@ -0,0 +1,67 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
+ <title><%= @name || 'Home' %></title>
6
+
7
+ <style>
8
+ body {
9
+ line-height: 1.5em;
10
+ color:#484848;
11
+ }
12
+
13
+ ul, ol {
14
+ margin-bottom: 0.8em;
15
+ }
16
+
17
+ li {
18
+ padding-left: 10px;
19
+ margin-right: 10px;
20
+ }
21
+
22
+ #resources {
23
+
24
+ }
25
+
26
+ h1, h2, h3 {
27
+ padding-top: 8px;
28
+ padding-bottom: 2px;
29
+ }
30
+
31
+ #method {
32
+ padding: 15px 30px;
33
+ border-top:1px solid #ddd;
34
+ }
35
+
36
+ #http_verb {
37
+ color:#ff6600;
38
+ width:200px;
39
+ margin-right:20px;'
40
+ }
41
+
42
+ .description{
43
+ font-size: 1.4em;
44
+ color:#262626;
45
+ }
46
+ </style>
47
+
48
+ </head>
49
+ <body>
50
+ <div class="content">
51
+
52
+ <div id="introduction">
53
+ <!-- documentation intro -->
54
+ </div>
55
+
56
+ <h2>Resources</h2>
57
+ <div id="resources">
58
+ <ul>
59
+ <% @resources.each do |r| %>
60
+ <li>Resource: <a href="/apidoc/<%=r.name %>.html"><%=r.resource_location %></a></li>
61
+ <% end %>
62
+ </ul>
63
+ </div>
64
+
65
+ </div>
66
+ </body>
67
+ </html>
@@ -0,0 +1,67 @@
1
+ <!-- TODO Use same layout for index and resources -->
2
+ <!DOCTYPE html>
3
+ <html>
4
+ <head>
5
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6
+ <title><%= @name || 'Home' %></title>
7
+
8
+ <style>
9
+ body {
10
+ line-height: 1.5em;
11
+ color:#484848;
12
+ }
13
+
14
+ ul, ol {
15
+ margin-bottom: 0.8em;
16
+ }
17
+
18
+ li {
19
+ padding-left: 10px;
20
+ margin-right: 10px;
21
+ }
22
+
23
+ #resources {
24
+
25
+ }
26
+
27
+ h1, h2, h3 {
28
+ padding-top: 8px;
29
+ padding-bottom: 2px;
30
+ }
31
+
32
+ #method {
33
+ padding: 15px 30px;
34
+ border-top:1px solid #ddd;
35
+ }
36
+
37
+ #http_verb {
38
+ color:#ff6600;
39
+ width:200px;
40
+ margin-right:20px;'
41
+ }
42
+
43
+ .description{
44
+ font-size: 1.4em;
45
+ color:#262626;
46
+ }
47
+ </style>
48
+
49
+ </head>
50
+ <body>
51
+ <div class="content">
52
+ <div id="navigation">
53
+ <ul class="main">
54
+ <li><a href="/apidoc/index.html">&laquo; Back to index</a></li>
55
+ </ul>
56
+ </div>
57
+
58
+ <hr />
59
+
60
+ <%=@header_code %>
61
+
62
+ <% @method_codes.each do |mc| %>
63
+ <%=mc %>
64
+ <% end %>
65
+ </div>
66
+ </body>
67
+ </html>
@@ -0,0 +1,8 @@
1
+ require 'test_helper'
2
+
3
+ class RapiDocTest < ActiveSupport::TestCase
4
+ # Replace this with your real tests.
5
+ test "the truth" do
6
+ assert true
7
+ end
8
+ end
@@ -0,0 +1,3 @@
1
+ require 'rubygems'
2
+ require 'active_support'
3
+ require 'active_support/test_case'
data/uninstall.rb ADDED
@@ -0,0 +1 @@
1
+ # Uninstall hook code here
metadata ADDED
@@ -0,0 +1,124 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rapi_doc
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.1.0
6
+ platform: ruby
7
+ authors:
8
+ - Husein Choroomi
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-10-31 00:00:00 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: shoulda
17
+ requirement: &id001 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: "0"
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: *id001
26
+ - !ruby/object:Gem::Dependency
27
+ name: bundler
28
+ requirement: &id002 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 1.0.0
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: *id002
37
+ - !ruby/object:Gem::Dependency
38
+ name: jeweler
39
+ requirement: &id003 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ~>
43
+ - !ruby/object:Gem::Version
44
+ version: 1.6.4
45
+ type: :development
46
+ prerelease: false
47
+ version_requirements: *id003
48
+ - !ruby/object:Gem::Dependency
49
+ name: rcov
50
+ requirement: &id004 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: "0"
56
+ type: :development
57
+ prerelease: false
58
+ version_requirements: *id004
59
+ description: Rails API Doc Generator
60
+ email: hchoroomi@gmail.com
61
+ executables: []
62
+
63
+ extensions: []
64
+
65
+ extra_rdoc_files:
66
+ - LICENSE.txt
67
+ - README
68
+ files:
69
+ - .rvmrc
70
+ - Gemfile
71
+ - Gemfile.lock
72
+ - LICENSE.txt
73
+ - README
74
+ - Rakefile
75
+ - VERSION
76
+ - init.rb
77
+ - install.rb
78
+ - lib/config.rb
79
+ - lib/doc_util.rb
80
+ - lib/method_doc.rb
81
+ - lib/rapi_doc.rb
82
+ - lib/rapi_doc/railtie.rb
83
+ - lib/rapi_doc/tasks/rapi_doc_tasks.rake
84
+ - lib/resource_doc.rb
85
+ - templates/_resource_header.html.erb
86
+ - templates/_resource_method.html.erb
87
+ - templates/config.yml
88
+ - templates/index.html.erb
89
+ - templates/resource.html.erb
90
+ - test/rapi_doc_test.rb
91
+ - test/test_helper.rb
92
+ - uninstall.rb
93
+ homepage: http://github.com/hchoroomi/rapi_doc
94
+ licenses:
95
+ - MIT
96
+ post_install_message:
97
+ rdoc_options: []
98
+
99
+ require_paths:
100
+ - lib
101
+ required_ruby_version: !ruby/object:Gem::Requirement
102
+ none: false
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ hash: 2005719792368905649
107
+ segments:
108
+ - 0
109
+ version: "0"
110
+ required_rubygems_version: !ruby/object:Gem::Requirement
111
+ none: false
112
+ requirements:
113
+ - - ">="
114
+ - !ruby/object:Gem::Version
115
+ version: "0"
116
+ requirements: []
117
+
118
+ rubyforge_project:
119
+ rubygems_version: 1.8.6
120
+ signing_key:
121
+ specification_version: 3
122
+ summary: Rails API Doc Generator
123
+ test_files: []
124
+