hanami 0.8.0 → 0.9.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 +4 -4
- data/CHANGELOG.md +23 -0
- data/FEATURES.md +13 -0
- data/README.md +28 -1
- data/hanami.gemspec +20 -17
- data/lib/hanami.rb +106 -7
- data/lib/hanami/action/routing_helpers.rb +2 -2
- data/lib/hanami/app.rb +72 -0
- data/lib/hanami/application.rb +144 -183
- data/lib/hanami/application_configuration.rb +1541 -0
- data/lib/hanami/application_name.rb +2 -2
- data/lib/hanami/application_namespace.rb +12 -0
- data/lib/hanami/assets/asset.rb +3 -1
- data/lib/hanami/assets/static.rb +3 -9
- data/lib/hanami/cli.rb +10 -7
- data/lib/hanami/cli_sub_commands/assets.rb +1 -9
- data/lib/hanami/cli_sub_commands/generate.rb +16 -0
- data/lib/hanami/commands/apps.rb +4 -0
- data/lib/hanami/commands/assets/precompile.rb +6 -19
- data/lib/hanami/commands/command.rb +64 -0
- data/lib/hanami/commands/console.rb +37 -26
- data/lib/hanami/commands/db/apply.rb +4 -2
- data/lib/hanami/commands/db/console.rb +11 -27
- data/lib/hanami/commands/db/create.rb +4 -2
- data/lib/hanami/commands/db/drop.rb +4 -2
- data/lib/hanami/commands/db/migrate.rb +11 -5
- data/lib/hanami/commands/db/prepare.rb +4 -2
- data/lib/hanami/commands/db/version.rb +4 -2
- data/lib/hanami/commands/generate/abstract.rb +5 -7
- data/lib/hanami/commands/generate/action.rb +18 -6
- data/lib/hanami/commands/generate/app.rb +15 -2
- data/lib/hanami/commands/generate/migration.rb +3 -2
- data/lib/hanami/commands/generate/model.rb +4 -3
- data/lib/hanami/commands/generate/secret_token.rb +31 -0
- data/lib/hanami/commands/new/abstract.rb +14 -5
- data/lib/hanami/commands/new/container.rb +1 -0
- data/lib/hanami/commands/routes.rb +5 -22
- data/lib/hanami/commands/server.rb +14 -142
- data/lib/hanami/components.rb +107 -0
- data/lib/hanami/components/app/assets.rb +55 -0
- data/lib/hanami/components/app/controller.rb +69 -0
- data/lib/hanami/components/app/logger.rb +30 -0
- data/lib/hanami/components/app/routes.rb +51 -0
- data/lib/hanami/components/app/view.rb +40 -0
- data/lib/hanami/components/component.rb +166 -0
- data/lib/hanami/components/components.rb +366 -0
- data/lib/hanami/components/routes_inspector.rb +70 -0
- data/lib/hanami/config/load_paths.rb +7 -6
- data/lib/hanami/config/mapper.rb +1 -1
- data/lib/hanami/config/security.rb +0 -8
- data/lib/hanami/configuration.rb +27 -1697
- data/lib/hanami/env.rb +67 -0
- data/lib/hanami/environment.rb +31 -21
- data/lib/hanami/environment_application_configurations.rb +30 -0
- data/lib/hanami/frameworks.rb +1 -0
- data/lib/hanami/generators/app/application.rb.tt +2 -2
- data/lib/hanami/generators/application/app/Gemfile.tt +3 -1
- data/lib/hanami/generators/application/app/config/application.rb.tt +2 -2
- data/lib/hanami/generators/application/app/gitignore_with_sqlite.tt +3 -0
- data/lib/hanami/generators/application/app/lib/app_name.rb.tt +4 -25
- data/lib/hanami/generators/application/app/spec_helper.rb.minitest.tt +1 -1
- data/lib/hanami/generators/application/app/spec_helper.rb.rspec.tt +1 -1
- data/lib/hanami/generators/application/container/Gemfile.tt +3 -1
- data/lib/hanami/generators/application/container/capybara.rb.rspec.tt +1 -1
- data/lib/hanami/generators/application/container/config.ru.tt +1 -1
- data/lib/hanami/generators/application/container/config/environment.rb.tt +35 -1
- data/lib/hanami/generators/application/container/features_helper.rb.minitest.tt +1 -1
- data/lib/hanami/generators/application/container/gitignore_with_sqlite.tt +3 -0
- data/lib/hanami/generators/application/container/lib/project.rb.tt +1 -57
- data/lib/hanami/generators/application/container/spec_helper.rb.minitest.tt +1 -1
- data/lib/hanami/generators/application/container/spec_helper.rb.rspec.tt +2 -3
- data/lib/hanami/generators/database_config.rb +8 -11
- data/lib/hanami/generators/model/entity.rb.tt +1 -2
- data/lib/hanami/generators/model/repository.rb.tt +1 -2
- data/lib/hanami/generators/template_engine.rb +8 -3
- data/lib/hanami/generators/test_framework.rb +4 -3
- data/lib/hanami/middleware.rb +41 -21
- data/lib/hanami/rake_helper.rb +6 -8
- data/lib/hanami/server.rb +43 -33
- data/lib/hanami/static.rb +2 -2
- data/lib/hanami/version.rb +35 -1
- data/lib/hanami/welcome.rb +4 -5
- metadata +68 -42
- data/lib/hanami/commands/db/abstract.rb +0 -19
- data/lib/hanami/config/configure.rb +0 -17
- data/lib/hanami/config/mapping.rb +0 -12
- data/lib/hanami/container.rb +0 -71
- data/lib/hanami/generators/application/container/gitignore_with_db.tt +0 -4
- data/lib/hanami/loader.rb +0 -257
- data/lib/hanami/repositories/car_repository.rb +0 -3
- data/lib/hanami/repositories/name_repository.rb +0 -3
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
require 'hanami/utils'
|
|
2
|
+
|
|
3
|
+
module Hanami
|
|
4
|
+
# Registered components
|
|
5
|
+
#
|
|
6
|
+
# @since 0.9.0
|
|
7
|
+
# @api private
|
|
8
|
+
#
|
|
9
|
+
# @see Hanami::Components
|
|
10
|
+
module Components # rubocop:disable Metrics/ModuleLength
|
|
11
|
+
# Require the entire project
|
|
12
|
+
#
|
|
13
|
+
# @since 0.9.0
|
|
14
|
+
# @api private
|
|
15
|
+
register 'all' do
|
|
16
|
+
requires 'model', 'apps', 'finalizers'
|
|
17
|
+
|
|
18
|
+
resolve { true }
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Check if code reloading is enabled
|
|
22
|
+
#
|
|
23
|
+
# @since 0.9.0
|
|
24
|
+
# @api private
|
|
25
|
+
register 'code_reloading' do
|
|
26
|
+
prepare do
|
|
27
|
+
begin
|
|
28
|
+
require 'shotgun'
|
|
29
|
+
rescue LoadError # rubocop:disable Lint/HandleExceptions
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
resolve do
|
|
34
|
+
defined?(Shotgun) &&
|
|
35
|
+
Components['environment'].code_reloading? &&
|
|
36
|
+
true
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Tries to load hanami-model, if available for the project
|
|
41
|
+
#
|
|
42
|
+
# @since 0.9.0
|
|
43
|
+
# @api private
|
|
44
|
+
#
|
|
45
|
+
# @example With hanami-model
|
|
46
|
+
# Hanami::Components.resolve('model')
|
|
47
|
+
# Hanami::Components['model'] # => true
|
|
48
|
+
#
|
|
49
|
+
# @example Without hanami-model
|
|
50
|
+
# Hanami::Components.resolve('model')
|
|
51
|
+
# Hanami::Components['model'] # => nil
|
|
52
|
+
register 'model' do
|
|
53
|
+
requires 'model.configuration', 'model.sql'
|
|
54
|
+
|
|
55
|
+
resolve do
|
|
56
|
+
if Components['model.configuration']
|
|
57
|
+
Hanami::Model.load!
|
|
58
|
+
true
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Tries to evaluate hanami-model configuration, if available for the project
|
|
64
|
+
#
|
|
65
|
+
# @since 0.9.0
|
|
66
|
+
# @api private
|
|
67
|
+
#
|
|
68
|
+
# @example With hanami-model
|
|
69
|
+
# Hanami::Components.resolve('model.configuration')
|
|
70
|
+
# Hanami::Components['model.configuration'].class # => Hanami::Model::Configuration
|
|
71
|
+
#
|
|
72
|
+
# @example Without hanami-model
|
|
73
|
+
# Hanami::Components.resolve('model.configuration')
|
|
74
|
+
# Hanami::Components['model.configuration'].class # => NilClass
|
|
75
|
+
register 'model.configuration' do
|
|
76
|
+
requires 'model.bundled'
|
|
77
|
+
|
|
78
|
+
resolve do |configuration|
|
|
79
|
+
if Components['model.bundled']
|
|
80
|
+
Hanami::Model.configure(&configuration.model)
|
|
81
|
+
Hanami::Model.configuration
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# Tries to load SQL support for hanami, if available for the project
|
|
87
|
+
#
|
|
88
|
+
# @since 0.9.0
|
|
89
|
+
# @api private
|
|
90
|
+
#
|
|
91
|
+
# @example With hanami-model
|
|
92
|
+
# Hanami::Components.resolve('model.sql')
|
|
93
|
+
# Hanami::Components['model.sql'] # => true
|
|
94
|
+
#
|
|
95
|
+
# @example Without hanami-model
|
|
96
|
+
# Hanami::Components.resolve('model.sql')
|
|
97
|
+
# Hanami::Components['model.sql'] # => nil
|
|
98
|
+
register 'model.sql' do
|
|
99
|
+
requires 'model.configuration'
|
|
100
|
+
|
|
101
|
+
prepare do
|
|
102
|
+
begin
|
|
103
|
+
require 'hanami/model/sql'
|
|
104
|
+
rescue LoadError # rubocop:disable Lint/HandleExceptions
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
resolve do
|
|
109
|
+
true if defined?(Hanami::Model::Sql)
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# Check if hanami-model is bundled
|
|
114
|
+
#
|
|
115
|
+
# @since 0.9.0
|
|
116
|
+
# @api private
|
|
117
|
+
#
|
|
118
|
+
# @example With hanami-model
|
|
119
|
+
# Hanami::Components.resolve('model.bundled')
|
|
120
|
+
# Hanami::Components['model.bundled'] # => true
|
|
121
|
+
#
|
|
122
|
+
# @example Without hanami-model
|
|
123
|
+
# Hanami::Components.resolve('model.bundled')
|
|
124
|
+
# Hanami::Components['model.bundled'] # => nil
|
|
125
|
+
register 'model.bundled' do
|
|
126
|
+
prepare do
|
|
127
|
+
begin
|
|
128
|
+
require 'hanami/model'
|
|
129
|
+
rescue LoadError # rubocop:disable Lint/HandleExceptions
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
resolve do
|
|
134
|
+
true if defined?(Hanami::Model)
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# Loads the routes for all the mounted Hanami/Rack applications
|
|
139
|
+
#
|
|
140
|
+
# This is used only by `hanami routes` command.
|
|
141
|
+
#
|
|
142
|
+
# @since 0.9.0
|
|
143
|
+
# @api private
|
|
144
|
+
register 'routes.inspector' do
|
|
145
|
+
requires 'apps.configurations'
|
|
146
|
+
|
|
147
|
+
prepare do
|
|
148
|
+
require 'hanami/components/routes_inspector'
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
resolve do |configuration|
|
|
152
|
+
RoutesInspector.new(configuration)
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
# Loads all the Hanami applications in the project
|
|
157
|
+
#
|
|
158
|
+
# @since 0.9.0
|
|
159
|
+
# @api private
|
|
160
|
+
register 'apps' do
|
|
161
|
+
resolve do |configuration|
|
|
162
|
+
configuration.apps do |app|
|
|
163
|
+
component('app').call(app)
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
true
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
# Evaluates all the Hanami applications' configurations in the project
|
|
171
|
+
#
|
|
172
|
+
# @since 0.9.0
|
|
173
|
+
# @api private
|
|
174
|
+
register 'apps.configurations' do
|
|
175
|
+
resolve do |configuration|
|
|
176
|
+
configuration.apps do |app|
|
|
177
|
+
component('app.configuration').call(app)
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
true
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
# Evaluates all the Hanami assets configurations for each application in the project
|
|
185
|
+
#
|
|
186
|
+
# This is used only by `hanami assets precompile` command.
|
|
187
|
+
#
|
|
188
|
+
# @since 0.9.0
|
|
189
|
+
# @api private
|
|
190
|
+
register 'apps.assets.configurations' do
|
|
191
|
+
requires 'apps.configurations'
|
|
192
|
+
|
|
193
|
+
prepare do
|
|
194
|
+
require 'hanami/components/app/assets'
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
resolve do |configuration|
|
|
198
|
+
[].tap do |result|
|
|
199
|
+
configuration.apps do |app|
|
|
200
|
+
result << Components::App::Assets.resolve(app)
|
|
201
|
+
end
|
|
202
|
+
end
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
# Finalizers for the project
|
|
207
|
+
#
|
|
208
|
+
# @since 0.9.0
|
|
209
|
+
# @api private
|
|
210
|
+
register 'finalizers' do
|
|
211
|
+
requires 'finalizers.initializers'
|
|
212
|
+
|
|
213
|
+
resolve { true }
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
# Load project initializers
|
|
217
|
+
#
|
|
218
|
+
# @since 0.9.0
|
|
219
|
+
# @api private
|
|
220
|
+
register 'finalizers.initializers' do
|
|
221
|
+
run do
|
|
222
|
+
Hanami::Utils.require!(
|
|
223
|
+
Hanami.root.join('config', 'initializers')
|
|
224
|
+
)
|
|
225
|
+
end
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
# Configure, load and finalize a Hanami application in the project
|
|
229
|
+
#
|
|
230
|
+
# @since 0.9.0
|
|
231
|
+
# @api private
|
|
232
|
+
register 'app' do
|
|
233
|
+
run do |app|
|
|
234
|
+
['app.configuration', 'app.frameworks', 'app.code', 'app.routes', 'app.finalizer'].each do |c|
|
|
235
|
+
component(c).call(app)
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
resolved(app.app_name, true)
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
# Evaluate the configuration of a single Hanami application in the project
|
|
243
|
+
#
|
|
244
|
+
# @since 0.9.0
|
|
245
|
+
# @api private
|
|
246
|
+
register 'app.configuration' do
|
|
247
|
+
run do |app|
|
|
248
|
+
resolved("#{app.app_name}.configuration") do
|
|
249
|
+
ApplicationConfiguration.new(app.namespace, app.configurations, app.path_prefix).tap do |config|
|
|
250
|
+
app.configuration = config
|
|
251
|
+
end
|
|
252
|
+
end
|
|
253
|
+
end
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
# Evaluate Hanami frameworks configurations of a single Hanami application in the project
|
|
257
|
+
#
|
|
258
|
+
# @since 0.9.0
|
|
259
|
+
# @api private
|
|
260
|
+
register 'app.frameworks' do
|
|
261
|
+
run do |app|
|
|
262
|
+
['app.controller', 'app.view', 'app.assets', 'app.logger'].each do |c|
|
|
263
|
+
component(c).call(app)
|
|
264
|
+
end
|
|
265
|
+
end
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
# Evaluate hanami-controller configuration of a single Hanami application in the project
|
|
269
|
+
#
|
|
270
|
+
# @since 0.9.0
|
|
271
|
+
# @api private
|
|
272
|
+
register 'app.controller' do
|
|
273
|
+
prepare do
|
|
274
|
+
require 'hanami/components/app/controller'
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
run do |app|
|
|
278
|
+
Components::App::Controller.resolve(app)
|
|
279
|
+
end
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
# Evaluate hanami-view configuration of a single Hanami application in the project
|
|
283
|
+
#
|
|
284
|
+
# @since 0.9.0
|
|
285
|
+
# @api private
|
|
286
|
+
register 'app.view' do
|
|
287
|
+
prepare do
|
|
288
|
+
require 'hanami/components/app/view'
|
|
289
|
+
end
|
|
290
|
+
|
|
291
|
+
run do |app|
|
|
292
|
+
Components::App::View.resolve(app)
|
|
293
|
+
end
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
# Evaluate hanami-assets configuration of a single Hanami application in the project
|
|
297
|
+
#
|
|
298
|
+
# @since 0.9.0
|
|
299
|
+
# @api private
|
|
300
|
+
register 'app.assets' do
|
|
301
|
+
prepare do
|
|
302
|
+
require 'hanami/components/app/assets'
|
|
303
|
+
end
|
|
304
|
+
|
|
305
|
+
run do |app|
|
|
306
|
+
Components::App::Assets.resolve(app)
|
|
307
|
+
end
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
# Evaluate hanami/logger configuration of a single Hanami application in the project
|
|
311
|
+
#
|
|
312
|
+
# @since 0.9.0
|
|
313
|
+
# @api private
|
|
314
|
+
register 'app.logger' do
|
|
315
|
+
prepare do
|
|
316
|
+
require 'hanami/components/app/logger'
|
|
317
|
+
end
|
|
318
|
+
|
|
319
|
+
run do |app|
|
|
320
|
+
Components::App::Logger.resolve(app)
|
|
321
|
+
end
|
|
322
|
+
end
|
|
323
|
+
|
|
324
|
+
# Load the code for a single Hanami application in the project
|
|
325
|
+
#
|
|
326
|
+
# @since 0.9.0
|
|
327
|
+
# @api private
|
|
328
|
+
register 'app.code' do
|
|
329
|
+
run do |app|
|
|
330
|
+
config = app.configuration
|
|
331
|
+
config.load_paths.load!
|
|
332
|
+
end
|
|
333
|
+
end
|
|
334
|
+
|
|
335
|
+
# Load the routes for a single Hanami application in the project
|
|
336
|
+
#
|
|
337
|
+
# @since 0.9.0
|
|
338
|
+
# @api private
|
|
339
|
+
register 'app.routes' do
|
|
340
|
+
prepare do
|
|
341
|
+
require 'hanami/components/app/routes'
|
|
342
|
+
end
|
|
343
|
+
|
|
344
|
+
run do |app|
|
|
345
|
+
Components::App::Routes.resolve(app)
|
|
346
|
+
end
|
|
347
|
+
end
|
|
348
|
+
|
|
349
|
+
# Finalize a single Hanami application in the project
|
|
350
|
+
#
|
|
351
|
+
# @since 0.9.0
|
|
352
|
+
# @api private
|
|
353
|
+
register 'app.finalizer' do
|
|
354
|
+
run do |app|
|
|
355
|
+
config = app.configuration
|
|
356
|
+
namespace = app.namespace
|
|
357
|
+
|
|
358
|
+
config.middleware.load!
|
|
359
|
+
|
|
360
|
+
namespace.module_eval %(#{namespace}::Controller.load!)
|
|
361
|
+
namespace.module_eval %(#{namespace}::View.load!)
|
|
362
|
+
namespace.module_eval %(#{namespace}::Assets.load!)
|
|
363
|
+
end
|
|
364
|
+
end
|
|
365
|
+
end
|
|
366
|
+
end
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
require 'hanami/routing/default'
|
|
2
|
+
require_relative './app/routes'
|
|
3
|
+
|
|
4
|
+
module Hanami
|
|
5
|
+
module Components
|
|
6
|
+
# Project's routes inspector
|
|
7
|
+
#
|
|
8
|
+
# @since 0.9.0
|
|
9
|
+
# @api private
|
|
10
|
+
class RoutesInspector
|
|
11
|
+
# @param configuration [Hanami::Configuration]
|
|
12
|
+
#
|
|
13
|
+
# @since 0.9.0
|
|
14
|
+
# @api private
|
|
15
|
+
def initialize(configuration)
|
|
16
|
+
@configuration = configuration
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Returns a printable version of the project routes
|
|
20
|
+
#
|
|
21
|
+
# @return [String] printable routes
|
|
22
|
+
#
|
|
23
|
+
# @since 0.9.0
|
|
24
|
+
# @api private
|
|
25
|
+
def inspect
|
|
26
|
+
routes.map do |r|
|
|
27
|
+
r.inspector.to_s
|
|
28
|
+
end.join("\n")
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
private
|
|
32
|
+
|
|
33
|
+
# @since 0.9.0
|
|
34
|
+
# @api private
|
|
35
|
+
attr_reader :configuration
|
|
36
|
+
|
|
37
|
+
# @since 0.9.0
|
|
38
|
+
# @api private
|
|
39
|
+
def routes
|
|
40
|
+
configuration.mounted.each_with_object([]) do |(klass, app), result|
|
|
41
|
+
result << if hanami_app?(klass)
|
|
42
|
+
resolve_hanami_app_router(app)
|
|
43
|
+
else
|
|
44
|
+
resolve_rack_app_router(app)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# @since 0.9.0
|
|
50
|
+
# @api private
|
|
51
|
+
def hanami_app?(klass)
|
|
52
|
+
klass.ancestors.include?(Hanami::Application)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# @since 0.9.0
|
|
56
|
+
# @api private
|
|
57
|
+
def resolve_hanami_app_router(app)
|
|
58
|
+
App::Routes.application_routes(app)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# @since 0.9.0
|
|
62
|
+
# @api private
|
|
63
|
+
def resolve_rack_app_router(app)
|
|
64
|
+
Hanami::Router.new do
|
|
65
|
+
mount app.name, at: app.path_prefix
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require 'hanami/utils
|
|
1
|
+
require 'hanami/utils'
|
|
2
2
|
|
|
3
3
|
module Hanami
|
|
4
4
|
module Config
|
|
@@ -7,21 +7,22 @@ module Hanami
|
|
|
7
7
|
# @since 0.1.0
|
|
8
8
|
# @api private
|
|
9
9
|
class LoadPaths < Utils::LoadPaths
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
def load!(root)
|
|
10
|
+
def initialize(root)
|
|
11
|
+
super()
|
|
13
12
|
@root = root
|
|
13
|
+
end
|
|
14
14
|
|
|
15
|
+
def load!
|
|
15
16
|
each do |path|
|
|
16
|
-
|
|
17
|
+
Utils.require!(path)
|
|
17
18
|
end
|
|
18
19
|
end
|
|
19
20
|
|
|
20
21
|
protected
|
|
22
|
+
|
|
21
23
|
def realpath(path)
|
|
22
24
|
@root.join(path).realpath
|
|
23
25
|
end
|
|
24
26
|
end
|
|
25
27
|
end
|
|
26
28
|
end
|
|
27
|
-
|