hanami 1.3.5 → 2.0.0.alpha1

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 (147) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +51 -41
  3. data/FEATURES.md +2 -12
  4. data/LICENSE.md +1 -1
  5. data/README.md +5 -8
  6. data/bin/hanami +6 -4
  7. data/hanami.gemspec +24 -28
  8. data/lib/hanami/application.rb +44 -176
  9. data/lib/hanami/boot.rb +6 -0
  10. data/lib/hanami/cli/commands/command.rb +21 -29
  11. data/lib/hanami/cli/commands/server.rb +63 -14
  12. data/lib/hanami/cli/commands.rb +5 -42
  13. data/lib/hanami/configuration/cookies.rb +24 -0
  14. data/lib/hanami/configuration/middleware.rb +8 -28
  15. data/lib/hanami/configuration/security.rb +141 -0
  16. data/lib/hanami/configuration/sessions.rb +50 -0
  17. data/lib/hanami/configuration.rb +181 -191
  18. data/lib/hanami/container.rb +107 -0
  19. data/lib/hanami/frameworks.rb +24 -18
  20. data/lib/hanami/routes.rb +17 -205
  21. data/lib/hanami/server.rb +5 -69
  22. data/lib/hanami/version.rb +3 -1
  23. data/lib/hanami.rb +39 -243
  24. metadata +36 -233
  25. data/lib/hanami/action/csrf_protection.rb +0 -211
  26. data/lib/hanami/action/routing_helpers.rb +0 -40
  27. data/lib/hanami/app.rb +0 -96
  28. data/lib/hanami/application_configuration.rb +0 -1495
  29. data/lib/hanami/application_name.rb +0 -108
  30. data/lib/hanami/application_namespace.rb +0 -14
  31. data/lib/hanami/assets/asset.rb +0 -72
  32. data/lib/hanami/assets/static.rb +0 -102
  33. data/lib/hanami/cli/commands/assets/precompile.rb +0 -42
  34. data/lib/hanami/cli/commands/assets.rb +0 -16
  35. data/lib/hanami/cli/commands/console.rb +0 -95
  36. data/lib/hanami/cli/commands/db/apply.rb +0 -32
  37. data/lib/hanami/cli/commands/db/console.rb +0 -44
  38. data/lib/hanami/cli/commands/db/create.rb +0 -32
  39. data/lib/hanami/cli/commands/db/drop.rb +0 -32
  40. data/lib/hanami/cli/commands/db/migrate.rb +0 -39
  41. data/lib/hanami/cli/commands/db/prepare.rb +0 -32
  42. data/lib/hanami/cli/commands/db/rollback.rb +0 -59
  43. data/lib/hanami/cli/commands/db/version.rb +0 -32
  44. data/lib/hanami/cli/commands/db.rb +0 -32
  45. data/lib/hanami/cli/commands/destroy/action.rb +0 -137
  46. data/lib/hanami/cli/commands/destroy/app.rb +0 -159
  47. data/lib/hanami/cli/commands/destroy/mailer.rb +0 -74
  48. data/lib/hanami/cli/commands/destroy/migration.rb +0 -51
  49. data/lib/hanami/cli/commands/destroy/model.rb +0 -84
  50. data/lib/hanami/cli/commands/destroy.rb +0 -26
  51. data/lib/hanami/cli/commands/generate/action/action.erb +0 -7
  52. data/lib/hanami/cli/commands/generate/action/action_spec.minitest.erb +0 -11
  53. data/lib/hanami/cli/commands/generate/action/action_spec.rspec.erb +0 -9
  54. data/lib/hanami/cli/commands/generate/action/action_without_view.erb +0 -7
  55. data/lib/hanami/cli/commands/generate/action/view.erb +0 -7
  56. data/lib/hanami/cli/commands/generate/action/view_spec.minitest.erb +0 -12
  57. data/lib/hanami/cli/commands/generate/action/view_spec.rspec.erb +0 -10
  58. data/lib/hanami/cli/commands/generate/action.rb +0 -321
  59. data/lib/hanami/cli/commands/generate/app/application.erb +0 -313
  60. data/lib/hanami/cli/commands/generate/app/favicon.ico +0 -0
  61. data/lib/hanami/cli/commands/generate/app/gitkeep.erb +0 -0
  62. data/lib/hanami/cli/commands/generate/app/layout.erb +0 -7
  63. data/lib/hanami/cli/commands/generate/app/layout_spec.minitest.erb +0 -10
  64. data/lib/hanami/cli/commands/generate/app/layout_spec.rspec.erb +0 -10
  65. data/lib/hanami/cli/commands/generate/app/routes.erb +0 -5
  66. data/lib/hanami/cli/commands/generate/app/template.erb.erb +0 -10
  67. data/lib/hanami/cli/commands/generate/app/template.haml.erb +0 -7
  68. data/lib/hanami/cli/commands/generate/app/template.slim.erb +0 -8
  69. data/lib/hanami/cli/commands/generate/app.rb +0 -243
  70. data/lib/hanami/cli/commands/generate/mailer/mailer.erb +0 -9
  71. data/lib/hanami/cli/commands/generate/mailer/mailer_spec.minitest.erb +0 -7
  72. data/lib/hanami/cli/commands/generate/mailer/mailer_spec.rspec.erb +0 -5
  73. data/lib/hanami/cli/commands/generate/mailer.rb +0 -104
  74. data/lib/hanami/cli/commands/generate/migration/migration.erb +0 -4
  75. data/lib/hanami/cli/commands/generate/migration.rb +0 -41
  76. data/lib/hanami/cli/commands/generate/model/entity.erb +0 -2
  77. data/lib/hanami/cli/commands/generate/model/entity_spec.minitest.erb +0 -5
  78. data/lib/hanami/cli/commands/generate/model/entity_spec.rspec.erb +0 -3
  79. data/lib/hanami/cli/commands/generate/model/migration.erb +0 -10
  80. data/lib/hanami/cli/commands/generate/model/repository.erb +0 -5
  81. data/lib/hanami/cli/commands/generate/model/repository_spec.minitest.erb +0 -5
  82. data/lib/hanami/cli/commands/generate/model/repository_spec.rspec.erb +0 -3
  83. data/lib/hanami/cli/commands/generate/model.rb +0 -125
  84. data/lib/hanami/cli/commands/generate/secret.rb +0 -48
  85. data/lib/hanami/cli/commands/generate.rb +0 -28
  86. data/lib/hanami/cli/commands/new/.env.development.erb +0 -3
  87. data/lib/hanami/cli/commands/new/.env.test.erb +0 -3
  88. data/lib/hanami/cli/commands/new/.gitkeep.erb +0 -0
  89. data/lib/hanami/cli/commands/new/Gemfile.erb +0 -57
  90. data/lib/hanami/cli/commands/new/README.md.erb +0 -33
  91. data/lib/hanami/cli/commands/new/config/boot.erb +0 -2
  92. data/lib/hanami/cli/commands/new/config/environment.erb +0 -49
  93. data/lib/hanami/cli/commands/new/config.ru.erb +0 -3
  94. data/lib/hanami/cli/commands/new/gitignore.erb +0 -4
  95. data/lib/hanami/cli/commands/new/gitignore_with_sqlite.erb +0 -5
  96. data/lib/hanami/cli/commands/new/hanamirc.erb +0 -3
  97. data/lib/hanami/cli/commands/new/lib/project.erb +0 -2
  98. data/lib/hanami/cli/commands/new/minitest/Rakefile.erb +0 -12
  99. data/lib/hanami/cli/commands/new/minitest/features_helper.erb +0 -11
  100. data/lib/hanami/cli/commands/new/minitest/spec_helper.erb +0 -7
  101. data/lib/hanami/cli/commands/new/rspec/Rakefile.erb +0 -9
  102. data/lib/hanami/cli/commands/new/rspec/capybara.erb +0 -8
  103. data/lib/hanami/cli/commands/new/rspec/features_helper.erb +0 -12
  104. data/lib/hanami/cli/commands/new/rspec/rspec.erb +0 -2
  105. data/lib/hanami/cli/commands/new/rspec/spec_helper.erb +0 -103
  106. data/lib/hanami/cli/commands/new/schema.sql.erb +0 -0
  107. data/lib/hanami/cli/commands/new.rb +0 -578
  108. data/lib/hanami/cli/commands/project.rb +0 -421
  109. data/lib/hanami/cli/commands/routes.rb +0 -21
  110. data/lib/hanami/cli/commands/templates.rb +0 -31
  111. data/lib/hanami/cli/commands/version.rb +0 -19
  112. data/lib/hanami/common_logger.rb +0 -109
  113. data/lib/hanami/components/app/assets.rb +0 -59
  114. data/lib/hanami/components/app/controller.rb +0 -74
  115. data/lib/hanami/components/app/routes.rb +0 -59
  116. data/lib/hanami/components/app/view.rb +0 -44
  117. data/lib/hanami/components/component.rb +0 -182
  118. data/lib/hanami/components/components.rb +0 -479
  119. data/lib/hanami/components/routes_inspector.rb +0 -72
  120. data/lib/hanami/components.rb +0 -156
  121. data/lib/hanami/config/cookies.rb +0 -69
  122. data/lib/hanami/config/framework_configuration.rb +0 -43
  123. data/lib/hanami/config/load_paths.rb +0 -46
  124. data/lib/hanami/config/mapper.rb +0 -47
  125. data/lib/hanami/config/routes.rb +0 -20
  126. data/lib/hanami/config/security.rb +0 -110
  127. data/lib/hanami/config/sessions.rb +0 -119
  128. data/lib/hanami/configuration/app.rb +0 -21
  129. data/lib/hanami/early_hints.rb +0 -129
  130. data/lib/hanami/env.rb +0 -69
  131. data/lib/hanami/environment.rb +0 -541
  132. data/lib/hanami/environment_application_configurations.rb +0 -37
  133. data/lib/hanami/hanamirc.rb +0 -169
  134. data/lib/hanami/mailer/glue.rb +0 -27
  135. data/lib/hanami/middleware_stack.rb +0 -172
  136. data/lib/hanami/rake_helper.rb +0 -78
  137. data/lib/hanami/rake_tasks.rb +0 -3
  138. data/lib/hanami/rendering_policy.rb +0 -94
  139. data/lib/hanami/routing/default.rb +0 -32
  140. data/lib/hanami/setup.rb +0 -3
  141. data/lib/hanami/static.rb +0 -63
  142. data/lib/hanami/templates/default.html.erb +0 -30
  143. data/lib/hanami/templates/welcome.html.erb +0 -52
  144. data/lib/hanami/views/default.rb +0 -37
  145. data/lib/hanami/views/default_template_finder.rb +0 -22
  146. data/lib/hanami/views/null_view.rb +0 -15
  147. data/lib/hanami/welcome.rb +0 -41
@@ -1,215 +1,205 @@
1
- require 'concurrent'
2
- require 'hanami/application'
3
- require 'hanami/utils/class'
4
- require 'hanami/utils/string'
1
+ # frozen_string_literal: true
2
+
3
+ require "uri"
4
+ require "concurrent/hash"
5
+ require "concurrent/array"
6
+ require "dry/inflector"
5
7
 
6
8
  module Hanami
7
- # @api private
9
+ # Hanami application configuration
10
+ #
11
+ # @since 2.0.0
12
+ #
13
+ # rubocop:disable Metrics/ClassLength
8
14
  class Configuration
9
- require "hanami/configuration/app"
15
+ require "hanami/configuration/cookies"
16
+ require "hanami/configuration/sessions"
10
17
  require "hanami/configuration/middleware"
18
+ require "hanami/configuration/security"
11
19
 
12
- # @api private
13
- def initialize(&blk)
14
- @settings = Concurrent::Map.new
15
- instance_eval(&blk)
16
- end
17
-
18
- # Mount a Hanami::Application or a Rack app
19
- #
20
- # @param app [#call] an application compatible with Rack SPEC
21
- # @param options [Hash] a set of options
22
- # @option :at [String] options the mount point
23
- # @option :host [String] options the mount point
24
- #
25
- # @since 0.9.0
26
- #
27
- # @example
28
- # # config/environment.rb
29
- # # ...
30
- # Hanami.configure do
31
- # mount Beta::Application, at: '/', host: 'beta.bookshelf.com'
32
- # mount Admin::Application, at: '/api'
33
- # mount Web::Application, at: '/'
34
- #
35
- # # ...
36
- # end
37
- def mount(app, options)
38
- mounted[app] = App.new(app, options)
39
- end
40
-
41
- # Configure database
42
- #
43
- # @param blk [Proc] the database configuration
44
- #
45
- # @see Hanami::Model.configure
46
- #
47
- # @example
48
- # # config/environment.rb
49
- # # ...
50
- # Hanami.configure do
51
- # model do
52
- # adapter :sql, ENV['DATABASE_URL']
53
- #
54
- # migrations 'db/migrations'
55
- # schema 'db/schema.sql'
56
- # end
57
- #
58
- # # ...
59
- # end
60
- def model(&blk)
61
- if block_given?
62
- settings.put_if_absent(:model, blk)
63
- else
64
- settings.fetch(:model)
20
+ # rubocop:disable Metrics/MethodLength
21
+ def initialize(env:)
22
+ @settings = Concurrent::Hash.new
23
+
24
+ self.env = env
25
+ self.environments = DEFAULT_ENVIRONMENTS.clone
26
+
27
+ self.base_url = DEFAULT_BASE_URL
28
+
29
+ self.logger = DEFAULT_LOGGER.clone
30
+ self.routes = DEFAULT_ROUTES
31
+ self.cookies = DEFAULT_COOKIES
32
+ self.sessions = DEFAULT_SESSIONS
33
+
34
+ self.default_request_format = DEFAULT_REQUEST_FORMAT
35
+ self.default_response_format = DEFAULT_RESPONSE_FORMAT
36
+
37
+ self.middleware = Middleware.new
38
+ self.security = Security.new
39
+
40
+ self.inflections = Dry::Inflector.new
41
+ end
42
+ # rubocop:enable Metrics/MethodLength
43
+
44
+ def finalize
45
+ environment_for(env).each do |blk|
46
+ instance_eval(&blk)
65
47
  end
48
+
49
+ self
50
+ end
51
+
52
+ def environment(name, &blk)
53
+ environment_for(name).push(blk)
54
+ end
55
+
56
+ def env=(value)
57
+ settings[:env] = value
58
+ end
59
+
60
+ def env
61
+ settings.fetch(:env)
62
+ end
63
+
64
+ def base_url=(value)
65
+ settings[:base_url] = URI.parse(value)
66
+ end
67
+
68
+ def base_url
69
+ settings.fetch(:base_url)
70
+ end
71
+
72
+ def logger=(options)
73
+ settings[:logger] = options
74
+ end
75
+
76
+ def logger
77
+ settings.fetch(:logger)
78
+ end
79
+
80
+ def routes=(value)
81
+ settings[:routes] = value
82
+ end
83
+
84
+ def routes
85
+ settings.fetch(:routes)
86
+ end
87
+
88
+ def cookies=(options)
89
+ settings[:cookies] = Cookies.new(options)
90
+ end
91
+
92
+ def cookies
93
+ settings.fetch(:cookies)
94
+ end
95
+
96
+ def sessions=(*args)
97
+ settings[:sessions] = Sessions.new(args)
98
+ end
99
+
100
+ def sessions
101
+ settings.fetch(:sessions)
102
+ end
103
+
104
+ def default_request_format=(value)
105
+ settings[:default_request_format] = value
106
+ end
107
+
108
+ def default_request_format
109
+ settings.fetch(:default_request_format)
110
+ end
111
+
112
+ def default_response_format=(value)
113
+ settings[:default_response_format] = value
114
+ end
115
+
116
+ def default_response_format
117
+ settings.fetch(:default_response_format)
66
118
  end
67
119
 
68
- # Configure mailer
69
- #
70
- # @param blk [Proc] the mailer configuration
71
- #
72
- # @see Hanami::Mailer.configure
73
- #
74
- # @example
75
- # # config/environment.rb
76
- # # ...
77
- # Hanami.configure do
78
- # mailer do
79
- # root 'lib/bookshelf/mailers'
80
- #
81
- # # See https://guides.hanamirb.org/mailers/delivery
82
- # delivery :test
83
- # end
84
- #
85
- # # ...
86
- # end
87
- def mailer(&blk)
88
- mailer_settings.push(blk) if block_given?
89
- end
90
-
91
- # @since next
92
- # @api private
93
- def mailer_settings
94
- settings.fetch_or_store(:mailers, [])
95
- end
96
-
97
- # @since 0.9.0
98
- # @api private
99
- def mounted
100
- settings.fetch_or_store(:mounted, {})
101
- end
102
-
103
- # @since 1.2.0
104
- #
105
- # @example
106
- # # config/environment.rb
107
- # # ...
108
- # Hanami.configure do
109
- # middleware.use MyRackMiddleware
110
- # end
111
120
  def middleware
112
- settings.fetch_or_store(:middleware, Configuration::Middleware.new)
113
- end
114
-
115
- # Setup Early Hints feature
116
- #
117
- # @since 1.2.0
118
- #
119
- # @example Enable for all the environments
120
- # # config/environment.rb
121
- # Hanami.configure do
122
- # early_hints true
123
- # end
124
- #
125
- # @example Enable only for production
126
- # # config/environment.rb
127
- # Hanami.configure do
128
- # environment :production do
129
- # early_hints true
130
- # end
131
- # end
132
- def early_hints(value = nil)
133
- if value.nil?
134
- settings.fetch(:early_hints, false)
135
- else
136
- settings[:early_hints] = value
137
- end
121
+ settings.fetch(:middleware)
138
122
  end
139
123
 
140
- # @since 0.9.0
141
- # @api private
142
- def apps
143
- mounted.each_pair do |klass, app|
144
- yield(app) if klass <= Hanami::Application
145
- end
124
+ def security=(value)
125
+ settings[:security] = value
126
+ end
127
+
128
+ def security
129
+ settings.fetch(:security)
146
130
  end
147
131
 
148
- # Configure logger
149
- #
150
- # @since 1.0.0
151
- #
152
- # @param options [Array] a set of options
153
- #
154
- # @see Hanami.logger
155
- # @see Hanami::Logger
156
- #
157
- # @see https://guides.hanamirb.org/projects/logging
158
- #
159
- # @example Basic Usage
160
- # # config/environment.rb
161
- # # ...
162
- # Hanami.configure do
163
- # # ...
164
- # environment :development do
165
- # logger level: :debug
166
- # end
167
- # end
168
- #
169
- # @example Daily Rotation
170
- # # config/environment.rb
171
- # # ...
172
- # Hanami.configure do
173
- # # ...
174
- # environment :development do
175
- # logger 'daily', level: :debug
176
- # end
177
- # end
178
- def logger(*options)
179
- if options.empty?
180
- settings.fetch(:logger, nil)
132
+ def inflections(&blk)
133
+ if blk.nil?
134
+ settings.fetch(:inflections)
181
135
  else
182
- settings[:logger] = options
136
+ settings[:inflections] = Dry::Inflector.new(&blk)
183
137
  end
184
138
  end
185
139
 
186
- # Configure settings for the current environment
187
- # @since 1.0.0
188
- #
189
- # @param name [Symbol] the name of the Hanami environment
190
- #
191
- # @see Hanami.env
192
- #
193
- # @example Configure Logging for Different Environments
194
- # # config/environment.rb
195
- # # ...
196
- # Hanami.configure do
197
- # # ...
198
- # environment :development do
199
- # logger level: :debug
200
- # end
201
- #
202
- # environment :production do
203
- # logger level: :info, formatter: :json
204
- # end
205
- # end
206
- def environment(name)
207
- yield if ENV['HANAMI_ENV'] == name.to_s
140
+ def router_settings
141
+ bu = base_url
142
+
143
+ {
144
+ scheme: bu.scheme,
145
+ host: bu.host,
146
+ port: bu.port,
147
+ inflector: inflections
148
+ }
149
+ end
150
+
151
+ def for_each_middleware(&blk)
152
+ stack = middleware.stack.dup
153
+ stack += sessions.middleware if sessions.enabled?
154
+
155
+ stack.each(&blk)
156
+ end
157
+
158
+ protected
159
+
160
+ def environment_for(name)
161
+ settings[:environments][name]
162
+ end
163
+
164
+ def environments=(values)
165
+ settings[:environments] = values
166
+ end
167
+
168
+ def middleware=(value)
169
+ settings[:middleware] = value
170
+ end
171
+
172
+ def inflections=(value)
173
+ settings[:inflections] = value
208
174
  end
209
175
 
210
176
  private
211
177
 
212
- # @api private
178
+ DEFAULT_ENVIRONMENTS = Concurrent::Hash.new { |h, k| h[k] = Concurrent::Array.new }
179
+ private_constant :DEFAULT_ENVIRONMENTS
180
+
181
+ DEFAULT_BASE_URL = "http://0.0.0.0:2300"
182
+ private_constant :DEFAULT_BASE_URL
183
+
184
+ DEFAULT_LOGGER = { level: :debug }.freeze
185
+ private_constant :DEFAULT_LOGGER
186
+
187
+ DEFAULT_ROUTES = File.join("config", "routes")
188
+ private_constant :DEFAULT_ROUTES
189
+
190
+ DEFAULT_COOKIES = Cookies.null
191
+ private_constant :DEFAULT_COOKIES
192
+
193
+ DEFAULT_SESSIONS = Sessions.null
194
+ private_constant :DEFAULT_SESSIONS
195
+
196
+ DEFAULT_REQUEST_FORMAT = :html
197
+ private_constant :DEFAULT_REQUEST_FORMAT
198
+
199
+ DEFAULT_RESPONSE_FORMAT = :html
200
+ private_constant :DEFAULT_RESPONSE_FORMAT
201
+
213
202
  attr_reader :settings
214
203
  end
204
+ # rubocop:enable Metrics/ClassLength
215
205
  end
@@ -0,0 +1,107 @@
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,22 +1,28 @@
1
- require 'hanami/utils'
2
- require 'hanami/validations'
3
- require 'hanami/router'
4
- require 'hanami/view'
5
- require 'hanami/controller'
6
- require 'hanami/action/glue'
7
- require 'hanami/action/csrf_protection'
8
- require 'hanami/mailer'
9
- require 'hanami/mailer/glue'
10
- require 'hanami/assets'
1
+ # frozen_string_literal: true
11
2
 
12
- Hanami::Controller.configure do
13
- prepare do
14
- include Hanami::Action::Glue
15
- end
16
- end
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"]
17
23
 
18
- Hanami::Controller::MissingSessionError.class_eval do
19
- def initialize(session_method)
20
- super("To use `#{session_method}', please enable sessions for the current app.")
24
+ scope(at, namespace: namespace, configuration: configuration, &blk)
25
+ end
26
+ # rubocop:enable Metrics/ParameterLists
21
27
  end
22
28
  end