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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3b080daf187be65c5a0c472b6ea223962ecbabd2
4
- data.tar.gz: 46e57b55164f83abaab13f40c78f0cbdf3388a20
3
+ metadata.gz: 0f789a0b78d494649c621e36704e917d37d72cf5
4
+ data.tar.gz: 6374b29644c863962118ce3c76d0eecfff645a66
5
5
  SHA512:
6
- metadata.gz: 839472c90d4bf0766ff29f7fe404e0a987e11e16c9352678d29e554296dc27c7ef6b25fd0e550c39baddb7972cf74400cea5df025d06a52cf30432b81baa183c
7
- data.tar.gz: 8cb9cd53652fe153025650de1a0c6201c495b8c853cb14934e1141b55e6e16d6a4a871ac1ded68fbf568c114342f79b548f248377c7addec9287f95d7e521da5
6
+ metadata.gz: 61418fb9e733596422b95254798a1885b91411be88fdae64a8369d6790d7848797cbca11bc6e72dbd2b183b2897cc85e9dd9a2eeef7d2577432b4b1396521118
7
+ data.tar.gz: 05b3f7978092608493e1c189cec8d1b1974bcbd541f3d7a092e61ada04eb8db64ace13ce688c1f49fce7d3d02b8cc017a15c5c4e7d36fc7213ccfa02b097e9d8
data/etc/css/base.css CHANGED
@@ -248,7 +248,7 @@ table
248
248
  table td
249
249
  {
250
250
  border-top:1px solid #ccc;
251
- padding:.5em .5em .5em 0;
251
+ padding:.5em 1.5em .5em 0;
252
252
  }
253
253
 
254
254
  thead
@@ -282,4 +282,4 @@ article.example
282
282
  {
283
283
  color:#555;
284
284
  margin:1em;
285
- }
285
+ }
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 |param| %>
58
+ <% route[:parameters].each do |param_name, param_options| %>
55
59
  <tr>
56
- <td><%= param %></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
- }.merge(documentation.to_hash)
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
- if conditions[:parameters]
64
- conditions[:parameters]
65
- else
66
- route_pattern.split('/').map do |part|
67
- part.start_with?(':') ? part[1..-1].to_sym : nil
68
- end.compact
69
- end
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]]
@@ -1,4 +1,4 @@
1
1
  # DocMyRoutes version
2
2
  module DocMyRoutes
3
- VERSION = '0.11.1'
3
+ VERSION = '0.12.0'
4
4
  end
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.11.1
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: 2016-11-18 00:00:00.000000000 Z
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