raddocs 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e05f829e0cb6d404ed14e8abb6942d9f4714527f
4
- data.tar.gz: 93f7a97e38c9dc952860438be5eef3c2767cc31b
3
+ metadata.gz: 51c3f683fc4b32ffe21f3b00883e54ede5f9874d
4
+ data.tar.gz: 04fb0bab660edaca38e10723ac9a7ab16ff2b795
5
5
  SHA512:
6
- metadata.gz: 92806b37addee4f7ca3aa9d5caf01c2ae6161e3f21a7cdcae9f8162b0c98e4cc651bba1d345b628107f7ae1e540c2fd7e131238d3ad993fbe121808d827ad965
7
- data.tar.gz: 1758b0a4e9b412d3fe10b8057398446a48634dba436a14a02fed4a280a351514c183f251002665efbd3ca03bd8bb95cd414a442f5968d920738d307cb9ae6dca
6
+ metadata.gz: 7236230c824fe40288d3ae3bf972249c056a111789f03db775adecc452b9bdc9d44a92a31fb9adc21c12769cdecdc018d0a1949d6cf9526b0179ad70dbecb18d
7
+ data.tar.gz: cd3d939196c54291544192b8e968499f9297947c5526d26ce5dd817c36169c0cd9d6c808d160d3bb6bb543979cff836b68271f24c7edbcd09abd49a6a7f0423a
@@ -1,7 +1,9 @@
1
1
  body {
2
2
  margin: 25px 0;
3
3
  }
4
-
4
+ .container{
5
+ margin-top: 25px;
6
+ }
5
7
  .response .body .content, .request .body .content {
6
8
  background-color: #f5f5f5;
7
9
  margin: 0;
@@ -2,16 +2,27 @@ Encoding.default_external = Encoding::UTF_8
2
2
 
3
3
  require 'sinatra/base'
4
4
  require 'json'
5
+
5
6
  require 'raddocs/configuration'
6
7
  require 'raddocs/app'
7
8
  require 'raddocs/middleware'
8
- require 'raddocs/parameters'
9
+
10
+ require 'raddocs/models'
9
11
 
10
12
  module Raddocs
13
+ # @return [Raddocs::Configuration] the current configuration
11
14
  def self.configuration
12
15
  @configuration ||= Configuration.new
13
16
  end
14
17
 
18
+ # Configure Raddocs
19
+ #
20
+ # @example
21
+ # Raddocs.configure do |config|
22
+ # config.url_prefix = "/documentation"
23
+ # end
24
+ #
25
+ # @yieldparam configuration [Raddocs::Configuration]
15
26
  def self.configure
16
27
  yield configuration if block_given?
17
28
  end
@@ -1,13 +1,16 @@
1
1
  module Raddocs
2
+ # Sinatra app that serves all documentation
2
3
  class App < Sinatra::Base
3
4
  set :haml, :format => :html5
4
5
  set :root, File.join(File.dirname(__FILE__), "..")
5
6
 
7
+ # Main index, displays all examples grouped by resource
6
8
  get "/" do
7
- index = JSON.parse(File.read("#{docs_dir}/index.json"))
9
+ index = Index.new(File.join(docs_dir, "index.json"))
8
10
  haml :index, :locals => { :index => index }
9
11
  end
10
12
 
13
+ # Allows for overriding styles
11
14
  get "/custom-css/*" do
12
15
  file = "#{docs_dir}/styles/#{params[:splat][0]}"
13
16
 
@@ -19,6 +22,11 @@ module Raddocs
19
22
  File.read(file)
20
23
  end
21
24
 
25
+ # Catch all for example pages.
26
+ # Loads files from the docs dir and appends '.json'.
27
+ #
28
+ # @example
29
+ # "/orders/create_an_order" => "docs/api/orders/create_an_order.json"
22
30
  get "/*" do
23
31
  file = "#{docs_dir}/#{params[:splat][0]}.json"
24
32
 
@@ -26,13 +34,13 @@ module Raddocs
26
34
  raise Sinatra::NotFound
27
35
  end
28
36
 
29
- file_content = File.read(file)
37
+ index = Index.new(File.join(docs_dir, "index.json"))
38
+ example = Example.new(file)
30
39
 
31
- example = JSON.parse(file_content)
32
- example["parameters"] = Parameters.new(example["parameters"]).parse
33
- haml :example, :locals => { :example => example }
40
+ haml :example, :locals => { index: index, example: example }
34
41
  end
35
42
 
43
+ # Page not found
36
44
  not_found do
37
45
  "Example does not exist"
38
46
  end
@@ -56,6 +64,9 @@ module Raddocs
56
64
  Raddocs.configuration.api_name
57
65
  end
58
66
 
67
+ # Loads all necessary css files
68
+ #
69
+ # @see Raddocs::Configuration for loading external files
59
70
  def css_files
60
71
  files = ["#{url_location}/codemirror.css", "#{url_location}/application.css"]
61
72
 
@@ -72,10 +83,10 @@ module Raddocs
72
83
 
73
84
  files
74
85
  end
75
- end
76
86
 
77
- def docs_dir
78
- Raddocs.configuration.docs_dir
87
+ def docs_dir
88
+ Raddocs.configuration.docs_dir
89
+ end
79
90
  end
80
91
  end
81
92
  end
@@ -1,5 +1,17 @@
1
1
  module Raddocs
2
+ # Configure Raddocs
3
+ # @see Raddocs.configure Raddocs.configure
4
+ # @example
5
+ # Raddocs.configure do |config|
6
+ # # config is this class
7
+ # config.api_name = "My API"
8
+ # end
2
9
  class Configuration
10
+ # Configures a new setting, creates two methods
11
+ #
12
+ # @param name [Symbol] name of the setting
13
+ # @param opts [Hash]
14
+ # @option opts [Object] default default value of setting
3
15
  def self.add_setting(name, opts = {})
4
16
  define_method("#{name}=") { |value| settings[name] = value }
5
17
  define_method("#{name}") do
@@ -13,13 +25,32 @@ module Raddocs
13
25
  end
14
26
  end
15
27
 
28
+ # @!attribute docs_dir
29
+ # @return [String] defaults to 'doc/api'
16
30
  add_setting :docs_dir, :default => "doc/api"
31
+
32
+ # @!attribute docs_mime_type
33
+ # @return [Regexp] defaults to Regexp.new("text/docs\+plain")
17
34
  add_setting :docs_mime_type, :default => /text\/docs\+plain/
35
+
36
+ # @!attribute api_name
37
+ # @return [String] defaults to "Api Documentation"
18
38
  add_setting :api_name, :default => "Api Documentation"
39
+
40
+ # @!attribute include_bootstrap
41
+ # @return [Boolean] defaults to true
19
42
  add_setting :include_bootstrap, :default => true
43
+
44
+ # @!attribute external_css
45
+ # @return [Array] array of Strings, defaults to []
20
46
  add_setting :external_css, :default => []
47
+
48
+ # @!attribute url_prefix
49
+ # @return [String] defaults to nil
21
50
  add_setting :url_prefix, :default => nil
22
51
 
52
+ private
53
+
23
54
  def settings
24
55
  @settings ||= {}
25
56
  end
@@ -1,4 +1,15 @@
1
1
  module Raddocs
2
+ # Rack middleware
3
+ #
4
+ # This lets you cURL for documentation.
5
+ #
6
+ # curl -H "Accept: text/docs+plain" http://localhost/orders
7
+ #
8
+ # This will return all of the docs for a given resource, "orders." It is returned
9
+ # as a giant flat file containing all of the documentation. "combined_text" output
10
+ # must be selected in `rspec_api_documentation`.
11
+ #
12
+ # The route matches the folder structure of the docs.
2
13
  class Middleware
3
14
  def initialize(app)
4
15
  @app = app
@@ -0,0 +1,295 @@
1
+ module Raddocs
2
+ # Index page model
3
+ class Index
4
+ def initialize(file)
5
+ @attrs = JSON.parse(File.read(file))
6
+ end
7
+
8
+ # @return [Array] array of {Raddocs::Resource Resources}
9
+ def resources
10
+ @attrs.fetch("resources", {}).map do |resource|
11
+ Resource.new(resource["name"], resource["examples"])
12
+ end
13
+ end
14
+ end
15
+
16
+ # Group of examples related to a specific resource, eg "Orders"
17
+ class Resource < Struct.new(:name, :examples)
18
+ # @return [Array] array of {Raddocs::IndexExample IndexExamples}
19
+ def examples
20
+ @examples ||= super.map do |example|
21
+ IndexExample.new(example)
22
+ end
23
+ end
24
+ end
25
+
26
+ # Example model for the index page
27
+ #
28
+ # Has an extra link attribute that is required only on this page.
29
+ class IndexExample
30
+ attr_reader :description, :link
31
+
32
+ def initialize(attributes)
33
+ @description = attributes.fetch("description")
34
+ @link = attributes.fetch("link")
35
+ end
36
+
37
+ # Link to example page is the same name as the file minus ".json"
38
+ def href
39
+ link.gsub(".json", "")
40
+ end
41
+ end
42
+
43
+ # Example page model
44
+ class Example
45
+ attr_reader :resource, :description, :explanation, :parameters, :response_fields,
46
+ :requests
47
+
48
+ def initialize(file)
49
+ @attrs = JSON.parse(File.read(file))
50
+
51
+ @resource = @attrs.fetch("resource")
52
+ @description = @attrs.fetch("description")
53
+ @explanation = @attrs.fetch("explanation", nil)
54
+ @parameters = Parameters.new(@attrs.fetch("parameters"))
55
+ @response_fields = ResponseFields.new(@attrs.fetch("response_fields"))
56
+ @requests = @attrs.fetch("requests").map { |request| Request.new(request) }
57
+ end
58
+
59
+ # @return [Boolean] true if explanation is present
60
+ def explanation?
61
+ !explanation.nil?
62
+ end
63
+ end
64
+
65
+ # An example's parameters, requires a class because the table can display unknown columns
66
+ class Parameters
67
+ attr_reader :extra_keys, :params
68
+
69
+ SPECIAL_KEYS = ["name", "description", "required", "scope"]
70
+
71
+ # Collection object for parameters to pull out unknown keys so they can be
72
+ # displayed on the example page.
73
+ #
74
+ # @example
75
+ # params = Parameters.new([
76
+ # {"name" => "page", "description" => "Page number", "Type" => "Integer"}
77
+ # ])
78
+ # params.extra_keys
79
+ # # => ["Type"]
80
+ #
81
+ # @param params [Array] array of {Raddocs::Parameter Parameters}
82
+ #
83
+ def initialize(params)
84
+ @params = params.map { |param| Parameter.new(param) }
85
+ @extra_keys = params.flat_map(&:keys).uniq - SPECIAL_KEYS
86
+ end
87
+
88
+ # @return [Boolean] true if params contains elements
89
+ def present?
90
+ @params.count > 0
91
+ end
92
+ end
93
+
94
+ # Parameter of a request
95
+ #
96
+ # Can have an unknown columns
97
+ #
98
+ # @example
99
+ # Parameter.new({
100
+ # "name" => "page",
101
+ # "description" => "Page number",
102
+ # "Type" => "Integer"
103
+ # })
104
+ #
105
+ class Parameter
106
+ attr_reader :name, :description, :required, :scope
107
+
108
+ # @param attributes [Hash]
109
+ # @option attributes [String] "name" Required
110
+ # @option attributes [String] "description" Required
111
+ # @option attributes [boolean] "required" defaults to false
112
+ # @option attributes [String] "scope" Scope of the parameter, eg 'order[]', defaults to nil
113
+ def initialize(attributes)
114
+ @attrs = attributes
115
+
116
+ @name = attributes.fetch("name")
117
+ @description = attributes.fetch("description")
118
+ @required = attributes.fetch("required", false)
119
+ @scope = attributes.fetch("scope", nil)
120
+ end
121
+
122
+ # @return [Boolean] true if required is true
123
+ def required?
124
+ !!@required
125
+ end
126
+
127
+ # @return [Boolean] true if scope is present
128
+ def scope?
129
+ !!@scope
130
+ end
131
+
132
+ def scope
133
+ Array(@scope).each_with_index.map do |scope, index|
134
+ if index == 0
135
+ scope
136
+ else
137
+ "[#{scope}]"
138
+ end
139
+ end.join
140
+ end
141
+
142
+ # Allows unknown keys to be accessed
143
+ # @param key [String]
144
+ # @return [Object]
145
+ def [](key)
146
+ @attrs[key]
147
+ end
148
+ end
149
+
150
+ # An example's response fields, requires a class because the table can display
151
+ # unknown columns
152
+ class ResponseFields
153
+ attr_reader :extra_keys, :fields
154
+
155
+ SPECIAL_KEYS = ["name", "description", "scope"]
156
+
157
+ def initialize(response_fields)
158
+ return unless response_fields # Might not be present
159
+ @fields = response_fields.map { |field| ResponseField.new(field) }
160
+ @extra_keys = response_fields.flat_map(&:keys).uniq - SPECIAL_KEYS
161
+ end
162
+
163
+ # @return [Boolean] true if fields contains elements
164
+ def present?
165
+ @fields.count > 0
166
+ end
167
+ end
168
+
169
+ # Fields of a response
170
+ #
171
+ # Can have an unknown columns
172
+ #
173
+ # @example
174
+ # Parameter.new({
175
+ # "name" => "page",
176
+ # "description" => "Page number",
177
+ # "Type" => "Integer"
178
+ # })
179
+ #
180
+ class ResponseField
181
+ attr_reader :name, :description, :scope
182
+
183
+ def initialize(attributes)
184
+ @attrs = attributes
185
+
186
+ @name = attributes.fetch("name")
187
+ @description = attributes.fetch("description")
188
+ @scope = attributes.fetch("scope", nil)
189
+ end
190
+
191
+ # @return [Boolean] true if scope is present
192
+ def scope?
193
+ !!@scope
194
+ end
195
+
196
+ # Allows unknown keys to be accessed
197
+ # @param key [String]
198
+ # @return [Object]
199
+ def [](key)
200
+ @attrs[key]
201
+ end
202
+ end
203
+
204
+ # Documented response
205
+ #
206
+ # @param attributes [Hash]
207
+ class Request
208
+ attr_reader :request_method, :request_path, :request_body,
209
+ :curl, :response_status, :response_body
210
+
211
+ # @param attributes [Hash]
212
+ # @option attributes [Hash] "request_headers"
213
+ # Hash of request headers, not in rack format
214
+ # @option attributes [String] "request_method"
215
+ # @option attributes [String] "request_path"
216
+ # @option attributes [Hash] "request_query_parameters"
217
+ # Query parameters pulled from the request if a GET request
218
+ # @option attributes [String] "request_body"
219
+ # @option attributes [String] "curl" Formatted
220
+ # cURL request
221
+ # @option attributes [String] "response_status"
222
+ # @option attributes [Hash] "response_headers"
223
+ # Hash of response headers, not in rack format
224
+ # @option attributes [String] "response_body"
225
+ def initialize(attributes)
226
+ @attrs = attributes
227
+
228
+ @request_headers = attributes.fetch("request_headers")
229
+ @request_method = attributes.fetch("request_method")
230
+ @request_path = attributes.fetch("request_path")
231
+ @request_query_parameters = attributes.fetch("request_query_parameters", nil)
232
+ @request_body = attributes.fetch("request_body", nil)
233
+ @curl = attributes.fetch("curl", nil)
234
+ @response_status = attributes.fetch("response_status")
235
+ @response_headers = attributes.fetch("response_headers", {})
236
+ @response_body = attributes.fetch("response_body", nil)
237
+ end
238
+
239
+ # There are unwanted indents if this was a simple each and output in haml
240
+ def request_headers
241
+ @request_headers.map do |header, value|
242
+ "#{header}: #{value}"
243
+ end.join("\n")
244
+ end
245
+
246
+ # @return [String] joined query parameters, eg: "key=value\nkey=value"
247
+ def request_query_parameters
248
+ @request_query_parameters.map { |k,v| "#{k}=#{v}" }.join("\n")
249
+ end
250
+
251
+ # @return [Boolean] true if request query parameters are present
252
+ def request_query_parameters?
253
+ !@request_query_parameters.empty?
254
+ end
255
+
256
+ # @return [Boolean] true if request body is present
257
+ def request_body?
258
+ !@request_body.nil?
259
+ end
260
+
261
+ # Request headers must be set
262
+ # @return [String] Content type of the request
263
+ def request_content_type
264
+ @request_headers["Content-Type"]
265
+ end
266
+
267
+ # @return [Boolean] true if cURL command is present
268
+ def curl?
269
+ !@curl.nil?
270
+ end
271
+
272
+ # @return [Boolean] true if the response is present
273
+ def response?
274
+ !@response_status.nil?
275
+ end
276
+
277
+ # There are unwanted indents if this was a simple each and output in haml
278
+ def response_headers
279
+ @response_headers.map do |header, value|
280
+ "#{header}: #{value}"
281
+ end.join("\n")
282
+ end
283
+
284
+ # @return [Boolean] true if response body is present
285
+ def response_body?
286
+ !@response_body.nil?
287
+ end
288
+
289
+ # Response headers must be set
290
+ # @return [String] Content type of the response
291
+ def response_content_type
292
+ @response_headers["Content-Type"]
293
+ end
294
+ end
295
+ end
@@ -27,99 +27,111 @@
27
27
  .nav-bar
28
28
  = link_to "&laquo; Back to Index", "/"
29
29
 
30
- %h1== #{example["resource"]} API
30
+ %h1== #{example.resource} API
31
31
  .article
32
- %h2= example["description"]
32
+ %h2= example.description
33
33
 
34
- - if example["explanation"]
34
+ - if example.explanation?
35
35
  %p.explanation
36
- = example["explanation"]
36
+ = example.explanation
37
37
 
38
- - if example["parameters"]["data"].count > 0
38
+ - if example.parameters.present?
39
39
  %h3 Parameters
40
40
  %table.parameters
41
41
  %thead
42
42
  %tr
43
43
  %th Name
44
44
  %th Description
45
- - example["parameters"]["extra_keys"].each do |key|
45
+ - example.parameters.extra_keys.each do |key|
46
46
  %th= key
47
47
  %tbody
48
- - example["parameters"]["data"].each do |param|
48
+ - example.parameters.params.each do |param|
49
49
  %tr.parameter
50
- %td{:class => ("required" if param["required"])}
51
- - if param["scope"]
52
- %span.name #{param['scope']}[#{param["name"]}]
50
+ %td{:class => ("required" if param.required?)}
51
+ - if param.scope?
52
+ %span.name #{param.scope}[#{param.name}]
53
53
  - else
54
- %span.name= param["name"]
54
+ %span.name= param.name
55
55
  %td
56
- %span.description= param["description"]
57
- - example["parameters"]["extra_keys"].each do |key|
56
+ %span.description= param.description
57
+ - example.parameters.extra_keys.each do |key|
58
58
  %td
59
59
  %span.extras= param[key]
60
60
 
61
+ - if example.response_fields.present?
62
+ %h3 Response Fields
63
+ %table.response-fields
64
+ %thead
65
+ %tr
66
+ %th Name
67
+ %th Description
68
+ - example.response_fields.extra_keys.each do |key|
69
+ %th= key
70
+ %tbody
71
+ - example.response_fields.fields.each do |field|
72
+ %tr.response-field
73
+ %td
74
+ - if field.scope?
75
+ %span.name #{field.scope}[#{field.name}]
76
+ - else
77
+ %span.name= field.name
78
+ %td
79
+ %span.description= field.description
80
+ - example.response_fields.extra_keys.each do |key|
81
+ %td
82
+ %span.extras= field[key]
61
83
 
62
- - example["requests"].each_with_index do |request, index|
84
+ - example.requests.each_with_index do |request, index|
63
85
  .request{ :id => "request-#{index}" }
64
86
  %h3 Request
65
87
 
66
88
  %section.headers
67
89
  %h4 Headers
68
90
  %pre.headers
69
- :ruby
70
- # There are unwanted indents if this was a simple each and output in haml
71
- headers = request["request_headers"].map do |header, value|
72
- "#{header}: #{value}"
73
- end
74
91
  :preserve
75
- #{headers.join("\n")}
92
+ #{request.request_headers}
76
93
 
77
94
  %section.route
78
95
  %h4 Route
79
- %pre.route.highlight== #{request["request_method"]} #{request["request_path"]}
96
+ %pre.route.highlight== #{request.request_method} #{request.request_path}
80
97
 
81
- - if !request["request_query_parameters"].empty?
98
+ - if request.request_query_parameters?
82
99
  %section.query-parameters
83
100
  %h4 Query Parameters
84
101
  %pre.query-parameters.highlight
85
- = request["request_query_parameters"].map { |k,v| "#{k}=#{v}" }.join("\n")
102
+ = request.request_query_parameters
86
103
 
87
- - if request["request_body"]
104
+ - if request.request_body?
88
105
  %section.body
89
106
  %h4 Body
90
- .content{ "data-content-type" => request["request_headers"]["Content-Type"] }
107
+ .content{ "data-content-type" => request.request_content_type }
91
108
  %textarea
92
109
  :preserve
93
- #{request["request_body"]}
110
+ #{request.request_body}
94
111
 
95
- - if request["curl"]
112
+ - if request.curl?
96
113
  %section.curl
97
114
  %h4 cURL
98
- %pre= request["curl"]
115
+ %pre= request.curl
99
116
 
100
- - if request["response_status"]
117
+ - if request.response?
101
118
  .response
102
119
  %h3 Response
103
120
 
104
121
  %section.headers
105
122
  %h4 Headers
106
123
  %pre.headers
107
- :ruby
108
- # There are unwanted indents if this was a simple each and output in haml
109
- headers = request["response_headers"].map do |header, value|
110
- "#{header}: #{html_escape(value)}"
111
- end
112
124
  :preserve
113
- #{headers.join("\n")}
125
+ #{request.response_headers}
114
126
 
115
127
  %section.status
116
128
  %h4 Status
117
- %pre.status= request["response_status"]
129
+ %pre.status= request.response_status
118
130
 
119
- - if request["response_body"]
131
+ - if request.response_body?
120
132
  %section.body
121
133
  %h4 Body
122
- .content{ "data-content-type" => request["response_headers"]["Content-Type"] }
134
+ .content{ "data-content-type" => request.response_content_type }
123
135
  %textarea
124
136
  :preserve
125
- #{request["response_body"]}
137
+ #{request.response_body}
@@ -1,9 +1,9 @@
1
1
  %h1= api_name
2
2
 
3
- - index["resources"].each do |resource|
3
+ - index.resources.each do |resource|
4
4
  .resource
5
- %h2= resource["name"]
5
+ %h2= resource.name
6
6
  %ul.examples
7
- - resource["examples"].each do |example|
7
+ - resource.examples.each do |example|
8
8
  %li.example
9
- = link_to example["description"], "/#{example["link"].gsub(".json", "")}"
9
+ = link_to example.description, "/#{example.href}"
@@ -24,4 +24,8 @@
24
24
  }
25
25
  %body
26
26
  .container
27
- = yield
27
+ .row-fluid
28
+ .span4.sidebar
29
+ = haml :nav, locals: { index: index, api_name: api_name }
30
+ .span8.main
31
+ = yield
@@ -0,0 +1,8 @@
1
+
2
+ - index.resources.each do |resource|
3
+ .resource
4
+ %b= resource.name
5
+ %ul.examples
6
+ - resource.examples.each do |example|
7
+ %li.example
8
+ = link_to example.description, "/#{example.href}"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: raddocs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Oestrich
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-21 00:00:00.000000000 Z
11
+ date: 2015-08-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sinatra
@@ -76,20 +76,14 @@ dependencies:
76
76
  requirements:
77
77
  - - "~>"
78
78
  - !ruby/object:Gem::Version
79
- version: '2.9'
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: 2.9.0
79
+ version: '3.0'
83
80
  type: :development
84
81
  prerelease: false
85
82
  version_requirements: !ruby/object:Gem::Requirement
86
83
  requirements:
87
84
  - - "~>"
88
85
  - !ruby/object:Gem::Version
89
- version: '2.9'
90
- - - ">="
91
- - !ruby/object:Gem::Version
92
- version: 2.9.0
86
+ version: '3.0'
93
87
  - !ruby/object:Gem::Dependency
94
88
  name: rack-test
95
89
  requirement: !ruby/object:Gem::Requirement
@@ -97,9 +91,6 @@ dependencies:
97
91
  - - "~>"
98
92
  - !ruby/object:Gem::Version
99
93
  version: '0.6'
100
- - - ">="
101
- - !ruby/object:Gem::Version
102
- version: 0.6.1
103
94
  type: :development
104
95
  prerelease: false
105
96
  version_requirements: !ruby/object:Gem::Requirement
@@ -107,49 +98,34 @@ dependencies:
107
98
  - - "~>"
108
99
  - !ruby/object:Gem::Version
109
100
  version: '0.6'
110
- - - ">="
111
- - !ruby/object:Gem::Version
112
- version: 0.6.1
113
101
  - !ruby/object:Gem::Dependency
114
102
  name: capybara
115
103
  requirement: !ruby/object:Gem::Requirement
116
104
  requirements:
117
105
  - - "~>"
118
106
  - !ruby/object:Gem::Version
119
- version: '1.1'
120
- - - ">="
121
- - !ruby/object:Gem::Version
122
- version: 1.1.2
107
+ version: '2.3'
123
108
  type: :development
124
109
  prerelease: false
125
110
  version_requirements: !ruby/object:Gem::Requirement
126
111
  requirements:
127
112
  - - "~>"
128
113
  - !ruby/object:Gem::Version
129
- version: '1.1'
130
- - - ">="
131
- - !ruby/object:Gem::Version
132
- version: 1.1.2
114
+ version: '2.3'
133
115
  - !ruby/object:Gem::Dependency
134
116
  name: rake
135
117
  requirement: !ruby/object:Gem::Requirement
136
118
  requirements:
137
119
  - - "~>"
138
120
  - !ruby/object:Gem::Version
139
- version: '0.9'
140
- - - ">="
141
- - !ruby/object:Gem::Version
142
- version: 0.9.2.2
121
+ version: '10.0'
143
122
  type: :development
144
123
  prerelease: false
145
124
  version_requirements: !ruby/object:Gem::Requirement
146
125
  requirements:
147
126
  - - "~>"
148
127
  - !ruby/object:Gem::Version
149
- version: '0.9'
150
- - - ">="
151
- - !ruby/object:Gem::Version
152
- version: 0.9.2.2
128
+ version: '10.0'
153
129
  description: Browse documentation generated by the rspec_api_documentation gem
154
130
  email:
155
131
  - eric@oestrich.org
@@ -170,10 +146,11 @@ files:
170
146
  - lib/raddocs/app.rb
171
147
  - lib/raddocs/configuration.rb
172
148
  - lib/raddocs/middleware.rb
173
- - lib/raddocs/parameters.rb
149
+ - lib/raddocs/models.rb
174
150
  - lib/views/example.haml
175
151
  - lib/views/index.haml
176
152
  - lib/views/layout.haml
153
+ - lib/views/nav.haml
177
154
  homepage: http://github.com/oestrich/raddocs
178
155
  licenses:
179
156
  - MIT
@@ -194,8 +171,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
194
171
  version: 1.3.6
195
172
  requirements: []
196
173
  rubyforge_project:
197
- rubygems_version: 2.2.0
174
+ rubygems_version: 2.2.2
198
175
  signing_key:
199
176
  specification_version: 4
200
177
  summary: rspec_api_documentation browser
201
178
  test_files: []
179
+ has_rdoc:
@@ -1,16 +0,0 @@
1
- module Raddocs
2
- class Parameters
3
- def initialize(params)
4
- @params = params
5
- end
6
-
7
- def parse
8
- extra_keys = @params.flat_map(&:keys).uniq - ["name", "description", "required", "scope"]
9
-
10
- {
11
- "extra_keys" => extra_keys,
12
- "data" => @params
13
- }
14
- end
15
- end
16
- end