hanami 1.3.5 → 2.0.0.alpha4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (172) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +196 -5
  3. data/FEATURES.md +1 -3
  4. data/README.md +4 -4
  5. data/hanami.gemspec +27 -30
  6. data/lib/hanami/application/autoloader/inflector_adapter.rb +22 -0
  7. data/lib/hanami/application/container/boot/inflector.rb +7 -0
  8. data/lib/hanami/application/container/boot/logger.rb +7 -0
  9. data/lib/hanami/application/container/boot/rack_logger.rb +19 -0
  10. data/lib/hanami/application/container/boot/rack_monitor.rb +12 -0
  11. data/lib/hanami/application/container/boot/routes_helper.rb +9 -0
  12. data/lib/hanami/application/container/boot/settings.rb +7 -0
  13. data/lib/hanami/application/router.rb +59 -0
  14. data/lib/hanami/application/routes.rb +55 -0
  15. data/lib/hanami/application/routes_helper.rb +34 -0
  16. data/lib/hanami/application/routing/middleware/stack.rb +89 -0
  17. data/lib/hanami/application/routing/resolver/node.rb +50 -0
  18. data/lib/hanami/application/routing/resolver/trie.rb +59 -0
  19. data/lib/hanami/application/routing/resolver.rb +87 -0
  20. data/lib/hanami/application/settings/dotenv_store.rb +60 -0
  21. data/lib/hanami/application/settings.rb +93 -0
  22. data/lib/hanami/application.rb +349 -174
  23. data/lib/hanami/assets/application_configuration.rb +63 -0
  24. data/lib/hanami/assets/configuration.rb +54 -0
  25. data/lib/hanami/boot.rb +5 -0
  26. data/lib/hanami/cli/application/cli.rb +40 -0
  27. data/lib/hanami/cli/application/command.rb +47 -0
  28. data/lib/hanami/cli/application/commands/console.rb +81 -0
  29. data/lib/hanami/cli/application/commands.rb +16 -0
  30. data/lib/hanami/cli/base_command.rb +48 -0
  31. data/lib/hanami/cli/commands/command.rb +23 -31
  32. data/lib/hanami/cli/commands/server.rb +63 -14
  33. data/lib/hanami/cli/commands.rb +5 -41
  34. data/lib/hanami/configuration/logger.rb +40 -0
  35. data/lib/hanami/configuration/middleware.rb +9 -29
  36. data/lib/hanami/configuration/null_configuration.rb +14 -0
  37. data/lib/hanami/configuration/router.rb +52 -0
  38. data/lib/hanami/configuration/sessions.rb +50 -0
  39. data/lib/hanami/configuration.rb +152 -185
  40. data/lib/hanami/init.rb +5 -0
  41. data/lib/hanami/server.rb +5 -69
  42. data/lib/hanami/setup.rb +8 -2
  43. data/lib/hanami/slice.rb +167 -0
  44. data/lib/hanami/version.rb +3 -1
  45. data/lib/hanami/web/rack_logger.rb +96 -0
  46. data/lib/hanami.rb +42 -241
  47. metadata +88 -222
  48. data/bin/hanami +0 -6
  49. data/lib/hanami/action/csrf_protection.rb +0 -211
  50. data/lib/hanami/action/routing_helpers.rb +0 -40
  51. data/lib/hanami/app.rb +0 -96
  52. data/lib/hanami/application_configuration.rb +0 -1495
  53. data/lib/hanami/application_name.rb +0 -108
  54. data/lib/hanami/application_namespace.rb +0 -14
  55. data/lib/hanami/assets/asset.rb +0 -72
  56. data/lib/hanami/assets/static.rb +0 -102
  57. data/lib/hanami/cli/commands/assets/precompile.rb +0 -42
  58. data/lib/hanami/cli/commands/assets.rb +0 -16
  59. data/lib/hanami/cli/commands/console.rb +0 -95
  60. data/lib/hanami/cli/commands/db/apply.rb +0 -32
  61. data/lib/hanami/cli/commands/db/console.rb +0 -44
  62. data/lib/hanami/cli/commands/db/create.rb +0 -32
  63. data/lib/hanami/cli/commands/db/drop.rb +0 -32
  64. data/lib/hanami/cli/commands/db/migrate.rb +0 -39
  65. data/lib/hanami/cli/commands/db/prepare.rb +0 -32
  66. data/lib/hanami/cli/commands/db/rollback.rb +0 -59
  67. data/lib/hanami/cli/commands/db/version.rb +0 -32
  68. data/lib/hanami/cli/commands/db.rb +0 -32
  69. data/lib/hanami/cli/commands/destroy/action.rb +0 -137
  70. data/lib/hanami/cli/commands/destroy/app.rb +0 -159
  71. data/lib/hanami/cli/commands/destroy/mailer.rb +0 -74
  72. data/lib/hanami/cli/commands/destroy/migration.rb +0 -51
  73. data/lib/hanami/cli/commands/destroy/model.rb +0 -84
  74. data/lib/hanami/cli/commands/destroy.rb +0 -26
  75. data/lib/hanami/cli/commands/generate/action/action.erb +0 -7
  76. data/lib/hanami/cli/commands/generate/action/action_spec.minitest.erb +0 -11
  77. data/lib/hanami/cli/commands/generate/action/action_spec.rspec.erb +0 -9
  78. data/lib/hanami/cli/commands/generate/action/action_without_view.erb +0 -7
  79. data/lib/hanami/cli/commands/generate/action/view.erb +0 -7
  80. data/lib/hanami/cli/commands/generate/action/view_spec.minitest.erb +0 -12
  81. data/lib/hanami/cli/commands/generate/action/view_spec.rspec.erb +0 -10
  82. data/lib/hanami/cli/commands/generate/action.rb +0 -321
  83. data/lib/hanami/cli/commands/generate/app/application.erb +0 -313
  84. data/lib/hanami/cli/commands/generate/app/favicon.ico +0 -0
  85. data/lib/hanami/cli/commands/generate/app/gitkeep.erb +0 -0
  86. data/lib/hanami/cli/commands/generate/app/layout.erb +0 -7
  87. data/lib/hanami/cli/commands/generate/app/layout_spec.minitest.erb +0 -10
  88. data/lib/hanami/cli/commands/generate/app/layout_spec.rspec.erb +0 -10
  89. data/lib/hanami/cli/commands/generate/app/routes.erb +0 -5
  90. data/lib/hanami/cli/commands/generate/app/template.erb.erb +0 -10
  91. data/lib/hanami/cli/commands/generate/app/template.haml.erb +0 -7
  92. data/lib/hanami/cli/commands/generate/app/template.slim.erb +0 -8
  93. data/lib/hanami/cli/commands/generate/app.rb +0 -243
  94. data/lib/hanami/cli/commands/generate/mailer/mailer.erb +0 -9
  95. data/lib/hanami/cli/commands/generate/mailer/mailer_spec.minitest.erb +0 -7
  96. data/lib/hanami/cli/commands/generate/mailer/mailer_spec.rspec.erb +0 -5
  97. data/lib/hanami/cli/commands/generate/mailer.rb +0 -104
  98. data/lib/hanami/cli/commands/generate/migration/migration.erb +0 -4
  99. data/lib/hanami/cli/commands/generate/migration.rb +0 -41
  100. data/lib/hanami/cli/commands/generate/model/entity.erb +0 -2
  101. data/lib/hanami/cli/commands/generate/model/entity_spec.minitest.erb +0 -5
  102. data/lib/hanami/cli/commands/generate/model/entity_spec.rspec.erb +0 -3
  103. data/lib/hanami/cli/commands/generate/model/migration.erb +0 -10
  104. data/lib/hanami/cli/commands/generate/model/repository.erb +0 -5
  105. data/lib/hanami/cli/commands/generate/model/repository_spec.minitest.erb +0 -5
  106. data/lib/hanami/cli/commands/generate/model/repository_spec.rspec.erb +0 -3
  107. data/lib/hanami/cli/commands/generate/model.rb +0 -125
  108. data/lib/hanami/cli/commands/generate/secret.rb +0 -48
  109. data/lib/hanami/cli/commands/generate.rb +0 -28
  110. data/lib/hanami/cli/commands/new/.env.development.erb +0 -3
  111. data/lib/hanami/cli/commands/new/.env.test.erb +0 -3
  112. data/lib/hanami/cli/commands/new/.gitkeep.erb +0 -0
  113. data/lib/hanami/cli/commands/new/Gemfile.erb +0 -57
  114. data/lib/hanami/cli/commands/new/README.md.erb +0 -33
  115. data/lib/hanami/cli/commands/new/config/boot.erb +0 -2
  116. data/lib/hanami/cli/commands/new/config/environment.erb +0 -49
  117. data/lib/hanami/cli/commands/new/config.ru.erb +0 -3
  118. data/lib/hanami/cli/commands/new/gitignore.erb +0 -4
  119. data/lib/hanami/cli/commands/new/gitignore_with_sqlite.erb +0 -5
  120. data/lib/hanami/cli/commands/new/hanamirc.erb +0 -3
  121. data/lib/hanami/cli/commands/new/lib/project.erb +0 -2
  122. data/lib/hanami/cli/commands/new/minitest/Rakefile.erb +0 -12
  123. data/lib/hanami/cli/commands/new/minitest/features_helper.erb +0 -11
  124. data/lib/hanami/cli/commands/new/minitest/spec_helper.erb +0 -7
  125. data/lib/hanami/cli/commands/new/rspec/Rakefile.erb +0 -9
  126. data/lib/hanami/cli/commands/new/rspec/capybara.erb +0 -8
  127. data/lib/hanami/cli/commands/new/rspec/features_helper.erb +0 -12
  128. data/lib/hanami/cli/commands/new/rspec/rspec.erb +0 -2
  129. data/lib/hanami/cli/commands/new/rspec/spec_helper.erb +0 -103
  130. data/lib/hanami/cli/commands/new/schema.sql.erb +0 -0
  131. data/lib/hanami/cli/commands/new.rb +0 -578
  132. data/lib/hanami/cli/commands/project.rb +0 -421
  133. data/lib/hanami/cli/commands/routes.rb +0 -21
  134. data/lib/hanami/cli/commands/templates.rb +0 -31
  135. data/lib/hanami/cli/commands/version.rb +0 -19
  136. data/lib/hanami/common_logger.rb +0 -109
  137. data/lib/hanami/components/app/assets.rb +0 -59
  138. data/lib/hanami/components/app/controller.rb +0 -74
  139. data/lib/hanami/components/app/routes.rb +0 -59
  140. data/lib/hanami/components/app/view.rb +0 -44
  141. data/lib/hanami/components/component.rb +0 -182
  142. data/lib/hanami/components/components.rb +0 -479
  143. data/lib/hanami/components/routes_inspector.rb +0 -72
  144. data/lib/hanami/components.rb +0 -156
  145. data/lib/hanami/config/cookies.rb +0 -69
  146. data/lib/hanami/config/framework_configuration.rb +0 -43
  147. data/lib/hanami/config/load_paths.rb +0 -46
  148. data/lib/hanami/config/mapper.rb +0 -47
  149. data/lib/hanami/config/routes.rb +0 -20
  150. data/lib/hanami/config/security.rb +0 -110
  151. data/lib/hanami/config/sessions.rb +0 -119
  152. data/lib/hanami/configuration/app.rb +0 -21
  153. data/lib/hanami/early_hints.rb +0 -129
  154. data/lib/hanami/env.rb +0 -69
  155. data/lib/hanami/environment.rb +0 -541
  156. data/lib/hanami/environment_application_configurations.rb +0 -37
  157. data/lib/hanami/frameworks.rb +0 -22
  158. data/lib/hanami/hanamirc.rb +0 -169
  159. data/lib/hanami/mailer/glue.rb +0 -27
  160. data/lib/hanami/middleware_stack.rb +0 -172
  161. data/lib/hanami/rake_helper.rb +0 -78
  162. data/lib/hanami/rake_tasks.rb +0 -3
  163. data/lib/hanami/rendering_policy.rb +0 -94
  164. data/lib/hanami/routes.rb +0 -219
  165. data/lib/hanami/routing/default.rb +0 -32
  166. data/lib/hanami/static.rb +0 -63
  167. data/lib/hanami/templates/default.html.erb +0 -30
  168. data/lib/hanami/templates/welcome.html.erb +0 -52
  169. data/lib/hanami/views/default.rb +0 -37
  170. data/lib/hanami/views/default_template_finder.rb +0 -22
  171. data/lib/hanami/views/null_view.rb +0 -15
  172. data/lib/hanami/welcome.rb +0 -41
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Hanami
2
4
  # Hanami version
3
5
  #
@@ -6,7 +8,7 @@ module Hanami
6
8
  module Version
7
9
  # @since 0.9.0
8
10
  # @api private
9
- VERSION = '1.3.5'.freeze
11
+ VERSION = "2.0.0.alpha4"
10
12
 
11
13
  # @since 0.9.0
12
14
  # @api private
@@ -0,0 +1,96 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "json"
4
+ require "rack/request"
5
+ require "hanami/utils/hash"
6
+
7
+ module Hanami
8
+ module Web
9
+ # Rack logger for Hanami applications
10
+ class RackLogger
11
+ attr_reader :logger
12
+ attr_reader :filter_params
13
+
14
+ def initialize(logger, filter_params: [])
15
+ @logger = logger
16
+ @filter_params = filter_params
17
+ end
18
+
19
+ def attach(rack_monitor)
20
+ rack_monitor.on :stop do |event|
21
+ log_request event[:env], event[:status], event[:time]
22
+ end
23
+
24
+ rack_monitor.on :error do |event|
25
+ log_exception event[:exception]
26
+ end
27
+ end
28
+
29
+ # rubocop:disable Metrics/MethodLength
30
+ def log_request(env, status, time)
31
+ data = {
32
+ http: env[HTTP_VERSION],
33
+ verb: env[REQUEST_METHOD],
34
+ status: status,
35
+ ip: env[HTTP_X_FORWARDED_FOR] || env[REMOTE_ADDR],
36
+ path: env[SCRIPT_NAME] + env[PATH_INFO].to_s,
37
+ length: extract_content_length(env),
38
+ params: extract_params(env),
39
+ elapsed: time,
40
+ }
41
+
42
+ logger.info JSON.generate(data)
43
+ end
44
+ # rubocop:enable Metrics/MethodLength
45
+
46
+ def log_exception(exception)
47
+ logger.error exception.message
48
+ logger.error exception.backtrace.join("\n")
49
+ end
50
+
51
+ private
52
+
53
+ HTTP_VERSION = "HTTP_VERSION"
54
+ REQUEST_METHOD = "REQUEST_METHOD"
55
+ HTTP_X_FORWARDED_FOR = "HTTP_X_FORWARDED_FOR"
56
+ REMOTE_ADDR = "REMOTE_ADDR"
57
+ SCRIPT_NAME = "SCRIPT_NAME"
58
+ PATH_INFO = "PATH_INFO"
59
+ RACK_ERRORS = "rack.errors"
60
+ QUERY_HASH = "rack.request.query_hash"
61
+ FORM_HASH = "rack.request.form_hash"
62
+ ROUTER_PARAMS = "router.params"
63
+ CONTENT_LENGTH = "Content-Length"
64
+
65
+ def extract_content_length(env)
66
+ value = env[CONTENT_LENGTH]
67
+ !value || value.to_s == "0" ? "-" : value
68
+ end
69
+
70
+ def extract_params(env)
71
+ result = env.fetch(QUERY_HASH, {})
72
+ result.merge!(env.fetch(FORM_HASH, {}))
73
+ result.merge!(Hanami::Utils::Hash.deep_stringify(env.fetch(ROUTER_PARAMS, {})))
74
+ result
75
+ end
76
+
77
+ FILTERED = "[FILTERED]"
78
+
79
+ # rubocop:disable Metrics/MethodLength
80
+ def filter(params)
81
+ params.each_with_object({}) do |(k, v), h|
82
+ if filter_params.include?(k)
83
+ h.update(k => FILTERED)
84
+ elsif v.is_a?(Hash)
85
+ h.update(k => filter(v))
86
+ elsif v.is_a?(Array)
87
+ h.update(k => v.map { |m| m.is_a?(Hash) ? filter(m) : m })
88
+ else
89
+ h[k] = v
90
+ end
91
+ end
92
+ end
93
+ # rubocop:enable Metrics/MethodLength
94
+ end
95
+ end
96
+ end
data/lib/hanami.rb CHANGED
@@ -1,4 +1,4 @@
1
- require 'thread'
1
+ # frozen_string_literal: true
2
2
 
3
3
  # A complete web framework for Ruby
4
4
  #
@@ -6,277 +6,78 @@ require 'thread'
6
6
  #
7
7
  # @see http://hanamirb.org
8
8
  module Hanami
9
- require 'hanami/version'
10
- require 'hanami/frameworks'
11
- require 'hanami/environment'
12
- require 'hanami/app'
13
- require 'hanami/application'
14
- require 'hanami/components'
15
- require 'hanami/configuration'
9
+ require "hanami/version"
10
+ require "hanami/application"
16
11
 
17
- # @api private
18
- # @since 0.6.0
19
- DEFAULT_PUBLIC_DIRECTORY = 'public'.freeze
20
-
21
- # @api private
22
- # @since 0.9.0
23
12
  @_mutex = Mutex.new
24
- @_plugins = Concurrent::Array.new
25
13
 
26
- # Configure Hanami project
27
- #
28
- # Please note that the code for this method is generated by `hanami new`.
29
- #
30
- # @param blk [Proc] the configuration block
31
- #
32
- # @since 0.9.0
33
- #
34
- # @example
35
- # # config/environment.rb
36
- #
37
- # # ...
38
- #
39
- # Hanami.configure do
40
- # mount Admin::Application, at: "/admin"
41
- # mount Web::Application, at: "/"
42
- #
43
- # model do
44
- # adapter :sql, ENV['DATABASE_URL']
45
- #
46
- # migrations "db/migrations"
47
- # schema "db/schema.sql"
48
- # end
49
- #
50
- # mailer do
51
- # root "lib/bookshelf/mailers"
52
- #
53
- # delivery do
54
- # development :test
55
- # test :test
56
- # # production :smtp, address: ENV['SMTP_HOST'], port: ENV['SMTP_PORT']
57
- # end
58
- # end
59
- # end
60
- def self.configure(&blk)
14
+ def self.application
61
15
  @_mutex.synchronize do
62
- @_configuration = Hanami::Configuration.new(&blk)
63
- end
64
- end
16
+ raise "Hanami.application not configured" unless defined?(@_application)
65
17
 
66
- # Hanami configuration
67
- #
68
- # @return [Hanami::Configuration] the configuration
69
- #
70
- # @see Hanami.configure
71
- #
72
- # @since 0.9.0
73
- # @api private
74
- def self.configuration
75
- @_mutex.synchronize do
76
- raise "Hanami not configured" unless defined?(@_configuration)
77
- @_configuration
18
+ @_application
78
19
  end
79
20
  end
80
21
 
81
- # Configure a plugin
82
- #
83
- # @see Hanami.configure
84
- #
85
- # @since 1.2.0
86
- def self.plugin(&blk)
87
- @_plugins << blk
22
+ def self.application?
23
+ defined?(@_application)
88
24
  end
89
25
 
90
- # Plugins registry
91
- #
92
- # NOTE: We can't use `Components` registry.
93
- #
94
- # Plugins are loaded when Bundler requires `Gemfile` gems.
95
- # During this phase the `Components` that we can resolve are erased by the
96
- # first incoming request in development.
97
- # They are erased by a workaround that we had to put in place in `Hanami.boot`.
98
- # This workaround is `Components.release` and it was introduced because
99
- # `shotgun` failed to reload components, so we have to release for each
100
- # incoming request.
101
- # After the `Components` registry is cleared up, Hanami is able to resolve all
102
- # the components from scratch.
103
- #
104
- # When we'll switch to `hanami-reloader` for development, we can remove
105
- # `Components.release` and we'll be able to store plugins in `Components` and
106
- # remove `Hanami.plugins` as well.
107
- #
108
- # @since 1.2.0
109
- # @api private
110
- def self.plugins
111
- @_plugins
112
- end
26
+ def self.application=(klass)
27
+ @_mutex.synchronize do
28
+ raise "Hanami.application already configured" if defined?(@_application)
113
29
 
114
- # Boot your Hanami project
115
- #
116
- # NOTE: In case this is invoked many times, it guarantees that the boot
117
- # process happens only once.
118
- #
119
- # NOTE: This MUST NOT be wrapped by a Mutex, because it would cause a deadlock.
120
- #
121
- # @return [NilClass]
122
- #
123
- # @since 0.9.0
124
- def self.boot
125
- Components.release if code_reloading?
126
- Components.resolve('all')
127
- Hanami::Model.disconnect if defined?(Hanami::Model)
128
- nil
30
+ @_application = klass unless klass.name.nil?
31
+ end
129
32
  end
130
33
 
131
- # Main application that mounts many Rack and/or Hanami applications.
132
- #
133
- # This is used as integration point for:
134
- #
135
- # * `config.ru` (`run Hanami.app`)
136
- # * Feature tests (`Capybara.app = Hanami.app`)
137
- #
138
- #
139
- #
140
- # It lazily loads your Hanami project, in case it wasn't booted on before.
141
- # This is the case when `hanami server` isn't invoked, but we use different
142
- # ways to run the project (eg. `rackup`).
143
- #
144
- # @return [Hanami::App] the app
145
- #
146
- # @since 0.9.0
147
- # @api private
148
- #
149
- # @see Hanami.boot
150
34
  def self.app
151
- boot
152
- App.new(configuration, environment)
35
+ @_mutex.synchronize do
36
+ raise "Hanami.app not configured" unless defined?(@_app)
37
+
38
+ @_app
39
+ end
153
40
  end
154
41
 
155
- # Check if an application is allowed to load.
156
- #
157
- # The list of applications to be loaded can be set via the `HANAMI_APPS`
158
- # env variable. If the HANAMI_APPS env variable is not set, it defaults
159
- # to loading all applications.
160
- #
161
- # @return [TrueClass,FalseClass] the result of the check
162
- #
163
- # @since 1.1.0
164
- #
165
- # @example
166
- #
167
- # # Mount hanami app for specific app
168
- # Hanami.configure do
169
- # if Hanami.app?(:web)
170
- # require_relative '../apps/web/application'
171
- # mount Web::Application, at: '/'
172
- # end
173
- # end
174
- #
175
- def self.app?(app)
176
- return true unless ENV.key?('HANAMI_APPS')
42
+ def self.app=(app)
43
+ @_mutex.synchronize do
44
+ raise "Hanami.app already configured" if defined?(@_app)
177
45
 
178
- allowed_apps = ENV['HANAMI_APPS'].to_s.split(',')
179
- allowed_apps.include?(app.to_s.downcase)
46
+ @_app = app
47
+ end
180
48
  end
181
49
 
182
- # Return root of the project (top level directory).
183
- #
184
- # @return [Pathname] root path
185
- #
186
- # @since 0.3.2
187
- #
188
- # @example
189
- # Hanami.root # => #<Pathname:/Users/luca/Code/bookshelf>
190
- def self.root
191
- environment.root
50
+ def self.env
51
+ (ENV["HANAMI_ENV"] || "development").to_sym
192
52
  end
193
53
 
194
- # Project public directory
195
- #
196
- # @return [Pathname] public directory
197
- #
198
- # @since 0.6.0
199
- #
200
- # @example
201
- # Hanami.public_directory # => #<Pathname:/Users/luca/Code/bookshelf/public>
202
- def self.public_directory
203
- root.join(DEFAULT_PUBLIC_DIRECTORY)
54
+ def self.env?(*names)
55
+ names.map(&:to_sym).include?(env)
204
56
  end
205
57
 
206
- # Return the current environment
207
- #
208
- # @return [String] the current environment
209
- #
210
- # @since 0.3.1
211
- #
212
- # @see Hanami::Environment#environment
213
- #
214
- # @example
215
- # Hanami.env => "development"
216
- def self.env
217
- environment.environment
58
+ def self.logger
59
+ application[:logger]
218
60
  end
219
61
 
220
- # Check to see if specified environment(s) matches the current environment.
221
- #
222
- # If multiple names are given, it returns true, if at least one of them
223
- # matches the current environment.
224
- #
225
- # @return [TrueClass,FalseClass] the result of the check
226
- #
227
- # @since 0.3.1
228
- #
229
- # @see Hanami.env
230
- #
231
- # @example Single name
232
- # puts ENV['HANAMI_ENV'] # => "development"
233
- #
234
- # Hanami.env?(:development) # => true
235
- # Hanami.env?('development') # => true
236
- #
237
- # Hanami.env?(:production) # => false
238
- #
239
- # @example Multiple names
240
- # puts ENV['HANAMI_ENV'] # => "development"
241
- #
242
- # Hanami.env?(:development, :test) # => true
243
- # Hanami.env?(:production, :staging) # => false
244
- def self.env?(*names)
245
- environment.environment?(*names)
62
+ def self.init
63
+ application.init
246
64
  end
247
65
 
248
- # Current environment
249
- #
250
- # @return [Hanami::Environment] environment
251
- #
252
- # @api private
253
- # @since 0.3.2
254
- def self.environment
255
- Components.resolved('environment') do
256
- Environment.new
66
+ def self.boot(web: true)
67
+ if defined?(@_app)
68
+ @_app
69
+ else
70
+ application.boot
71
+
72
+ @_app = application.new if web
257
73
  end
258
74
  end
259
75
 
260
- # Check if code reloading is enabled.
261
- #
262
- # @return [TrueClass,FalseClass] the result of the check
263
- #
264
- # @since 1.0.0
265
- # @api private
266
- #
267
- # @see https://guides.hanamirb.org/projects/code-reloading
268
- def self.code_reloading?
269
- environment
270
- Components.resolve('code_reloading')
271
- Components['code_reloading']
76
+ def self.shutdown
77
+ application.shutdown
272
78
  end
273
79
 
274
- # Project logger
275
- #
276
- # @return [Hanami::Logger] the logger
277
- #
278
- # @since 1.0.0
279
- def self.logger
280
- Components['logger']
80
+ def self.bundler_groups
81
+ [:plugins]
281
82
  end
282
83
  end