hanami 1.3.5 → 2.0.0.alpha1

Sign up to get free protection for your applications and to get access to all the features.
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,541 +0,0 @@
1
- require 'thread'
2
- require 'pathname'
3
- require 'hanami/utils'
4
- require 'hanami/utils/hash'
5
- require 'hanami/env'
6
- require 'hanami/hanamirc'
7
- require 'hanami/components'
8
-
9
- module Hanami
10
- # Define and expose information about the Hanami environment.
11
- #
12
- # @since 0.1.0
13
- # @api private
14
- class Environment
15
- # Global lock (used to serialize process of environment configuration)
16
- #
17
- # @since 0.8.0
18
- # @api private
19
- LOCK = Mutex.new
20
-
21
- # Standard Rack ENV key
22
- #
23
- # @since 0.1.0
24
- # @api private
25
- RACK_ENV = 'RACK_ENV'.freeze
26
-
27
- # Standard Hanami ENV key
28
- #
29
- # @since 0.1.0
30
- # @api private
31
- HANAMI_ENV = 'HANAMI_ENV'.freeze
32
-
33
- # Default Hanami environment
34
- #
35
- # @since 0.1.0
36
- # @api private
37
- DEFAULT_ENV = 'development'.freeze
38
-
39
- # Test environment
40
- #
41
- # @since 1.3.3
42
- # @api private
43
- TEST_ENV = 'test'.freeze
44
-
45
- # Production environment
46
- #
47
- # @since 0.6.0
48
- # @api private
49
- PRODUCTION_ENV = 'production'.freeze
50
-
51
- # Rack production environment (aka deployment)
52
- #
53
- # @since 0.6.0
54
- # @api private
55
- RACK_ENV_DEPLOYMENT = 'deployment'.freeze
56
-
57
- # @since 1.3.3
58
- # @api private
59
- DOTENV_LOCAL_FILE = '.env.local'.freeze
60
-
61
- # Default `.env` files that are loaded. The entries are ordered from highest
62
- # to lowest priority.
63
- #
64
- # @since 1.3.3
65
- # @api private
66
- DOTENV_FILES = [
67
- '.env.%{environment}.local'.freeze,
68
- DOTENV_LOCAL_FILE,
69
- '.env.%{environment}'.freeze,
70
- '.env'.freeze
71
- ].freeze
72
-
73
- # Default configuration directory under application root
74
- #
75
- # @since 0.2.0
76
- # @api private
77
- DEFAULT_CONFIG = 'config'.freeze
78
-
79
- # Standard Hanami host ENV key
80
- #
81
- # @since 0.1.0
82
- # @api private
83
- HANAMI_HOST = 'HANAMI_HOST'.freeze
84
-
85
- # Default HTTP host
86
- #
87
- # @since 0.1.0
88
- # @api private
89
- DEFAULT_HOST = 'localhost'.freeze
90
-
91
- # Default IP address listen
92
- #
93
- # @since 0.1.0
94
- # @api private
95
- LISTEN_ALL_HOST = '0.0.0.0'.freeze
96
-
97
- # Standard Hanami port ENV key
98
- #
99
- # @since 0.1.0
100
- # @api private
101
- HANAMI_PORT = 'HANAMI_PORT'.freeze
102
-
103
- # Default Hanami HTTP port
104
- #
105
- # @since 0.1.0
106
- # @api private
107
- DEFAULT_PORT = 2300
108
-
109
- # Default Rack configuration file
110
- #
111
- # @since 0.2.0
112
- # @api private
113
- DEFAULT_RACKUP = 'config.ru'.freeze
114
-
115
- # Default environment configuration file
116
- #
117
- # @since 0.2.0
118
- # @api private
119
- DEFAULT_ENVIRONMENT_CONFIG = 'environment'.freeze
120
-
121
- # Code reloading per environment
122
- #
123
- # @since 0.2.0
124
- # @api private
125
- CODE_RELOADING = { 'development' => true }.freeze
126
-
127
- # @since 0.4.0
128
- # @api private
129
- APPS_PATH = 'apps'.freeze
130
-
131
- # @since 0.4.0
132
- # @api private
133
- SERVE_STATIC_ASSETS = 'SERVE_STATIC_ASSETS'.freeze
134
-
135
- # @since 0.4.0
136
- # @api private
137
- SERVE_STATIC_ASSETS_ENABLED = 'true'.freeze
138
-
139
- # Initialize a Hanami environment
140
- #
141
- # It accepts an optional set of configurations from the CLI commands.
142
- # Those settings override the defaults defined by this object.
143
- #
144
- # When initialized, it sets standard `ENV` variables for Rack and Hanami,
145
- # such as `RACK_ENV` and `HANAMI_ENV`.
146
- #
147
- # It evaluates configuration ONLY from `.env.<environment>` file
148
- # located under the config directory. All the settings in those files will
149
- # be exported as `ENV` variables.
150
- #
151
- # This table: https://github.com/bkeepers/dotenv#what-other-env-files-can-i-use
152
- # has more info on the priority of the .env files.
153
- #
154
- # The format of those `.env.<environment>` files follows UNIX and UNIX-like
155
- # operating system environment variable declaration format and compatible
156
- # with `dotenv` and `foreman` gems.
157
- #
158
- # @param options [Hash] override default options for various environment
159
- # attributes
160
- #
161
- # @return [Hanami::Environment] the environment
162
- #
163
- # @see Hanami::Commands::Console
164
- # @see Hanami::Commands::Routes
165
- # @see Hanami::Commands::Server
166
- # @see Hanami::Environment#config
167
- #
168
- # @api private
169
- #
170
- # @example Define ENV variables from .env
171
- #
172
- # # % tree .
173
- # # .
174
- # # # ...
175
- # # ├── .env.test
176
- # # └── .env.development
177
- #
178
- # # % cat .env.test
179
- # # FOO="bar"
180
- # # XYZ="yes"
181
- #
182
- # # % cat .env.development
183
- # # FOO="ok"
184
- #
185
- # require 'hanami/environment'
186
- #
187
- # env = Hanami::Environment.new
188
- # env.environment # => "development"
189
- #
190
- # # Framework defined ENV vars
191
- # ENV['HANAMI_ENV'] # => "development"
192
- # ENV['RACK_ENV'] # => "development"
193
- #
194
- # ENV['HANAMI_HOST'] # => "localhost"
195
- # ENV['HANAMI_PORT'] # => "2300"
196
- #
197
- # # User defined ENV vars
198
- # ENV['FOO'] # => "ok"
199
- # ENV['XYZ'] # => nil
200
- #
201
- # # Hanami::Environment evaluates `.env.development` because the current
202
- # # environment is "development".
203
- # # Variables declared on `.env.development` will not override
204
- # # any variable declared on the shell when calling a `hanami` command.
205
- # # Eg. In `FOO="not ok" bundle exec hanami c` `FOO` will not be overwritten
206
- # # to `"ok"`.
207
- def initialize(options = {})
208
- opts = options.to_h.dup
209
- @env = Hanami::Env.new(env: opts.delete(:env) || ENV)
210
- @options = Hanami::Hanamirc.new(root).options
211
- @options.merge! Utils::Hash.symbolize(opts.clone)
212
- LOCK.synchronize { set_env_vars! }
213
- end
214
-
215
- # The current environment
216
- #
217
- # In order to decide the value, it looks up to the following `ENV` vars:
218
- #
219
- # * HANAMI_ENV
220
- # * RACK_ENV
221
- #
222
- # If those are missing it falls back to the default one: `"development"`.
223
- #
224
- # Rack environment `"deployment"` is translated to Hanami `"production"`.
225
- #
226
- # @return [String] the current environment
227
- #
228
- # @since 0.1.0
229
- # @api private
230
- #
231
- # @see Hanami::Environment::DEFAULT_ENV
232
- def environment
233
- @environment ||= env[HANAMI_ENV] || rack_env || DEFAULT_ENV
234
- end
235
-
236
- # @since 0.3.1
237
- # @api private
238
- #
239
- # @see Hanami.env?(name)
240
- def environment?(*names)
241
- names.map(&:to_s).include?(environment)
242
- end
243
-
244
- # A set of Bundler groups
245
- #
246
- # @return [Array] A set of groups
247
- #
248
- # @since 0.2.0
249
- # @api private
250
- #
251
- # @see http://bundler.io/v1.7/groups.html
252
- def bundler_groups
253
- [:default, environment]
254
- end
255
-
256
- # Project name
257
- #
258
- # @return [String] Project name
259
- #
260
- # @since 0.8.0
261
- # @api private
262
- def project_name
263
- @options.fetch(:project)
264
- end
265
-
266
- # Application's root
267
- #
268
- # It defaults to the current working directory.
269
- # Hanami assumes that all the commands are executed from there.
270
- #
271
- # @return [Pathname] application's root
272
- #
273
- # @since 0.2.0
274
- # @api private
275
- def root
276
- @root ||= Pathname.new(Dir.pwd)
277
- end
278
-
279
- # Application's config directory
280
- #
281
- # It's the application where all the configurations are stored.
282
- #
283
- # In order to decide the value, it looks up the following sources:
284
- #
285
- # * CLI option `config`
286
- #
287
- # If those are missing it falls back to the default one: `"config/"`.
288
- #
289
- # When a relative path is given via CLI option, it assumes to be located
290
- # under application's root. If absolute path, it will be used as it is.
291
- #
292
- # @return [Pathname] the config directory
293
- #
294
- # @since 0.2.0
295
- # @api private
296
- #
297
- # @see Hanami::Environment::DEFAULT_CONFIG
298
- # @see Hanami::Environment#root
299
- def config
300
- @config ||= root.join(@options.fetch(:config) { DEFAULT_CONFIG })
301
- end
302
-
303
- # The HTTP host name
304
- #
305
- # In order to decide the value, it looks up the following sources:
306
- #
307
- # * CLI option `host`
308
- # * HANAMI_HOST ENV var
309
- #
310
- # If those are missing it falls back to the following defaults:
311
- #
312
- # * `"localhost"` for development
313
- # * `"0.0.0.0"` for all the other environments
314
- #
315
- # @return [String] the HTTP host name
316
- #
317
- # @since 0.1.0
318
- # @api private
319
- #
320
- # @see Hanami::Environment::DEFAULT_HOST
321
- # @see Hanami::Environment::LISTEN_ALL_HOST
322
- def host
323
- @host ||= @options.fetch(:host) do
324
- env[HANAMI_HOST] || default_host
325
- end
326
- end
327
-
328
- # The HTTP port
329
- #
330
- # In order to decide the value, it looks up the following sources:
331
- #
332
- # * CLI option `port`
333
- # * HANAMI_PORT ENV var
334
- #
335
- # If those are missing it falls back to the default one: `2300`.
336
- #
337
- # @return [Integer] the default port
338
- #
339
- # @since 0.1.0
340
- # @api private
341
- #
342
- # @see Hanami::Environment::DEFAULT_PORT
343
- def port
344
- @port ||= @options.fetch(:port) do
345
- env[HANAMI_PORT] || DEFAULT_PORT
346
- end.to_i
347
- end
348
-
349
- # Check if the current port is the default one
350
- #
351
- # @since 1.0.0
352
- # @api private
353
- #
354
- # @see Hanami::ApplicationConfiguration#port
355
- def default_port?
356
- port == DEFAULT_PORT
357
- end
358
-
359
- # Path to the Rack configuration file
360
- #
361
- # In order to decide the value, it looks up the following sources:
362
- #
363
- # * CLI option `rackup`
364
- #
365
- # If those are missing it falls back to the default one: `"config.ru"`.
366
- #
367
- # When a relative path is given via CLI option, it assumes to be located
368
- # under application's root. If absolute path, it will be used as it is.
369
- #
370
- # @return [Pathname] path to the Rack configuration file
371
- #
372
- # @since 0.2.0
373
- # @api private
374
- def rackup
375
- root.join(@options.fetch(:rackup) { DEFAULT_RACKUP })
376
- end
377
-
378
- # Path to environment configuration file.
379
- #
380
- # In order to decide the value, it looks up the following sources:
381
- #
382
- # * CLI option `environment`
383
- #
384
- # If those are missing it falls back to the default one:
385
- # `"config/environment.rb"`.
386
- #
387
- # When a relative path is given via CLI option, it assumes to be located
388
- # under application's root. If absolute path, it will be used as it is.
389
- #
390
- # @return [Pathname] path to applications
391
- #
392
- # @since 0.1.0
393
- # @api private
394
- #
395
- # @see Hanami::Environment::DEFAULT_ENVIRONMENT_CONFIG
396
- def env_config
397
- root.join("config", "environment.rb")
398
- end
399
-
400
- alias project_environment_configuration env_config
401
-
402
- # Require application environment
403
- #
404
- # Eg <tt>require "config/environment"</tt>.
405
- #
406
- # @since 0.4.0
407
- # @api private
408
- def require_application_environment
409
- ::Bundler.setup(*bundler_groups)
410
- require project_environment_configuration.to_s # if project_environment_configuration.exist?
411
- end
412
-
413
- # @api private
414
- alias require_project_environment require_application_environment
415
-
416
- # Determine if activate code reloading for the current environment while
417
- # running the server.
418
- #
419
- # In order to decide the value, it looks up the following sources:
420
- #
421
- # * CLI option `code_reloading`
422
- #
423
- # If those are missing it falls back to the following defaults:
424
- #
425
- # * true for development
426
- # * false for all the other environments
427
- #
428
- # @return [TrueClass,FalseClass] the result of the check
429
- #
430
- # @since 0.2.0
431
- # @api private
432
- #
433
- # @see Hanami::Commands::Server
434
- # @see Hanami::Environment::CODE_RELOADING
435
- def code_reloading?
436
- @options.fetch(:code_reloading) { !!CODE_RELOADING[environment] }
437
- end
438
-
439
- # @since 0.6.0
440
- # @api private
441
- def serve_static_assets?
442
- SERVE_STATIC_ASSETS_ENABLED == env[SERVE_STATIC_ASSETS]
443
- end
444
-
445
- # @since 0.6.0
446
- # @api private
447
- def static_assets_middleware
448
- return unless serve_static_assets?
449
-
450
- if environment?(:development, :test)
451
- require 'hanami/assets/static'
452
- Hanami::Assets::Static
453
- else
454
- require 'hanami/static'
455
- Hanami::Static
456
- end
457
- end
458
-
459
- # @since 0.4.0
460
- # @api private
461
- def apps_path
462
- @options.fetch(:path, APPS_PATH)
463
- end
464
-
465
- # Serialize the most relevant settings into a Hash
466
- #
467
- # @return [::Hash]
468
- #
469
- # @since 0.1.0
470
- # @api private
471
- def to_options
472
- @options.merge(
473
- environment: environment,
474
- env_config: env_config,
475
- apps_path: apps_path,
476
- rackup: rackup,
477
- host: host,
478
- port: port
479
- )
480
- end
481
-
482
- private
483
-
484
- # @api private
485
- attr_reader :env
486
-
487
- # @since 0.1.0
488
- # @api private
489
- def set_env_vars!
490
- set_application_env_vars!
491
- set_hanami_env_vars!
492
- end
493
-
494
- # @since 0.2.0
495
- # @api private
496
- def set_hanami_env_vars!
497
- env[HANAMI_ENV] = env[RACK_ENV] = environment
498
- env[HANAMI_HOST] = host
499
- env[HANAMI_PORT] = port.to_s
500
- end
501
-
502
- # @since 0.2.0
503
- # @api private
504
- def set_application_env_vars!
505
- DOTENV_FILES.each do |filename_format|
506
- file = filename_format % { environment: environment }
507
- next unless dotenv_applicable?(file)
508
-
509
- path = root.join(file)
510
- env.load!(path) if path.exist?
511
- end
512
- end
513
-
514
- # @since 0.1.0
515
- # @api private
516
- def default_host
517
- environment == DEFAULT_ENV ? DEFAULT_HOST : LISTEN_ALL_HOST
518
- end
519
-
520
- # @since 0.6.0
521
- # @api private
522
- def rack_env
523
- case env[RACK_ENV]
524
- when RACK_ENV_DEPLOYMENT
525
- PRODUCTION_ENV
526
- else
527
- env[RACK_ENV]
528
- end
529
- end
530
-
531
- # @api private
532
- # @since 1.3.3
533
- #
534
- # @see https://github.com/bkeepers/dotenv#what-other-env-files-can-i-use
535
- def dotenv_applicable?(file)
536
- return false if file == DOTENV_LOCAL_FILE && environment == TEST_ENV
537
-
538
- true
539
- end
540
- end
541
- end
@@ -1,37 +0,0 @@
1
- module Hanami
2
- # @api private
3
- class EnvironmentApplicationConfigurations
4
- # @api private
5
- ALL = :all
6
-
7
- # @api private
8
- def initialize
9
- @configurations = Concurrent::Hash.new { |k, v| k[v] = [] }
10
- end
11
-
12
- # @api private
13
- def add(environment, &blk)
14
- env = (environment || ALL).to_sym
15
- configurations[env].push(blk)
16
- end
17
-
18
- # @api private
19
- def each(environment, &blk)
20
- configurations.each do |env, blks|
21
- next unless matching_env?(environment, env)
22
- blks.each(&blk)
23
- end
24
- end
25
-
26
- private
27
-
28
- # @api private
29
- attr_reader :configurations
30
-
31
- # @api private
32
- def matching_env?(environment, env)
33
- environment.to_sym == env ||
34
- env == ALL
35
- end
36
- end
37
- end