hanami 1.3.5 → 2.0.0.alpha1

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.
Files changed (147) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +51 -41
  3. data/FEATURES.md +2 -12
  4. data/LICENSE.md +1 -1
  5. data/README.md +5 -8
  6. data/bin/hanami +6 -4
  7. data/hanami.gemspec +24 -28
  8. data/lib/hanami/application.rb +44 -176
  9. data/lib/hanami/boot.rb +6 -0
  10. data/lib/hanami/cli/commands/command.rb +21 -29
  11. data/lib/hanami/cli/commands/server.rb +63 -14
  12. data/lib/hanami/cli/commands.rb +5 -42
  13. data/lib/hanami/configuration/cookies.rb +24 -0
  14. data/lib/hanami/configuration/middleware.rb +8 -28
  15. data/lib/hanami/configuration/security.rb +141 -0
  16. data/lib/hanami/configuration/sessions.rb +50 -0
  17. data/lib/hanami/configuration.rb +181 -191
  18. data/lib/hanami/container.rb +107 -0
  19. data/lib/hanami/frameworks.rb +24 -18
  20. data/lib/hanami/routes.rb +17 -205
  21. data/lib/hanami/server.rb +5 -69
  22. data/lib/hanami/version.rb +3 -1
  23. data/lib/hanami.rb +39 -243
  24. metadata +36 -233
  25. data/lib/hanami/action/csrf_protection.rb +0 -211
  26. data/lib/hanami/action/routing_helpers.rb +0 -40
  27. data/lib/hanami/app.rb +0 -96
  28. data/lib/hanami/application_configuration.rb +0 -1495
  29. data/lib/hanami/application_name.rb +0 -108
  30. data/lib/hanami/application_namespace.rb +0 -14
  31. data/lib/hanami/assets/asset.rb +0 -72
  32. data/lib/hanami/assets/static.rb +0 -102
  33. data/lib/hanami/cli/commands/assets/precompile.rb +0 -42
  34. data/lib/hanami/cli/commands/assets.rb +0 -16
  35. data/lib/hanami/cli/commands/console.rb +0 -95
  36. data/lib/hanami/cli/commands/db/apply.rb +0 -32
  37. data/lib/hanami/cli/commands/db/console.rb +0 -44
  38. data/lib/hanami/cli/commands/db/create.rb +0 -32
  39. data/lib/hanami/cli/commands/db/drop.rb +0 -32
  40. data/lib/hanami/cli/commands/db/migrate.rb +0 -39
  41. data/lib/hanami/cli/commands/db/prepare.rb +0 -32
  42. data/lib/hanami/cli/commands/db/rollback.rb +0 -59
  43. data/lib/hanami/cli/commands/db/version.rb +0 -32
  44. data/lib/hanami/cli/commands/db.rb +0 -32
  45. data/lib/hanami/cli/commands/destroy/action.rb +0 -137
  46. data/lib/hanami/cli/commands/destroy/app.rb +0 -159
  47. data/lib/hanami/cli/commands/destroy/mailer.rb +0 -74
  48. data/lib/hanami/cli/commands/destroy/migration.rb +0 -51
  49. data/lib/hanami/cli/commands/destroy/model.rb +0 -84
  50. data/lib/hanami/cli/commands/destroy.rb +0 -26
  51. data/lib/hanami/cli/commands/generate/action/action.erb +0 -7
  52. data/lib/hanami/cli/commands/generate/action/action_spec.minitest.erb +0 -11
  53. data/lib/hanami/cli/commands/generate/action/action_spec.rspec.erb +0 -9
  54. data/lib/hanami/cli/commands/generate/action/action_without_view.erb +0 -7
  55. data/lib/hanami/cli/commands/generate/action/view.erb +0 -7
  56. data/lib/hanami/cli/commands/generate/action/view_spec.minitest.erb +0 -12
  57. data/lib/hanami/cli/commands/generate/action/view_spec.rspec.erb +0 -10
  58. data/lib/hanami/cli/commands/generate/action.rb +0 -321
  59. data/lib/hanami/cli/commands/generate/app/application.erb +0 -313
  60. data/lib/hanami/cli/commands/generate/app/favicon.ico +0 -0
  61. data/lib/hanami/cli/commands/generate/app/gitkeep.erb +0 -0
  62. data/lib/hanami/cli/commands/generate/app/layout.erb +0 -7
  63. data/lib/hanami/cli/commands/generate/app/layout_spec.minitest.erb +0 -10
  64. data/lib/hanami/cli/commands/generate/app/layout_spec.rspec.erb +0 -10
  65. data/lib/hanami/cli/commands/generate/app/routes.erb +0 -5
  66. data/lib/hanami/cli/commands/generate/app/template.erb.erb +0 -10
  67. data/lib/hanami/cli/commands/generate/app/template.haml.erb +0 -7
  68. data/lib/hanami/cli/commands/generate/app/template.slim.erb +0 -8
  69. data/lib/hanami/cli/commands/generate/app.rb +0 -243
  70. data/lib/hanami/cli/commands/generate/mailer/mailer.erb +0 -9
  71. data/lib/hanami/cli/commands/generate/mailer/mailer_spec.minitest.erb +0 -7
  72. data/lib/hanami/cli/commands/generate/mailer/mailer_spec.rspec.erb +0 -5
  73. data/lib/hanami/cli/commands/generate/mailer.rb +0 -104
  74. data/lib/hanami/cli/commands/generate/migration/migration.erb +0 -4
  75. data/lib/hanami/cli/commands/generate/migration.rb +0 -41
  76. data/lib/hanami/cli/commands/generate/model/entity.erb +0 -2
  77. data/lib/hanami/cli/commands/generate/model/entity_spec.minitest.erb +0 -5
  78. data/lib/hanami/cli/commands/generate/model/entity_spec.rspec.erb +0 -3
  79. data/lib/hanami/cli/commands/generate/model/migration.erb +0 -10
  80. data/lib/hanami/cli/commands/generate/model/repository.erb +0 -5
  81. data/lib/hanami/cli/commands/generate/model/repository_spec.minitest.erb +0 -5
  82. data/lib/hanami/cli/commands/generate/model/repository_spec.rspec.erb +0 -3
  83. data/lib/hanami/cli/commands/generate/model.rb +0 -125
  84. data/lib/hanami/cli/commands/generate/secret.rb +0 -48
  85. data/lib/hanami/cli/commands/generate.rb +0 -28
  86. data/lib/hanami/cli/commands/new/.env.development.erb +0 -3
  87. data/lib/hanami/cli/commands/new/.env.test.erb +0 -3
  88. data/lib/hanami/cli/commands/new/.gitkeep.erb +0 -0
  89. data/lib/hanami/cli/commands/new/Gemfile.erb +0 -57
  90. data/lib/hanami/cli/commands/new/README.md.erb +0 -33
  91. data/lib/hanami/cli/commands/new/config/boot.erb +0 -2
  92. data/lib/hanami/cli/commands/new/config/environment.erb +0 -49
  93. data/lib/hanami/cli/commands/new/config.ru.erb +0 -3
  94. data/lib/hanami/cli/commands/new/gitignore.erb +0 -4
  95. data/lib/hanami/cli/commands/new/gitignore_with_sqlite.erb +0 -5
  96. data/lib/hanami/cli/commands/new/hanamirc.erb +0 -3
  97. data/lib/hanami/cli/commands/new/lib/project.erb +0 -2
  98. data/lib/hanami/cli/commands/new/minitest/Rakefile.erb +0 -12
  99. data/lib/hanami/cli/commands/new/minitest/features_helper.erb +0 -11
  100. data/lib/hanami/cli/commands/new/minitest/spec_helper.erb +0 -7
  101. data/lib/hanami/cli/commands/new/rspec/Rakefile.erb +0 -9
  102. data/lib/hanami/cli/commands/new/rspec/capybara.erb +0 -8
  103. data/lib/hanami/cli/commands/new/rspec/features_helper.erb +0 -12
  104. data/lib/hanami/cli/commands/new/rspec/rspec.erb +0 -2
  105. data/lib/hanami/cli/commands/new/rspec/spec_helper.erb +0 -103
  106. data/lib/hanami/cli/commands/new/schema.sql.erb +0 -0
  107. data/lib/hanami/cli/commands/new.rb +0 -578
  108. data/lib/hanami/cli/commands/project.rb +0 -421
  109. data/lib/hanami/cli/commands/routes.rb +0 -21
  110. data/lib/hanami/cli/commands/templates.rb +0 -31
  111. data/lib/hanami/cli/commands/version.rb +0 -19
  112. data/lib/hanami/common_logger.rb +0 -109
  113. data/lib/hanami/components/app/assets.rb +0 -59
  114. data/lib/hanami/components/app/controller.rb +0 -74
  115. data/lib/hanami/components/app/routes.rb +0 -59
  116. data/lib/hanami/components/app/view.rb +0 -44
  117. data/lib/hanami/components/component.rb +0 -182
  118. data/lib/hanami/components/components.rb +0 -479
  119. data/lib/hanami/components/routes_inspector.rb +0 -72
  120. data/lib/hanami/components.rb +0 -156
  121. data/lib/hanami/config/cookies.rb +0 -69
  122. data/lib/hanami/config/framework_configuration.rb +0 -43
  123. data/lib/hanami/config/load_paths.rb +0 -46
  124. data/lib/hanami/config/mapper.rb +0 -47
  125. data/lib/hanami/config/routes.rb +0 -20
  126. data/lib/hanami/config/security.rb +0 -110
  127. data/lib/hanami/config/sessions.rb +0 -119
  128. data/lib/hanami/configuration/app.rb +0 -21
  129. data/lib/hanami/early_hints.rb +0 -129
  130. data/lib/hanami/env.rb +0 -69
  131. data/lib/hanami/environment.rb +0 -541
  132. data/lib/hanami/environment_application_configurations.rb +0 -37
  133. data/lib/hanami/hanamirc.rb +0 -169
  134. data/lib/hanami/mailer/glue.rb +0 -27
  135. data/lib/hanami/middleware_stack.rb +0 -172
  136. data/lib/hanami/rake_helper.rb +0 -78
  137. data/lib/hanami/rake_tasks.rb +0 -3
  138. data/lib/hanami/rendering_policy.rb +0 -94
  139. data/lib/hanami/routing/default.rb +0 -32
  140. data/lib/hanami/setup.rb +0 -3
  141. data/lib/hanami/static.rb +0 -63
  142. data/lib/hanami/templates/default.html.erb +0 -30
  143. data/lib/hanami/templates/welcome.html.erb +0 -52
  144. data/lib/hanami/views/default.rb +0 -37
  145. data/lib/hanami/views/default_template_finder.rb +0 -22
  146. data/lib/hanami/views/null_view.rb +0 -15
  147. data/lib/hanami/welcome.rb +0 -41
@@ -1,1495 +0,0 @@
1
- require 'hanami/utils/kernel'
2
- require 'hanami/environment'
3
- require 'hanami/middleware_stack'
4
- require 'hanami/config/cookies'
5
- require 'hanami/config/framework_configuration'
6
- require 'hanami/config/load_paths'
7
- require 'hanami/config/routes'
8
- require 'hanami/config/security'
9
- require 'hanami/config/sessions'
10
-
11
- module Hanami
12
- # Configuration for a Hanami application
13
- #
14
- # @since 0.1.0
15
- class ApplicationConfiguration
16
- # @since 0.2.0
17
- # @api private
18
- #
19
- # @see Hanami::Configuration#ssl?
20
- SSL_SCHEME = 'https'.freeze
21
-
22
- # @since 1.0.0
23
- # @api private
24
- DEFAULT_SSL_PORT = 443
25
-
26
- # @since 0.1.0
27
- # @api private
28
- attr_reader :namespace
29
-
30
- # @since 0.4.0
31
- # @api private
32
- attr_reader :path_prefix
33
-
34
- # Initialize a new configuration instance
35
- #
36
- # @param namespace [Module]
37
- # @param configurations [Hanami::EnvironmentApplicationConfigurations]
38
- # @return [Hanami::Configuration]
39
- #
40
- # @since 0.1.0
41
- # @api private
42
- def initialize(namespace, configurations, path_prefix, env: Environment.new)
43
- @namespace = namespace
44
- @configurations = configurations
45
- @path_prefix = path_prefix
46
- @env = env
47
- @handle_exceptions = true
48
-
49
- evaluate_configurations!
50
- end
51
-
52
- # Returns the security policy
53
- #
54
- # @return [Hanami::Config::Security]
55
- #
56
- # @since 0.3.0
57
- #
58
- # @see Hanami::Config::Security
59
- #
60
- # @example Getting values
61
- # require 'hanami'
62
- #
63
- # module Bookshelf
64
- # class Application < Hanami::Application
65
- # configure do
66
- # security.x_frame_options "ALLOW ALL"
67
- # security.content_security_policy "script-src 'self' https://apis.example.com"
68
- # end
69
- # end
70
- # end
71
- #
72
- # Bookshelf::Application.configuration.security.x_frame_options # => "ALLOW ALL"
73
- # Bookshelf::Application.configuration.security.content_security_policy # => "script-src 'self' https://apis.example.com"
74
- #
75
- # @example Setting values
76
- # require 'hanami'
77
- #
78
- # module Bookshelf
79
- # class Application < Hanami::Application
80
- # configure do
81
- # security.x_frame_options "ALLOW ALL"
82
- # security.content_security_policy "script-src 'self' https://apis.example.com"
83
- # end
84
- # end
85
- # end
86
- def security
87
- @security ||= Config::Security.new
88
- end
89
-
90
- # Force ssl redirection if http scheme is set
91
- #
92
- # @return [Boolean]
93
- #
94
- # @since 0.4.0
95
- #
96
- # @see Hanami::Routing::ForceSsl
97
- def force_ssl(value = nil)
98
- if value
99
- @force_ssl = value
100
- else
101
- @force_ssl || false
102
- end
103
- end
104
-
105
- # The root of the application
106
- #
107
- # By default it returns the current directory, for this reason, **all the
108
- # commands must be executed from the top level directory of the project**.
109
- #
110
- # If for some reason, that constraint above cannot be satisfied, please
111
- # configure the root directory, so that commands can be executed from
112
- # everywhere.
113
- #
114
- # This is part of a DSL, for this reason when this method is called with
115
- # an argument, it will set the corresponding instance variable. When
116
- # called without, it will return the already set value, or the default.
117
- #
118
- # @overload root(value)
119
- # Sets the given value
120
- # @param value [String,Pathname,#to_pathname] The root directory of the app
121
- #
122
- # @overload root
123
- # Gets the value
124
- # @return [Pathname]
125
- # @raise [Errno::ENOENT] if the path cannot be found
126
- #
127
- # @since 0.1.0
128
- #
129
- # @see http://www.ruby-doc.org/core/Dir.html#method-c-pwd
130
- #
131
- # @example Getting the value
132
- # require 'hanami'
133
- #
134
- # module Bookshelf
135
- # class Application < Hanami::Application
136
- # end
137
- # end
138
- #
139
- # Bookshelf::Application.configuration.root # => #<Pathname:/path/to/root>
140
- #
141
- # @example Setting the value
142
- # require 'hanami'
143
- #
144
- # module Bookshelf
145
- # class Application < Hanami::Application
146
- # configure do
147
- # root '/path/to/another/root'
148
- # end
149
- # end
150
- # end
151
- def root(value = nil)
152
- if value
153
- @root = value
154
- else
155
- Utils::Kernel.Pathname(@root || Dir.pwd).realpath
156
- end
157
- end
158
-
159
- # A Hanami::Layout for this application
160
- #
161
- # By default it's `nil`.
162
- #
163
- # It accepts a Symbol as layout name. When the application is loaded, it
164
- # will lookup for the corresponding class.
165
- #
166
- # All the views will use this layout, unless otherwise specified.
167
- #
168
- # This is part of a DSL, for this reason when this method is called with
169
- # an argument, it will set the corresponding instance variable. When
170
- # called without, it will return the already set value, or the default.
171
- #
172
- # @overload layout(value)
173
- # Sets the given value
174
- # @param value [Symbol] the layout name
175
- #
176
- # @overload layout
177
- # Gets the value
178
- # @return [Symbol,nil] the layout name
179
- #
180
- # @since 0.1.0
181
- #
182
- # @see http://rdoc.info/gems/hanami-view/Hanami/Layout
183
- # @see http://rdoc.info/gems/hanami-view/Hanami/View/Configuration:layout
184
- #
185
- # @example Getting the value
186
- # require 'hanami'
187
- #
188
- # module Bookshelf
189
- # class Application < Hanami::Application
190
- # end
191
- # end
192
- #
193
- # Bookshelf::Application.configuration.layout # => nil
194
- #
195
- # # All the views will render without a layout
196
- #
197
- # @example Setting the value
198
- # require 'hanami'
199
- #
200
- # module Bookshelf
201
- # class Application < Hanami::Application
202
- # configure do
203
- # layout :application
204
- # end
205
- # end
206
- #
207
- # module Views
208
- # module Dashboard
209
- # class Index
210
- # include Bookshelf::Views
211
- # end
212
- #
213
- # class JsonIndex < Index
214
- # layout nil
215
- # end
216
- # end
217
- # end
218
- # end
219
- #
220
- # Bookshelf::Application.configuration.namespace layout => :application
221
- #
222
- # # All the views will use Bookshelf::Views::ApplicationLayout, unless
223
- # # they set a different value.
224
- #
225
- # Bookshelf::Views::Dashboard::Index.layout
226
- # # => Bookshelf::Views::ApplicationLayout
227
- #
228
- # Bookshelf::Views::Dashboard::JsonIndex.layout
229
- # # => Hanami::View::Rendering::NullLayout
230
- def layout(value = nil)
231
- if value
232
- @layout = value
233
- else
234
- @layout
235
- end
236
- end
237
-
238
- # Templates root.
239
- # The application will recursively look for templates under this path.
240
- #
241
- # By default it's equal to the application `root`.
242
- #
243
- # Otherwise, you can specify a different relative path under `root`.
244
- #
245
- # This is part of a DSL, for this reason when this method is called with
246
- # an argument, it will set the corresponding instance variable. When
247
- # called without, it will return the already set value, or the default.
248
- #
249
- # @overload templates(value)
250
- # Sets the given value
251
- # @param value [String] the relative path to the templates root.
252
- #
253
- # @overload templates
254
- # Gets the value
255
- # @return [Pathname] templates root
256
- #
257
- # @since 0.1.0
258
- #
259
- # @see Hanami::Configuration#root
260
- # @see http://rdoc.info/gems/hanami-view/Hanami/View/Configuration:root
261
- #
262
- # @example Getting the value
263
- # require 'hanami'
264
- #
265
- # module Bookshelf
266
- # class Application < Hanami::Application
267
- # end
268
- # end
269
- #
270
- # Bookshelf::Application.configuration.templates
271
- # # => #<Pathname:/root/path>
272
- #
273
- # @example Setting the value
274
- # require 'hanami'
275
- #
276
- # module Bookshelf
277
- # class Application < Hanami::Application
278
- # configure do
279
- # templates 'app/templates'
280
- # end
281
- # end
282
- # end
283
- #
284
- # Bookshelf::Application.configuration.templates
285
- # # => #<Pathname:/root/path/app/templates>
286
- def templates(value = nil)
287
- if value
288
- @templates = value
289
- else
290
- root.join @templates.to_s
291
- end
292
- end
293
-
294
- # The application will serve the static assets under these directories.
295
- #
296
- # By default it's equal to the `public/` directory under the application
297
- # `root`.
298
- #
299
- # Otherwise, you can add different relatives paths under `root`.
300
- #
301
- # @overload assets
302
- # Gets the value
303
- # @return [Hanami::Config::Assets] assets root
304
- #
305
- # @since 0.1.0
306
- #
307
- # @example Getting the value
308
- # require 'hanami'
309
- #
310
- # module Bookshelf
311
- # class Application < Hanami::Application
312
- # end
313
- # end
314
- #
315
- # Bookshelf::Application.configuration.assets
316
- # # => #<Pathname:/root/path/public>
317
- #
318
- # @example Adding new assets paths
319
- # require 'hanami'
320
- #
321
- # module Bookshelf
322
- # class Application < Hanami::Application
323
- # configure do
324
- # assets do
325
- # sources << [
326
- # 'vendor/assets'
327
- # ]
328
- # end
329
- # end
330
- # end
331
- # end
332
- #
333
- # Bookshelf::Application.configuration.assets
334
- # # => #<Hanami::Config::Assets @root=#<Pathname:/root/path/assets>, @paths=["public"]>
335
- def assets(&blk)
336
- if @assets
337
- @assets.__add(&blk)
338
- else
339
- @assets ||= Config::FrameworkConfiguration.new(&blk)
340
- end
341
- end
342
-
343
- # Configure cookies
344
- # Enable cookies (disabled by default).
345
- #
346
- # This is part of a DSL, for this reason when this method is called with
347
- # an argument, it will set the corresponding instance variable. When
348
- # called without, it will return the already set value, or the default.
349
- #
350
- # @overload cookies(options)
351
- # Sets the given value with their options.
352
- # @param options [Hash, TrueClass, FalseClass]
353
- #
354
- # @overload cookies
355
- # Gets the value.
356
- # @return [Hanami::Config::Cookies]
357
- #
358
- # @example Getting the value
359
- # require 'hanami'
360
- #
361
- # module Bookshelf
362
- # class Application < Hanami::Application
363
- # end
364
- # end
365
- #
366
- # Bookshelf::Application.configuration.cookies
367
- # # => #<Hanami::Config::Cookies:0x0000000329f880 @options={}, @default_options={:httponly=>true, :secure=>false}>
368
- #
369
- # @example Setting the value
370
- # require 'hanami'
371
- #
372
- # module Bookshelf
373
- # class Application < Hanami::Application
374
- # configure do
375
- # cookies domain: 'hanamirb.org'
376
- # end
377
- # end
378
- # end
379
- #
380
- # Bookshelf::Application.configuration.cookies
381
- # # => #<Hanami::Config::Cookies:0x0000000329f880 @options={:domain=>'hanamirb.org'}, @default_options={:domain=>'hanamirb.org', :httponly=>true, :secure=>false}>
382
- def cookies(options = nil)
383
- if options.nil?
384
- @cookies ||= Config::Cookies.new(self, options)
385
- else
386
- @cookies = Config::Cookies.new(self, options)
387
- end
388
- end
389
-
390
- # Configure sessions
391
- # Enable sessions (disabled by default).
392
- #
393
- # This is part of a DSL, for this reason when this method is called with
394
- # an argument, it will set the corresponding instance variable. When
395
- # called without, it will return the already set value, or the default.
396
- #
397
- # Given Class as adapter it will be used as sessions middleware.
398
- # Given String as adapter it will be resolved as class name and used as
399
- # sessions middleware.
400
- # Given Symbol as adapter it is assumed it's name of the class under
401
- # Rack::Session namespace that will be used as sessions middleware
402
- # (e.g. :cookie for Rack::Session::Cookie).
403
- #
404
- # By default options include domain inferred from host configuration, and
405
- # secure flag inferred from scheme configuration.
406
- #
407
- # @overload sessions(adapter, options)
408
- # Sets the given value.
409
- # @param adapter [Class, String, Symbol] Rack middleware for sessions management
410
- # @param options [Hash] options to pass to sessions middleware
411
- #
412
- # @overload sessions(false)
413
- # Disables sessions
414
- #
415
- # @overload sessions
416
- # Gets the value.
417
- # @return [Hanami::Config::Sessions] sessions configuration
418
- #
419
- # @since 0.2.0
420
- #
421
- # @see Hanami::Configuration#host
422
- # @see Hanami::Configuration#scheme
423
- #
424
- # @example Getting the value
425
- # require 'hanami'
426
- #
427
- # module Bookshelf
428
- # class Application < Hanami::Application
429
- # end
430
- # end
431
- #
432
- # Bookshelf::Application.configuration.sessions
433
- # # => #<Hanami::Config::Sessions:0x00000001ca0c28 @enabled=false>
434
- #
435
- # @example Setting the value with symbol
436
- # require 'hanami'
437
- #
438
- # module Bookshelf
439
- # class Application < Hanami::Application
440
- # configure do
441
- # sessions :cookie, secret: 'abc123'
442
- # end
443
- # end
444
- # end
445
- #
446
- # Bookshelf::Application.configuration.sessions
447
- # # => #<Hanami::Config::Sessions:0x00000001589458 @enabled=true, @adapter=:cookie, @options={:domain=>"localhost", :secure=>false}>
448
- #
449
- # @example Disabling previously enabled sessions
450
- # require 'hanami'
451
- #
452
- # module Bookshelf
453
- # class Application < Hanami::Application
454
- # configure do
455
- # sessions :cookie
456
- # sessions false
457
- # end
458
- # end
459
- # end
460
- #
461
- # Bookshelf::Application.configuration.sessions
462
- # # => #<Hanami::Config::Sessions:0x00000002460d78 @enabled=false>
463
- #
464
- def sessions(adapter = nil, options = {})
465
- if adapter.nil?
466
- @sessions ||= Config::Sessions.new
467
- else
468
- @sessions = Config::Sessions.new(adapter, options, self)
469
- end
470
- end
471
-
472
- # Application load paths
473
- # The application will recursively load all the Ruby files under these paths.
474
- #
475
- # By default it's empty in order to allow developers to decide their own
476
- # app structure.
477
- #
478
- # @return [Hanami::Config::LoadPaths] a set of load paths
479
- #
480
- # @since 0.1.0
481
- #
482
- # @see Hanami::Configuration#root
483
- #
484
- # @example Getting the value
485
- # require 'hanami'
486
- #
487
- # module Bookshelf
488
- # class Application < Hanami::Application
489
- # end
490
- # end
491
- #
492
- # Bookshelf::Application.configuration.load_paths
493
- # # => #<Hanami::Config::LoadPaths:0x007ff4fa212310 @paths=[]>
494
- #
495
- # @example Setting the value
496
- # require 'hanami'
497
- #
498
- # module Bookshelf
499
- # class Application < Hanami::Application
500
- # configure do
501
- # load_paths << [
502
- # 'app/controllers',
503
- # 'app/views
504
- # ]
505
- # end
506
- # end
507
- # end
508
- #
509
- # Bookshelf::Application.configuration.assets
510
- # # => #<Hanami::Config::LoadPaths:0x007fe3a20b18e0 @paths=[["app/controllers", "app/views"]]>
511
- def load_paths
512
- @load_paths ||= Config::LoadPaths.new(root)
513
- end
514
-
515
- # Application routes.
516
- #
517
- # Specify a set of routes for the application, by passing a block, or a
518
- # relative path where to find the file that describes them.
519
- #
520
- # By default it's `nil`.
521
- #
522
- # This is part of a DSL, for this reason when this method is called with
523
- # an argument, it will set the corresponding instance variable. When
524
- # called without, it will return the already set value, or the default.
525
- #
526
- # @overload routes(blk)
527
- # Specify a set of routes in the given block
528
- # @param blk [Proc] the routes definitions
529
- #
530
- # @overload routes(path)
531
- # Specify a relative path where to find the routes file
532
- # @param path [String] the relative path
533
- #
534
- # @overload routes
535
- # Gets the value
536
- # @return [Hanami::Config::Routes] the set of routes
537
- #
538
- # @since 0.1.0
539
- #
540
- # @see http://rdoc.info/gems/hanami-router/Hanami/Router
541
- #
542
- # @example Getting the value
543
- # require 'hanami'
544
- #
545
- # module Bookshelf
546
- # class Application < Hanami::Application
547
- # end
548
- # end
549
- #
550
- # Bookshelf::Application.configuration.routes
551
- # # => nil
552
- #
553
- # @example Setting the value, by passing a block
554
- # require 'hanami'
555
- #
556
- # module Bookshelf
557
- # class Application < Hanami::Application
558
- # configure do
559
- # routes do
560
- # get '/', to: 'dashboard#index'
561
- # resources :books
562
- # end
563
- # end
564
- # end
565
- # end
566
- #
567
- # Bookshelf::Application.configuration.routes
568
- # # => #<Hanami::Config::Routes:0x007ff50a991388 @blk=#<Proc:0x007ff50a991338@(irb):4>, @path=#<Pathname:.>>
569
- #
570
- # @example Setting the value, by passing a relative path
571
- # require 'hanami'
572
- #
573
- # module Bookshelf
574
- # class Application < Hanami::Application
575
- # configure do
576
- # routes 'config/routes'
577
- # end
578
- # end
579
- # end
580
- #
581
- # Bookshelf::Application.configuration.routes
582
- # # => #<Hanami::Config::Routes:0x007ff50a991388 @blk=nil, @path=#<Pathname:config/routes.rb>>
583
- def routes(path = nil, &blk)
584
- if path or block_given?
585
- @routes = Config::Routes.new(root, path, &blk)
586
- else
587
- @routes
588
- end
589
- end
590
-
591
- # Body parsing configuration.
592
- #
593
- # Specify a set of parsers for specific mime types that your application will use. This method will
594
- # return the application's parsers which you can use to add existing and new custom parsers for your
595
- # application to use.
596
- #
597
- # By default it's an empty `Array`
598
- #
599
- # This is part of a DSL, for this reason when this method is called with
600
- # an argument, it will set the corresponding instance variable. When
601
- # called without, it will return the already set value, or the default.
602
- #
603
- # @overload body_parsers(parsers)
604
- # Specify a set of body parsers.
605
- # @param parsers [Array] the body parser definitions
606
- #
607
- # @overload body_parsers
608
- # Gets the value
609
- # @return [Array] the set of parsers
610
- #
611
- # @since 0.2.0
612
- #
613
- # @example Getting the value
614
- # require 'hanami'
615
- #
616
- # module Bookshelf
617
- # class Application < Hanami::Application
618
- # end
619
- # end
620
- #
621
- # Bookshelf::Application.configuration.body_parsers
622
- # # => []
623
- #
624
- # @example Setting the value
625
- # require 'hanami'
626
- #
627
- # module Bookshelf
628
- # class Application < Hanami::Application
629
- # configure do
630
- # body_parsers :json, XmlParser.new
631
- # end
632
- # end
633
- # end
634
- #
635
- # Bookshelf::Application.configuration.body_parsers
636
- # # => [:json, XmlParser.new]
637
- #
638
- # @example Setting a new value after one is set.
639
- # require 'hanami'
640
- #
641
- # module Bookshelf
642
- # class Application < Hanami::Application
643
- # configure do
644
- # body_parsers :json
645
- # body_parsers XmlParser.new
646
- # end
647
- # end
648
- # end
649
- #
650
- # Bookshelf::Application.configuration.body_parsers
651
- # # => [XmlParser.new]
652
- #
653
- def body_parsers(*parsers)
654
- if parsers.empty?
655
- @body_parsers ||= []
656
- else
657
- @body_parsers = parsers
658
- end
659
- end
660
-
661
- # Application middleware.
662
- #
663
- # Specify middleware that your application will use. This method will return
664
- # the application's underlying Middleware stack which you can use to add new
665
- # middleware for your application to use. By default, the middleware stack
666
- # will contain only `Rack::Static` and `Rack::MethodOverride`. However, if
667
- # `assets false` was specified # in the configuration block, the default
668
- # `Rack::Static` will be removed.
669
- #
670
- # @since 0.2.0
671
- #
672
- # @see http://rdoc.info/gems/rack/Rack/Static
673
- # @see Hanami::MiddlewareStack#use
674
- #
675
- # @example
676
- # require 'hanami'
677
- #
678
- # module Bookshelf
679
- # class Application < Hanami::Application
680
- # configure do
681
- # middleware.use Rack::MethodOverride, nil, 'max-age=0, private, must-revalidate'
682
- # middleware.use Rack::ETag
683
- # end
684
- # end
685
- # end
686
- def middleware
687
- @middleware ||= Hanami::MiddlewareStack.new(self)
688
- end
689
-
690
- # Adapter configuration.
691
- # The application will instantiate adapter instance based on this configuration.
692
- #
693
- # The given options must have key pairs :type and :uri
694
- # If it isn't, at the runtime the framework will raise a
695
- # `ArgumentError`.
696
- #
697
- # This is part of a DSL, for this reason when this method is called with
698
- # an argument, it will set the corresponding instance variable. When
699
- # called without, it will return the already set value, or the default.
700
- #
701
- # @overload adapter(options)
702
- # Sets the given type and uri
703
- # @param options [Hash] a set of options for adapter
704
- #
705
- # @overload adapter
706
- # Gets the value
707
- # @return [Hash] adapter options
708
- #
709
- # @since 0.2.0
710
- #
711
- # @see Hanami::Configuration#adapter
712
- # @see http://rdoc.info/gems/hanami-model/Hanami/Model/Configuration:adapter
713
- #
714
- # @example
715
- # require 'hanami'
716
- #
717
- # module Bookshelf
718
- # class Application < Hanami::Application
719
- # configure do
720
- # adapter :sql, 'sqlite3://uri'
721
- # end
722
- # end
723
- # end
724
- #
725
- # Bookshelf::Application.configuration.adapter
726
- # # => [:sql, 'sqlite3://uri']
727
- def adapter(*options)
728
- if !options.empty?
729
- @adapter = options
730
- else
731
- @adapter
732
- end
733
- end
734
-
735
- # Set a format as default fallback for all the requests without a strict
736
- # requirement for the mime type.
737
- #
738
- # The given format must be coercible to a symbol, and be a valid mime type
739
- # alias. If it isn't, at the runtime the framework will raise a
740
- # `Hanami::Controller::UnknownFormatError`.
741
- #
742
- # By default this value is `:html`.
743
- #
744
- # This is part of a DSL, for this reason when this method is called with
745
- # an argument, it will set the corresponding instance variable. When
746
- # called without, it will return the already set value, or the default.
747
- #
748
- # @overload default_request_format(format)
749
- # Sets the given value
750
- # @param format [#to_sym] the symbol format
751
- # @raise [TypeError] if it cannot be coerced to a symbol
752
- #
753
- # @overload default_request_format
754
- # Gets the value
755
- # @return [Symbol]
756
- #
757
- # @since 0.5.0
758
- #
759
- # @see http://rdoc.info/gems/hanami-controller/Hanami/Controller/Configuration#default_request_format
760
- #
761
- # @example Getting the value
762
- # require 'hanami'
763
- #
764
- # module Bookshelf
765
- # class Application < Hanami::Application
766
- # end
767
- # end
768
- #
769
- # Bookshelf::Application.configuration.default_request_format # => :html
770
- #
771
- # @example Setting the value
772
- # require 'hanami'
773
- #
774
- # module Bookshelf
775
- # class Application < Hanami::Application
776
- # configure do
777
- # default_request_format :json
778
- # end
779
- # end
780
- # end
781
- #
782
- # Bookshelf::Application.configuration.default_request_format # => :json
783
- def default_request_format(format = nil)
784
- if format
785
- @default_request_format = Utils::Kernel.Symbol(format)
786
- else
787
- @default_request_format || :html
788
- end
789
- end
790
-
791
- # Set a format to be used for all responses regardless of the request type.
792
- #
793
- # The given format must be coercible to a symbol, and be a valid mime type
794
- # alias. If it isn't, at the runtime the framework will raise a
795
- # `Hanami::Controller::UnknownFormatError`.
796
- #
797
- # By default this value is `:html`.
798
- #
799
- # This is part of a DSL, for this reason when this method is called with
800
- # an argument, it will set the corresponding instance variable. When
801
- # called without, it will return the already set value, or the default.
802
- #
803
- # @overload default_response_format(format)
804
- # Sets the given value
805
- # @param format [#to_sym] the symbol format
806
- # @raise [TypeError] if it cannot be coerced to a symbol
807
- #
808
- # @overload default_response_format
809
- # Gets the value
810
- # @return [Symbol,nil]
811
- #
812
- # @since 0.5.0
813
- #
814
- # @see http://rdoc.info/gems/hanami-controller/Hanami/Controller/Configuration#default_response_format
815
- #
816
- # @example Getting the value
817
- # require 'hanami'
818
- #
819
- # module Bookshelf
820
- # class Application < Hanami::Application
821
- # end
822
- # end
823
- #
824
- # Bookshelf::Application.configuration.default_response_format # => :html
825
- #
826
- # @example Setting the value
827
- # require 'hanami'
828
- #
829
- # module Bookshelf
830
- # class Application < Hanami::Application
831
- # configure do
832
- # default_response_format :json
833
- # end
834
- # end
835
- # end
836
- #
837
- # Bookshelf::Application.configuration.default_response_format # => :json
838
- def default_response_format(format = nil)
839
- if format
840
- @default_response_format = Utils::Kernel.Symbol(format)
841
- else
842
- @default_response_format
843
- end
844
- end
845
-
846
- # The URI scheme for this application.
847
- # This is used by the router helpers to generate absolute URLs.
848
- #
849
- # By default this value is `"http"`.
850
- #
851
- # This is part of a DSL, for this reason when this method is called with
852
- # an argument, it will set the corresponding instance variable. When
853
- # called without, it will return the already set value, or the default.
854
- #
855
- # @overload scheme(value)
856
- # Sets the given value
857
- # @param value [String] the URI scheme
858
- #
859
- # @overload scheme
860
- # Gets the value
861
- # @return [String]
862
- #
863
- # @since 0.1.0
864
- #
865
- # @see http://en.wikipedia.org/wiki/URI_scheme
866
- #
867
- # @example Getting the value
868
- # require 'hanami'
869
- #
870
- # module Bookshelf
871
- # class Application < Hanami::Application
872
- # end
873
- # end
874
- #
875
- # Bookshelf::Application.configuration.scheme # => "http"
876
- #
877
- # @example Setting the value
878
- # require 'hanami'
879
- #
880
- # module Bookshelf
881
- # class Application < Hanami::Application
882
- # configure do
883
- # scheme 'https'
884
- # end
885
- # end
886
- # end
887
- #
888
- # Bookshelf::Application.configuration.scheme # => "https"
889
- def scheme(value = nil)
890
- if value
891
- @scheme = value
892
- else
893
- @scheme ||= 'http'
894
- end
895
- end
896
-
897
- # Check if the application uses SSL
898
- #
899
- # @return [FalseClass,TrueClass] the result of the check
900
- #
901
- # @since 0.2.0
902
- #
903
- # @see Hanami::Configuration#scheme
904
- def ssl?
905
- scheme == SSL_SCHEME
906
- end
907
-
908
- # The URI host for this application.
909
- # This is used by the router helpers to generate absolute URLs.
910
- #
911
- # By default this value is `"localhost"`.
912
- #
913
- # This is part of a DSL, for this reason when this method is called with
914
- # an argument, it will set the corresponding instance variable. When
915
- # called without, it will return the already set value, or the default.
916
- #
917
- # @overload host(value)
918
- # Sets the given value
919
- # @param value [String] the URI host
920
- #
921
- # @overload scheme
922
- # Gets the value
923
- # @return [String]
924
- #
925
- # @since 0.1.0
926
- #
927
- # @see http://en.wikipedia.org/wiki/URI_scheme
928
- #
929
- # @example Getting the value
930
- # require 'hanami'
931
- #
932
- # module Bookshelf
933
- # class Application < Hanami::Application
934
- # end
935
- # end
936
- #
937
- # Bookshelf::Application.configuration.host # => "localhost"
938
- #
939
- # @example Setting the value
940
- # require 'hanami'
941
- #
942
- # module Bookshelf
943
- # class Application < Hanami::Application
944
- # configure do
945
- # host 'bookshelf.org'
946
- # end
947
- # end
948
- # end
949
- #
950
- # Bookshelf::Application.configuration.host # => "bookshelf.org"
951
- def host(value = nil)
952
- if value
953
- @host = value
954
- else
955
- @host ||= @env.host
956
- end
957
- end
958
-
959
- # The URI port for this application.
960
- # This is used by the router helpers to generate absolute URLs.
961
- #
962
- # By default this value is `2300`.
963
- #
964
- # This is part of a DSL, for this reason when this method is called with
965
- # an argument, it will set the corresponding instance variable. When
966
- # called without, it will return the already set value, or the default.
967
- #
968
- # @overload port(value)
969
- # Sets the given value
970
- # @param value [#to_int] the URI port
971
- # @raise [TypeError] if the given value cannot be coerced to Integer
972
- #
973
- # @overload scheme
974
- # Gets the value
975
- # @return [String]
976
- #
977
- # @since 0.1.0
978
- #
979
- # @see http://en.wikipedia.org/wiki/URI_scheme
980
- #
981
- # @example Getting the value
982
- # require 'hanami'
983
- #
984
- # module Bookshelf
985
- # class Application < Hanami::Application
986
- # end
987
- # end
988
- #
989
- # Bookshelf::Application.configuration.port # => 2300
990
- #
991
- # @example Setting the value
992
- # require 'hanami'
993
- #
994
- # module Bookshelf
995
- # class Application < Hanami::Application
996
- # configure do
997
- # port 8080
998
- # end
999
- # end
1000
- # end
1001
- #
1002
- # Bookshelf::Application.configuration.port # => 8080
1003
- def port(value = nil)
1004
- if value
1005
- @port = Integer(value)
1006
- else
1007
- return @port if defined?(@port)
1008
- return @env.port unless @env.default_port?
1009
- return DEFAULT_SSL_PORT if force_ssl
1010
- @env.port
1011
- end
1012
- end
1013
-
1014
- # Defines a relative pattern to find controllers.
1015
- #
1016
- # By default this equals to <tt>"Controllers::%{controller}::%{action}"</tt>
1017
- # That means controllers must be structured like this:
1018
- # <tt>Bookshelf::Controllers::Dashboard::Index</tt>, where <tt>Bookshelf</tt>
1019
- # is the application module, <tt>Controllers</tt> is the first value
1020
- # specified in the pattern, <tt>Dashboard</tt> the controller and
1021
- # <tt>Index</tt> the action.
1022
- #
1023
- # This pattern MUST always contain <tt>"%{controller}"</tt> and <tt>%{action}</tt>.
1024
- # This pattern SHOULD be used accordingly to <tt>#view_pattern</tt> value.
1025
- #
1026
- # This is part of a DSL, for this reason when this method is called with
1027
- # an argument, it will set the corresponding instance variable. When
1028
- # called without, it will return the already set value, or the default.
1029
- #
1030
- # @overload controller_pattern(value)
1031
- # Sets the given value
1032
- # @param value [String] the controller pattern
1033
- #
1034
- # @overload controller_pattern
1035
- # Gets the value
1036
- # @return [String]
1037
- #
1038
- # @since 0.1.0
1039
- #
1040
- # @see Hanami::Configuration#view_pattern
1041
- #
1042
- # @example Getting the value
1043
- # require 'hanami'
1044
- #
1045
- # module Bookshelf
1046
- # class Application < Hanami::Application
1047
- # configure do
1048
- # routes do
1049
- # get '/', to: 'dashboard#index'
1050
- # end
1051
- # end
1052
- # end
1053
- #
1054
- # module Controllers::Dashboard
1055
- # class Index
1056
- # include Bookshelf::Action
1057
- #
1058
- # def call(params)
1059
- # # ...
1060
- # end
1061
- # end
1062
- # end
1063
- # end
1064
- #
1065
- # Bookshelf::Application.configuration.controller_pattern
1066
- # # => "Controllers::%{controller}::%{action}"
1067
- #
1068
- # # All the controllers MUST live under Bookshelf::Controllers
1069
- #
1070
- # # GET '/' # => Bookshelf::Controllers::Dashboard::Index
1071
- #
1072
- # @example Setting the value
1073
- # require 'hanami'
1074
- #
1075
- # module Bookshelf
1076
- # class Application < Hanami::Application
1077
- # configure do
1078
- # controller_pattern "%{controller}Controller::%{action}"
1079
- #
1080
- # routes do
1081
- # get '/', to: 'dashboard#index'
1082
- # end
1083
- # end
1084
- # end
1085
- #
1086
- # module DashboardController
1087
- # class Index
1088
- # include Bookshelf::Action
1089
- #
1090
- # def call(params)
1091
- # end
1092
- # end
1093
- # end
1094
- # end
1095
- #
1096
- # Bookshelf::Application.configuration.controller_pattern
1097
- # # => "%{controller}Controller::%{action}"
1098
- #
1099
- # # All the controllers are directly under the Bookshelf module
1100
- #
1101
- # # GET '/' # => Bookshelf::DashboardController::Index
1102
- #
1103
- # @example Setting the value for a top level name structure
1104
- # require 'hanami'
1105
- #
1106
- # module Bookshelf
1107
- # class Application < Hanami::Application
1108
- # configure do
1109
- # controller_pattern "%{controller}Controller::%{action}"
1110
- #
1111
- # routes do
1112
- # get '/', to: 'dashboard#index'
1113
- # end
1114
- # end
1115
- # end
1116
- # end
1117
- #
1118
- # module DashboardController
1119
- # class Index
1120
- # include Bookshelf::Action
1121
- #
1122
- # def call(params)
1123
- # end
1124
- # end
1125
- # end
1126
- #
1127
- # Bookshelf::Application.configuration.controller_pattern
1128
- # # => "%{controller}Controller::%{action}"
1129
- #
1130
- # # All the controllers are at the top level namespace
1131
- #
1132
- # # GET '/' # => DashboardController::Index
1133
- def controller_pattern(value = nil)
1134
- if value
1135
- @controller_pattern = value
1136
- else
1137
- @controller_pattern ||= 'Controllers::%{controller}::%{action}'
1138
- end
1139
- end
1140
-
1141
- # Defines a relative pattern to find views:.
1142
- #
1143
- # By default this equals to <tt>"Views::%{controller}::%{action}"</tt>
1144
- # That means views must be structured like this:
1145
- # <tt>Bookshelf::Views::Dashboard::Index</tt>, where <tt>Bookshelf</tt> is
1146
- # the application module, <tt>Views</tt> is the first value specified in the
1147
- # pattern, <tt>Dashboard</tt> a module corresponding to the controller name
1148
- # and <tt>Index</tt> the view, corresponding to the action name.
1149
- #
1150
- # This pattern MUST always contain <tt>"%{controller}"</tt> and <tt>%{action}</tt>.
1151
- # This pattern SHOULD be used accordingly to <tt>#controller_pattern</tt> value.
1152
- #
1153
- # This is part of a DSL, for this reason when this method is called with
1154
- # an argument, it will set the corresponding instance variable. When
1155
- # called without, it will return the already set value, or the default.
1156
- #
1157
- # @overload view_pattern(value)
1158
- # Sets the given value
1159
- # @param value [String] the view pattern
1160
- #
1161
- # @overload controller_pattern
1162
- # Gets the value
1163
- # @return [String]
1164
- #
1165
- # @since 0.1.0
1166
- #
1167
- # @see Hanami::Configuration#controller_pattern
1168
- #
1169
- # @example Getting the value
1170
- # require 'hanami'
1171
- #
1172
- # module Bookshelf
1173
- # class Application < Hanami::Application
1174
- # configure do
1175
- # routes do
1176
- # get '/', to: 'dashboard#index'
1177
- # end
1178
- # end
1179
- # end
1180
- #
1181
- # module Views
1182
- # module Dashboard
1183
- # class Index
1184
- # include Bookshelf::View
1185
- # end
1186
- # end
1187
- # end
1188
- # end
1189
- #
1190
- # Bookshelf::Application.configuration.view_pattern
1191
- # # => "Views::%{controller}::%{action}"
1192
- #
1193
- # # All the views MUST live under Bookshelf::Views
1194
- #
1195
- # # GET '/' # => Bookshelf::Views::Dashboard::Index
1196
- #
1197
- # @example Setting the value
1198
- # require 'hanami'
1199
- #
1200
- # module Bookshelf
1201
- # class Application < Hanami::Application
1202
- # configure do
1203
- # view_pattern "%{controller}::%{action}"
1204
- #
1205
- # routes do
1206
- # get '/', to: 'dashboard#index'
1207
- # end
1208
- # end
1209
- # end
1210
- #
1211
- # module Dashboard
1212
- # class Index
1213
- # include Bookshelf::View
1214
- # end
1215
- # end
1216
- # end
1217
- #
1218
- # Bookshelf::Application.configuration.view_pattern
1219
- # # => "%{controller}::%{action}"
1220
- #
1221
- # # All the views are directly under the Bookshelf module
1222
- #
1223
- # # GET '/' # => Bookshelf::Dashboard::Index
1224
- #
1225
- # @example Setting the value for a top level name structure
1226
- # require 'hanami'
1227
- #
1228
- # module Bookshelf
1229
- # class Application < Hanami::Application
1230
- # configure do
1231
- # view_pattern "%{controller}::%{action}"
1232
- #
1233
- # routes do
1234
- # get '/', to: 'dashboard#index'
1235
- # end
1236
- # end
1237
- # end
1238
- # end
1239
- #
1240
- # module Dashboard
1241
- # class Index
1242
- # include Bookshelf::View
1243
- # end
1244
- # end
1245
- #
1246
- # Bookshelf::Application.configuration.view_pattern
1247
- # # => "%{controller}::%{action}"
1248
- #
1249
- # # All the views: are at the top level namespace
1250
- #
1251
- # # GET '/' # => Dashboard::Index
1252
- def view_pattern(value = nil)
1253
- if value
1254
- @view_pattern = value
1255
- else
1256
- @view_pattern ||= 'Views::%{controller}::%{action}'
1257
- end
1258
- end
1259
-
1260
- # Decide if handle exceptions with an HTTP status or let them uncaught
1261
- #
1262
- # If this value is set to `true`, the configured exceptions will return
1263
- # the specified HTTP status, the rest of them with `500`.
1264
- #
1265
- # If this value is set to `false`, the exceptions won't be caught.
1266
- #
1267
- # This is part of a DSL, for this reason when this method is called with
1268
- # an argument, it will set the corresponding instance variable. When
1269
- # called without, it will return the already set value, or the default.
1270
- #
1271
- # @overload handle_exceptions(value)
1272
- # Sets the given value
1273
- # @param value [TrueClass, FalseClass] true or false, default to true
1274
- #
1275
- # @overload handle_exceptions
1276
- # Gets the value
1277
- # @return [TrueClass, FalseClass]
1278
- #
1279
- # @since 0.2.0
1280
- #
1281
- # @see http://rdoc.info/gems/hanami-controller/Hanami/Controller/Configuration:handle_exceptions
1282
- # @see http://httpstatus.es/500
1283
- #
1284
- # @example Enabled (default)
1285
- # require 'hanami'
1286
- #
1287
- # module Bookshelf
1288
- # class Application < Hanami::Application
1289
- # configure do
1290
- # routes do
1291
- # get '/error', to: 'error#index'
1292
- # end
1293
- # end
1294
- #
1295
- # load!
1296
- # end
1297
- #
1298
- # module Controllers::Error
1299
- # class Index
1300
- # include Bookshelf::Action
1301
- #
1302
- # def call(params)
1303
- # raise ArgumentError
1304
- # end
1305
- # end
1306
- # end
1307
- # end
1308
- #
1309
- # # GET '/error' # => 500 - Internal Server Error
1310
- #
1311
- # @example Disabled
1312
- # require 'hanami'
1313
- #
1314
- # module Bookshelf
1315
- # class Application < Hanami::Application
1316
- # configure do
1317
- # handle_exceptions false
1318
- #
1319
- # routes do
1320
- # get '/error', to: 'error#index'
1321
- # end
1322
- # end
1323
- #
1324
- # load!
1325
- # end
1326
- #
1327
- # module Controllers::Error
1328
- # class Index
1329
- # include Bookshelf::Action
1330
- #
1331
- # def call(params)
1332
- # raise ArgumentError
1333
- # end
1334
- # end
1335
- # end
1336
- # end
1337
- #
1338
- # # GET '/error' # => raises ArgumentError
1339
- def handle_exceptions(value = nil)
1340
- if value.nil?
1341
- @handle_exceptions
1342
- else
1343
- @handle_exceptions = value
1344
- end
1345
- end
1346
-
1347
- # It lazily collects all the low level settings for Hanami::Model's
1348
- # configuration and applies them when the application is loaded.
1349
- #
1350
- # NOTE: This forwards all the configurations to Hanami::Model, without
1351
- # checking them. Before to use this feature, please have a look at the
1352
- # current Hanami::Model version installed.
1353
- #
1354
- # NOTE: This may override some configurations of your application.
1355
- #
1356
- # @return [Hanami::Config::FrameworkConfiguration] the configuration
1357
- #
1358
- # @since 0.2.0
1359
- #
1360
- # @see http://www.rubydoc.info/gems/hanami-model/Hanami/Model/Configuration
1361
- #
1362
- # @example Define a setting
1363
- # require 'hanami'
1364
- # require 'hanami/model'
1365
- #
1366
- # module Bookshelf
1367
- # class Application < Hanami::Application
1368
- # configure do
1369
- # model.adapter :sql, 'sqlite://db/bookshelf_development'
1370
- # end
1371
- # end
1372
- # end
1373
- #
1374
- # @example Override a setting
1375
- # require 'hanami'
1376
- # require 'hanami/model'
1377
- #
1378
- # module Bookshelf
1379
- # class Application < Hanami::Application
1380
- # configure do
1381
- # adapter :sql, 'postgresql://localhost/database'
1382
- # model.adapter :sql, 'sqlite://db/bookshelf_development'
1383
- # end
1384
- # end
1385
- # end
1386
- #
1387
- # # The sqlite adapter will override the SQL one
1388
- def model
1389
- @model ||= Config::FrameworkConfiguration.new
1390
- end
1391
-
1392
- # It lazily collects all the low level settings for Hanami::Controller's
1393
- # configuration and applies them when the application is loaded.
1394
- #
1395
- # NOTE: This forwards all the configurations to Hanami::Controller, without
1396
- # checking them. Before to use this feature, please have a look at the
1397
- # current Hanami::Controller version installed.
1398
- #
1399
- # NOTE: This may override some configurations of your application.
1400
- #
1401
- # @return [Hanami::Config::FrameworkConfiguration] the configuration
1402
- #
1403
- # @since 0.2.0
1404
- #
1405
- # @see http://www.rubydoc.info/gems/hanami-controller/Hanami/Controller/Configuration
1406
- #
1407
- # @example Define a setting
1408
- # require 'hanami'
1409
- #
1410
- # module Bookshelf
1411
- # class Application < Hanami::Application
1412
- # configure do
1413
- # controller.default_request_format :json
1414
- # end
1415
- # end
1416
- # end
1417
- #
1418
- # @example Override a setting
1419
- # require 'hanami'
1420
- #
1421
- # module Bookshelf
1422
- # class Application < Hanami::Application
1423
- # configure do
1424
- # handle_exceptions false
1425
- # controller.handle_exceptions true
1426
- # end
1427
- # end
1428
- # end
1429
- #
1430
- # # Exceptions will be handled
1431
- def controller
1432
- @controller ||= Config::FrameworkConfiguration.new
1433
- end
1434
-
1435
- # It lazily collects all the low level settings for Hanami::View's
1436
- # configuration and applies them when the application is loaded.
1437
- #
1438
- # NOTE: This forwards all the configurations to Hanami::View, without
1439
- # checking them. Before to use this feature, please have a look at the
1440
- # current Hanami::View version installed.
1441
- #
1442
- # NOTE: This may override some configurations of your application.
1443
- #
1444
- # @return [Hanami::Config::FrameworkConfiguration] the configuration
1445
- #
1446
- # @since 0.2.0
1447
- #
1448
- # @see http://www.rubydoc.info/gems/hanami-view/Hanami/View/Configuration
1449
- #
1450
- # @example Define a setting
1451
- # require 'hanami'
1452
- #
1453
- # module Bookshelf
1454
- # class Application < Hanami::Application
1455
- # configure do
1456
- # view.layout :application
1457
- # end
1458
- # end
1459
- # end
1460
- #
1461
- # @example Override a setting
1462
- # require 'hanami'
1463
- #
1464
- # module Bookshelf
1465
- # class Application < Hanami::Application
1466
- # configure do
1467
- # layout :application
1468
- # view.layout :backend
1469
- # end
1470
- # end
1471
- # end
1472
- #
1473
- # # It will use `:backend` layout
1474
- def view
1475
- @view ||= Config::FrameworkConfiguration.new
1476
- end
1477
-
1478
- # @since 0.9.0
1479
- # @api private
1480
- def app_name
1481
- ApplicationName.new(namespace)
1482
- end
1483
-
1484
- private
1485
-
1486
- # @api private
1487
- attr_reader :configurations
1488
-
1489
- # @since 0.2.0
1490
- # @api private
1491
- def evaluate_configurations!
1492
- configurations.each(@env.environment) { |c| instance_eval(&c) }
1493
- end
1494
- end
1495
- end