hanami 1.3.1 → 2.0.0.alpha2

Sign up to get free protection for your applications and to get access to all the features.
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