hanami 2.0.0.beta3 → 2.0.0.beta4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +20 -0
  3. data/hanami.gemspec +5 -5
  4. data/lib/hanami/app.rb +4 -4
  5. data/lib/hanami/assets/{app_configuration.rb → app_config.rb} +10 -10
  6. data/lib/hanami/assets/{configuration.rb → config.rb} +4 -4
  7. data/lib/hanami/{configuration → config}/actions/content_security_policy.rb +2 -2
  8. data/lib/hanami/{configuration → config}/actions/cookies.rb +6 -5
  9. data/lib/hanami/{configuration → config}/actions/sessions.rb +2 -2
  10. data/lib/hanami/{configuration → config}/actions.rb +11 -12
  11. data/lib/hanami/{configuration → config}/logger.rb +2 -2
  12. data/lib/hanami/config/null_config.rb +14 -0
  13. data/lib/hanami/{configuration → config}/router.rb +8 -8
  14. data/lib/hanami/{configuration → config}/sessions.rb +2 -2
  15. data/lib/hanami/{configuration → config}/views.rb +10 -10
  16. data/lib/hanami/{configuration.rb → config.rb} +19 -19
  17. data/lib/hanami/errors.rb +3 -0
  18. data/lib/hanami/extensions/action/slice_configured_action.rb +1 -1
  19. data/lib/hanami/providers/inflector.rb +0 -2
  20. data/lib/hanami/providers/logger.rb +1 -3
  21. data/lib/hanami/providers/rack.rb +0 -2
  22. data/lib/hanami/providers/routes.rb +0 -2
  23. data/lib/hanami/settings/env_store.rb +3 -3
  24. data/lib/hanami/settings.rb +87 -5
  25. data/lib/hanami/slice/routing/middleware/stack.rb +45 -1
  26. data/lib/hanami/slice.rb +52 -37
  27. data/lib/hanami/slice_configurable.rb +1 -1
  28. data/lib/hanami/slice_registrar.rb +6 -0
  29. data/lib/hanami/version.rb +1 -1
  30. data/lib/hanami.rb +0 -1
  31. data/spec/integration/container/prepare_container_spec.rb +2 -0
  32. data/spec/integration/rack_app/body_parser_spec.rb +108 -0
  33. data/spec/integration/rack_app/middleware_spec.rb +28 -0
  34. data/spec/integration/settings/access_in_slice_class_body_spec.rb +82 -0
  35. data/spec/integration/settings/access_to_constants_spec.rb +23 -146
  36. data/spec/integration/{slices/slice_settings_spec.rb → settings/slice_registration_spec.rb} +5 -1
  37. data/spec/integration/settings/using_types_spec.rb +4 -11
  38. data/spec/support/app_integration.rb +18 -15
  39. data/spec/unit/hanami/{configuration → config}/actions/content_security_policy_spec.rb +10 -10
  40. data/spec/unit/hanami/{configuration → config}/actions/cookies_spec.rb +6 -6
  41. data/spec/unit/hanami/{configuration → config}/actions/csrf_protection_spec.rb +12 -12
  42. data/spec/unit/hanami/config/actions/default_values_spec.rb +54 -0
  43. data/spec/unit/hanami/{configuration → config}/actions/sessions_spec.rb +5 -5
  44. data/spec/unit/hanami/{configuration → config}/actions_spec.rb +9 -10
  45. data/spec/unit/hanami/{configuration → config}/base_url_spec.rb +2 -2
  46. data/spec/unit/hanami/{configuration → config}/inflector_spec.rb +2 -2
  47. data/spec/unit/hanami/{configuration → config}/logger_spec.rb +4 -4
  48. data/spec/unit/hanami/{configuration → config}/router_spec.rb +7 -8
  49. data/spec/unit/hanami/{configuration → config}/slices_spec.rb +2 -2
  50. data/spec/unit/hanami/{configuration → config}/views_spec.rb +11 -12
  51. data/spec/unit/hanami/{configuration_spec.rb → config_spec.rb} +3 -3
  52. data/spec/unit/hanami/settings_spec.rb +65 -10
  53. data/spec/unit/hanami/slice_configurable_spec.rb +21 -2
  54. data/spec/unit/hanami/version_spec.rb +1 -1
  55. metadata +73 -58
  56. data/lib/hanami/configuration/null_configuration.rb +0 -14
  57. data/lib/hanami/providers/settings.rb +0 -98
  58. data/spec/unit/hanami/configuration/actions/default_values_spec.rb +0 -52
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 52462a1be45d338394f82872ac25bd8fc6e34f5b90991e74928342d0905d377d
4
- data.tar.gz: 221af8ef1ba7993d6eb0678c0536513fca19f68b83bcf13d2fa5664747b83b98
3
+ metadata.gz: afcc32f5e8f7ba0a0acb001c4c36ea5a654f73e705b22e73cfc2a2835858af3e
4
+ data.tar.gz: d183f4cdec177426f339eeae371320880927d15463982d82daeffacd632fe09f
5
5
  SHA512:
6
- metadata.gz: f2e0f16b7bee12601ebe28645be73219dd97647d4dc2ddfa47af25ac974092afa8d4b4ec849e0f7866e266c6dd7f39ddf31aa19b857083fb1841f19b98affdbf
7
- data.tar.gz: 1b2ad0280e15291bba6fdf5efaf75bb10555eba655087ea53a9c5c7e8a5522335e0e07e0f2bf81f2b2c4ce638c14a58bbe2d8c827a792a5d2fc17111245bb75a
6
+ metadata.gz: a1cca2e0e675ba87e678c14d4733bc172af135ea8fbf751fb1d1749faef2cf9a96629eae77fac339c5d435f6d3744dc6da1f1c32bf63881563ceb435337725bb
7
+ data.tar.gz: 5a466e081c89ded4a30f4ba8655c2981ba26f9cbb16a5f5e8deb6034f806f4ec203a62556c4ad372b8fd4619e959eb8beb3781a6e8e0451e04aaa0dc2099129f
data/CHANGELOG.md CHANGED
@@ -2,6 +2,26 @@
2
2
 
3
3
  The web, with simplicity.
4
4
 
5
+ ## v2.0.0.beta4 - 2022-10-24
6
+
7
+ ### Added
8
+
9
+ - [Peter Solnica] Improve middleware config by avoiding class names and requires: symbols instead of classes can be passed as middleware identifiers (`config.middleware.use(:body_parser, :json)`); constant namespaces can be configured for resolving symbols into class names (`config.middleware.namespaces = [Hanami::Middleware, MyStuff::Middlewares]`), with the first match winning; first-party middleware classes are required automatically. (#1215)
10
+
11
+ ### Fixed
12
+
13
+ - [Luca Guidi] Do not attempt to load routes if hanami-router is not bundled (#1214)
14
+ - [Marc Busqué] Ensure nested slices are considered when auto-configuring application components using `Hanami::SliceConfigurable` (#1212)
15
+ - [Tim Riley] Ensure errors are raised during settings loading for any settings that are missing entirely from ENV (#1222)
16
+
17
+ ### Changed
18
+
19
+ - [Tim Riley] Rename `Hanami::App.configuration` to `Hanami::App.config` and `Hanami::Configuration` to `Hanami::Config` (#1218)
20
+ - [Tim Riley] Make `Hanami::App.settings` available as a class method again (#1213)
21
+ - [Tim Riley] `config/settings.rb` in apps no longer has access to autoloaded constants (changed back to behavior pre-beta3) (#1213)
22
+ - [Tim Riley] Auto-generate a nested `Types` module in `Hanami::Settings` subclasses if dry-types is available, for added convenience in type checking settings (#1213)
23
+ - [Marc Busqué] Hide values from `Hanami::Settings#inspect` (values may contain sensitive data). Values can be inspected via `#inspect_values` (#1217)
24
+
5
25
  ## v2.0.0.beta3 - 2022-09-21
6
26
 
7
27
  ### Changed
data/hanami.gemspec CHANGED
@@ -32,14 +32,14 @@ Gem::Specification.new do |spec|
32
32
  spec.metadata["allowed_push_host"] = "https://rubygems.org"
33
33
 
34
34
  spec.add_dependency "bundler", ">= 1.16", "< 3"
35
- spec.add_dependency "dry-configurable", "~> 0.15"
36
- spec.add_dependency "dry-core", "~> 0.7"
35
+ spec.add_dependency "dry-configurable", "~> 0.16", ">= 0.16.1"
36
+ spec.add_dependency "dry-core", "~> 0.9", ">= 0.9.1"
37
37
  spec.add_dependency "dry-inflector", "~> 0.2", ">= 0.2.1"
38
- spec.add_dependency "dry-system", "~> 0.25", ">= 0.25.0"
39
- spec.add_dependency "dry-monitor", "~> 0.6", ">= 0.6.3"
38
+ spec.add_dependency "dry-system", "~> 0.27", ">= 0.27.2"
39
+ spec.add_dependency "dry-monitor", "~> 0.7", ">= 0.7"
40
40
  spec.add_dependency "hanami-cli", "~> 2.0.beta"
41
41
  spec.add_dependency "hanami-utils", "~> 2.0.beta"
42
- spec.add_dependency "zeitwerk", "~> 2.4"
42
+ spec.add_dependency "zeitwerk", "~> 2.6"
43
43
 
44
44
  spec.add_development_dependency "rspec", "~> 3.8"
45
45
  spec.add_development_dependency "rack-test", "~> 1.1"
data/lib/hanami/app.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "configuration"
3
+ require_relative "config"
4
4
  require_relative "constants"
5
5
  require_relative "slice"
6
6
  require_relative "slice_name"
@@ -29,7 +29,7 @@ module Hanami
29
29
 
30
30
  @_mutex.synchronize do
31
31
  subclass.class_eval do
32
- @configuration = Hanami::Configuration.new(app_name: slice_name, env: Hanami.env)
32
+ @config = Hanami::Config.new(app_name: slice_name, env: Hanami.env)
33
33
 
34
34
  # Prepare the load path (based on the default root of `Dir.pwd`) as early as
35
35
  # possible, so you can make a `require` inside the body of an `App` subclass,
@@ -43,7 +43,7 @@ module Hanami
43
43
 
44
44
  # App class interface
45
45
  module ClassMethods
46
- attr_reader :configuration
46
+ attr_reader :config
47
47
 
48
48
  def app_name
49
49
  slice_name
@@ -152,7 +152,7 @@ module Hanami
152
152
 
153
153
  # When auto-registering components in app/, ignore files in `app/lib/` (these will
154
154
  # be auto-registered as above), as well as the configured no_auto_register_paths
155
- no_auto_register_paths = ([LIB_DIR] + configuration.no_auto_register_paths)
155
+ no_auto_register_paths = ([LIB_DIR] + config.no_auto_register_paths)
156
156
  .map { |path|
157
157
  path.end_with?(File::SEPARATOR) ? path : "#{path}#{File::SEPARATOR}"
158
158
  }
@@ -1,19 +1,19 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "hanami/assets/configuration"
4
3
  require "dry/configurable"
4
+ require_relative "config"
5
5
 
6
6
  module Hanami
7
7
  module Assets
8
8
  # @since 2.0.0
9
9
  # @api public
10
- class AppConfiguration
10
+ class AppConfig
11
11
  include Dry::Configurable
12
12
 
13
13
  # @since 2.0.0
14
14
  # @api private
15
- attr_reader :base_configuration
16
- protected :base_configuration
15
+ attr_reader :base_config
16
+ protected :base_config
17
17
 
18
18
  setting :server_url, default: "http://localhost:8080"
19
19
 
@@ -22,12 +22,12 @@ module Hanami
22
22
  def initialize(*)
23
23
  super
24
24
 
25
- @base_configuration = Assets::Configuration.new
25
+ @base_config = Config.new
26
26
  end
27
27
 
28
28
  def initialize_copy(source)
29
29
  super
30
- @base_configuration = source.base_configuration.dup
30
+ @base_config = source.base_config.dup
31
31
  end
32
32
 
33
33
  # @since 2.0.0
@@ -42,7 +42,7 @@ module Hanami
42
42
  # @since 2.0.0
43
43
  # @api private
44
44
  def settings
45
- base_configuration.settings + self.class.settings
45
+ base_config.settings + self.class.settings
46
46
  end
47
47
 
48
48
  private
@@ -52,8 +52,8 @@ module Hanami
52
52
  def method_missing(name, *args, &block)
53
53
  if config.respond_to?(name)
54
54
  config.public_send(name, *args, &block)
55
- elsif base_configuration.respond_to?(name)
56
- base_configuration.public_send(name, *args, &block)
55
+ elsif base_config.respond_to?(name)
56
+ base_config.public_send(name, *args, &block)
57
57
  else
58
58
  super
59
59
  end
@@ -62,7 +62,7 @@ module Hanami
62
62
  # @since 2.0.0
63
63
  # @api private
64
64
  def respond_to_missing?(name, _incude_all = false)
65
- config.respond_to?(name) || base_configuration.respond_to?(name) || super
65
+ config.respond_to?(name) || base_config.respond_to?(name) || super
66
66
  end
67
67
  end
68
68
  end
@@ -6,14 +6,14 @@ module Hanami
6
6
  module Assets
7
7
  # @since 2.0.0
8
8
  # @api public
9
- class Configuration
9
+ class Config
10
10
  include Dry::Configurable
11
11
 
12
- # Initialize the Configuration
12
+ # Initialize the Config
13
13
  #
14
- # @yield [config] the configuration object
14
+ # @yield [config] the config object
15
15
  #
16
- # @return [Configuration]
16
+ # @return [Config]
17
17
  #
18
18
  # @since 2.0.0
19
19
  # @api private
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Hanami
4
- class Configuration
4
+ class Config
5
5
  class Actions
6
- # Configuration for Content Security Policy in Hanami apps
6
+ # Config for Content Security Policy in Hanami apps
7
7
  #
8
8
  # @since 2.0.0
9
9
  class ContentSecurityPolicy
@@ -1,12 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Hanami
4
- class Configuration
4
+ class Config
5
5
  class Actions
6
- # Wrapper for app-level configuration of HTTP cookies for Hanami actions.
7
- # This decorates the hash of cookie options that is otherwise directly configurable
8
- # on actions, and adds the `enabled?` method to allow app base action to
9
- # determine whether to include the `Action::Cookies` module.
6
+ # Wrapper for app-level config of HTTP cookies for Hanami actions.
7
+ #
8
+ # This decorates the hash of cookie options that is otherwise directly configurable on
9
+ # actions, and adds the `enabled?` method to allow app base action to determine whether to
10
+ # include the `Action::Cookies` module.
10
11
  #
11
12
  # @since 2.0.0
12
13
  class Cookies
@@ -5,9 +5,9 @@ require "hanami/utils/string"
5
5
  require "hanami/utils/class"
6
6
 
7
7
  module Hanami
8
- class Configuration
8
+ class Config
9
9
  class Actions
10
- # Configuration for HTTP sessions in Hanami actions
10
+ # Config for HTTP sessions in Hanami actions
11
11
  #
12
12
  # @since 2.0.0
13
13
  class Sessions
@@ -1,15 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "dry/configurable"
4
- require "hanami/action/configuration"
5
4
  require_relative "actions/cookies"
6
5
  require_relative "actions/sessions"
7
6
  require_relative "actions/content_security_policy"
8
7
  require_relative "../slice/view_name_inferrer"
9
8
 
10
9
  module Hanami
11
- class Configuration
12
- # Hanami actions configuration
10
+ class Config
11
+ # Hanami actions config
13
12
  #
14
13
  # @since 2.0.0
15
14
  class Actions
@@ -26,13 +25,13 @@ module Hanami
26
25
 
27
26
  attr_accessor :content_security_policy
28
27
 
29
- attr_reader :base_configuration
30
- protected :base_configuration
28
+ attr_reader :base_config
29
+ protected :base_config
31
30
 
32
31
  def initialize(*, **options)
33
32
  super()
34
33
 
35
- @base_configuration = Hanami::Action::Configuration.new
34
+ @base_config = Hanami::Action.config.dup
36
35
  @content_security_policy = ContentSecurityPolicy.new do |csp|
37
36
  if assets_server_url = options[:assets_server_url]
38
37
  csp[:script_src] += " #{assets_server_url}"
@@ -45,7 +44,7 @@ module Hanami
45
44
 
46
45
  def initialize_copy(source)
47
46
  super
48
- @base_configuration = source.base_configuration.dup
47
+ @base_config = source.base_config.dup
49
48
  @content_security_policy = source.content_security_policy.dup
50
49
  end
51
50
 
@@ -66,12 +65,12 @@ module Hanami
66
65
  # @since 2.0.0
67
66
  # @api private
68
67
  def settings
69
- base_configuration.settings + self.class.settings
68
+ Hanami::Action.settings + self.class.settings
70
69
  end
71
70
 
72
71
  private
73
72
 
74
- # Apply defaults for base configuration settings
73
+ # Apply defaults for base config
75
74
  def configure_defaults
76
75
  self.default_request_format = :html
77
76
  self.default_response_format = :html
@@ -86,15 +85,15 @@ module Hanami
86
85
  def method_missing(name, *args, &block)
87
86
  if config.respond_to?(name)
88
87
  config.public_send(name, *args, &block)
89
- elsif base_configuration.respond_to?(name)
90
- base_configuration.public_send(name, *args, &block)
88
+ elsif base_config.respond_to?(name)
89
+ base_config.public_send(name, *args, &block)
91
90
  else
92
91
  super
93
92
  end
94
93
  end
95
94
 
96
95
  def respond_to_missing?(name, _incude_all = false)
97
- config.respond_to?(name) || base_configuration.respond_to?(name) || super
96
+ config.respond_to?(name) || base_config.respond_to?(name) || super
98
97
  end
99
98
  end
100
99
  end
@@ -4,8 +4,8 @@ require "dry/configurable"
4
4
  require "hanami/logger"
5
5
 
6
6
  module Hanami
7
- class Configuration
8
- # Hanami logger configuration
7
+ class Config
8
+ # Hanami logger config
9
9
  #
10
10
  # @since 2.0.0
11
11
  class Logger
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dry/configurable"
4
+
5
+ module Hanami
6
+ class Config
7
+ # NullConfig can serve as a fallback config object when out-of-gem config objects are not
8
+ # available (specifically, when the hanami-controller, hanami-router or hanami-view gems are not
9
+ # loaded)
10
+ class NullConfig
11
+ include Dry::Configurable
12
+ end
13
+ end
14
+ end
@@ -4,22 +4,22 @@ require "dry/configurable"
4
4
  require_relative "../slice/routing/resolver"
5
5
 
6
6
  module Hanami
7
- class Configuration
8
- # Hanami router configuration
7
+ class Config
8
+ # Hanami router config
9
9
  #
10
10
  # @since 2.0.0
11
11
  # @api private
12
12
  class Router
13
13
  include Dry::Configurable
14
14
 
15
- # Base configuration is provided so router config can include the `base_url`
16
- attr_reader :base_configuration
17
- private :base_configuration
15
+ # Base config is provided so router config can include the `base_url`
16
+ attr_reader :base_config
17
+ private :base_config
18
18
 
19
19
  # @api private
20
20
  # @since 2.0.0
21
- def initialize(base_configuration)
22
- @base_configuration = base_configuration
21
+ def initialize(base_config)
22
+ @base_config = base_config
23
23
  end
24
24
 
25
25
  setting :resolver, default: Slice::Routing::Resolver
@@ -27,7 +27,7 @@ module Hanami
27
27
  # @api private
28
28
  # @since 2.0.0
29
29
  def options
30
- {base_url: base_configuration.base_url}
30
+ {base_url: base_config.base_url}
31
31
  end
32
32
 
33
33
  private
@@ -4,8 +4,8 @@ require "hanami/utils/string"
4
4
  require "hanami/utils/class"
5
5
 
6
6
  module Hanami
7
- class Configuration
8
- # Hanami configuration for HTTP sessions
7
+ class Config
8
+ # Hanami config for HTTP sessions
9
9
  #
10
10
  # @since 2.0.0
11
11
  class Sessions
@@ -4,8 +4,8 @@ require "dry/configurable"
4
4
  require "hanami/view"
5
5
 
6
6
  module Hanami
7
- class Configuration
8
- # Hanami actions configuration
7
+ class Config
8
+ # Hanami views config
9
9
  #
10
10
  # @since 2.0.0
11
11
  class Views
@@ -13,20 +13,20 @@ module Hanami
13
13
 
14
14
  setting :parts_path, default: "views/parts"
15
15
 
16
- attr_reader :base_configuration
17
- protected :base_configuration
16
+ attr_reader :base_config
17
+ protected :base_config
18
18
 
19
19
  def initialize(*)
20
20
  super
21
21
 
22
- @base_configuration = Hanami::View.config.dup
22
+ @base_config = Hanami::View.config.dup
23
23
 
24
24
  configure_defaults
25
25
  end
26
26
 
27
27
  def initialize_copy(source)
28
28
  super
29
- @base_configuration = source.base_configuration.dup
29
+ @base_config = source.base_config.dup
30
30
  end
31
31
 
32
32
  # Returns the list of available settings
@@ -42,7 +42,7 @@ module Hanami
42
42
  def finalize!
43
43
  return self if frozen?
44
44
 
45
- base_configuration.finalize!
45
+ base_config.finalize!
46
46
 
47
47
  super
48
48
  end
@@ -69,8 +69,8 @@ module Hanami
69
69
 
70
70
  if config.respond_to?(name)
71
71
  config.public_send(name, *args, &block)
72
- elsif base_configuration.respond_to?(name)
73
- base_configuration.public_send(name, *args, &block)
72
+ elsif base_config.respond_to?(name)
73
+ base_config.public_send(name, *args, &block)
74
74
  else
75
75
  super
76
76
  end
@@ -79,7 +79,7 @@ module Hanami
79
79
  def respond_to_missing?(name, _include_all = false)
80
80
  return false if NON_FORWARDABLE_METHODS.include?(name)
81
81
 
82
- config.respond_to?(name) || base_configuration.respond_to?(name) || super
82
+ config.respond_to?(name) || base_config.respond_to?(name) || super
83
83
  end
84
84
  end
85
85
  end
@@ -8,8 +8,8 @@ require "dry/inflector"
8
8
  require "pathname"
9
9
 
10
10
  require_relative "constants"
11
- require_relative "configuration/logger"
12
- require_relative "configuration/sessions"
11
+ require_relative "config/logger"
12
+ require_relative "config/sessions"
13
13
  require_relative "settings/env_store"
14
14
  require_relative "slice/routing/middleware/stack"
15
15
 
@@ -17,7 +17,7 @@ module Hanami
17
17
  # Hanami app configuration
18
18
  #
19
19
  # @since 2.0.0
20
- class Configuration
20
+ class Config
21
21
  include Dry::Configurable
22
22
 
23
23
  setting :root, constructor: ->(path) { Pathname(path) if path }
@@ -58,7 +58,7 @@ module Hanami
58
58
  # @api public
59
59
  attr_reader :env
60
60
 
61
- # @return [Hanami::Configuration::Actions]
61
+ # @return [Hanami::Config::Actions]
62
62
  #
63
63
  # @api public
64
64
  attr_reader :actions
@@ -71,12 +71,12 @@ module Hanami
71
71
  # @api private
72
72
  alias_method :middleware_stack, :middleware
73
73
 
74
- # @return [Hanami::Configuration::Router]
74
+ # @return [Hanami::Config::Router]
75
75
  #
76
76
  # @api public
77
77
  attr_reader :router
78
78
 
79
- # @return [Hanami::Configuration::Views]
79
+ # @return [Hanami::Config::Views]
80
80
  #
81
81
  # @api public
82
82
  attr_reader :views
@@ -103,36 +103,36 @@ module Hanami
103
103
  self.root = Dir.pwd
104
104
  load_from_env
105
105
 
106
- config.logger = Configuration::Logger.new(env: env, app_name: app_name)
106
+ config.logger = Config::Logger.new(env: env, app_name: app_name)
107
107
 
108
- # TODO: Make assets configuration dependent
109
- require "hanami/assets/app_configuration"
110
- @assets = Hanami::Assets::AppConfiguration.new
108
+ # TODO: Make assets config dependent
109
+ require "hanami/assets/app_config"
110
+ @assets = Hanami::Assets::AppConfig.new
111
111
 
112
112
  @actions = load_dependent_config("hanami-controller") {
113
- require_relative "configuration/actions"
113
+ require_relative "config/actions"
114
114
  Actions.new
115
115
  }
116
116
 
117
117
  @router = load_dependent_config("hanami-router") {
118
- require_relative "configuration/router"
118
+ require_relative "config/router"
119
119
  @middleware = Slice::Routing::Middleware::Stack.new
120
120
  Router.new(self)
121
121
  }
122
122
 
123
123
  @views = load_dependent_config("hanami-view") {
124
- require_relative "configuration/views"
124
+ require_relative "config/views"
125
125
  Views.new
126
126
  }
127
127
 
128
128
  yield self if block_given?
129
129
  end
130
130
 
131
- # Apply configuration for the given environment
131
+ # Apply config for the given environment
132
132
  #
133
133
  # @param env [String] the environment name
134
134
  #
135
- # @return [Hanami::Configuration]
135
+ # @return [Hanami::Config]
136
136
  #
137
137
  # @api public
138
138
  def environment(env_name, &block)
@@ -164,7 +164,7 @@ module Hanami
164
164
  @actions = source.actions.dup
165
165
  @middleware = source.middleware.dup
166
166
  @router = source.router.dup.tap do |router|
167
- router.instance_variable_set(:@base_configuration, self)
167
+ router.instance_variable_set(:@base_config, self)
168
168
  end
169
169
  @views = source.views.dup
170
170
  end
@@ -173,7 +173,7 @@ module Hanami
173
173
  def finalize!
174
174
  apply_env_config
175
175
 
176
- # Finalize nested configurations
176
+ # Finalize nested configs
177
177
  assets.finalize!
178
178
  actions.finalize!
179
179
  views.finalize!
@@ -214,8 +214,8 @@ module Hanami
214
214
  if Hanami.bundled?(gem_name)
215
215
  yield
216
216
  else
217
- require_relative "configuration/null_configuration"
218
- NullConfiguration.new
217
+ require_relative "config/null_config"
218
+ NullConfig.new
219
219
  end
220
220
  end
221
221
 
data/lib/hanami/errors.rb CHANGED
@@ -12,4 +12,7 @@ module Hanami
12
12
 
13
13
  # @since 2.0.0
14
14
  ComponentLoadError = Class.new(Error)
15
+
16
+ # @since 2.0.0
17
+ UnsupportedMiddlewareSpecError = Class.new(Error)
15
18
  end
@@ -47,7 +47,7 @@ module Hanami
47
47
  end
48
48
 
49
49
  def configure_action(action_class)
50
- action_class.config.settings.each do |setting|
50
+ action_class.settings.each do |setting|
51
51
  # Configure the action from config on the slice, _unless it has already been configured
52
52
  # by a parent slice_, and re-configuring it for this slice would make no change.
53
53
  #
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "dry/system/provider/source"
4
-
5
3
  module Hanami
6
4
  module Providers
7
5
  class Inflector < Dry::System::Provider::Source
@@ -1,12 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "dry/system/provider/source"
4
-
5
3
  module Hanami
6
4
  module Providers
7
5
  class Logger < Dry::System::Provider::Source
8
6
  def start
9
- register :logger, Hanami.app.configuration.logger_instance
7
+ register :logger, Hanami.app.config.logger_instance
10
8
  end
11
9
  end
12
10
  end
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "dry/system/provider/source"
4
-
5
3
  module Hanami
6
4
  module Providers
7
5
  class Rack < Dry::System::Provider::Source
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "dry/system/provider/source"
4
-
5
3
  module Hanami
6
4
  module Providers
7
5
  class Routes < Dry::System::Provider::Source
@@ -12,7 +12,7 @@ module Hanami
12
12
  # @since 2.0.0
13
13
  # @api private
14
14
  class EnvStore
15
- Undefined = Dry::Core::Constants::Undefined
15
+ NO_ARG = Object.new.freeze
16
16
 
17
17
  attr_reader :store, :hanami_env
18
18
 
@@ -21,9 +21,9 @@ module Hanami
21
21
  @hanami_env = hanami_env
22
22
  end
23
23
 
24
- def fetch(name, default_value = Undefined, &block)
24
+ def fetch(name, default_value = NO_ARG, &block)
25
25
  name = name.to_s.upcase
26
- args = default_value == Undefined ? [name] : [name, default_value]
26
+ args = default_value.eql?(NO_ARG) ? [name] : [name, default_value]
27
27
 
28
28
  store.fetch(*args, &block)
29
29
  end