hanami 2.0.0.alpha1 → 2.0.0.alpha5

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 (55) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +306 -5
  3. data/FEATURES.md +9 -1
  4. data/LICENSE.md +1 -1
  5. data/README.md +9 -6
  6. data/hanami.gemspec +12 -11
  7. data/lib/hanami/application/autoloader/inflector_adapter.rb +22 -0
  8. data/lib/hanami/application/container/boot/inflector.rb +7 -0
  9. data/lib/hanami/application/container/boot/logger.rb +7 -0
  10. data/lib/hanami/application/container/boot/rack_logger.rb +19 -0
  11. data/lib/hanami/application/container/boot/rack_monitor.rb +12 -0
  12. data/lib/hanami/application/container/boot/routes_helper.rb +9 -0
  13. data/lib/hanami/application/container/boot/settings.rb +7 -0
  14. data/lib/hanami/application/router.rb +59 -0
  15. data/lib/hanami/application/routes.rb +55 -0
  16. data/lib/hanami/application/routes_helper.rb +34 -0
  17. data/lib/hanami/application/routing/middleware/stack.rb +89 -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/routing/resolver.rb +87 -0
  21. data/lib/hanami/application/routing/router.rb +36 -0
  22. data/lib/hanami/application/settings/dotenv_store.rb +60 -0
  23. data/lib/hanami/application/settings.rb +93 -0
  24. data/lib/hanami/application.rb +330 -34
  25. data/lib/hanami/assets/application_configuration.rb +63 -0
  26. data/lib/hanami/assets/configuration.rb +54 -0
  27. data/lib/hanami/boot/source_dirs.rb +44 -0
  28. data/lib/hanami/boot.rb +1 -2
  29. data/lib/hanami/cli/application/cli.rb +40 -0
  30. data/lib/hanami/cli/application/command.rb +47 -0
  31. data/lib/hanami/cli/application/commands/console.rb +81 -0
  32. data/lib/hanami/cli/application/commands.rb +16 -0
  33. data/lib/hanami/cli/base_command.rb +48 -0
  34. data/lib/hanami/cli/commands/command.rb +4 -4
  35. data/lib/hanami/cli/commands.rb +3 -2
  36. data/lib/hanami/configuration/logger.rb +84 -0
  37. data/lib/hanami/configuration/middleware.rb +4 -4
  38. data/lib/hanami/configuration/null_configuration.rb +14 -0
  39. data/lib/hanami/configuration/router.rb +52 -0
  40. data/lib/hanami/configuration/sessions.rb +5 -5
  41. data/lib/hanami/configuration/source_dirs.rb +42 -0
  42. data/lib/hanami/configuration.rb +122 -131
  43. data/lib/hanami/init.rb +5 -0
  44. data/lib/hanami/setup.rb +9 -0
  45. data/lib/hanami/slice.rb +189 -0
  46. data/lib/hanami/version.rb +1 -1
  47. data/lib/hanami/web/rack_logger.rb +96 -0
  48. data/lib/hanami.rb +17 -30
  49. metadata +116 -50
  50. data/bin/hanami +0 -8
  51. data/lib/hanami/configuration/cookies.rb +0 -24
  52. data/lib/hanami/configuration/security.rb +0 -141
  53. data/lib/hanami/container.rb +0 -107
  54. data/lib/hanami/frameworks.rb +0 -28
  55. data/lib/hanami/routes.rb +0 -31
data/lib/hanami.rb CHANGED
@@ -7,46 +7,32 @@
7
7
  # @see http://hanamirb.org
8
8
  module Hanami
9
9
  require "hanami/version"
10
- require "hanami/frameworks"
11
- require "hanami/container"
12
10
  require "hanami/application"
13
11
 
14
12
  @_mutex = Mutex.new
15
13
 
16
14
  def self.application
17
15
  @_mutex.synchronize do
18
- raise "Hanami application not configured" unless defined?(@_application)
16
+ raise "Hanami.application not configured" unless defined?(@_application)
19
17
 
20
18
  @_application
21
19
  end
22
20
  end
23
21
 
24
- def self.application=(app)
25
- @_mutex.synchronize do
26
- raise "Hanami application already configured" if defined?(@_application)
27
-
28
- @_application = app unless app.name.nil?
29
- end
30
- end
31
-
32
- def self.app
33
- @_mutex.synchronize do
34
- raise "Hanami.app not configured" unless defined?(@_app)
35
-
36
- @_app
37
- end
22
+ def self.application?
23
+ defined?(@_application)
38
24
  end
39
25
 
40
- def self.app=(app)
26
+ def self.application=(klass)
41
27
  @_mutex.synchronize do
42
- raise "Hanami.app already configured" if defined?(@_app)
28
+ raise "Hanami.application already configured" if defined?(@_application)
43
29
 
44
- @_app = app
30
+ @_application = klass unless klass.name.nil?
45
31
  end
46
32
  end
47
33
 
48
- def self.root
49
- Container.root
34
+ def self.rack_app
35
+ application.rack_app
50
36
  end
51
37
 
52
38
  def self.env
@@ -58,18 +44,19 @@ module Hanami
58
44
  end
59
45
 
60
46
  def self.logger
61
- Container[:logger]
47
+ application[:logger]
62
48
  end
63
49
 
64
- def self.boot
65
- @_mutex.synchronize do
66
- raise "Hanami application already booted" if defined?(@_booted)
50
+ def self.init
51
+ application.init
52
+ end
67
53
 
68
- @_booted = true
69
- end
54
+ def self.boot
55
+ application.boot
56
+ end
70
57
 
71
- Container.finalize!
72
- self.app = application.new
58
+ def self.shutdown
59
+ application.shutdown
73
60
  end
74
61
 
75
62
  def self.bundler_groups
metadata CHANGED
@@ -1,125 +1,165 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hanami
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.alpha1
4
+ version: 2.0.0.alpha5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luca Guidi
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-30 00:00:00.000000000 Z
11
+ date: 2022-01-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: hanami-utils
14
+ name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 2.0.alpha
19
+ version: '1.16'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '3'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - "~>"
27
+ - - ">="
25
28
  - !ruby/object:Gem::Version
26
- version: 2.0.alpha
29
+ version: '1.16'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '3'
27
33
  - !ruby/object:Gem::Dependency
28
- name: hanami-router
34
+ name: dry-configurable
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
31
37
  - - "~>"
32
38
  - !ruby/object:Gem::Version
33
- version: 2.0.alpha
39
+ version: '0.12'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 0.12.1
34
43
  type: :runtime
35
44
  prerelease: false
36
45
  version_requirements: !ruby/object:Gem::Requirement
37
46
  requirements:
38
47
  - - "~>"
39
48
  - !ruby/object:Gem::Version
40
- version: 2.0.alpha
49
+ version: '0.12'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 0.12.1
41
53
  - !ruby/object:Gem::Dependency
42
- name: hanami-controller
54
+ name: dry-core
43
55
  requirement: !ruby/object:Gem::Requirement
44
56
  requirements:
45
57
  - - "~>"
46
58
  - !ruby/object:Gem::Version
47
- version: 2.0.alpha
59
+ version: '0.4'
48
60
  type: :runtime
49
61
  prerelease: false
50
62
  version_requirements: !ruby/object:Gem::Requirement
51
63
  requirements:
52
64
  - - "~>"
53
65
  - !ruby/object:Gem::Version
54
- version: 2.0.alpha
66
+ version: '0.4'
55
67
  - !ruby/object:Gem::Dependency
56
- name: hanami-cli
68
+ name: dry-inflector
57
69
  requirement: !ruby/object:Gem::Requirement
58
70
  requirements:
59
71
  - - "~>"
60
72
  - !ruby/object:Gem::Version
61
- version: 1.0.alpha
73
+ version: '0.2'
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: 0.2.1
62
77
  type: :runtime
63
78
  prerelease: false
64
79
  version_requirements: !ruby/object:Gem::Requirement
65
80
  requirements:
66
81
  - - "~>"
67
82
  - !ruby/object:Gem::Version
68
- version: 1.0.alpha
83
+ version: '0.2'
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: 0.2.1
69
87
  - !ruby/object:Gem::Dependency
70
- name: dry-system
88
+ name: dry-monitor
71
89
  requirement: !ruby/object:Gem::Requirement
72
90
  requirements:
73
- - - "~>"
91
+ - - ">="
74
92
  - !ruby/object:Gem::Version
75
- version: '0.10'
93
+ version: '0'
76
94
  type: :runtime
77
95
  prerelease: false
78
96
  version_requirements: !ruby/object:Gem::Requirement
79
97
  requirements:
80
- - - "~>"
98
+ - - ">="
81
99
  - !ruby/object:Gem::Version
82
- version: '0.10'
100
+ version: '0'
83
101
  - !ruby/object:Gem::Dependency
84
- name: dry-inflector
102
+ name: dry-system
85
103
  requirement: !ruby/object:Gem::Requirement
86
104
  requirements:
87
105
  - - "~>"
88
106
  - !ruby/object:Gem::Version
89
- version: '0.1'
107
+ version: '0.22'
90
108
  - - ">="
91
109
  - !ruby/object:Gem::Version
92
- version: 0.1.2
110
+ version: 0.22.0
93
111
  type: :runtime
94
112
  prerelease: false
95
113
  version_requirements: !ruby/object:Gem::Requirement
96
114
  requirements:
97
115
  - - "~>"
98
116
  - !ruby/object:Gem::Version
99
- version: '0.1'
117
+ version: '0.22'
100
118
  - - ">="
101
119
  - !ruby/object:Gem::Version
102
- version: 0.1.2
120
+ version: 0.22.0
103
121
  - !ruby/object:Gem::Dependency
104
- name: bundler
122
+ name: hanami-cli
105
123
  requirement: !ruby/object:Gem::Requirement
106
124
  requirements:
107
- - - ">="
125
+ - - "~>"
108
126
  - !ruby/object:Gem::Version
109
- version: '1.16'
110
- - - "<"
127
+ version: 2.0.alpha
128
+ type: :runtime
129
+ prerelease: false
130
+ version_requirements: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - "~>"
111
133
  - !ruby/object:Gem::Version
112
- version: '3'
134
+ version: 2.0.alpha
135
+ - !ruby/object:Gem::Dependency
136
+ name: hanami-utils
137
+ requirement: !ruby/object:Gem::Requirement
138
+ requirements:
139
+ - - "~>"
140
+ - !ruby/object:Gem::Version
141
+ version: 2.0.alpha
113
142
  type: :runtime
114
143
  prerelease: false
115
144
  version_requirements: !ruby/object:Gem::Requirement
116
145
  requirements:
117
- - - ">="
146
+ - - "~>"
118
147
  - !ruby/object:Gem::Version
119
- version: '1.16'
120
- - - "<"
148
+ version: 2.0.alpha
149
+ - !ruby/object:Gem::Dependency
150
+ name: zeitwerk
151
+ requirement: !ruby/object:Gem::Requirement
152
+ requirements:
153
+ - - "~>"
121
154
  - !ruby/object:Gem::Version
122
- version: '3'
155
+ version: '2.4'
156
+ type: :runtime
157
+ prerelease: false
158
+ version_requirements: !ruby/object:Gem::Requirement
159
+ requirements:
160
+ - - "~>"
161
+ - !ruby/object:Gem::Version
162
+ version: '2.4'
123
163
  - !ruby/object:Gem::Dependency
124
164
  name: rspec
125
165
  requirement: !ruby/object:Gem::Requirement
@@ -154,19 +194,18 @@ dependencies:
154
194
  requirements:
155
195
  - - "~>"
156
196
  - !ruby/object:Gem::Version
157
- version: '12.0'
197
+ version: '13.0'
158
198
  type: :development
159
199
  prerelease: false
160
200
  version_requirements: !ruby/object:Gem::Requirement
161
201
  requirements:
162
202
  - - "~>"
163
203
  - !ruby/object:Gem::Version
164
- version: '12.0'
204
+ version: '13.0'
165
205
  description: Hanami is a web framework for Ruby
166
206
  email:
167
207
  - me@lucaguidi.com
168
- executables:
169
- - hanami
208
+ executables: []
170
209
  extensions: []
171
210
  extra_rdoc_files: []
172
211
  files:
@@ -175,30 +214,57 @@ files:
175
214
  - FEATURES.md
176
215
  - LICENSE.md
177
216
  - README.md
178
- - bin/hanami
179
217
  - hanami.gemspec
180
218
  - lib/hanami.rb
181
219
  - lib/hanami/application.rb
220
+ - lib/hanami/application/autoloader/inflector_adapter.rb
221
+ - lib/hanami/application/container/boot/inflector.rb
222
+ - lib/hanami/application/container/boot/logger.rb
223
+ - lib/hanami/application/container/boot/rack_logger.rb
224
+ - lib/hanami/application/container/boot/rack_monitor.rb
225
+ - lib/hanami/application/container/boot/routes_helper.rb
226
+ - lib/hanami/application/container/boot/settings.rb
227
+ - lib/hanami/application/router.rb
228
+ - lib/hanami/application/routes.rb
229
+ - lib/hanami/application/routes_helper.rb
230
+ - lib/hanami/application/routing/middleware/stack.rb
231
+ - lib/hanami/application/routing/resolver.rb
232
+ - lib/hanami/application/routing/resolver/node.rb
233
+ - lib/hanami/application/routing/resolver/trie.rb
234
+ - lib/hanami/application/routing/router.rb
235
+ - lib/hanami/application/settings.rb
236
+ - lib/hanami/application/settings/dotenv_store.rb
237
+ - lib/hanami/assets/application_configuration.rb
238
+ - lib/hanami/assets/configuration.rb
182
239
  - lib/hanami/boot.rb
240
+ - lib/hanami/boot/source_dirs.rb
241
+ - lib/hanami/cli/application/cli.rb
242
+ - lib/hanami/cli/application/command.rb
243
+ - lib/hanami/cli/application/commands.rb
244
+ - lib/hanami/cli/application/commands/console.rb
245
+ - lib/hanami/cli/base_command.rb
183
246
  - lib/hanami/cli/commands.rb
184
247
  - lib/hanami/cli/commands/command.rb
185
248
  - lib/hanami/cli/commands/server.rb
186
249
  - lib/hanami/configuration.rb
187
- - lib/hanami/configuration/cookies.rb
250
+ - lib/hanami/configuration/logger.rb
188
251
  - lib/hanami/configuration/middleware.rb
189
- - lib/hanami/configuration/security.rb
252
+ - lib/hanami/configuration/null_configuration.rb
253
+ - lib/hanami/configuration/router.rb
190
254
  - lib/hanami/configuration/sessions.rb
191
- - lib/hanami/container.rb
192
- - lib/hanami/frameworks.rb
193
- - lib/hanami/routes.rb
255
+ - lib/hanami/configuration/source_dirs.rb
256
+ - lib/hanami/init.rb
194
257
  - lib/hanami/server.rb
258
+ - lib/hanami/setup.rb
259
+ - lib/hanami/slice.rb
195
260
  - lib/hanami/version.rb
261
+ - lib/hanami/web/rack_logger.rb
196
262
  homepage: http://hanamirb.org
197
263
  licenses:
198
264
  - MIT
199
265
  metadata:
200
266
  allowed_push_host: https://rubygems.org
201
- post_install_message:
267
+ post_install_message:
202
268
  rdoc_options: []
203
269
  require_paths:
204
270
  - lib
@@ -206,15 +272,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
206
272
  requirements:
207
273
  - - ">="
208
274
  - !ruby/object:Gem::Version
209
- version: 2.5.0
275
+ version: 2.6.0
210
276
  required_rubygems_version: !ruby/object:Gem::Requirement
211
277
  requirements:
212
278
  - - ">"
213
279
  - !ruby/object:Gem::Version
214
280
  version: 1.3.1
215
281
  requirements: []
216
- rubygems_version: 3.0.2
217
- signing_key:
282
+ rubygems_version: 3.2.3
283
+ signing_key:
218
284
  specification_version: 4
219
285
  summary: The web, with simplicity
220
286
  test_files: []
data/bin/hanami DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- require "bundler"
5
- require "hanami/cli/commands"
6
-
7
- Bundler.require(*Hanami.bundler_groups) if File.exist?(ENV["BUNDLE_GEMFILE"] || "Gemfile")
8
- Hanami::CLI.new(Hanami::CLI::Commands).call
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Hanami
4
- class Configuration
5
- # Hanami configuration for HTTP cookies
6
- #
7
- # @since 2.0.0
8
- class Cookies
9
- def self.null
10
- { null: true }
11
- end
12
-
13
- attr_reader :options
14
-
15
- def initialize(options)
16
- @options = options
17
- end
18
-
19
- def enabled?
20
- options != self.class.null
21
- end
22
- end
23
- end
24
- end
@@ -1,141 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "concurrent/hash"
4
- require "hanami/utils/string"
5
-
6
- module Hanami
7
- class Configuration
8
- # Hanami configuration security settings
9
- #
10
- # @since 2.0.0
11
- class Security
12
- def initialize
13
- @settings = Concurrent::Hash.new
14
- settings[:x_frame_options] = Setting.new(HEADER_X_FRAME_OPTIONS, DEFAULT_X_FRAME_OPTIONS)
15
- settings[:x_content_type_options] = Setting.new(HEADER_X_CONTENT_TYPE_OPTIONS, DEFAULT_X_CONTENT_TYPE_OPTIONS)
16
- settings[:x_xss_protection] = Setting.new(HEADER_X_XSS_PROTECTION, DEFAULT_X_XSS_PROTECTION)
17
- settings[:content_security_policy] = ContentSecurityPolicy.new(HEADER_CONTENT_SECURITY_POLICY, DEFAULT_CONTENT_SECURITY_POLICY.dup)
18
- end
19
-
20
- def x_frame_options=(value)
21
- settings[:x_frame_options].value = value
22
- end
23
-
24
- def x_frame_options
25
- settings.fetch(:x_frame_options)
26
- end
27
-
28
- def x_content_type_options=(value)
29
- settings[:x_content_type_options].value = value
30
- end
31
-
32
- def x_content_type_options
33
- settings.fetch(:x_content_type_options)
34
- end
35
-
36
- def x_xss_protection=(value)
37
- settings[:x_xss_protection].value = value
38
- end
39
-
40
- def x_xss_protection
41
- settings.fetch(:x_xss_protection)
42
- end
43
-
44
- def content_security_policy=(options)
45
- settings[:content_security_policy].value = options
46
- end
47
-
48
- def content_security_policy
49
- settings.fetch(:content_security_policy)
50
- end
51
-
52
- def to_hash
53
- settings.each_with_object({}) do |(_, v), result|
54
- next if v.value.nil?
55
-
56
- result[v.header] = v.value
57
- end
58
- end
59
-
60
- private
61
-
62
- # X-Frame-Options
63
- HEADER_X_FRAME_OPTIONS = "X-Frame-Options"
64
- private_constant :HEADER_X_FRAME_OPTIONS
65
-
66
- DEFAULT_X_FRAME_OPTIONS = "DENY"
67
- private_constant :DEFAULT_X_FRAME_OPTIONS
68
-
69
- # X-Content-Type-Optionx
70
- HEADER_X_CONTENT_TYPE_OPTIONS = "X-Content-Type-Options"
71
- private_constant :HEADER_X_CONTENT_TYPE_OPTIONS
72
-
73
- DEFAULT_X_CONTENT_TYPE_OPTIONS = "nosniff"
74
- private_constant :DEFAULT_X_CONTENT_TYPE_OPTIONS
75
-
76
- # X-XSS-Protection
77
- HEADER_X_XSS_PROTECTION = "X-XSS-Protection"
78
- private_constant :HEADER_X_XSS_PROTECTION
79
-
80
- DEFAULT_X_XSS_PROTECTION = "1; mode=block"
81
- private_constant :DEFAULT_X_XSS_PROTECTION
82
-
83
- # Content-Security-Policy
84
- HEADER_CONTENT_SECURITY_POLICY = "Content-Security-Policy"
85
- private_constant :HEADER_CONTENT_SECURITY_POLICY
86
-
87
- DEFAULT_CONTENT_SECURITY_POLICY = {
88
- form_action: "'self'",
89
- frame_ancestors: "'self'",
90
- base_uri: "'self'",
91
- default_src: "'none'",
92
- script_src: "'self'",
93
- connect_src: "'self'",
94
- img_src: "'self' https: data:",
95
- style_src: "'self' 'unsafe-inline' https:",
96
- font_src: "'self'",
97
- object_src: "'none'",
98
- plugin_types: "application/pdf",
99
- child_src: "'self'",
100
- frame_src: "'self'",
101
- media_src: "'self'"
102
- }.freeze
103
- private_constant :DEFAULT_CONTENT_SECURITY_POLICY
104
-
105
- # Security setting
106
- #
107
- # @api private
108
- # @since 2.0.0
109
- class Setting
110
- attr_accessor :header, :value
111
-
112
- def initialize(header, value)
113
- @header = header.freeze
114
- @value = value
115
- end
116
- end
117
-
118
- # Content security policy settings
119
- #
120
- # @api private
121
- # @since 2.0.0
122
- class ContentSecurityPolicy < Setting
123
- def value
124
- @value.map do |k, v|
125
- "#{Utils::String.dasherize(k)} #{v}" unless v.nil?
126
- end.compact.join("; ")
127
- end
128
-
129
- def [](key)
130
- @value[key]
131
- end
132
-
133
- def []=(key, value)
134
- @value[key] = value
135
- end
136
- end
137
-
138
- attr_reader :settings
139
- end
140
- end
141
- end
@@ -1,107 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "dry/system/container"
4
- require "pathname"
5
-
6
- module Hanami
7
- # Hanami private IoC
8
- #
9
- # @since 2.0.0
10
- class Container < Dry::System::Container
11
- configure do |config|
12
- config.root = Pathname.new(Dir.pwd)
13
- end
14
-
15
- boot(:env) do |c|
16
- init do
17
- begin
18
- require "dotenv"
19
- rescue LoadError # rubocop:disable Lint/HandleExceptions
20
- end
21
-
22
- Dotenv.load(c.root.join(".env")) if defined?(Dotenv)
23
- end
24
- end
25
-
26
- boot(:lib) do |c|
27
- init do
28
- $LOAD_PATH.unshift c.root.join("lib")
29
- Hanami::Utils.require!(c.root.join("lib", "**", "*.rb"))
30
- end
31
- end
32
-
33
- boot(:configuration) do |c|
34
- init do
35
- require c.root.join("config", "application").to_s
36
- end
37
-
38
- start do
39
- register(:configuration, Hanami.application.configuration.finalize)
40
- end
41
- end
42
-
43
- boot(:logger) do |c|
44
- init do
45
- require "hanami/logger"
46
- end
47
-
48
- start do
49
- use :configuration
50
- register(:logger, Hanami::Logger.new(c[:configuration].logger))
51
- end
52
- end
53
-
54
- boot(:routes) do |c|
55
- init do
56
- require c.root.join("config", "routes").to_s
57
- end
58
-
59
- start do
60
- register(:routes, Hanami.application.routes)
61
- end
62
- end
63
-
64
- boot(:apps) do |c|
65
- start do
66
- use :routes
67
-
68
- register(:apps, c[:routes].apps)
69
- end
70
- end
71
-
72
- boot(:actions) do |c|
73
- init do
74
- use :configuration
75
- use :apps
76
-
77
- c[:apps].each do |app|
78
- require c.root.join("apps", app.to_s, "action")
79
-
80
- namespace = Utils::String.classify("#{app}::Actions")
81
- namespace = Utils::Class.load!(namespace)
82
-
83
- configuration = Controller::Configuration.new do |config|
84
- config.cookies = c[:configuration].cookies.options
85
- config.default_headers = c[:configuration].security.to_hash
86
- config.default_request_format = c[:configuration].default_request_format
87
- config.default_response_format = c[:configuration].default_response_format
88
- end
89
-
90
- register(:"apps.#{app}.actions.namespace", namespace)
91
- register(:"apps.#{app}.actions.configuration", configuration)
92
- end
93
- end
94
- end
95
-
96
- boot(:code) do |c|
97
- init do
98
- use :configuration
99
- use :apps
100
- use :actions
101
-
102
- apps = c[:apps].join(",")
103
- Hanami::Utils.require!(c.root.join("apps", "{#{apps}}", "**", "*.rb"))
104
- end
105
- end
106
- end
107
- end
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "hanami/utils"
4
- require "hanami/router"
5
- require "hanami/controller"
6
- require "hanami/utils/string"
7
- require "hanami/utils/class"
8
-
9
- # Hanami
10
- #
11
- # @since 0.1.0
12
- module Hanami
13
- # Hanami::Router enhancements
14
- #
15
- # @since 2.0.0
16
- class Router
17
- # rubocop:disable Metrics/ParameterLists
18
- def mount(app, at:, host: nil, container: Hanami::Container, **args, &blk)
19
- super(app, at: at, host: host, **args, &blk) unless app.is_a?(Symbol)
20
-
21
- namespace = container["apps.#{app}.actions.namespace"]
22
- configuration = container["apps.#{app}.actions.configuration"]
23
-
24
- scope(at, namespace: namespace, configuration: configuration, &blk)
25
- end
26
- # rubocop:enable Metrics/ParameterLists
27
- end
28
- end