brainstem 1.4.0 → 1.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/Gemfile.lock +3 -3
- data/lib/brainstem/api_docs.rb +3 -8
- data/lib/brainstem/api_docs/introspectors/rails_introspector.rb +25 -10
- data/lib/brainstem/cli/generate_api_docs_command.rb +6 -0
- data/lib/brainstem/version.rb +1 -1
- data/spec/brainstem/api_docs/introspectors/rails_introspector_spec.rb +39 -19
- data/spec/brainstem/api_docs_spec.rb +1 -1
- data/spec/brainstem/cli/generate_api_docs_command_spec.rb +9 -0
- data/spec/dummy/rails.rb +23 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: deb35356d8b8edc1d42d302e6716a4842e22945b
|
4
|
+
data.tar.gz: 9c9c852103fec856d5033181e8b866ab95194a5a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 51d786a3d4d6a4601f69d6d2089b8096745f1142f7b6d16784a5789ac0b03a5e251394fb18e1825ea4f2da5f7834c505e846c0ff040ce5e4546ea9eca18b1cb1
|
7
|
+
data.tar.gz: a3dda68262d0597f1d8fbc7c14b6224c679e6820ca261a54b0c996a5faaa700c9312d698e7c854cf80827efadc834453b90ac650f97661d0acf66861a75f8b68
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
+ **1.4.1** - _05/09/2018_
|
4
|
+
- Add the capability to specify an alternate base application / engine the routes are derived from.
|
5
|
+
This capability is specific to documemtation generation.
|
6
|
+
|
3
7
|
+ **1.3.0** - _04/12/2018_
|
4
8
|
- Add the capability to nest fields under evaluable parent blocks where the nested fields are evaluated
|
5
9
|
with the resulting value of the parent field.
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
brainstem (1.4.
|
4
|
+
brainstem (1.4.1)
|
5
5
|
activerecord (>= 4.1)
|
6
6
|
activesupport (>= 4.1)
|
7
7
|
|
@@ -22,12 +22,12 @@ GEM
|
|
22
22
|
arel (8.0.0)
|
23
23
|
coderay (1.1.2)
|
24
24
|
concurrent-ruby (1.0.5)
|
25
|
-
database_cleaner (1.6.
|
25
|
+
database_cleaner (1.6.1)
|
26
26
|
db-query-matchers (0.9.0)
|
27
27
|
activesupport (>= 4.0, <= 6.0)
|
28
28
|
rspec (~> 3.0)
|
29
29
|
diff-lcs (1.3)
|
30
|
-
i18n (0.9.
|
30
|
+
i18n (0.9.0)
|
31
31
|
concurrent-ruby (~> 1.0)
|
32
32
|
method_source (0.9.0)
|
33
33
|
minitest (5.10.3)
|
data/lib/brainstem/api_docs.rb
CHANGED
@@ -108,16 +108,11 @@ module Brainstem
|
|
108
108
|
end
|
109
109
|
|
110
110
|
#
|
111
|
-
# Defines the application or engine that all routes will be fetched from.
|
111
|
+
# Defines the alternate application or engine that all routes will be fetched from.
|
112
112
|
#
|
113
|
-
#
|
114
|
-
# later.
|
115
|
-
#
|
116
|
-
# @see Brainstem::ApiDocs::RailsIntrospector#base_application_proc=
|
113
|
+
# @see Brainstem::ApiDocs::RailsIntrospector#base_application_class=
|
117
114
|
#
|
118
|
-
config_accessor(:
|
119
|
-
Proc.new { Rails.application }
|
120
|
-
end
|
115
|
+
config_accessor(:base_application_class) { nil }
|
121
116
|
|
122
117
|
|
123
118
|
#
|
@@ -15,7 +15,7 @@ module Brainstem
|
|
15
15
|
#
|
16
16
|
def load_environment!
|
17
17
|
load rails_environment_file unless env_already_loaded?
|
18
|
-
|
18
|
+
base_application.eager_load!
|
19
19
|
|
20
20
|
validate!
|
21
21
|
rescue LoadError => e
|
@@ -47,6 +47,16 @@ module Brainstem
|
|
47
47
|
end
|
48
48
|
|
49
49
|
|
50
|
+
#
|
51
|
+
# Returns the alternate application class or defaults to Rails.application
|
52
|
+
#
|
53
|
+
# @return [Class] The base application class
|
54
|
+
#
|
55
|
+
def base_application
|
56
|
+
base_application_class.present? ? base_application_class.constantize : ::Rails.application
|
57
|
+
end
|
58
|
+
|
59
|
+
|
50
60
|
#
|
51
61
|
# Returns an array of hashes describing the endpoints of the
|
52
62
|
# application. See +routes_method+ for the keys of those hashes.
|
@@ -70,7 +80,7 @@ module Brainstem
|
|
70
80
|
:rails_environment_file,
|
71
81
|
:base_presenter_class,
|
72
82
|
:base_controller_class,
|
73
|
-
:
|
83
|
+
:base_application_class
|
74
84
|
]
|
75
85
|
end
|
76
86
|
|
@@ -177,21 +187,26 @@ module Brainstem
|
|
177
187
|
|
178
188
|
|
179
189
|
#
|
180
|
-
# Returns
|
190
|
+
# Returns the name of the alternate application or engine to get routes from.
|
181
191
|
#
|
182
|
-
#
|
192
|
+
# Because the initializer that contains configuration data is unlikely
|
193
|
+
# to have been loaded, this may also return a Proc, which will be called
|
194
|
+
# after the environment is loaded.
|
183
195
|
#
|
184
|
-
|
185
|
-
|
196
|
+
# @return [String,Nil] returns the name of the alternate application or engine.
|
197
|
+
#
|
198
|
+
def base_application_class
|
199
|
+
proc_or_string = @base_application_class
|
200
|
+
proc_or_string.respond_to?(:call) ? proc_or_string.call : proc_or_string
|
186
201
|
end
|
187
202
|
|
188
203
|
|
189
204
|
#
|
190
|
-
# Allows for the specification for an alternate base application
|
205
|
+
# Allows for the specification for an alternate base application name
|
191
206
|
#
|
192
|
-
# @param [
|
207
|
+
# @param [Nil,String] returns the name of the alternate application or engine
|
193
208
|
#
|
194
|
-
attr_writer :
|
209
|
+
attr_writer :base_application_class
|
195
210
|
|
196
211
|
|
197
212
|
#
|
@@ -207,7 +222,7 @@ module Brainstem
|
|
207
222
|
#
|
208
223
|
def routes_method
|
209
224
|
@routes_method ||= Proc.new do
|
210
|
-
|
225
|
+
base_application.routes.routes.map do |route|
|
211
226
|
next unless route.defaults.has_key?(:controller) &&
|
212
227
|
controller_const = "#{route.defaults[:controller]}_controller"
|
213
228
|
.classify
|
@@ -49,6 +49,7 @@ module Brainstem
|
|
49
49
|
args_for_introspector: {
|
50
50
|
base_presenter_class: ::Brainstem::ApiDocs.method(:base_presenter_class),
|
51
51
|
base_controller_class: ::Brainstem::ApiDocs.method(:base_controller_class),
|
52
|
+
base_application_class: ::Brainstem::ApiDocs.method(:base_application_class),
|
52
53
|
},
|
53
54
|
},
|
54
55
|
}
|
@@ -148,6 +149,11 @@ module Brainstem
|
|
148
149
|
end
|
149
150
|
|
150
151
|
|
152
|
+
opts.on('--base-application-class=CLASS', "which class to look up routes on") do |o|
|
153
|
+
options[:builder][:args_for_introspector][:base_application_class] = o
|
154
|
+
end
|
155
|
+
|
156
|
+
|
151
157
|
opts.on('--controller-matches=MATCH',
|
152
158
|
'a case-sensitive regexp used to winnow the list of '\
|
153
159
|
'controllers. It is matched against the constant, not '\
|
data/lib/brainstem/version.rb
CHANGED
@@ -114,6 +114,43 @@ module Brainstem
|
|
114
114
|
end
|
115
115
|
end
|
116
116
|
|
117
|
+
describe "#base_application" do
|
118
|
+
before do
|
119
|
+
stub.any_instance_of(described_class).validate!
|
120
|
+
end
|
121
|
+
|
122
|
+
context "when custom base_application_class is not given" do
|
123
|
+
subject do
|
124
|
+
described_class.with_loaded_environment(default_args)
|
125
|
+
end
|
126
|
+
|
127
|
+
it "returns nil" do
|
128
|
+
expect(subject.send(:base_application_class)).to be_nil
|
129
|
+
end
|
130
|
+
|
131
|
+
it "returns the descendants of the base controller class" do
|
132
|
+
expect(subject.base_application).to eq(::Rails.application)
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
context "when custom base_application_class is given" do
|
137
|
+
subject do
|
138
|
+
described_class.with_loaded_environment(
|
139
|
+
default_args.merge(base_application_class: "::FakeApiEngine")
|
140
|
+
)
|
141
|
+
end
|
142
|
+
|
143
|
+
it "allows the specification of a custom base_application_class" do
|
144
|
+
expect(subject.send(:base_application_class).to_s)
|
145
|
+
.to eq "::FakeApiEngine"
|
146
|
+
end
|
147
|
+
|
148
|
+
it "returns the descendants of the base controller class" do
|
149
|
+
expect(subject.base_application).to eq(FakeApiEngine)
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
117
154
|
describe "#routes" do
|
118
155
|
let(:a_proc) { Object.new }
|
119
156
|
|
@@ -161,27 +198,10 @@ module Brainstem
|
|
161
198
|
end
|
162
199
|
|
163
200
|
context "with an alternate base application or engine provided" do
|
164
|
-
let(:
|
165
|
-
let(:routes) { FakeRailsRoutesObject.new([route_1, route_2]) }
|
166
|
-
let(:route_1) {
|
167
|
-
FakeRailsRoute.new(
|
168
|
-
"fake_descendant",
|
169
|
-
FakeRailsRoutePathObject.new(spec: '/fake_route_1'),
|
170
|
-
{ controller: "fake_descendant", action: "show" },
|
171
|
-
{ :request_method => /^GET$/ }
|
172
|
-
)
|
173
|
-
}
|
174
|
-
let(:route_2) {
|
175
|
-
FakeRailsRoute.new(
|
176
|
-
"fake_descendant",
|
177
|
-
FakeRailsRoutePathObject.new(spec: '/fake_route_2'),
|
178
|
-
{ controller: "fake_descendant", action: "show" },
|
179
|
-
{ :request_method => /^GET$/ }
|
180
|
-
)
|
181
|
-
}
|
201
|
+
let(:base_application_class) { "FakeApiEngine" }
|
182
202
|
|
183
203
|
subject do
|
184
|
-
described_class.with_loaded_environment(default_args.merge({
|
204
|
+
described_class.with_loaded_environment(default_args.merge({ base_application_class: base_application_class }))
|
185
205
|
end
|
186
206
|
|
187
207
|
it "recognizes the configured application or engine's routes" do
|
@@ -33,6 +33,15 @@ module Brainstem
|
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
|
+
context "when --base-application-class" do
|
37
|
+
let(:args) { %w(--base-application-class=::Api::Engine) }
|
38
|
+
|
39
|
+
it "sets sink to a ControllerPresenterMultifileSink" do
|
40
|
+
expect(subject.options).to have_key :builder
|
41
|
+
expect(subject.options[:builder][:args_for_introspector][:base_application_class]).to eq("::Api::Engine")
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
36
45
|
context "when --output-dir" do
|
37
46
|
let(:args) { %w(--output-dir=./blah) }
|
38
47
|
|
data/spec/dummy/rails.rb
CHANGED
@@ -39,7 +39,6 @@ class Rails
|
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
|
-
|
43
42
|
class FakeBasePresenter; end
|
44
43
|
class FakeDescendantPresenter < FakeBasePresenter; end
|
45
44
|
|
@@ -47,3 +46,26 @@ class FakeBaseController; end
|
|
47
46
|
class FakeDescendantController < FakeBaseController; end
|
48
47
|
|
49
48
|
class FakeNonDescendantController; end
|
49
|
+
|
50
|
+
class FakeApiEngine
|
51
|
+
def self.eager_load!;end
|
52
|
+
def self.routes
|
53
|
+
@routes ||= begin
|
54
|
+
route_1 = FakeRailsRoute.new(
|
55
|
+
"fake_descendant",
|
56
|
+
FakeRailsRoutePathObject.new(spec: '/fake_route_1'),
|
57
|
+
{ controller: "fake_descendant", action: "show" },
|
58
|
+
{ :request_method => /^GET$/ }
|
59
|
+
)
|
60
|
+
|
61
|
+
route_2 = FakeRailsRoute.new(
|
62
|
+
"fake_descendant",
|
63
|
+
FakeRailsRoutePathObject.new(spec: '/fake_route_2'),
|
64
|
+
{ controller: "fake_descendant", action: "show" },
|
65
|
+
{ :request_method => /^GET$/ }
|
66
|
+
)
|
67
|
+
|
68
|
+
FakeRailsRoutesObject.new([ route_1, route_2 ])
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: brainstem
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mavenlink
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-05-
|
11
|
+
date: 2018-05-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|