raddocs 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/raddocs.rb CHANGED
@@ -1,38 +1,15 @@
1
1
  require 'sinatra'
2
2
  require 'json'
3
+ require 'raddocs/configuration'
4
+ require 'raddocs/app'
5
+ require 'raddocs/middleware'
3
6
 
4
- class Raddocs < Sinatra::Base
5
- set :haml, :format => :html5
6
-
7
- get "/" do
8
- index = JSON.parse(File.read("#{docs_dir}/index.json"))
9
- haml :index, :locals => { :index => index }
10
- end
11
-
12
- get "/:resource/:example" do
13
- example = JSON.parse(File.read("#{docs_dir}/#{params[:resource]}/#{params[:example]}.json"))
14
- haml :example, :locals => { :example => example }
15
- end
16
-
17
- helpers do
18
- def link_to(name, link)
19
- %{<a href="#{request.env["SCRIPT_NAME"]}#{link}">#{name}</a>}
20
- end
21
-
22
- def url_location
23
- request.env["SCRIPT_NAME"]
24
- end
25
- end
26
-
27
- class << self
28
- attr_accessor :docs_dir
29
-
30
- def docs_dir
31
- @docs_dir ||= "docs"
32
- end
7
+ module Raddocs
8
+ def self.configuration
9
+ @configuration ||= Configuration.new
33
10
  end
34
11
 
35
- def docs_dir
36
- self.class.docs_dir
12
+ def self.configure
13
+ yield configuration if block_given?
37
14
  end
38
15
  end
@@ -0,0 +1,42 @@
1
+ module Raddocs
2
+ class App < Sinatra::Base
3
+ set :haml, :format => :html5
4
+ set :root, File.join(File.dirname(__FILE__), "..")
5
+
6
+ get "/" do
7
+ index = JSON.parse(File.read("#{docs_dir}/index.json"))
8
+ haml :index, :locals => { :index => index }
9
+ end
10
+
11
+ get "/*" do
12
+ file = "#{docs_dir}/#{params[:splat][0]}.json"
13
+
14
+ if !File.exists?(file)
15
+ raise Sinatra::NotFound
16
+ end
17
+
18
+ file_content = File.read(file)
19
+
20
+ example = JSON.parse(file_content)
21
+ haml :example, :locals => { :example => example }
22
+ end
23
+
24
+ not_found do
25
+ "Example does not exist"
26
+ end
27
+
28
+ helpers do
29
+ def link_to(name, link)
30
+ %{<a href="#{request.env["SCRIPT_NAME"]}#{link}">#{name}</a>}
31
+ end
32
+
33
+ def url_location
34
+ request.env["SCRIPT_NAME"]
35
+ end
36
+ end
37
+
38
+ def docs_dir
39
+ Raddocs.configuration.docs_dir
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,23 @@
1
+ module Raddocs
2
+ class Configuration
3
+ def self.add_setting(name, opts = {})
4
+ define_method("#{name}=") { |value| settings[name] = value }
5
+ define_method("#{name}") do
6
+ if settings.has_key?(name)
7
+ settings[name]
8
+ elsif opts[:default].respond_to?(:call)
9
+ opts[:default].call(self)
10
+ else
11
+ opts[:default]
12
+ end
13
+ end
14
+ end
15
+
16
+ add_setting :docs_dir, :default => "docs"
17
+ add_setting :docs_mime_type, :default => /text\/docs\+plain/
18
+
19
+ def settings
20
+ @settings ||= {}
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,24 @@
1
+ module Raddocs
2
+ class Middleware
3
+ def initialize(app)
4
+ @app = app
5
+ @file_server = Rack::File.new(Raddocs.configuration.docs_dir)
6
+ end
7
+
8
+ def call(env)
9
+ if env["HTTP_ACCEPT"] =~ Raddocs.configuration.docs_mime_type
10
+ env = env.merge({ "PATH_INFO" => File.join(env["PATH_INFO"], "index.txt") })
11
+ response = @file_server.call(env)
12
+
13
+ if response[0] == 404
14
+ body = "Docs are not available for this resource.\n"
15
+ response = [404, {"Content-Type" => "type/plain", "Content-Length" => body.size.to_s}, [body]]
16
+ end
17
+
18
+ response
19
+ else
20
+ @app.call(env)
21
+ end
22
+ end
23
+ end
24
+ end
@@ -41,7 +41,9 @@
41
41
  - if request["request_body"]
42
42
  %section.body
43
43
  %h4 Body
44
- .body= request["request_body"]
44
+ .body
45
+ :preserve
46
+ #{request["request_body"]}
45
47
 
46
48
  - if request["curl"]
47
49
  %section.curl
@@ -63,4 +65,6 @@
63
65
  - if request["response_body"]
64
66
  %section.body
65
67
  %h4 Body
66
- .body= request["response_body"]
68
+ .body
69
+ :preserve
70
+ #{request["response_body"]}
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: raddocs
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:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-24 00:00:00.000000000 Z
12
+ date: 2012-06-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sinatra
16
- requirement: &70252117740960 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70252117740960
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: haml
27
- requirement: &70252117699660 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ! '>='
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: '0'
33
38
  type: :runtime
34
39
  prerelease: false
35
- version_requirements: *70252117699660
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: json
38
- requirement: &70252117638640 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ! '>='
@@ -43,10 +53,15 @@ dependencies:
43
53
  version: '0'
44
54
  type: :runtime
45
55
  prerelease: false
46
- version_requirements: *70252117638640
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
47
62
  - !ruby/object:Gem::Dependency
48
63
  name: rspec
49
- requirement: &70252113306280 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
50
65
  none: false
51
66
  requirements:
52
67
  - - ! '>='
@@ -54,10 +69,15 @@ dependencies:
54
69
  version: '0'
55
70
  type: :development
56
71
  prerelease: false
57
- version_requirements: *70252113306280
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
58
78
  - !ruby/object:Gem::Dependency
59
79
  name: rack-test
60
- requirement: &70252121997380 !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
61
81
  none: false
62
82
  requirements:
63
83
  - - ! '>='
@@ -65,10 +85,15 @@ dependencies:
65
85
  version: '0'
66
86
  type: :development
67
87
  prerelease: false
68
- version_requirements: *70252121997380
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
69
94
  - !ruby/object:Gem::Dependency
70
95
  name: capybara
71
- requirement: &70252121924620 !ruby/object:Gem::Requirement
96
+ requirement: !ruby/object:Gem::Requirement
72
97
  none: false
73
98
  requirements:
74
99
  - - ! '>='
@@ -76,10 +101,15 @@ dependencies:
76
101
  version: '0'
77
102
  type: :development
78
103
  prerelease: false
79
- version_requirements: *70252121924620
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
80
110
  - !ruby/object:Gem::Dependency
81
111
  name: rake
82
- requirement: &70252121928480 !ruby/object:Gem::Requirement
112
+ requirement: !ruby/object:Gem::Requirement
83
113
  none: false
84
114
  requirements:
85
115
  - - ! '>='
@@ -87,7 +117,12 @@ dependencies:
87
117
  version: '0'
88
118
  type: :development
89
119
  prerelease: false
90
- version_requirements: *70252121928480
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
91
126
  description: Browse documentation generated by the rspec_api_documentation gem
92
127
  email:
93
128
  - eric@oestrich.org
@@ -96,6 +131,9 @@ extensions: []
96
131
  extra_rdoc_files: []
97
132
  files:
98
133
  - lib/public/bootstrap.min.css
134
+ - lib/raddocs/app.rb
135
+ - lib/raddocs/configuration.rb
136
+ - lib/raddocs/middleware.rb
99
137
  - lib/raddocs.rb
100
138
  - lib/views/example.haml
101
139
  - lib/views/index.haml
@@ -120,7 +158,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
120
158
  version: 1.3.6
121
159
  requirements: []
122
160
  rubyforge_project:
123
- rubygems_version: 1.8.15
161
+ rubygems_version: 1.8.24
124
162
  signing_key:
125
163
  specification_version: 3
126
164
  summary: Browse documentation generated by the rspec_api_documentation gem