hanami 1.3.1 → 2.0.0.alpha2

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 (168) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +110 -6
  3. data/FEATURES.md +9 -1
  4. data/LICENSE.md +1 -1
  5. data/README.md +4 -5
  6. data/hanami.gemspec +26 -30
  7. data/lib/hanami.rb +40 -243
  8. data/lib/hanami/application.rb +338 -174
  9. data/lib/hanami/application/autoloader/inflector_adapter.rb +22 -0
  10. data/lib/hanami/application/container/boot/inflector.rb +7 -0
  11. data/lib/hanami/application/container/boot/logger.rb +8 -0
  12. data/lib/hanami/application/container/boot/rack_logger.rb +19 -0
  13. data/lib/hanami/application/container/boot/rack_monitor.rb +12 -0
  14. data/lib/hanami/application/container/boot/settings.rb +7 -0
  15. data/lib/hanami/application/router.rb +59 -0
  16. data/lib/hanami/application/routing/middleware/stack.rb +89 -0
  17. data/lib/hanami/application/routing/resolver.rb +82 -0
  18. data/lib/hanami/application/routing/resolver/node.rb +50 -0
  19. data/lib/hanami/application/routing/resolver/trie.rb +59 -0
  20. data/lib/hanami/application/settings.rb +23 -0
  21. data/lib/hanami/application/settings/definition.rb +26 -0
  22. data/lib/hanami/application/settings/loader.rb +97 -0
  23. data/lib/hanami/application/settings/struct.rb +65 -0
  24. data/lib/hanami/boot.rb +5 -0
  25. data/lib/hanami/cli/application/cli.rb +40 -0
  26. data/lib/hanami/cli/application/command.rb +47 -0
  27. data/lib/hanami/cli/application/commands.rb +16 -0
  28. data/lib/hanami/cli/application/commands/console.rb +81 -0
  29. data/lib/hanami/cli/base_command.rb +48 -0
  30. data/lib/hanami/cli/commands.rb +6 -42
  31. data/lib/hanami/cli/commands/command.rb +20 -30
  32. data/lib/hanami/cli/commands/server.rb +63 -14
  33. data/lib/hanami/configuration.rb +248 -190
  34. data/lib/hanami/configuration/middleware.rb +8 -28
  35. data/lib/hanami/configuration/router.rb +50 -0
  36. data/lib/hanami/configuration/sessions.rb +50 -0
  37. data/lib/hanami/init.rb +5 -0
  38. data/lib/hanami/server.rb +5 -69
  39. data/lib/hanami/setup.rb +8 -2
  40. data/lib/hanami/slice.rb +138 -0
  41. data/lib/hanami/version.rb +3 -1
  42. data/lib/hanami/web/rack_logger.rb +96 -0
  43. metadata +84 -228
  44. data/bin/hanami +0 -6
  45. data/lib/hanami/action/csrf_protection.rb +0 -211
  46. data/lib/hanami/action/routing_helpers.rb +0 -40
  47. data/lib/hanami/app.rb +0 -96
  48. data/lib/hanami/application_configuration.rb +0 -1495
  49. data/lib/hanami/application_name.rb +0 -108
  50. data/lib/hanami/application_namespace.rb +0 -14
  51. data/lib/hanami/assets/asset.rb +0 -72
  52. data/lib/hanami/assets/static.rb +0 -102
  53. data/lib/hanami/cli/commands/assets.rb +0 -16
  54. data/lib/hanami/cli/commands/assets/precompile.rb +0 -42
  55. data/lib/hanami/cli/commands/console.rb +0 -95
  56. data/lib/hanami/cli/commands/db.rb +0 -32
  57. data/lib/hanami/cli/commands/db/apply.rb +0 -32
  58. data/lib/hanami/cli/commands/db/console.rb +0 -44
  59. data/lib/hanami/cli/commands/db/create.rb +0 -32
  60. data/lib/hanami/cli/commands/db/drop.rb +0 -32
  61. data/lib/hanami/cli/commands/db/migrate.rb +0 -39
  62. data/lib/hanami/cli/commands/db/prepare.rb +0 -32
  63. data/lib/hanami/cli/commands/db/rollback.rb +0 -59
  64. data/lib/hanami/cli/commands/db/version.rb +0 -32
  65. data/lib/hanami/cli/commands/destroy.rb +0 -26
  66. data/lib/hanami/cli/commands/destroy/action.rb +0 -137
  67. data/lib/hanami/cli/commands/destroy/app.rb +0 -159
  68. data/lib/hanami/cli/commands/destroy/mailer.rb +0 -74
  69. data/lib/hanami/cli/commands/destroy/migration.rb +0 -51
  70. data/lib/hanami/cli/commands/destroy/model.rb +0 -84
  71. data/lib/hanami/cli/commands/generate.rb +0 -28
  72. data/lib/hanami/cli/commands/generate/action.rb +0 -321
  73. data/lib/hanami/cli/commands/generate/action/action.erb +0 -7
  74. data/lib/hanami/cli/commands/generate/action/action_spec.minitest.erb +0 -11
  75. data/lib/hanami/cli/commands/generate/action/action_spec.rspec.erb +0 -9
  76. data/lib/hanami/cli/commands/generate/action/action_without_view.erb +0 -7
  77. data/lib/hanami/cli/commands/generate/action/view.erb +0 -7
  78. data/lib/hanami/cli/commands/generate/action/view_spec.minitest.erb +0 -12
  79. data/lib/hanami/cli/commands/generate/action/view_spec.rspec.erb +0 -10
  80. data/lib/hanami/cli/commands/generate/app.rb +0 -243
  81. data/lib/hanami/cli/commands/generate/app/application.erb +0 -313
  82. data/lib/hanami/cli/commands/generate/app/favicon.ico +0 -0
  83. data/lib/hanami/cli/commands/generate/app/gitkeep.erb +0 -0
  84. data/lib/hanami/cli/commands/generate/app/layout.erb +0 -7
  85. data/lib/hanami/cli/commands/generate/app/layout_spec.minitest.erb +0 -10
  86. data/lib/hanami/cli/commands/generate/app/layout_spec.rspec.erb +0 -10
  87. data/lib/hanami/cli/commands/generate/app/routes.erb +0 -5
  88. data/lib/hanami/cli/commands/generate/app/template.erb.erb +0 -10
  89. data/lib/hanami/cli/commands/generate/app/template.haml.erb +0 -7
  90. data/lib/hanami/cli/commands/generate/app/template.slim.erb +0 -8
  91. data/lib/hanami/cli/commands/generate/mailer.rb +0 -104
  92. data/lib/hanami/cli/commands/generate/mailer/mailer.erb +0 -9
  93. data/lib/hanami/cli/commands/generate/mailer/mailer_spec.minitest.erb +0 -7
  94. data/lib/hanami/cli/commands/generate/mailer/mailer_spec.rspec.erb +0 -5
  95. data/lib/hanami/cli/commands/generate/migration.rb +0 -41
  96. data/lib/hanami/cli/commands/generate/migration/migration.erb +0 -4
  97. data/lib/hanami/cli/commands/generate/model.rb +0 -125
  98. data/lib/hanami/cli/commands/generate/model/entity.erb +0 -2
  99. data/lib/hanami/cli/commands/generate/model/entity_spec.minitest.erb +0 -5
  100. data/lib/hanami/cli/commands/generate/model/entity_spec.rspec.erb +0 -3
  101. data/lib/hanami/cli/commands/generate/model/migration.erb +0 -10
  102. data/lib/hanami/cli/commands/generate/model/repository.erb +0 -5
  103. data/lib/hanami/cli/commands/generate/model/repository_spec.minitest.erb +0 -5
  104. data/lib/hanami/cli/commands/generate/model/repository_spec.rspec.erb +0 -3
  105. data/lib/hanami/cli/commands/generate/secret.rb +0 -48
  106. data/lib/hanami/cli/commands/new.rb +0 -578
  107. data/lib/hanami/cli/commands/new/.env.development.erb +0 -3
  108. data/lib/hanami/cli/commands/new/.env.test.erb +0 -3
  109. data/lib/hanami/cli/commands/new/.gitkeep.erb +0 -0
  110. data/lib/hanami/cli/commands/new/Gemfile.erb +0 -58
  111. data/lib/hanami/cli/commands/new/README.md.erb +0 -33
  112. data/lib/hanami/cli/commands/new/config.ru.erb +0 -3
  113. data/lib/hanami/cli/commands/new/config/boot.erb +0 -2
  114. data/lib/hanami/cli/commands/new/config/environment.erb +0 -49
  115. data/lib/hanami/cli/commands/new/gitignore.erb +0 -2
  116. data/lib/hanami/cli/commands/new/gitignore_with_sqlite.erb +0 -3
  117. data/lib/hanami/cli/commands/new/hanamirc.erb +0 -3
  118. data/lib/hanami/cli/commands/new/lib/project.erb +0 -2
  119. data/lib/hanami/cli/commands/new/minitest/Rakefile.erb +0 -12
  120. data/lib/hanami/cli/commands/new/minitest/features_helper.erb +0 -11
  121. data/lib/hanami/cli/commands/new/minitest/spec_helper.erb +0 -7
  122. data/lib/hanami/cli/commands/new/rspec/Rakefile.erb +0 -9
  123. data/lib/hanami/cli/commands/new/rspec/capybara.erb +0 -8
  124. data/lib/hanami/cli/commands/new/rspec/features_helper.erb +0 -12
  125. data/lib/hanami/cli/commands/new/rspec/rspec.erb +0 -2
  126. data/lib/hanami/cli/commands/new/rspec/spec_helper.erb +0 -103
  127. data/lib/hanami/cli/commands/new/schema.sql.erb +0 -0
  128. data/lib/hanami/cli/commands/project.rb +0 -421
  129. data/lib/hanami/cli/commands/routes.rb +0 -21
  130. data/lib/hanami/cli/commands/templates.rb +0 -31
  131. data/lib/hanami/cli/commands/version.rb +0 -19
  132. data/lib/hanami/common_logger.rb +0 -93
  133. data/lib/hanami/components.rb +0 -156
  134. data/lib/hanami/components/app/assets.rb +0 -59
  135. data/lib/hanami/components/app/controller.rb +0 -74
  136. data/lib/hanami/components/app/routes.rb +0 -59
  137. data/lib/hanami/components/app/view.rb +0 -44
  138. data/lib/hanami/components/component.rb +0 -182
  139. data/lib/hanami/components/components.rb +0 -479
  140. data/lib/hanami/components/routes_inspector.rb +0 -72
  141. data/lib/hanami/config/cookies.rb +0 -69
  142. data/lib/hanami/config/framework_configuration.rb +0 -43
  143. data/lib/hanami/config/load_paths.rb +0 -46
  144. data/lib/hanami/config/mapper.rb +0 -47
  145. data/lib/hanami/config/routes.rb +0 -20
  146. data/lib/hanami/config/security.rb +0 -110
  147. data/lib/hanami/config/sessions.rb +0 -103
  148. data/lib/hanami/configuration/app.rb +0 -18
  149. data/lib/hanami/early_hints.rb +0 -129
  150. data/lib/hanami/env.rb +0 -69
  151. data/lib/hanami/environment.rb +0 -513
  152. data/lib/hanami/environment_application_configurations.rb +0 -37
  153. data/lib/hanami/frameworks.rb +0 -22
  154. data/lib/hanami/hanamirc.rb +0 -169
  155. data/lib/hanami/mailer/glue.rb +0 -27
  156. data/lib/hanami/middleware_stack.rb +0 -172
  157. data/lib/hanami/rake_helper.rb +0 -78
  158. data/lib/hanami/rake_tasks.rb +0 -2
  159. data/lib/hanami/rendering_policy.rb +0 -95
  160. data/lib/hanami/routes.rb +0 -219
  161. data/lib/hanami/routing/default.rb +0 -32
  162. data/lib/hanami/static.rb +0 -63
  163. data/lib/hanami/templates/default.html.erb +0 -30
  164. data/lib/hanami/templates/welcome.html.erb +0 -52
  165. data/lib/hanami/views/default.rb +0 -37
  166. data/lib/hanami/views/default_template_finder.rb +0 -22
  167. data/lib/hanami/views/null_view.rb +0 -15
  168. data/lib/hanami/welcome.rb +0 -36
@@ -1,59 +0,0 @@
1
- require 'hanami/routes'
2
- require 'hanami/routing/default'
3
-
4
- module Hanami
5
- # @since 0.9.0
6
- # @api private
7
- module Components
8
- # @since 0.9.0
9
- # @api private
10
- module App
11
- # hanami-router configuration for a sigle Hanami application in the project.
12
- #
13
- # @since 0.9.0
14
- # @api private
15
- class Routes
16
- # Configure hanami-router for a single Hanami application in the project.
17
- #
18
- # @param app [Hanami::Configuration::App] a Hanami application
19
- #
20
- # @since 0.9.0
21
- # @api private
22
- def self.resolve(app)
23
- namespace = app.namespace
24
- routes = application_routes(app)
25
-
26
- if namespace.routes.nil? # rubocop:disable Style/IfUnlessModifier
27
- namespace.routes = Hanami::Routes.new(routes)
28
- end
29
-
30
- Components.resolved("#{app.app_name}.routes", routes)
31
- end
32
-
33
- # @since 0.9.0
34
- # @api private
35
- def self.application_routes(app) # rubocop:disable Metrics/MethodLength
36
- config = app.configuration
37
- namespace = app.namespace
38
-
39
- resolver = Hanami::Routing::EndpointResolver.new(pattern: config.controller_pattern, namespace: namespace)
40
- default_app = Hanami::Routing::Default.new
41
-
42
- options = {
43
- resolver: resolver,
44
- default_app: default_app,
45
- scheme: config.scheme,
46
- host: config.host,
47
- port: config.port,
48
- prefix: config.path_prefix,
49
- force_ssl: config.force_ssl
50
- }
51
-
52
- options[:parsers] = config.body_parsers if config.body_parsers.any?
53
-
54
- Hanami::Router.new(options, &config.routes)
55
- end
56
- end
57
- end
58
- end
59
- end
@@ -1,44 +0,0 @@
1
- module Hanami
2
- # @since 0.9.0
3
- # @api private
4
- module Components
5
- # @since 0.9.0
6
- # @api private
7
- module App
8
- # hanami-view configuration for a sigle Hanami application in the project.
9
- #
10
- # @since 0.9.0
11
- # @api private
12
- class View
13
- # Configure hanami-view for a single Hanami application in the project.
14
- #
15
- # @param app [Hanami::Configuration::App] a Hanami application
16
- #
17
- # @since 0.9.0
18
- # @api private
19
- #
20
- # rubocop:disable Metrics/AbcSize
21
- # rubocop:disable Metrics/MethodLength
22
- def self.resolve(app)
23
- config = app.configuration
24
- namespace = app.namespace
25
-
26
- unless namespace.const_defined?('View', false)
27
- view = Hanami::View.duplicate(namespace) do
28
- root config.templates
29
- layout config.layout
30
-
31
- config.view.__apply(self)
32
- end
33
-
34
- namespace.const_set('View', view)
35
- end
36
-
37
- Components.resolved "#{app.app_name}.view", namespace.const_get('View').configuration
38
- end
39
- end
40
- # rubocop:enable Metrics/MethodLength
41
- # rubocop:enable Metrics/AbcSize
42
- end
43
- end
44
- end
@@ -1,182 +0,0 @@
1
- module Hanami
2
- # @since 0.9.0
3
- # @api private
4
- module Components
5
- # Base component
6
- #
7
- # @since 0.9.0
8
- # @api private
9
- #
10
- # @see Hanami::Components
11
- class Component
12
- # Instantiate a new component
13
- #
14
- # @param name [String] the component name
15
- # @param blk [Proc] the logic of the component
16
- #
17
- # @return [Hanami::Components::Component]
18
- #
19
- # @since 0.9.0
20
- # @api private
21
- def initialize(name, &blk)
22
- @name = name
23
- @requirements = []
24
- @_prepare = ->(*) {}
25
- @_resolve = -> {}
26
- instance_eval(&blk)
27
- end
28
-
29
- # Run or resolve the component
30
- #
31
- # @param configuration [Hanami::Configuration] the Hanami configuration for the project
32
- #
33
- # @since 0.9.0
34
- # @api private
35
- def call(configuration)
36
- resolve_requirements
37
- _prepare.call(configuration)
38
-
39
- unless _run.nil?
40
- _run.call(configuration)
41
- return
42
- end
43
-
44
- resolved(name, _resolve.call(configuration))
45
- end
46
-
47
- private
48
-
49
- # @since 1.3.0
50
- # @api private
51
- #
52
- # @see Hanami::Component#logger_interface?
53
- LOGGER_METHODS = %i[info warn debug]
54
-
55
- # Component name
56
- #
57
- # @return [String]
58
- #
59
- # @since 0.9.0
60
- # @api private
61
- attr_reader :name
62
-
63
- # Component requirements
64
- #
65
- # @return [Array<String>]
66
- #
67
- # @since 0.9.0
68
- # @api private
69
- attr_reader :requirements
70
-
71
- # Prepare logic
72
- #
73
- # @since 0.9.0
74
- # @api private
75
- attr_accessor :_prepare
76
-
77
- # Resolve logic
78
- #
79
- # @since 0.9.0
80
- # @api private
81
- attr_accessor :_resolve
82
-
83
- # Run logic
84
- #
85
- # @since 0.9.0
86
- # @api private
87
- attr_accessor :_run
88
-
89
- # Declare component requirement(s)
90
- #
91
- # @param components [Array<String>] the name of the other components to
92
- # depend on
93
- def requires(*components)
94
- self.requirements = Array(components).flatten
95
- end
96
-
97
- # Declare prepare logic
98
- #
99
- # @param blk [Proc] prepare logic
100
- #
101
- # @since 0.9.0
102
- # @api private
103
- def prepare(&blk)
104
- self._prepare = blk
105
- end
106
-
107
- # Declare resolve logic
108
- #
109
- # @param blk [Proc] resolve logic
110
- #
111
- # @since 0.9.0
112
- # @api private
113
- def resolve(&blk)
114
- self._resolve = blk
115
- end
116
-
117
- # Declare run logic
118
- #
119
- # @param blk [Proc] run logic
120
- #
121
- # @since 0.9.0
122
- # @api private
123
- def run(&blk)
124
- self._run = blk
125
- end
126
-
127
- # Set requirements
128
- #
129
- # @param names [Array<String>] the requirements
130
- #
131
- # @since 0.9.0
132
- # @api private
133
- def requirements=(names)
134
- @requirements = Array(names).flatten
135
- end
136
-
137
- # Resolve the requirements before to execute the logic of this component
138
- #
139
- # @since 0.9.0
140
- # @api private
141
- #
142
- # @see Hanami::Components.resolve
143
- def resolve_requirements
144
- Components.resolve(requirements)
145
- end
146
-
147
- # Get a registered component by name
148
- #
149
- # @param name [String] the component name
150
- #
151
- # @since 0.9.0
152
- # @api private
153
- #
154
- # @see Hanami::Components.component
155
- def component(name)
156
- Components.component(name)
157
- end
158
-
159
- # Mark a component as resolved by providing a value or a block.
160
- #
161
- # @param name [String] the name of the component to mark as resolved
162
- # @param value [Object] the optional value of the component
163
- # @param blk [Proc] the optional block which returning value is associated with the component.
164
- #
165
- # @since 0.9.0
166
- # @api private
167
- #
168
- # @see Hanami::Components.resolved
169
- def resolved(name, value = nil, &blk)
170
- Components.resolved(name, value, &blk)
171
- end
172
-
173
- # Check that instance has logger interfaces (#info, #warn and #debug)
174
- #
175
- # @since 1.3.0
176
- # @api private
177
- def logger_interface?(instance)
178
- LOGGER_METHODS.all? { |method| instance.respond_to?(method) }
179
- end
180
- end
181
- end
182
- end
@@ -1,479 +0,0 @@
1
- require 'hanami/utils'
2
-
3
- module Hanami
4
- # Registered components
5
- #
6
- # @since 0.9.0
7
- # @api private
8
- #
9
- # @see Hanami::Components
10
- module Components # rubocop:disable Metrics/ModuleLength
11
- # Require the entire project
12
- #
13
- # @since 0.9.0
14
- # @api private
15
- register 'all' do
16
- requires 'logger', 'code', 'mailer', 'model', 'apps', 'finalizers'
17
-
18
- resolve { true }
19
- end
20
-
21
- # Setup project's logger
22
- #
23
- # @since 1.0.0
24
- # @api private
25
- register 'logger' do
26
- prepare do
27
- require 'hanami/logger'
28
- end
29
-
30
- resolve do |configuration|
31
- if configuration.logger.is_a?(Array)
32
- if logger_interface?(configuration.logger.first)
33
- configuration.logger.first
34
- else
35
- Hanami::Logger.new(Hanami.environment.project_name, *configuration.logger)
36
- end
37
- end
38
- end
39
- end
40
-
41
- # Check if code reloading is enabled
42
- #
43
- # @since 0.9.0
44
- # @api private
45
- register 'code_reloading' do
46
- prepare do
47
- begin
48
- require 'shotgun'
49
- rescue LoadError # rubocop:disable Lint/HandleExceptions
50
- end
51
- end
52
-
53
- resolve do
54
- !!(defined?(Shotgun) && # rubocop:disable Style/DoubleNegation
55
- Components['environment'].code_reloading?)
56
- end
57
- end
58
-
59
- # @api private
60
- register 'code' do
61
- run do
62
- directory = Hanami.root.join('lib')
63
-
64
- if Hanami.code_reloading?
65
- Utils.reload!(directory)
66
- else
67
- Utils.require!(directory)
68
- end
69
- end
70
- end
71
-
72
- # Tries to load hanami-model, if available for the project
73
- #
74
- # @since 0.9.0
75
- # @api private
76
- #
77
- # @example With hanami-model
78
- # Hanami::Components.resolve('model')
79
- # Hanami::Components['model'] # => true
80
- #
81
- # @example Without hanami-model
82
- # Hanami::Components.resolve('model')
83
- # Hanami::Components['model'] # => nil
84
- register 'model' do
85
- requires 'logger', 'model.configuration', 'model.sql'
86
-
87
- resolve do
88
- if Components['model.configuration']
89
- Hanami::Model.load!
90
- Hanami::Model.configuration.logger = Components['logger']
91
- true
92
- end
93
- end
94
- end
95
-
96
- # Tries to evaluate hanami-model configuration, if available for the project
97
- #
98
- # @since 0.9.0
99
- # @api private
100
- #
101
- # @example With hanami-model
102
- # Hanami::Components.resolve('model.configuration')
103
- # Hanami::Components['model.configuration'].class # => Hanami::Model::Configuration
104
- #
105
- # @example Without hanami-model
106
- # Hanami::Components.resolve('model.configuration')
107
- # Hanami::Components['model.configuration'].class # => NilClass
108
- register 'model.configuration' do
109
- requires 'model.bundled'
110
-
111
- resolve do |configuration|
112
- if Components['model.bundled']
113
- Hanami::Model.instance_variable_set(:@configuration, nil) if Hanami.code_reloading?
114
- Hanami::Model.configure(&configuration.model)
115
- Hanami::Model.configuration
116
- end
117
- end
118
- end
119
-
120
- # Tries to evaluate hanami-model configuration, if available for the project
121
- # and it doesn't activate migrations logger
122
- #
123
- # @since 1.1.0
124
- # @api private
125
- #
126
- # @example With hanami-model
127
- # Hanami::Components.resolve('model.configuration.no_logger')
128
- # Hanami::Components['model.configuration.no_logger'].class # => Hanami::Model::Configuration
129
- #
130
- # @example Without hanami-model
131
- # Hanami::Components.resolve('model.configuration.no_logger')
132
- # Hanami::Components['model.configuration.no_logger'].class # => NilClass
133
- register 'model.configuration.no_logger' do
134
- requires 'model.bundled'
135
-
136
- prepare do
137
- require 'stringio'
138
- end
139
-
140
- resolve do |configuration|
141
- if Components['model.bundled']
142
- Hanami::Model.configure(&configuration.model)
143
- Hanami::Model.config.migrations_logger(StringIO.new)
144
- Hanami::Model.configuration
145
- end
146
- end
147
- end
148
-
149
- # Tries to load SQL support for hanami, if available for the project
150
- #
151
- # @since 0.9.0
152
- # @api private
153
- #
154
- # @example With hanami-model
155
- # Hanami::Components.resolve('model.sql')
156
- # Hanami::Components['model.sql'] # => true
157
- #
158
- # @example Without hanami-model
159
- # Hanami::Components.resolve('model.sql')
160
- # Hanami::Components['model.sql'] # => nil
161
- register 'model.sql' do
162
- requires 'model.configuration'
163
-
164
- prepare do
165
- begin
166
- require 'hanami/model/sql'
167
- rescue LoadError # rubocop:disable Lint/HandleExceptions
168
- end
169
- end
170
-
171
- resolve do
172
- true if defined?(Hanami::Model::Sql)
173
- end
174
- end
175
-
176
- # Check if hanami-model is bundled
177
- #
178
- # @since 0.9.0
179
- # @api private
180
- #
181
- # @example With hanami-model
182
- # Hanami::Components.resolve('model.bundled')
183
- # Hanami::Components['model.bundled'] # => true
184
- #
185
- # @example Without hanami-model
186
- # Hanami::Components.resolve('model.bundled')
187
- # Hanami::Components['model.bundled'] # => nil
188
- register 'model.bundled' do
189
- prepare do
190
- begin
191
- require 'hanami/model'
192
- rescue LoadError # rubocop:disable Lint/HandleExceptions
193
- end
194
- end
195
-
196
- resolve do
197
- true if defined?(Hanami::Model)
198
- end
199
- end
200
-
201
- # Tries to evaluate hanami-mailer configuration
202
- #
203
- # @since 1.0.0
204
- # @api private
205
- #
206
- # @example With hanami-mailer
207
- # Hanami::Components.resolve('mailer.configuration')
208
- # Hanami::Components['mailer.configuration'].class # => Hanami::Mailer::Configuration
209
- register 'mailer.configuration' do
210
- prepare do
211
- require 'hanami/mailer'
212
- require 'hanami/mailer/glue'
213
- end
214
-
215
- resolve do |configuration|
216
- unless configuration.mailer_settings.empty?
217
- if Hanami.code_reloading? && !Hanami::Mailer.configuration.nil?
218
- Hanami::Mailer.configuration = Hanami::Mailer.configuration.dup
219
- end
220
-
221
- configuration.mailer_settings.each do |settings|
222
- Hanami::Mailer.configure(&settings)
223
- Hanami::Mailer.configuration.mailers.each do |mailer|
224
- mailer.configuration = Hanami::Mailer.configuration.duplicate
225
- Hanami::Mailer.configuration.copy!(mailer)
226
- end
227
- end
228
-
229
- Hanami::Mailer.configuration
230
- end
231
- end
232
- end
233
-
234
- # Tries to load hanami-mailer
235
- #
236
- # @since 1.0.0
237
- # @api private
238
- #
239
- # @example
240
- # Hanami::Components.resolve('mailer')
241
- # Hanami::Components['mailer'] # => true
242
- register 'mailer' do
243
- requires 'mailer.configuration'
244
-
245
- resolve do
246
- if Components['mailer.configuration']
247
- Hanami::Mailer.load!
248
- true
249
- end
250
- end
251
- end
252
-
253
- # Loads the routes for all the mounted Hanami/Rack applications
254
- #
255
- # This is used only by `hanami routes` command.
256
- #
257
- # @since 0.9.0
258
- # @api private
259
- register 'routes.inspector' do
260
- requires 'apps.configurations'
261
-
262
- prepare do
263
- require 'hanami/components/routes_inspector'
264
- end
265
-
266
- resolve do |configuration|
267
- RoutesInspector.new(configuration)
268
- end
269
- end
270
-
271
- # Loads all the Hanami applications in the project
272
- #
273
- # @since 0.9.0
274
- # @api private
275
- register 'apps' do
276
- resolve do |configuration|
277
- configuration.apps do |app|
278
- component('app').call(app)
279
- end
280
-
281
- true
282
- end
283
- end
284
-
285
- # Evaluates all the Hanami applications' configurations in the project
286
- #
287
- # @since 0.9.0
288
- # @api private
289
- register 'apps.configurations' do
290
- resolve do |configuration|
291
- configuration.apps do |app|
292
- component('app.configuration').call(app)
293
- end
294
-
295
- true
296
- end
297
- end
298
-
299
- # Evaluates all the Hanami assets configurations for each application in the project
300
- #
301
- # This is used only by `hanami assets precompile` command.
302
- #
303
- # @since 0.9.0
304
- # @api private
305
- register 'apps.assets.configurations' do
306
- requires 'apps.configurations'
307
-
308
- prepare do
309
- require 'hanami/components/app/assets'
310
- end
311
-
312
- resolve do |configuration|
313
- [].tap do |result|
314
- configuration.apps do |app|
315
- result << Components::App::Assets.resolve(app)
316
- end
317
- end
318
- end
319
- end
320
-
321
- # Finalizers for the project
322
- #
323
- # @since 0.9.0
324
- # @api private
325
- register 'finalizers' do
326
- requires 'plugins', 'finalizers.initializers'
327
-
328
- resolve { true }
329
- end
330
-
331
- # Load project initializers
332
- #
333
- # @since 0.9.0
334
- # @api private
335
- register 'finalizers.initializers' do
336
- run do
337
- Hanami::Utils.require!(
338
- Hanami.root.join('config', 'initializers')
339
- )
340
- end
341
- end
342
-
343
- # Load plugins
344
- #
345
- # @since 1.2.0
346
- # @api private
347
- register 'plugins' do
348
- resolve do |configuration|
349
- Hanami.plugins.each do |plugin_configuration|
350
- configuration.instance_eval(&plugin_configuration)
351
- end
352
- end
353
- end
354
-
355
- # Configure, load and finalize a Hanami application in the project
356
- #
357
- # @since 0.9.0
358
- # @api private
359
- register 'app' do
360
- run do |app|
361
- ['app.configuration', 'app.frameworks', 'app.code', 'app.routes', 'app.finalizer'].each do |c|
362
- component(c).call(app)
363
- end
364
-
365
- resolved(app.app_name, true)
366
- end
367
- end
368
-
369
- # Evaluate the configuration of a single Hanami application in the project
370
- #
371
- # @since 0.9.0
372
- # @api private
373
- register 'app.configuration' do
374
- run do |app|
375
- resolved("#{app.app_name}.configuration") do
376
- ApplicationConfiguration.new(app.namespace, app.configurations, app.path_prefix).tap do |config|
377
- app.configuration = config
378
- end
379
- end
380
- end
381
- end
382
-
383
- # Evaluate Hanami frameworks configurations of a single Hanami application in the project
384
- #
385
- # @since 0.9.0
386
- # @api private
387
- register 'app.frameworks' do
388
- run do |app|
389
- ['app.controller', 'app.view', 'app.assets'].each do |c|
390
- component(c).call(app)
391
- end
392
- end
393
- end
394
-
395
- # Evaluate hanami-controller configuration of a single Hanami application in the project
396
- #
397
- # @since 0.9.0
398
- # @api private
399
- register 'app.controller' do
400
- prepare do
401
- require 'hanami/components/app/controller'
402
- end
403
-
404
- run do |app|
405
- Components::App::Controller.resolve(app)
406
- end
407
- end
408
-
409
- # Evaluate hanami-view configuration of a single Hanami application in the project
410
- #
411
- # @since 0.9.0
412
- # @api private
413
- register 'app.view' do
414
- prepare do
415
- require 'hanami/components/app/view'
416
- end
417
-
418
- run do |app|
419
- Components::App::View.resolve(app)
420
- end
421
- end
422
-
423
- # Evaluate hanami-assets configuration of a single Hanami application in the project
424
- #
425
- # @since 0.9.0
426
- # @api private
427
- register 'app.assets' do
428
- prepare do
429
- require 'hanami/components/app/assets'
430
- end
431
-
432
- run do |app|
433
- Components::App::Assets.resolve(app)
434
- end
435
- end
436
-
437
- # Load the code for a single Hanami application in the project
438
- #
439
- # @since 0.9.0
440
- # @api private
441
- register 'app.code' do
442
- run do |app|
443
- config = app.configuration
444
- config.load_paths.load!
445
- end
446
- end
447
-
448
- # Load the routes for a single Hanami application in the project
449
- #
450
- # @since 0.9.0
451
- # @api private
452
- register 'app.routes' do
453
- prepare do
454
- require 'hanami/components/app/routes'
455
- end
456
-
457
- run do |app|
458
- Components::App::Routes.resolve(app)
459
- end
460
- end
461
-
462
- # Finalize a single Hanami application in the project
463
- #
464
- # @since 0.9.0
465
- # @api private
466
- register 'app.finalizer' do
467
- run do |app|
468
- config = app.configuration
469
- namespace = app.namespace
470
-
471
- config.middleware.load!
472
-
473
- namespace.module_eval %(#{namespace}::Controller.load!)
474
- namespace.module_eval %(#{namespace}::View.load!)
475
- namespace.module_eval %(#{namespace}::Assets.load!)
476
- end
477
- end
478
- end
479
- end