doc_my_routes 0.11.1 → 0.12.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.
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