brainstem 2.0.0 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +147 -0
- data/Gemfile.lock +68 -39
- data/lib/brainstem/api_docs.rb +9 -4
- data/lib/brainstem/api_docs/atlas.rb +3 -3
- data/lib/brainstem/api_docs/controller.rb +12 -4
- data/lib/brainstem/api_docs/controller_collection.rb +11 -2
- data/lib/brainstem/api_docs/endpoint.rb +17 -7
- data/lib/brainstem/api_docs/endpoint_collection.rb +9 -1
- data/lib/brainstem/api_docs/formatters/open_api_specification/helper.rb +19 -16
- data/lib/brainstem/api_docs/formatters/open_api_specification/version_2/endpoint/param_definitions_formatter.rb +52 -80
- data/lib/brainstem/api_docs/formatters/open_api_specification/version_2/endpoint/response_definitions_formatter.rb +64 -84
- data/lib/brainstem/api_docs/formatters/open_api_specification/version_2/endpoint_formatter.rb +1 -1
- data/lib/brainstem/api_docs/formatters/open_api_specification/version_2/field_definitions/endpoint_param_formatter.rb +39 -0
- data/lib/brainstem/api_docs/formatters/open_api_specification/version_2/field_definitions/presenter_field_formatter.rb +147 -0
- data/lib/brainstem/api_docs/formatters/open_api_specification/version_2/field_definitions/response_field_formatter.rb +146 -0
- data/lib/brainstem/api_docs/formatters/open_api_specification/version_2/presenter_formatter.rb +53 -55
- data/lib/brainstem/api_docs/formatters/open_api_specification/version_2/tags_formatter.rb +1 -1
- data/lib/brainstem/api_docs/presenter.rb +16 -8
- data/lib/brainstem/api_docs/presenter_collection.rb +8 -5
- data/lib/brainstem/api_docs/sinks/open_api_specification_sink.rb +3 -1
- data/lib/brainstem/cli/generate_api_docs_command.rb +4 -0
- data/lib/brainstem/concerns/controller_dsl.rb +90 -20
- data/lib/brainstem/concerns/presenter_dsl.rb +16 -8
- data/lib/brainstem/dsl/association.rb +12 -0
- data/lib/brainstem/dsl/fields_block.rb +1 -1
- data/lib/brainstem/version.rb +1 -1
- data/spec/brainstem/api_docs/controller_spec.rb +127 -5
- data/spec/brainstem/api_docs/endpoint_spec.rb +489 -57
- data/spec/brainstem/api_docs/formatters/open_api_specification/helper_spec.rb +15 -4
- data/spec/brainstem/api_docs/formatters/open_api_specification/version_2/endpoint/param_definitions_formatter_spec.rb +112 -66
- data/spec/brainstem/api_docs/formatters/open_api_specification/version_2/endpoint/response_definitions_formatter_spec.rb +404 -32
- data/spec/brainstem/api_docs/formatters/open_api_specification/version_2/field_definitions/endpoint_param_formatter_spec.rb +335 -0
- data/spec/brainstem/api_docs/formatters/open_api_specification/version_2/field_definitions/presenter_field_formatter_spec.rb +237 -0
- data/spec/brainstem/api_docs/formatters/open_api_specification/version_2/field_definitions/response_field_formatter_spec.rb +413 -0
- data/spec/brainstem/api_docs/formatters/open_api_specification/version_2/presenter_formatter_spec.rb +116 -4
- data/spec/brainstem/api_docs/presenter_spec.rb +406 -24
- data/spec/brainstem/cli/generate_api_docs_command_spec.rb +8 -0
- data/spec/brainstem/concerns/controller_dsl_spec.rb +606 -45
- data/spec/brainstem/concerns/presenter_dsl_spec.rb +34 -2
- data/spec/brainstem/dsl/association_spec.rb +54 -3
- metadata +11 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e825c08d783b4cecd7da03879db5545efd3e0697
|
4
|
+
data.tar.gz: 1478c23f3186dd7d065585d102245e995e6d9df5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 27a6f03a61dcd1371ffe0b7860563fe8ba94b6be14814f21ae35f4230d2af65fdcf1790f8a547c5913d11611a4ded52e8f17136cd6b6efb4d8a32adf40b1680c
|
7
|
+
data.tar.gz: 501e3164fade58216384cc7ddfe32a07e009af99029a75ddd0f1db19d770e356983af1d4786953997ff18ce3ea03a55e376db05a784db06088e0e3090b131b84
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,151 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
+ **2.1.0** - _05/10/2019_
|
4
|
+
### New Features
|
5
|
+
- Add the ability to mark properties as internal for Open API.
|
6
|
+
```ruby
|
7
|
+
class ContactsController < ApiController
|
8
|
+
internal! "Only used internally"
|
9
|
+
|
10
|
+
brainstem_params do
|
11
|
+
actions :index do
|
12
|
+
response :hash do
|
13
|
+
field :count, :integer,
|
14
|
+
info: "Total count of contacts",
|
15
|
+
internal: "Internal eyes only"
|
16
|
+
fields :contacts, :array,
|
17
|
+
item_type: :hash,
|
18
|
+
nodoc: true,
|
19
|
+
info: "Array of contact details" do
|
20
|
+
field :full_name, :string,
|
21
|
+
info: "Full name of the contact",
|
22
|
+
internal: true
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
```
|
29
|
+
|
30
|
+
- Add `--include-internal` option to CLI:
|
31
|
+
`brainstem generate --include-internal --open-api-specification=2` will generate documentation for
|
32
|
+
everything that is not marked as `nodoc`.
|
33
|
+
|
34
|
+
- Automatically generate documentation for associations
|
35
|
+
- `response_key` will be used if given, otherwise, it will use the name of the association appended
|
36
|
+
with `_id` or `_ids` for `has_many`.
|
37
|
+
|
38
|
+
Using the example below, the association for `PetCategory` will generate documentation for `shooby_id`,
|
39
|
+
while the `Owner` association will generate documentation for `owner_id`.
|
40
|
+
- The response will include references to all of the associations, including any `polymorphic_classes` added to
|
41
|
+
polymorphic associations.
|
42
|
+
|
43
|
+
In the example below, the documentation for the response will contain references to `PetCategory`, `Vaccine`,
|
44
|
+
`Owner`, `Dog`, and `Cat`.
|
45
|
+
|
46
|
+
```ruby
|
47
|
+
class PetsPresenter < Brainstem::Presenter
|
48
|
+
presents Pet
|
49
|
+
|
50
|
+
associations do
|
51
|
+
association :pet_category, PetCategory,
|
52
|
+
response_key: :shooby_id,
|
53
|
+
type: :belongs_to
|
54
|
+
association :vaccines, Vaccine,
|
55
|
+
response_key: :vaccine_ids,
|
56
|
+
type: :has_many
|
57
|
+
association :owner, Owner,
|
58
|
+
response_key: :owner_id,
|
59
|
+
type: :has_one
|
60
|
+
association :pettable, :polymorphic,
|
61
|
+
response_key: :pettable_ref,
|
62
|
+
polymorphic_classes: [Dog, Cat]
|
63
|
+
end
|
64
|
+
end
|
65
|
+
```
|
66
|
+
|
67
|
+
- Add support for non-static key fields in responses. When key is non-static, use the new DSL for response params.
|
68
|
+
See example below for usage.
|
69
|
+
|
70
|
+
```ruby
|
71
|
+
{
|
72
|
+
:attributes => {
|
73
|
+
:"#{name}_field" => 'world',
|
74
|
+
:"#{name}_ids" => [1, 2, 3],
|
75
|
+
:name => name
|
76
|
+
},
|
77
|
+
:"#{model.class_name}_klass" => {
|
78
|
+
:"#{model.class_name}_identifier" => model.identifier,
|
79
|
+
:"#{model.association_name}_ids" => [1, 2, 3]
|
80
|
+
}
|
81
|
+
}
|
82
|
+
```
|
83
|
+
|
84
|
+
A response with non-static key fields written above can be described as follows:
|
85
|
+
|
86
|
+
```ruby
|
87
|
+
class ContactsController < ApiController
|
88
|
+
brainstem_params do
|
89
|
+
actions :show do
|
90
|
+
response :hash do |response_param|
|
91
|
+
response_param.fields :attributes, :hash do |attributes|
|
92
|
+
attributes.dynamic_key_field :string
|
93
|
+
attributes.field :some_ids, :array, dynamic: true
|
94
|
+
attributes.field :name, :string, required: true
|
95
|
+
end
|
96
|
+
|
97
|
+
response_param.dynamic_key_field :hash do |dk|
|
98
|
+
dk.dynamic_key_field :string
|
99
|
+
dk.field :other_ids, :array, dynamic: true
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
```
|
106
|
+
|
107
|
+
- Add support for non-static key params. When key is non-static, use the new DSL for request params.
|
108
|
+
See example below for usage.
|
109
|
+
|
110
|
+
A param with non-static keys like `{ contact.id => 10, :"#{contact.friends_association_name}_ids" => [1, 2, 3] }`
|
111
|
+
can be described as follows:
|
112
|
+
|
113
|
+
```ruby
|
114
|
+
class ContactsController < ApiController
|
115
|
+
brainstem_params do
|
116
|
+
actions :create do
|
117
|
+
valid :info, :hash, required: true do |param|
|
118
|
+
param.valid_dynamic_param :integer, required: true
|
119
|
+
param.valid :some_ids, :array, dynamic: true
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
```
|
125
|
+
|
126
|
+
- Sort orders now default to directions `asc` and `desc`.
|
127
|
+
When direction is passed as false, no sort order is generated for the docs.
|
128
|
+
- ex.
|
129
|
+
```ruby
|
130
|
+
presenter_class.sort_order :created_at, value, info: "sorts by creation time", direction: false
|
131
|
+
```
|
132
|
+
|
133
|
+
- Add new DSL for nested arrays
|
134
|
+
```ruby
|
135
|
+
response :array, nested_level: 2, item_type: :hash do
|
136
|
+
nested.field :a, :string
|
137
|
+
nested.field :b, :integer
|
138
|
+
end
|
139
|
+
```
|
140
|
+
- An example of the response above: `[[{a: "string", b: 1}, "another string", 4]]`
|
141
|
+
|
142
|
+
### Bugfixes
|
143
|
+
- Nested required fields will now no longer bubble up the required to its parent. A deeply nested field that is
|
144
|
+
required will now only be required on its direct parent.
|
145
|
+
- Required fields for a create / update (POST / PUT) request are explicitly called out in the OAS specification
|
146
|
+
- Default top-level query params like `only `, `order `, `page`, `per_page`, `include` & `optional` are not
|
147
|
+
displayed when the endpoint is not returning brainstem models.
|
148
|
+
|
3
149
|
+ **2.0.0** - _05/17/2018_
|
4
150
|
- Introduce the capability to document custom response on endpoints
|
5
151
|
```ruby
|
@@ -20,6 +166,7 @@
|
|
20
166
|
end
|
21
167
|
end
|
22
168
|
end
|
169
|
+
end
|
23
170
|
```
|
24
171
|
- Add DSL on controllers to set Open API Specification 2.0 configurations
|
25
172
|
```ruby
|
data/Gemfile.lock
CHANGED
@@ -1,70 +1,99 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
brainstem (
|
4
|
+
brainstem (2.2.0)
|
5
5
|
activerecord (>= 4.1)
|
6
6
|
activesupport (>= 4.1)
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: https://rubygems.org/
|
10
10
|
specs:
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
11
|
+
actionpack (5.2.3)
|
12
|
+
actionview (= 5.2.3)
|
13
|
+
activesupport (= 5.2.3)
|
14
|
+
rack (~> 2.0)
|
15
|
+
rack-test (>= 0.6.3)
|
16
|
+
rails-dom-testing (~> 2.0)
|
17
|
+
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
18
|
+
actionview (5.2.3)
|
19
|
+
activesupport (= 5.2.3)
|
20
|
+
builder (~> 3.1)
|
21
|
+
erubi (~> 1.4)
|
22
|
+
rails-dom-testing (~> 2.0)
|
23
|
+
rails-html-sanitizer (~> 1.0, >= 1.0.3)
|
24
|
+
activemodel (5.2.3)
|
25
|
+
activesupport (= 5.2.3)
|
26
|
+
activerecord (5.2.3)
|
27
|
+
activemodel (= 5.2.3)
|
28
|
+
activesupport (= 5.2.3)
|
29
|
+
arel (>= 9.0)
|
30
|
+
activesupport (5.2.3)
|
18
31
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
19
|
-
i18n (
|
32
|
+
i18n (>= 0.7, < 2)
|
20
33
|
minitest (~> 5.1)
|
21
34
|
tzinfo (~> 1.1)
|
22
|
-
arel (
|
35
|
+
arel (9.0.0)
|
36
|
+
builder (3.2.3)
|
23
37
|
coderay (1.1.2)
|
24
|
-
concurrent-ruby (1.
|
25
|
-
|
38
|
+
concurrent-ruby (1.1.5)
|
39
|
+
crass (1.0.4)
|
40
|
+
database_cleaner (1.7.0)
|
26
41
|
db-query-matchers (0.9.0)
|
27
42
|
activesupport (>= 4.0, <= 6.0)
|
28
43
|
rspec (~> 3.0)
|
29
44
|
diff-lcs (1.3)
|
30
|
-
|
45
|
+
erubi (1.8.0)
|
46
|
+
i18n (1.6.0)
|
31
47
|
concurrent-ruby (~> 1.0)
|
32
|
-
|
33
|
-
|
48
|
+
loofah (2.2.3)
|
49
|
+
crass (~> 1.0.2)
|
50
|
+
nokogiri (>= 1.5.9)
|
51
|
+
method_source (0.9.2)
|
52
|
+
mini_portile2 (2.4.0)
|
53
|
+
minitest (5.11.3)
|
34
54
|
mysql2 (0.4.10)
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
55
|
+
nokogiri (1.10.3)
|
56
|
+
mini_portile2 (~> 2.4.0)
|
57
|
+
pry (0.12.2)
|
58
|
+
coderay (~> 1.1.0)
|
59
|
+
method_source (~> 0.9.0)
|
60
|
+
pry-nav (0.3.0)
|
61
|
+
pry (>= 0.9.10, < 0.13.0)
|
62
|
+
rack (2.0.7)
|
63
|
+
rack-test (1.1.0)
|
64
|
+
rack (>= 1.0, < 3)
|
65
|
+
rails-dom-testing (2.0.3)
|
66
|
+
activesupport (>= 4.2.0)
|
67
|
+
nokogiri (>= 1.6)
|
68
|
+
rails-html-sanitizer (1.1.0)
|
69
|
+
loofah (~> 2.2, >= 2.2.2)
|
70
|
+
rake (12.3.3)
|
71
|
+
redcarpet (3.5.0)
|
43
72
|
rr (1.2.1)
|
44
|
-
rspec (3.
|
45
|
-
rspec-core (~> 3.
|
46
|
-
rspec-expectations (~> 3.
|
47
|
-
rspec-mocks (~> 3.
|
48
|
-
rspec-core (3.
|
49
|
-
rspec-support (~> 3.
|
50
|
-
rspec-expectations (3.
|
73
|
+
rspec (3.8.0)
|
74
|
+
rspec-core (~> 3.8.0)
|
75
|
+
rspec-expectations (~> 3.8.0)
|
76
|
+
rspec-mocks (~> 3.8.0)
|
77
|
+
rspec-core (3.8.2)
|
78
|
+
rspec-support (~> 3.8.0)
|
79
|
+
rspec-expectations (3.8.4)
|
51
80
|
diff-lcs (>= 1.2.0, < 2.0)
|
52
|
-
rspec-support (~> 3.
|
53
|
-
rspec-mocks (3.
|
81
|
+
rspec-support (~> 3.8.0)
|
82
|
+
rspec-mocks (3.8.1)
|
54
83
|
diff-lcs (>= 1.2.0, < 2.0)
|
55
|
-
rspec-support (~> 3.
|
56
|
-
rspec-support (3.
|
57
|
-
|
58
|
-
sqlite3 (1.3.13)
|
84
|
+
rspec-support (~> 3.8.0)
|
85
|
+
rspec-support (3.8.2)
|
86
|
+
sqlite3 (1.4.1)
|
59
87
|
thread_safe (0.3.6)
|
60
|
-
tzinfo (1.2.
|
88
|
+
tzinfo (1.2.5)
|
61
89
|
thread_safe (~> 0.1)
|
62
|
-
yard (0.9.
|
90
|
+
yard (0.9.20)
|
63
91
|
|
64
92
|
PLATFORMS
|
65
93
|
ruby
|
66
94
|
|
67
95
|
DEPENDENCIES
|
96
|
+
actionpack
|
68
97
|
brainstem!
|
69
98
|
database_cleaner
|
70
99
|
db-query-matchers
|
@@ -79,4 +108,4 @@ DEPENDENCIES
|
|
79
108
|
yard
|
80
109
|
|
81
110
|
BUNDLED WITH
|
82
|
-
1.
|
111
|
+
1.17.3
|
data/lib/brainstem/api_docs.rb
CHANGED
@@ -141,7 +141,7 @@ module Brainstem
|
|
141
141
|
FORMATTERS = {
|
142
142
|
|
143
143
|
# Formatter for entire response
|
144
|
-
document:
|
144
|
+
document: {},
|
145
145
|
|
146
146
|
# Formatters for collections
|
147
147
|
controller_collection: {},
|
@@ -149,9 +149,9 @@ module Brainstem
|
|
149
149
|
presenter_collection: {},
|
150
150
|
|
151
151
|
# Formatters for individual entities
|
152
|
-
controller:
|
153
|
-
endpoint:
|
154
|
-
presenter:
|
152
|
+
controller: {},
|
153
|
+
endpoint: {},
|
154
|
+
presenter: {},
|
155
155
|
|
156
156
|
# Formatter for Open API Specifications
|
157
157
|
info: {},
|
@@ -159,6 +159,11 @@ module Brainstem
|
|
159
159
|
parameters: {},
|
160
160
|
security: {},
|
161
161
|
tags: {},
|
162
|
+
|
163
|
+
# Formatter for Open API Specifications Individual field / param definition
|
164
|
+
endpoint_param: {},
|
165
|
+
presenter_field: {},
|
166
|
+
response_field: {},
|
162
167
|
}
|
163
168
|
end
|
164
169
|
end
|
@@ -18,9 +18,9 @@ module Brainstem
|
|
18
18
|
include Concerns::Optional
|
19
19
|
|
20
20
|
def initialize(introspector, options = {})
|
21
|
-
self.endpoints = EndpointCollection.new(self)
|
22
|
-
self.controllers = ControllerCollection.new(self)
|
23
|
-
self.presenters = ::Brainstem::ApiDocs::PresenterCollection.new(self)
|
21
|
+
self.endpoints = EndpointCollection.new(self, options)
|
22
|
+
self.controllers = ControllerCollection.new(self, options)
|
23
|
+
self.presenters = ::Brainstem::ApiDocs::PresenterCollection.new(self, options)
|
24
24
|
self.resolver = Resolver.new(self)
|
25
25
|
|
26
26
|
self.controller_matches = []
|
@@ -22,7 +22,8 @@ module Brainstem
|
|
22
22
|
:name,
|
23
23
|
:endpoints,
|
24
24
|
:filename_pattern,
|
25
|
-
:atlas
|
25
|
+
:atlas,
|
26
|
+
:include_internal
|
26
27
|
|
27
28
|
attr_writer :filename_pattern,
|
28
29
|
:filename_link_pattern
|
@@ -33,7 +34,8 @@ module Brainstem
|
|
33
34
|
:name,
|
34
35
|
:formatters,
|
35
36
|
:filename_pattern,
|
36
|
-
:filename_link_pattern
|
37
|
+
:filename_link_pattern,
|
38
|
+
:include_internal
|
37
39
|
]
|
38
40
|
end
|
39
41
|
|
@@ -77,7 +79,7 @@ module Brainstem
|
|
77
79
|
end
|
78
80
|
|
79
81
|
def nodoc?
|
80
|
-
default_configuration
|
82
|
+
nodoc_for?(default_configuration)
|
81
83
|
end
|
82
84
|
|
83
85
|
def title
|
@@ -101,13 +103,19 @@ module Brainstem
|
|
101
103
|
#
|
102
104
|
def contextual_documentation(key)
|
103
105
|
default_configuration.has_key?(key) &&
|
104
|
-
!default_configuration[key]
|
106
|
+
!nodoc_for?(default_configuration[key]) &&
|
105
107
|
default_configuration[key][:info]
|
106
108
|
end
|
107
109
|
|
108
110
|
def valid_sorted_endpoints
|
109
111
|
endpoints.sorted_with_actions_in_controller(const)
|
110
112
|
end
|
113
|
+
|
114
|
+
private
|
115
|
+
|
116
|
+
def nodoc_for?(config)
|
117
|
+
!!(config[:nodoc] || (config[:internal] && !include_internal))
|
118
|
+
end
|
111
119
|
end
|
112
120
|
end
|
113
121
|
end
|
@@ -5,13 +5,22 @@ module Brainstem
|
|
5
5
|
module ApiDocs
|
6
6
|
class ControllerCollection < AbstractCollection
|
7
7
|
|
8
|
+
attr_accessor :include_internal
|
9
|
+
|
10
|
+
def valid_options
|
11
|
+
super | [
|
12
|
+
:include_internal
|
13
|
+
]
|
14
|
+
end
|
15
|
+
|
8
16
|
#
|
9
17
|
# Creates a new controller from a route object and appends it to the
|
10
18
|
# collection.
|
11
19
|
def create_from_route(route)
|
12
20
|
Controller.new(atlas,
|
13
|
-
const:
|
14
|
-
name:
|
21
|
+
const: route[:controller],
|
22
|
+
name: route[:controller_name].split("/").last,
|
23
|
+
include_internal: include_internal
|
15
24
|
).tap { |controller| self.<< controller }
|
16
25
|
end
|
17
26
|
|
@@ -23,7 +23,8 @@ module Brainstem
|
|
23
23
|
:controller,
|
24
24
|
:controller_name,
|
25
25
|
:action,
|
26
|
-
:presenter
|
26
|
+
:presenter,
|
27
|
+
:include_internal
|
27
28
|
]
|
28
29
|
end
|
29
30
|
|
@@ -38,7 +39,8 @@ module Brainstem
|
|
38
39
|
:controller,
|
39
40
|
:controller_name,
|
40
41
|
:action,
|
41
|
-
:atlas
|
42
|
+
:atlas,
|
43
|
+
:include_internal
|
42
44
|
|
43
45
|
#
|
44
46
|
# Pretty prints each endpoint.
|
@@ -94,7 +96,7 @@ module Brainstem
|
|
94
96
|
# Is the entire endpoint undocumentable?
|
95
97
|
#
|
96
98
|
def nodoc?
|
97
|
-
action_configuration
|
99
|
+
nodoc_for?(action_configuration)
|
98
100
|
end
|
99
101
|
|
100
102
|
def title
|
@@ -156,7 +158,8 @@ module Brainstem
|
|
156
158
|
.with_indifferent_access
|
157
159
|
.inject(ActiveSupport::HashWithIndifferentAccess.new) do |result, (field_name_proc, field_config)|
|
158
160
|
|
159
|
-
next result if field_config
|
161
|
+
next result if nodoc_for?(field_config)
|
162
|
+
field_config = field_config.except(:nodoc, :internal)
|
160
163
|
|
161
164
|
field_name = evaluate_field_name(field_name_proc)
|
162
165
|
if field_config.has_key?(:ancestors)
|
@@ -199,7 +202,8 @@ module Brainstem
|
|
199
202
|
.except(:_config)
|
200
203
|
.inject(custom_config_tree) do |result, (field_name_proc, field_config)|
|
201
204
|
|
202
|
-
next result if field_config
|
205
|
+
next result if nodoc_for?(field_config)
|
206
|
+
field_config = field_config.except(:nodoc, :internal)
|
203
207
|
|
204
208
|
field_name = evaluate_field_name(field_name_proc)
|
205
209
|
if field_config.has_key?(:ancestors)
|
@@ -243,7 +247,7 @@ module Brainstem
|
|
243
247
|
#
|
244
248
|
def declared_presented_class
|
245
249
|
valid_presents.has_key?(:target_class) &&
|
246
|
-
!valid_presents
|
250
|
+
!nodoc_for?(valid_presents) &&
|
247
251
|
valid_presents[:target_class]
|
248
252
|
end
|
249
253
|
|
@@ -281,7 +285,7 @@ module Brainstem
|
|
281
285
|
#
|
282
286
|
def contextual_documentation(key)
|
283
287
|
action_configuration.has_key?(key) &&
|
284
|
-
!action_configuration[key]
|
288
|
+
!nodoc_for?(action_configuration[key]) &&
|
285
289
|
action_configuration[key][:info]
|
286
290
|
end
|
287
291
|
|
@@ -305,6 +309,12 @@ module Brainstem
|
|
305
309
|
presenter_path.relative_path_from(controller_path).to_s
|
306
310
|
end
|
307
311
|
end
|
312
|
+
|
313
|
+
private
|
314
|
+
|
315
|
+
def nodoc_for?(config)
|
316
|
+
!!(config[:nodoc] || (config[:internal] && !include_internal))
|
317
|
+
end
|
308
318
|
end
|
309
319
|
end
|
310
320
|
end
|