doc_my_routes 0.11.1 → 0.12.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/etc/css/base.css +2 -2
- data/etc/partial.html.erb +10 -2
- data/lib/doc_my_routes/doc/hash_helpers.rb +16 -0
- data/lib/doc_my_routes/doc/mixins/annotatable.rb +4 -1
- data/lib/doc_my_routes/doc/route.rb +16 -9
- data/lib/doc_my_routes/doc/route_documentation.rb +7 -1
- data/lib/doc_my_routes/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0f789a0b78d494649c621e36704e917d37d72cf5
|
4
|
+
data.tar.gz: 6374b29644c863962118ce3c76d0eecfff645a66
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 61418fb9e733596422b95254798a1885b91411be88fdae64a8369d6790d7848797cbca11bc6e72dbd2b183b2897cc85e9dd9a2eeef7d2577432b4b1396521118
|
7
|
+
data.tar.gz: 05b3f7978092608493e1c189cec8d1b1974bcbd541f3d7a092e61ada04eb8db64ace13ce688c1f49fce7d3d02b8cc017a15c5c4e7d36fc7213ccfa02b097e9d8
|
data/etc/css/base.css
CHANGED
data/etc/partial.html.erb
CHANGED
@@ -48,12 +48,20 @@
|
|
48
48
|
<thead>
|
49
49
|
<tr>
|
50
50
|
<th>Parameter</th>
|
51
|
+
<th>Required</th>
|
52
|
+
<th>Location</th>
|
53
|
+
<th>Type</th>
|
54
|
+
<th>Description</th>
|
51
55
|
</tr>
|
52
56
|
</thead>
|
53
57
|
<tbody class="operation-params">
|
54
|
-
<% route[:parameters].each do |
|
58
|
+
<% route[:parameters].each do |param_name, param_options| %>
|
55
59
|
<tr>
|
56
|
-
<td><%=
|
60
|
+
<td><%= param_name %></td>
|
61
|
+
<td><%= param_options[:required] ? 'Yes' : 'No' %></td>
|
62
|
+
<td><%= param_options[:in] %></td>
|
63
|
+
<td><%= param_options[:type] %></td>
|
64
|
+
<td><%= param_options[:description] %></td>
|
57
65
|
</tr>
|
58
66
|
<% end %>
|
59
67
|
</tbody>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module DocMyRoutes
|
2
|
+
# Define hash helpers for deep hash merge and transforming hash into array of keys
|
3
|
+
module HashHelpers
|
4
|
+
def self.deep_merge(first_hash, second_hash)
|
5
|
+
merger = proc do |key, first, second|
|
6
|
+
first.is_a?(Hash) && second.is_a?(Hash) ? first.merge(second, &merger) : second
|
7
|
+
end
|
8
|
+
|
9
|
+
first_hash.merge(second_hash, &merger)
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.array_to_hash_keys(arr, default_value = {})
|
13
|
+
{}.tap { |hash| arr.each { |key| hash[key] = default_value } }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -52,7 +52,6 @@ module DocMyRoutes
|
|
52
52
|
|
53
53
|
def route_documentation
|
54
54
|
@route_documentation ||= begin
|
55
|
-
DocMyRoutes.logger.debug 'Tracking new route'
|
56
55
|
RouteDocumentation.new
|
57
56
|
end
|
58
57
|
end
|
@@ -88,6 +87,10 @@ module DocMyRoutes
|
|
88
87
|
route_documentation.notes_ref = value
|
89
88
|
end
|
90
89
|
|
90
|
+
def parameter(value, options = {})
|
91
|
+
route_documentation.add_parameter(value, options)
|
92
|
+
end
|
93
|
+
|
91
94
|
private
|
92
95
|
|
93
96
|
def track_route(resource, verb, route_pattern, conditions)
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
require 'forwardable'
|
4
|
+
require_relative 'hash_helpers'
|
4
5
|
|
5
6
|
module DocMyRoutes
|
6
7
|
# Simple object representing a route
|
@@ -22,12 +23,16 @@ module DocMyRoutes
|
|
22
23
|
@documentation = documentation
|
23
24
|
end
|
24
25
|
|
26
|
+
# We need to use deep merge as param_info method will return a hash for parameters
|
27
|
+
# with extracted information from the route path, and documentation might also have
|
28
|
+
# parameters with some more documentation and we don't want to loose extracted data
|
29
|
+
# from route path
|
25
30
|
def to_hash
|
26
|
-
{
|
31
|
+
HashHelpers.deep_merge({
|
27
32
|
http_method: verb,
|
28
33
|
parameters: param_info,
|
29
34
|
path: path
|
30
|
-
}
|
35
|
+
}, documentation.to_hash)
|
31
36
|
end
|
32
37
|
|
33
38
|
def path
|
@@ -60,13 +65,15 @@ module DocMyRoutes
|
|
60
65
|
#
|
61
66
|
# Try to extract parameters from the route definition otherwise
|
62
67
|
def param_info
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
68
|
+
path_parameters_array = route_pattern.split('/').map do |part|
|
69
|
+
part.start_with?(':') ? part[1..-1].to_sym : nil
|
70
|
+
end.compact
|
71
|
+
|
72
|
+
path_parameters = HashHelpers.array_to_hash_keys(path_parameters_array,
|
73
|
+
{ in: :path, required: true })
|
74
|
+
condition_parameters = HashHelpers.array_to_hash_keys(conditions[:parameters] || [])
|
75
|
+
|
76
|
+
HashHelpers.deep_merge(condition_parameters, path_parameters)
|
70
77
|
end
|
71
78
|
end
|
72
79
|
end
|
@@ -3,12 +3,13 @@ module DocMyRoutes
|
|
3
3
|
class RouteDocumentation
|
4
4
|
attr_accessor :summary, :notes, :status_codes, :examples_regex, :hidden,
|
5
5
|
:produces, :notes_ref
|
6
|
-
attr_reader :examples
|
6
|
+
attr_reader :examples, :parameters
|
7
7
|
|
8
8
|
def initialize
|
9
9
|
@status_codes = { 200 => DocMyRoutes::StatusCodeInfo::STATUS_CODES[200] }
|
10
10
|
@hidden = false
|
11
11
|
@produces = []
|
12
|
+
@parameters = {}
|
12
13
|
end
|
13
14
|
|
14
15
|
# A route documentation object MUST have a summary, otherwise is not
|
@@ -25,6 +26,7 @@ module DocMyRoutes
|
|
25
26
|
examples_regex: examples_regex,
|
26
27
|
produces: produces,
|
27
28
|
examples: examples,
|
29
|
+
parameters: parameters,
|
28
30
|
hidden: hidden?
|
29
31
|
}
|
30
32
|
end
|
@@ -33,6 +35,10 @@ module DocMyRoutes
|
|
33
35
|
@produces = values.flatten.compact
|
34
36
|
end
|
35
37
|
|
38
|
+
def add_parameter(name, options)
|
39
|
+
@parameters[name] = options
|
40
|
+
end
|
41
|
+
|
36
42
|
def status_codes=(route_status_codes)
|
37
43
|
@status_codes = Hash[route_status_codes.map do |code|
|
38
44
|
[code, DocMyRoutes::StatusCodeInfo::STATUS_CODES[code]]
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: doc_my_routes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.12.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Workday, Ltd.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-06-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -123,6 +123,7 @@ files:
|
|
123
123
|
- lib/doc_my_routes/doc/documentation.rb
|
124
124
|
- lib/doc_my_routes/doc/errors.rb
|
125
125
|
- lib/doc_my_routes/doc/examples_handler.rb
|
126
|
+
- lib/doc_my_routes/doc/hash_helpers.rb
|
126
127
|
- lib/doc_my_routes/doc/mapping.rb
|
127
128
|
- lib/doc_my_routes/doc/mixins/annotatable.rb
|
128
129
|
- lib/doc_my_routes/doc/route.rb
|