hanami 2.0.0.alpha1 → 2.0.0.alpha5

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