grape_documenter 0.0.3 → 0.1.0

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.
data/Guardfile ADDED
@@ -0,0 +1,24 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ guard 'rspec', :version => 2 do
5
+ watch(%r{^spec/.+_spec\.rb$})
6
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
7
+ watch('spec/spec_helper.rb') { "spec" }
8
+
9
+ # Rails example
10
+ watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
11
+ watch(%r{^app/(.*)(\.erb|\.haml)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
12
+ watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
13
+ watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
14
+ watch('config/routes.rb') { "spec/routing" }
15
+ watch('app/controllers/application_controller.rb') { "spec/controllers" }
16
+
17
+ # Capybara request specs
18
+ watch(%r{^app/views/(.+)/.*\.(erb|haml)$}) { |m| "spec/requests/#{m[1]}_spec.rb" }
19
+
20
+ # Turnip features and steps
21
+ watch(%r{^spec/acceptance/(.+)\.feature$})
22
+ watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
23
+ end
24
+
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # GrapeDoc
1
+ # GrapeDocumenter
2
2
 
3
3
  This adds a task to Rails Applications to generate documentation for Grape APIs.
4
4
 
@@ -6,7 +6,7 @@ This adds a task to Rails Applications to generate documentation for Grape APIs.
6
6
 
7
7
  Add this line to your application's Gemfile:
8
8
 
9
- gem 'grape_doc'
9
+ gem 'grape_documenter'
10
10
 
11
11
  And then execute:
12
12
 
@@ -14,13 +14,13 @@ And then execute:
14
14
 
15
15
  Or install it yourself as:
16
16
 
17
- $ gem install grape_doc
17
+ $ gem install grape_documenter
18
18
 
19
19
  ## Usage
20
20
 
21
21
  Within the root of you Rails Application run the following rake task...
22
22
 
23
- $ bundle exec grape_doc 'MyApplication::API' '/path/to/where/you/want/your/docs'
23
+ $ bundle exec grape_documenter 'MyApplication::API' '/path/to/where/you/want/your/docs'
24
24
 
25
25
  The first argument is the a string of the class of Grape::API. If you have multiple APIs within the same application you can run the task as many times as you like with different output paths.
26
26
 
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'grape_doc'
3
+ require 'grape_documenter'
4
4
 
5
5
  begin
6
6
  require File.expand_path(Dir.pwd + "/config/environment")
@@ -8,5 +8,5 @@ rescue LoadError => ex
8
8
  puts "#{ex}"
9
9
  end
10
10
 
11
- generator = GrapeDoc::Generator.new(ARGV[0], ARGV[1], :format => ARGV[2])
11
+ generator = GrapeDocumenter::Generator.new(ARGV[0], ARGV[1], :format => ARGV[2])
12
12
  generator.output
@@ -1,5 +1,5 @@
1
1
  # -*- encoding: utf-8 -*-
2
- require File.expand_path('../lib/grape_doc/version', __FILE__)
2
+ require File.expand_path('../lib/grape_documenter/version', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |gem|
5
5
  gem.authors = ["Phil Lee", "Steven Anderson"]
@@ -13,11 +13,13 @@ Gem::Specification.new do |gem|
13
13
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
14
  gem.name = "grape_documenter"
15
15
  gem.require_paths = ["lib"]
16
- gem.version = GrapeDoc::VERSION
16
+ gem.version = GrapeDocumenter::VERSION
17
17
 
18
18
  gem.add_dependency 'grape', '0.2.1'
19
19
  gem.add_dependency 'RedCloth'
20
20
  gem.add_dependency 'activesupport'
21
21
 
22
22
  gem.add_development_dependency 'rspec'
23
+ gem.add_development_dependency 'guard-rspec'
24
+ gem.add_development_dependency 'pry'
23
25
  end
@@ -1,6 +1,6 @@
1
1
  require 'RedCloth'
2
2
 
3
- module GrapeDoc
3
+ module GrapeDocumenter
4
4
  module Formatters
5
5
  # For ease this uses the textile formatter first then post processes to html
6
6
  class Html
@@ -1,6 +1,6 @@
1
1
  require 'active_support/core_ext/object/blank'
2
2
 
3
- module GrapeDoc
3
+ module GrapeDocumenter
4
4
  module Formatters
5
5
  class Textile
6
6
  def initialize(structure)
@@ -17,20 +17,27 @@ module GrapeDoc
17
17
 
18
18
  doc.routes.each do |route|
19
19
  output << "\n\n"
20
- output << "h2. #{route.route_method}: #{route.route_path.gsub(':version', doc.version)}"
20
+ output << "h2. #{route.http_method}: #{route.path.gsub(':version', doc.version)}"
21
21
  output << "\n\n"
22
22
 
23
- if route.route_description.present?
23
+ if route.description.present?
24
24
  output << "h3. Description"
25
25
  output << "\n\n"
26
- output << route.route_description
26
+ output << route.description
27
27
  output << "\n\n"
28
28
  end
29
29
 
30
- if route.route_params.present?
30
+ if route.params.present?
31
31
  output << "h3. Parameters"
32
32
  output << "\n\n"
33
- output << tabulate_params(route.route_params)
33
+ output << tabulate_params(route.params)
34
+ output << "\n\n"
35
+ end
36
+
37
+ if route.optional_params.present?
38
+ output << "h3. Optional Parameters"
39
+ output << "\n\n"
40
+ output << tabulate_params(route.optional_params)
34
41
  output << "\n\n"
35
42
  end
36
43
  end
@@ -1,7 +1,7 @@
1
1
  require 'fileutils'
2
2
  require 'active_support/inflector'
3
3
 
4
- module GrapeDoc
4
+ module GrapeDocumenter
5
5
  class Generator
6
6
  def initialize(api_class, output_path, options = {})
7
7
  raise 'api_class must be specified' if api_class.nil?
@@ -79,7 +79,7 @@ module GrapeDoc
79
79
  end
80
80
 
81
81
  def routes_for_version_and_namespace(version, namespace)
82
- routes_for_version(version).select { |r| normalize_route_namespace(r) == namespace }
82
+ routes_for_version(version).select { |r| normalize_route_namespace(r) == namespace }.map{|r| RouteDoc.new(r)}
83
83
  end
84
84
 
85
85
  def titleize(string)
@@ -1,6 +1,6 @@
1
- module GrapeDoc
1
+ module GrapeDocumenter
2
2
  class NamespaceDoc
3
- attr_accessor :title, :routes, :root_path, :version, :resources
3
+ attr_reader :title, :routes, :root_path, :version, :resources
4
4
 
5
5
  def initialize(options = {})
6
6
  @title = options[:title]
@@ -1,6 +1,6 @@
1
- require 'grape_doc'
1
+ require 'grape_documenter'
2
2
 
3
- module GrapeDoc
3
+ module GrapeDocumenter
4
4
  class Railtie < Rails::Railtie
5
5
  rake_tasks do
6
6
  load 'tasks/generate.rake'
@@ -0,0 +1,27 @@
1
+ module GrapeDocumenter
2
+ class RouteDoc
3
+ def initialize(route)
4
+ @route = route
5
+ end
6
+
7
+ def http_method
8
+ @route.route_method
9
+ end
10
+
11
+ def path
12
+ @route.route_path
13
+ end
14
+
15
+ def description
16
+ @route.route_description
17
+ end
18
+
19
+ def params
20
+ @route.route_params
21
+ end
22
+
23
+ def optional_params
24
+ @route.route_optional_params
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,3 @@
1
+ module GrapeDocumenter
2
+ VERSION = "0.1.0"
3
+ end
@@ -1,4 +1,4 @@
1
- module GrapeDoc
1
+ module GrapeDocumenter
2
2
  class Writer
3
3
  def initialize(doc_structure)
4
4
  @doc_structure = doc_structure
@@ -0,0 +1,11 @@
1
+ require "grape_documenter/version"
2
+
3
+ module GrapeDocumenter
4
+ require 'grape_documenter/generator'
5
+ require 'grape_documenter/writer'
6
+ require 'grape_documenter/namespace_doc'
7
+ require 'grape_documenter/route_doc'
8
+ require 'grape_documenter/formatters/textile'
9
+ require 'grape_documenter/formatters/html'
10
+ require 'grape_documenter/railtie' if defined?(Rails)
11
+ end
@@ -1,7 +1,7 @@
1
- require 'grape_doc'
1
+ require 'grape_documenter'
2
2
 
3
3
  desc "Generate documentation for Grape API"
4
4
  task :generate_grape_docs, [:api_class, :output_path, :format] => :environment do |t, args|
5
- generator = GrapeDoc::Generator.new(args[:api_class], args[:output_path], :format => args[:format])
5
+ generator = GrapeDocumenter::Generator.new(args[:api_class], args[:output_path], :format => args[:format])
6
6
  generator.output
7
7
  end
@@ -1,18 +1,19 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe GrapeDoc::Formatters::Textile do
3
+ describe GrapeDocumenter::Formatters::Textile do
4
4
  let(:mock_route) do
5
5
  mock('route', :route_method => 'GET',
6
6
  :route_path => '/users',
7
7
  :route_description => 'users description goes here',
8
- :route_params => {:id => {:type => 'integer', :desc => 'user id'}})
8
+ :route_params => {'id' => {:type => 'integer', :desc => 'user id'}},
9
+ :route_optional_params => {'foo' => {:type => 'string', :desc => 'fooness'}})
9
10
  end
10
11
 
11
12
  let(:structure) do
12
- GrapeDoc::NamespaceDoc.new :version => 'v1',
13
+ GrapeDocumenter::NamespaceDoc.new :version => 'v1',
13
14
  :title => 'Users',
14
15
  :root_path => '/users',
15
- :routes => [mock_route],
16
+ :routes => [GrapeDocumenter::RouteDoc.new(mock_route)],
16
17
  :resources => [{ :name => 'Contacts', :path => '/contacts' }]
17
18
  end
18
19
 
@@ -31,9 +32,15 @@ describe GrapeDoc::Formatters::Textile do
31
32
  subject.format.should include('users description goes here')
32
33
  end
33
34
 
34
- it 'has an h3 and the route_params in a table' do
35
+ it 'has an h3 and the params in a table' do
35
36
  subject.format.should include('h3. Parameters')
36
37
  subject.format.should include('|_.Name|_.Type|_.Description|')
37
38
  subject.format.should include('|id|integer|user id|')
38
39
  end
40
+
41
+ it 'has an h3 and the optional_params in a table' do
42
+ subject.format.should include('h3. Optional Parameters')
43
+ subject.format.should include('|_.Name|_.Type|_.Description|')
44
+ subject.format.should include('|foo|string|fooness|')
45
+ end
39
46
  end
@@ -1,27 +1,53 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe GrapeDoc::Generator do
4
- subject { described_class.new 'MyApplication::API', '/tmp/grape_doc' }
3
+ describe GrapeDocumenter::Generator do
4
+ subject { described_class.new 'MyApplication::API', '/tmp/grape_documenter' }
5
5
 
6
- context 'for a given api version' do
7
- it 'stores the version' do
8
- subject.generate_namespace_docs.first.version.should == 'v1'
9
- end
6
+ context 'integration test' do
7
+ context 'for the first api version' do
8
+ it 'stores the version' do
9
+ subject.generate_namespace_docs.first.version.should == 'v1'
10
+ end
10
11
 
11
- it 'stores the title' do
12
- subject.generate_namespace_docs.first.title.should == 'User'
13
- end
12
+ it 'stores the title' do
13
+ subject.generate_namespace_docs.first.title.should == 'User'
14
+ end
14
15
 
15
- it 'stores the root_path' do
16
- subject.generate_namespace_docs.first.root_path.should == '/user'
17
- end
16
+ it 'stores the root_path' do
17
+ subject.generate_namespace_docs.first.root_path.should == '/user'
18
+ end
18
19
 
19
- it 'stores the routes' do
20
- subject.generate_namespace_docs.first.routes.should == MyApplication::API.routes.select{|r| r.route_version == 'v1'}
21
- end
20
+ describe 'routes' do
21
+ let(:routes) { subject.generate_namespace_docs.first.routes }
22
+
23
+ describe 'index' do
24
+ describe 'description' do
25
+ it 'returns Get all users' do
26
+ routes.first.description.should == 'Get all users'
27
+ end
28
+ end
29
+ end
30
+
31
+ describe 'show' do
32
+ describe 'params' do
33
+ it 'returns id with desc and type' do
34
+ routes[1].params.should == { 'id' => { :desc => 'The id of the user', :type => 'integer' } }
35
+ end
36
+ end
37
+ end
38
+
39
+ describe 'post' do
40
+ describe 'optional params' do
41
+ it 'returns first_name with desc and type' do
42
+ routes[2].optional_params.should == { 'first_name' => { :desc => 'First name of the user', :type => 'string' } }
43
+ end
44
+ end
45
+ end
46
+ end
22
47
 
23
- it 'stores the global resources' do
24
- subject.generate_namespace_docs.first.resources.should == [{ :name => 'User', :path => '/user' }]
48
+ it 'stores the global resources' do
49
+ subject.generate_namespace_docs.first.resources.should == [{ :name => 'User', :path => '/user' }]
50
+ end
25
51
  end
26
52
  end
27
53
  end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ describe GrapeDocumenter::NamespaceDoc do
4
+ describe 'attrubutes' do
5
+ subject do
6
+ described_class.new :title => 'some title',
7
+ :routes => 'some routes',
8
+ :root_path => 'some root path',
9
+ :version => 'some version',
10
+ :resources => 'some resources'
11
+ end
12
+
13
+ it 'stores title' do
14
+ subject.title.should == 'some title'
15
+ end
16
+
17
+ it 'stores routes' do
18
+ subject.routes.should == 'some routes'
19
+ end
20
+
21
+ it 'stores root_path' do
22
+ subject.root_path.should == 'some root path'
23
+ end
24
+
25
+ it 'stores version' do
26
+ subject.version.should == 'some version'
27
+ end
28
+
29
+ it 'stores resources' do
30
+ subject.resources.should == 'some resources'
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+
3
+ describe GrapeDocumenter::RouteDoc do
4
+ let(:mock_route) do
5
+ mock('route', :route_method => 'GET',
6
+ :route_path => '/users',
7
+ :route_description => 'users description goes here',
8
+ :route_params => {'id' => {:type => 'integer', :desc => 'user id'}},
9
+ :route_optional_params => {'foo' => {:type => 'string', :desc => 'fooness'}})
10
+ end
11
+
12
+ subject { described_class.new mock_route }
13
+
14
+ describe 'attributes' do
15
+ it 'returns the method' do
16
+ # cant use #method as reserved word
17
+ subject.http_method.should == 'GET'
18
+ end
19
+
20
+ it 'returns the path' do
21
+ subject.path.should == '/users'
22
+ end
23
+
24
+ it 'returns the description' do
25
+ subject.description.should == 'users description goes here'
26
+ end
27
+
28
+ it 'returns the params' do
29
+ subject.params.should == {'id' => {:type => 'integer', :desc => 'user id'}}
30
+ end
31
+
32
+ it 'returns the params' do
33
+ subject.optional_params.should == {'foo' => {:type => 'string', :desc => 'fooness'}}
34
+ end
35
+ end
36
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,2 +1,2 @@
1
- require 'grape_doc'
1
+ require 'grape_documenter'
2
2
  require 'support/test_api'
@@ -13,6 +13,14 @@ module MyApplication
13
13
  }
14
14
  get ':id' do
15
15
  end
16
+
17
+ post '/', {
18
+ :params => {
19
+ 'username' => { :desc => 'The username of the user', :type => 'string' }
20
+ }, :optional_params => {
21
+ 'first_name' => { :desc => 'First name of the user', :type => 'string' }
22
+ }
23
+ }
16
24
  end
17
25
  end
18
26
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grape_documenter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-08-15 00:00:00.000000000 Z
13
+ date: 2012-08-17 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: grape
@@ -76,33 +76,69 @@ dependencies:
76
76
  - - ! '>='
77
77
  - !ruby/object:Gem::Version
78
78
  version: '0'
79
+ - !ruby/object:Gem::Dependency
80
+ name: guard-rspec
81
+ requirement: !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ! '>='
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ type: :development
88
+ prerelease: false
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ - !ruby/object:Gem::Dependency
96
+ name: pry
97
+ requirement: !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ! '>='
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
79
111
  description: This adds a task to Rails Applications to generate documentation for
80
112
  Grape APIs.
81
113
  email:
82
114
  - philip.lee@sage.com
83
115
  executables:
84
- - grape_doc
116
+ - grape_documenter
85
117
  extensions: []
86
118
  extra_rdoc_files: []
87
119
  files:
88
120
  - .gitignore
89
121
  - Gemfile
122
+ - Guardfile
90
123
  - LICENSE
91
124
  - README.md
92
125
  - Rakefile
93
- - bin/grape_doc
94
- - grape_doc.gemspec
95
- - lib/grape_doc.rb
96
- - lib/grape_doc/formatters/html.rb
97
- - lib/grape_doc/formatters/textile.rb
98
- - lib/grape_doc/generator.rb
99
- - lib/grape_doc/namespace_doc.rb
100
- - lib/grape_doc/railtie.rb
101
- - lib/grape_doc/version.rb
102
- - lib/grape_doc/writer.rb
126
+ - bin/grape_documenter
127
+ - grape_documenter.gemspec
128
+ - lib/grape_documenter.rb
129
+ - lib/grape_documenter/formatters/html.rb
130
+ - lib/grape_documenter/formatters/textile.rb
131
+ - lib/grape_documenter/generator.rb
132
+ - lib/grape_documenter/namespace_doc.rb
133
+ - lib/grape_documenter/railtie.rb
134
+ - lib/grape_documenter/route_doc.rb
135
+ - lib/grape_documenter/version.rb
136
+ - lib/grape_documenter/writer.rb
103
137
  - lib/tasks/generate.rake
104
138
  - spec/formatters/textile_spec.rb
105
139
  - spec/generator_spec.rb
140
+ - spec/namespace_doc_spec.rb
141
+ - spec/route_doc_spec.rb
106
142
  - spec/spec_helper.rb
107
143
  - spec/support/test_api.rb
108
144
  homepage: ''
@@ -125,7 +161,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
125
161
  version: '0'
126
162
  requirements: []
127
163
  rubyforge_project:
128
- rubygems_version: 1.8.24
164
+ rubygems_version: 1.8.23
129
165
  signing_key:
130
166
  specification_version: 3
131
167
  summary: This adds a task to Rails Applications to generate documentation for Grape
@@ -133,6 +169,7 @@ summary: This adds a task to Rails Applications to generate documentation for Gr
133
169
  test_files:
134
170
  - spec/formatters/textile_spec.rb
135
171
  - spec/generator_spec.rb
172
+ - spec/namespace_doc_spec.rb
173
+ - spec/route_doc_spec.rb
136
174
  - spec/spec_helper.rb
137
175
  - spec/support/test_api.rb
138
- has_rdoc:
@@ -1,3 +0,0 @@
1
- module GrapeDoc
2
- VERSION = "0.0.3"
3
- end
data/lib/grape_doc.rb DELETED
@@ -1,10 +0,0 @@
1
- require "grape_doc/version"
2
-
3
- module GrapeDoc
4
- require 'grape_doc/generator'
5
- require 'grape_doc/writer'
6
- require 'grape_doc/namespace_doc'
7
- require 'grape_doc/formatters/textile'
8
- require 'grape_doc/formatters/html'
9
- require 'grape_doc/railtie' if defined?(Rails)
10
- end