hanami 2.0.0.beta2 → 2.0.0.beta3

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 (132) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +10 -1
  3. data/lib/hanami/configuration/null_configuration.rb +2 -2
  4. data/lib/hanami/configuration.rb +17 -17
  5. data/lib/hanami/routes.rb +48 -21
  6. data/lib/hanami/version.rb +1 -1
  7. data/spec/{new_integration → integration}/action/cookies_spec.rb +0 -0
  8. data/spec/{new_integration → integration}/action/csrf_protection_spec.rb +0 -0
  9. data/spec/{new_integration → integration}/action/routes_spec.rb +3 -5
  10. data/spec/{new_integration → integration}/action/sessions_spec.rb +0 -0
  11. data/spec/{new_integration → integration}/action/slice_configuration_spec.rb +0 -0
  12. data/spec/{new_integration → integration}/action/view_integration_spec.rb +0 -0
  13. data/spec/{new_integration → integration}/action/view_rendering/automatic_rendering_spec.rb +0 -0
  14. data/spec/{new_integration → integration}/action/view_rendering/paired_view_inference_spec.rb +0 -0
  15. data/spec/{new_integration → integration}/action/view_rendering_spec.rb +0 -0
  16. data/spec/{new_integration → integration}/code_loading/loading_from_app_spec.rb +0 -0
  17. data/spec/{new_integration → integration}/code_loading/loading_from_lib_spec.rb +0 -0
  18. data/spec/{new_integration → integration}/code_loading/loading_from_slice_spec.rb +0 -0
  19. data/spec/{new_integration → integration}/container/application_routes_helper_spec.rb +1 -3
  20. data/spec/{new_integration → integration}/container/auto_injection_spec.rb +0 -0
  21. data/spec/{new_integration → integration}/container/auto_registration_spec.rb +0 -0
  22. data/spec/{new_integration → integration}/container/autoloader_spec.rb +0 -0
  23. data/spec/{new_integration → integration}/container/imports_spec.rb +0 -0
  24. data/spec/{new_integration → integration}/container/prepare_container_spec.rb +0 -0
  25. data/spec/{new_integration → integration}/container/shutdown_spec.rb +0 -0
  26. data/spec/{new_integration → integration}/container/standard_bootable_components_spec.rb +0 -0
  27. data/spec/{new_integration → integration}/dotenv_loading_spec.rb +0 -0
  28. data/spec/{new_integration → integration}/rack_app/middleware_spec.rb +9 -15
  29. data/spec/{new_integration → integration}/rack_app/non_booted_rack_app_spec.rb +3 -5
  30. data/spec/{new_integration → integration}/rack_app/rack_app_spec.rb +28 -48
  31. data/spec/{new_integration → integration}/settings/access_to_constants_spec.rb +0 -0
  32. data/spec/{new_integration → integration}/settings/loading_from_env_spec.rb +0 -0
  33. data/spec/{new_integration → integration}/settings/settings_component_loading_spec.rb +0 -0
  34. data/spec/{new_integration → integration}/settings/using_types_spec.rb +0 -0
  35. data/spec/{new_integration → integration}/setup_spec.rb +20 -0
  36. data/spec/{new_integration → integration}/slices/external_slice_spec.rb +2 -4
  37. data/spec/{new_integration → integration}/slices/slice_configuration_spec.rb +0 -0
  38. data/spec/{new_integration → integration}/slices/slice_loading_spec.rb +0 -0
  39. data/spec/{new_integration → integration}/slices/slice_routing_spec.rb +5 -13
  40. data/spec/{new_integration → integration}/slices/slice_settings_spec.rb +0 -0
  41. data/spec/{new_integration → integration}/slices_spec.rb +0 -0
  42. data/spec/{new_integration → integration}/view/context/assets_spec.rb +0 -0
  43. data/spec/{new_integration → integration}/view/context/inflector_spec.rb +0 -0
  44. data/spec/{new_integration → integration}/view/context/request_spec.rb +0 -0
  45. data/spec/{new_integration → integration}/view/context/routes_spec.rb +1 -3
  46. data/spec/{new_integration → integration}/view/context/settings_spec.rb +0 -0
  47. data/spec/{new_integration → integration}/view/inflector_spec.rb +0 -0
  48. data/spec/{new_integration → integration}/view/part_namespace_spec.rb +0 -0
  49. data/spec/{new_integration → integration}/view/path_spec.rb +0 -0
  50. data/spec/{new_integration → integration}/view/slice_configuration_spec.rb +0 -0
  51. data/spec/{new_integration → integration}/view/template_spec.rb +0 -0
  52. data/spec/{new_integration → integration}/view/views_spec.rb +0 -0
  53. data/spec/unit/hanami/configuration/actions_spec.rb +4 -15
  54. data/spec/unit/hanami/configuration/router_spec.rb +45 -0
  55. data/spec/unit/hanami/configuration/views_spec.rb +4 -15
  56. data/spec/unit/hanami/version_spec.rb +1 -1
  57. metadata +97 -244
  58. data/lib/hanami/server.rb +0 -29
  59. data/spec/integration/application_middleware_stack_spec.rb +0 -84
  60. data/spec/integration/assets/cdn_spec.rb +0 -48
  61. data/spec/integration/assets/fingerprint_spec.rb +0 -42
  62. data/spec/integration/assets/helpers_spec.rb +0 -50
  63. data/spec/integration/assets/serve_spec.rb +0 -70
  64. data/spec/integration/assets/subresource_integrity_spec.rb +0 -54
  65. data/spec/integration/body_parsers_spec.rb +0 -50
  66. data/spec/integration/cli/assets/precompile_spec.rb +0 -147
  67. data/spec/integration/cli/assets_spec.rb +0 -14
  68. data/spec/integration/cli/console_spec.rb +0 -105
  69. data/spec/integration/cli/db/apply_spec.rb +0 -74
  70. data/spec/integration/cli/db/console_spec.rb +0 -40
  71. data/spec/integration/cli/db/create_spec.rb +0 -50
  72. data/spec/integration/cli/db/drop_spec.rb +0 -54
  73. data/spec/integration/cli/db/migrate_spec.rb +0 -108
  74. data/spec/integration/cli/db/prepare_spec.rb +0 -36
  75. data/spec/integration/cli/db/rollback_spec.rb +0 -96
  76. data/spec/integration/cli/db/version_spec.rb +0 -38
  77. data/spec/integration/cli/db_spec.rb +0 -21
  78. data/spec/integration/cli/destroy/action_spec.rb +0 -143
  79. data/spec/integration/cli/destroy/app_spec.rb +0 -118
  80. data/spec/integration/cli/destroy/mailer_spec.rb +0 -74
  81. data/spec/integration/cli/destroy/migration_spec.rb +0 -70
  82. data/spec/integration/cli/destroy/model_spec.rb +0 -113
  83. data/spec/integration/cli/destroy_spec.rb +0 -18
  84. data/spec/integration/cli/generate/action_spec.rb +0 -469
  85. data/spec/integration/cli/generate/app_spec.rb +0 -215
  86. data/spec/integration/cli/generate/mailer_spec.rb +0 -189
  87. data/spec/integration/cli/generate/migration_spec.rb +0 -72
  88. data/spec/integration/cli/generate/model_spec.rb +0 -290
  89. data/spec/integration/cli/generate/secret_spec.rb +0 -56
  90. data/spec/integration/cli/generate_spec.rb +0 -19
  91. data/spec/integration/cli/new/database_spec.rb +0 -235
  92. data/spec/integration/cli/new/hanami_head_spec.rb +0 -27
  93. data/spec/integration/cli/new/template_spec.rb +0 -118
  94. data/spec/integration/cli/new/test_spec.rb +0 -274
  95. data/spec/integration/cli/new_spec.rb +0 -970
  96. data/spec/integration/cli/plugins_spec.rb +0 -39
  97. data/spec/integration/cli/routes_spec.rb +0 -49
  98. data/spec/integration/cli/server_spec.rb +0 -626
  99. data/spec/integration/cli/version_spec.rb +0 -85
  100. data/spec/integration/early_hints_spec.rb +0 -35
  101. data/spec/integration/handle_exceptions_spec.rb +0 -244
  102. data/spec/integration/head_spec.rb +0 -89
  103. data/spec/integration/http_headers_spec.rb +0 -29
  104. data/spec/integration/mailer_spec.rb +0 -32
  105. data/spec/integration/middleware_spec.rb +0 -81
  106. data/spec/integration/mount_applications_spec.rb +0 -88
  107. data/spec/integration/project_initializers_spec.rb +0 -40
  108. data/spec/integration/rackup_spec.rb +0 -35
  109. data/spec/integration/rake/with_minitest_spec.rb +0 -67
  110. data/spec/integration/rake/with_rspec_spec.rb +0 -69
  111. data/spec/integration/routing_helpers_spec.rb +0 -61
  112. data/spec/integration/security/content_security_policy_spec.rb +0 -46
  113. data/spec/integration/security/csrf_protection_spec.rb +0 -42
  114. data/spec/integration/security/force_ssl_spec.rb +0 -29
  115. data/spec/integration/security/x_content_type_options_spec.rb +0 -46
  116. data/spec/integration/security/x_frame_options_spec.rb +0 -46
  117. data/spec/integration/security/x_xss_protection_spec.rb +0 -46
  118. data/spec/integration/send_file_spec.rb +0 -51
  119. data/spec/integration/sessions_spec.rb +0 -247
  120. data/spec/integration/static_middleware_spec.rb +0 -21
  121. data/spec/integration/streaming_spec.rb +0 -41
  122. data/spec/integration/unsafe_send_file_spec.rb +0 -52
  123. data/spec/support/fixtures/hanami-plugin/Gemfile +0 -8
  124. data/spec/support/fixtures/hanami-plugin/README.md +0 -35
  125. data/spec/support/fixtures/hanami-plugin/Rakefile +0 -4
  126. data/spec/support/fixtures/hanami-plugin/bin/console +0 -15
  127. data/spec/support/fixtures/hanami-plugin/bin/setup +0 -8
  128. data/spec/support/fixtures/hanami-plugin/hanami-plugin.gemspec +0 -28
  129. data/spec/support/fixtures/hanami-plugin/lib/hanami/plugin/cli.rb +0 -19
  130. data/spec/support/fixtures/hanami-plugin/lib/hanami/plugin/version.rb +0 -7
  131. data/spec/support/fixtures/hanami-plugin/lib/hanami/plugin.rb +0 -8
  132. data/spec/unit/hanami/routes_spec.rb +0 -25
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9e9e5c35a72383ba29d2523a9b30da2a3170605bba5cee20562c897025a58524
4
- data.tar.gz: 328e2e6aa30db94ce7dbae5f58d3ac0ce8435ec928ed71fa058345ca3a22553f
3
+ metadata.gz: 52462a1be45d338394f82872ac25bd8fc6e34f5b90991e74928342d0905d377d
4
+ data.tar.gz: 221af8ef1ba7993d6eb0678c0536513fca19f68b83bcf13d2fa5664747b83b98
5
5
  SHA512:
6
- metadata.gz: 769a484cea4c2594afaece8ae368e16003d02f988b6c015370b0b8236de477042611d71432da8d89d885ebabd3e0e013e7dd9299d0622897f44ac3d511980daf
7
- data.tar.gz: e5808f8d9195cb242cbc02d136c993167ab124dabda9b239469841c981c621410d80ace966378157f22cdfd4aaf683f885257d96713561e2e12ce54cdadcab0f
6
+ metadata.gz: f2e0f16b7bee12601ebe28645be73219dd97647d4dc2ddfa47af25ac974092afa8d4b4ec849e0f7866e266c6dd7f39ddf31aa19b857083fb1841f19b98affdbf
7
+ data.tar.gz: 1b2ad0280e15291bba6fdf5efaf75bb10555eba655087ea53a9c5c7e8a5522335e0e07e0f2bf81f2b2c4ce638c14a58bbe2d8c827a792a5d2fc17111245bb75a
data/CHANGELOG.md CHANGED
@@ -2,6 +2,14 @@
2
2
 
3
3
  The web, with simplicity.
4
4
 
5
+ ## v2.0.0.beta3 - 2022-09-21
6
+
7
+ ### Changed
8
+
9
+ - [Piotr Solnica] Simplify routes definition, by removing `routes` block from `config/routes.rb`
10
+
11
+ ### Added
12
+
5
13
  ## v2.0.0.beta2 - 2022-08-16
6
14
 
7
15
  ### Added
@@ -25,6 +33,7 @@ The web, with simplicity.
25
33
  Or by setting `HANAMI_SLICES=blog,shop` in the env.
26
34
 
27
35
  You can also specify arbitrarily nested slices using dot delimiters. For example, if you have an `admin` slice with nested `shop` and `blog` slices, you can specify `config.slices = %w[admin.shop]` to only load the admin slice and its nested shop slice.
36
+
28
37
  - [Tim Riley] Added `App.prepare_load_path`, which need only be called if you explicitly change your app's `config.root`. The `$LOAD_PATH` is otherwise still prepared automatically for the default `root` of `Dir.pwd`. [#1188]
29
38
  - [Marc Busqué, Tim Riley] Added `Hanami.setup` to find and load your Hanami app file (expected at `config/app.rb`). This will search in the current directory, and will search upwards through parent directories until the app file is found. [#1197]
30
39
 
@@ -62,6 +71,7 @@ The web, with simplicity.
62
71
  end
63
72
  end
64
73
  ```
74
+
65
75
  - [Tim Riley] Every slice has a distinct `Zeitwerk::Loader` instance at `Slice.autoloader`. This change enabled the autoloading within settings described above. [#1186]
66
76
  - [Tim Riley] `Slice.settings` reader method has been removed. Access settings via `App["settings"]` or `Slice["settings"]` (after the slice has been prepared) instead. [#1186]
67
77
  - [Tim Riley] dry-types is no longer a dependency specified in the gemspec. This is made available to generated app via a line in their `Gemfile` instead. [#1186]
@@ -133,7 +143,6 @@ The web, with simplicity.
133
143
  - [Tim Riley] Removed `Hanami::Configuration::Router#routes_path`, and `#routes_class_name` [#1175]
134
144
  - [Tim Riley] Make `Hanami::App` to inherit from `Hanami::Slice` [#1162]
135
145
 
136
-
137
146
  ## v2.0.0.alpha8 - 2022-05-19
138
147
 
139
148
  ### Added
@@ -5,8 +5,8 @@ require "dry/configurable"
5
5
  module Hanami
6
6
  class Configuration
7
7
  # NullConfiguration can serve as a fallback configuration object when out-of-gem
8
- # configuration objects are not available (specifically, when the hanami-controller or
9
- # hanami-view gems are not loaded)
8
+ # configuration objects are not available (specifically, when the
9
+ # hanami-controller, hanami-router or hanami-view gems are not loaded)
10
10
  class NullConfiguration
11
11
  include Dry::Configurable
12
12
  end
@@ -9,7 +9,6 @@ require "pathname"
9
9
 
10
10
  require_relative "constants"
11
11
  require_relative "configuration/logger"
12
- require_relative "configuration/router"
13
12
  require_relative "configuration/sessions"
14
13
  require_relative "settings/env_store"
15
14
  require_relative "slice/routing/middleware/stack"
@@ -106,20 +105,22 @@ module Hanami
106
105
 
107
106
  config.logger = Configuration::Logger.new(env: env, app_name: app_name)
108
107
 
109
- @assets = load_dependent_config("hanami/assets/app_configuration") {
110
- Hanami::Assets::AppConfiguration.new
111
- }
108
+ # TODO: Make assets configuration dependent
109
+ require "hanami/assets/app_configuration"
110
+ @assets = Hanami::Assets::AppConfiguration.new
112
111
 
113
- @actions = load_dependent_config("hanami/action") {
112
+ @actions = load_dependent_config("hanami-controller") {
114
113
  require_relative "configuration/actions"
115
114
  Actions.new
116
115
  }
117
116
 
118
- @middleware = Slice::Routing::Middleware::Stack.new
119
-
120
- @router = Router.new(self)
117
+ @router = load_dependent_config("hanami-router") {
118
+ require_relative "configuration/router"
119
+ @middleware = Slice::Routing::Middleware::Stack.new
120
+ Router.new(self)
121
+ }
121
122
 
122
- @views = load_dependent_config("hanami/view") {
123
+ @views = load_dependent_config("hanami-view") {
123
124
  require_relative "configuration/views"
124
125
  Views.new
125
126
  }
@@ -209,14 +210,13 @@ module Hanami
209
210
  end
210
211
 
211
212
  # @api private
212
- def load_dependent_config(require_path)
213
- require require_path
214
- yield
215
- rescue LoadError => e
216
- raise e unless e.path == require_path
217
-
218
- require_relative "configuration/null_configuration"
219
- NullConfiguration.new
213
+ def load_dependent_config(gem_name)
214
+ if Hanami.bundled?(gem_name)
215
+ yield
216
+ else
217
+ require_relative "configuration/null_configuration"
218
+ NullConfiguration.new
219
+ end
220
220
  end
221
221
 
222
222
  def method_missing(name, *args, &block)
data/lib/hanami/routes.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "hanami/slice/router"
4
+
3
5
  module Hanami
4
6
  # App routes
5
7
  #
@@ -14,38 +16,63 @@ module Hanami
14
16
  #
15
17
  # module MyApp
16
18
  # class Routes < Hanami::Routes
17
- # define do
18
- # root to: "home.show"
19
- # end
19
+ # root to: "home.show"
20
20
  # end
21
21
  # end
22
22
  #
23
- # See {Hanami::Slice::Router} for the syntax allowed within the
24
- # `define` block.
23
+ # See {Hanami::Slice::Router} for the syntax allowed within the `define` block.
25
24
  #
26
25
  # @see Hanami::Slice::Router
27
26
  # @since 2.0.0
28
27
  class Routes
29
- # Defines app routes
30
- #
31
- # @yield DSL syntax to define app routes executed in the context
32
- # of {Hanami::Slice::Router}
33
- #
34
- # @return [Proc]
35
- def self.define(&block)
36
- @_routes = block
37
- end
38
-
39
28
  # @api private
40
29
  def self.routes
41
- @_routes || raise(<<~MSG)
42
- Routes need to be defined before being able to fetch them. E.g.,
43
- define do
44
- slice :main, at: "/" do
45
- root to: "home.show"
30
+ @routes ||= build_routes
31
+ end
32
+
33
+ class << self
34
+ # @api private
35
+ def build_routes(definitions = self.definitions)
36
+ return if definitions.empty?
37
+
38
+ proc do
39
+ definitions.each do |(name, args, kwargs, block)|
40
+ if block
41
+ public_send(name, *args, **kwargs, &block)
42
+ else
43
+ public_send(name, *args, **kwargs)
46
44
  end
47
45
  end
48
- MSG
46
+ end
47
+ end
48
+
49
+ # @api private
50
+ def definitions
51
+ @definitions ||= []
52
+ end
53
+
54
+ private
55
+
56
+ # @api private
57
+ def supported_methods
58
+ @supported_methods ||= Slice::Router.public_instance_methods
59
+ end
60
+
61
+ # @api private
62
+ def respond_to_missing?(name, include_private = false)
63
+ supported_methods.include?(name) || super
64
+ end
65
+
66
+ # Capture all method calls that are supported by the router DSL
67
+ # so that it can be evaluated lazily during configuration/boot
68
+ # process
69
+ #
70
+ # @api private
71
+ def method_missing(name, *args, **kwargs, &block)
72
+ return super unless respond_to?(name)
73
+ definitions << [name, args, kwargs, block]
74
+ self
75
+ end
49
76
  end
50
77
  end
51
78
  end
@@ -8,7 +8,7 @@ module Hanami
8
8
  module Version
9
9
  # @since 0.9.0
10
10
  # @api private
11
- VERSION = "2.0.0.beta2"
11
+ VERSION = "2.0.0.beta3"
12
12
 
13
13
  # @since 0.9.0
14
14
  # @api private
@@ -14,12 +14,10 @@ RSpec.describe "App action / Routes", :app_integration do
14
14
  write "config/routes.rb", <<~RUBY
15
15
  module TestApp
16
16
  class Routes < Hanami::Routes
17
- define do
18
- root to: "home.index"
17
+ root to: "home.index"
19
18
 
20
- slice :admin, at: "/admin" do
21
- root to: "dashboard.index"
22
- end
19
+ slice :admin, at: "/admin" do
20
+ root to: "dashboard.index"
23
21
  end
24
22
  end
25
23
  end
@@ -16,9 +16,7 @@ RSpec.describe "App routes helper", :app_integration do
16
16
  write "config/routes.rb", <<~RUBY
17
17
  module TestApp
18
18
  class Routes < Hanami::Routes
19
- define do
20
- root to: "home.index"
21
- end
19
+ root to: "home.index"
22
20
  end
23
21
  end
24
22
  RUBY
@@ -64,10 +64,8 @@ RSpec.describe "Hanami web app", :app_integration do
64
64
 
65
65
  module TestApp
66
66
  class Routes < Hanami::Routes
67
- define do
68
- slice :main, at: "/" do
69
- root to: "home.index"
70
- end
67
+ slice :main, at: "/" do
68
+ root to: "home.index"
71
69
  end
72
70
  end
73
71
  end
@@ -113,14 +111,12 @@ RSpec.describe "Hanami web app", :app_integration do
113
111
 
114
112
  module TestApp
115
113
  class Routes < Hanami::Routes
116
- define do
117
- slice :main, at: "/" do
118
- use TestApp::Middlewares::AppendOne
119
- use TestApp::Middlewares::Prepare, before: TestApp::Middlewares::AppendOne
120
- use TestApp::Middlewares::AppendTwo, after: TestApp::Middlewares::AppendOne
114
+ slice :main, at: "/" do
115
+ use TestApp::Middlewares::AppendOne
116
+ use TestApp::Middlewares::Prepare, before: TestApp::Middlewares::AppendOne
117
+ use TestApp::Middlewares::AppendTwo, after: TestApp::Middlewares::AppendOne
121
118
 
122
- root to: "home.index"
123
- end
119
+ root to: "home.index"
124
120
  end
125
121
  end
126
122
  end
@@ -180,10 +176,8 @@ RSpec.describe "Hanami web app", :app_integration do
180
176
 
181
177
  module TestApp
182
178
  class Routes < Hanami::Routes
183
- define do
184
- slice :main, at: "/" do
185
- root to: "home.index"
186
- end
179
+ slice :main, at: "/" do
180
+ root to: "home.index"
187
181
  end
188
182
  end
189
183
  end
@@ -24,11 +24,9 @@ RSpec.describe "Running a Rack app for a non-booted app", :app_integration do
24
24
 
25
25
  module TestApp
26
26
  class Routes < Hanami::Routes
27
- define do
28
- slice :main, at: "/" do
29
- root to: "home.show"
30
- get "/articles", to: "articles.index"
31
- end
27
+ slice :main, at: "/" do
28
+ root to: "home.show"
29
+ get "/articles", to: "articles.index"
32
30
  end
33
31
  end
34
32
  end
@@ -21,9 +21,7 @@ RSpec.describe "Hanami web app", :app_integration do
21
21
  write "config/routes.rb", <<~RUBY
22
22
  module TestApp
23
23
  class Routes < Hanami::Routes
24
- define do
25
- root to: ->(env) { [200, {}, ["OK"]] }
26
- end
24
+ root to: ->(env) { [200, {}, ["OK"]] }
27
25
  end
28
26
  end
29
27
  RUBY
@@ -51,8 +49,7 @@ RSpec.describe "Hanami web app", :app_integration do
51
49
  write "config/routes.rb", <<~RUBY
52
50
  module TestApp
53
51
  class Routes < Hanami::Routes
54
- define do
55
- end
52
+ root to: ->(env) { [200, {}, ["OK"]] }
56
53
  end
57
54
  end
58
55
  RUBY
@@ -65,7 +62,7 @@ RSpec.describe "Hanami web app", :app_integration do
65
62
 
66
63
  logs = -> { Pathname(dir).join("test.log").realpath.read }
67
64
 
68
- expect(logs.()).to match %r{GET 404 \d+ms 127.0.0.1 /}
65
+ expect(logs.()).to match %r{GET 200 \d+ms 127.0.0.1 /}
69
66
  end
70
67
  end
71
68
 
@@ -89,8 +86,7 @@ RSpec.describe "Hanami web app", :app_integration do
89
86
  write "slices/main/config/routes.rb", <<~RUBY
90
87
  module Main
91
88
  class Routes < Hanami::Routes
92
- define do
93
- end
89
+ root to: ->(env) { [200, {}, ["OK"]] }
94
90
  end
95
91
  end
96
92
  RUBY
@@ -101,7 +97,7 @@ RSpec.describe "Hanami web app", :app_integration do
101
97
 
102
98
  logs = -> { Pathname(dir).join("test.log").realpath.read }
103
99
 
104
- expect(logs.()).to match %r{GET 404 \d+ms 127.0.0.1 /}
100
+ expect(logs.()).to match %r{GET 200 \d+ms 127.0.0.1 /}
105
101
  end
106
102
  end
107
103
  end
@@ -121,20 +117,18 @@ RSpec.describe "Hanami web app", :app_integration do
121
117
  write "config/routes.rb", <<~RUBY
122
118
  module TestApp
123
119
  class Routes < Hanami::Routes
124
- define do
125
- get "/health", to: "health.show"
120
+ get "/health", to: "health.show"
126
121
 
127
- get "/inline" do
128
- "Inline"
129
- end
122
+ get "/inline" do
123
+ "Inline"
124
+ end
130
125
 
131
- slice :main, at: "/" do
132
- root to: "home.index"
133
- end
126
+ slice :main, at: "/" do
127
+ root to: "home.index"
128
+ end
134
129
 
135
- slice :admin, at: "/admin" do
136
- get "/dashboard", to: "dashboard.show"
137
- end
130
+ slice :admin, at: "/admin" do
131
+ get "/dashboard", to: "dashboard.show"
138
132
  end
139
133
  end
140
134
  end
@@ -228,12 +222,10 @@ RSpec.describe "Hanami web app", :app_integration do
228
222
  write "config/routes.rb", <<~RUBY
229
223
  module TestApp
230
224
  class Routes < Hanami::Routes
231
- define do
232
- root to: "home.index"
225
+ root to: "home.index"
233
226
 
234
- slice :main, at: "/" do
235
- root to: "home.index"
236
- end
227
+ slice :main, at: "/" do
228
+ root to: "home.index"
237
229
  end
238
230
  end
239
231
  end
@@ -295,12 +287,10 @@ RSpec.describe "Hanami web app", :app_integration do
295
287
  write "config/routes.rb", <<~RUBY
296
288
  module TestApp
297
289
  class Routes < Hanami::Routes
298
- define do
299
- get "/feedbacks", to: "feedbacks.index"
290
+ get "/feedbacks", to: "feedbacks.index"
300
291
 
301
- slice :api, at: "/api" do
302
- get "/people", to: "people.index"
303
- end
292
+ slice :api, at: "/api" do
293
+ get "/people", to: "people.index"
304
294
  end
305
295
  end
306
296
  end
@@ -374,9 +364,7 @@ RSpec.describe "Hanami web app", :app_integration do
374
364
  write "config/routes.rb", <<~RUBY
375
365
  module TestApp
376
366
  class Routes < Hanami::Routes
377
- define do
378
- get "/missing", to: "missing.action"
379
- end
367
+ get "/missing", to: "missing.action"
380
368
  end
381
369
  end
382
370
  RUBY
@@ -405,10 +393,8 @@ RSpec.describe "Hanami web app", :app_integration do
405
393
  write "config/routes.rb", <<~RUBY
406
394
  module TestApp
407
395
  class Routes < Hanami::Routes
408
- define do
409
- slice :admin, at: "/admin" do
410
- get "/missing", to: "missing.action"
411
- end
396
+ slice :admin, at: "/admin" do
397
+ get "/missing", to: "missing.action"
412
398
  end
413
399
  end
414
400
  end
@@ -437,9 +423,7 @@ RSpec.describe "Hanami web app", :app_integration do
437
423
  write "config/routes.rb", <<~RUBY
438
424
  module TestApp
439
425
  class Routes < Hanami::Routes
440
- define do
441
- get "/missing", to: "missing.action"
442
- end
426
+ get "/missing", to: "missing.action"
443
427
  end
444
428
  end
445
429
  RUBY
@@ -470,10 +454,8 @@ RSpec.describe "Hanami web app", :app_integration do
470
454
  write "config/routes.rb", <<~RUBY
471
455
  module TestApp
472
456
  class Routes < Hanami::Routes
473
- define do
474
- slice :admin, at: "/admin" do
475
- get "/missing", to: "missing.action"
476
- end
457
+ slice :admin, at: "/admin" do
458
+ get "/missing", to: "missing.action"
477
459
  end
478
460
  end
479
461
  end
@@ -504,10 +486,8 @@ RSpec.describe "Hanami web app", :app_integration do
504
486
  write "config/routes.rb", <<~RUBY
505
487
  module TestApp
506
488
  class Routes < Hanami::Routes
507
- define do
508
- slice :foo, at: "/foo" do
509
- get "/bar", to: "bar.index"
510
- end
489
+ slice :foo, at: "/foo" do
490
+ get "/bar", to: "bar.index"
511
491
  end
512
492
  end
513
493
  end
@@ -55,6 +55,26 @@ RSpec.describe "Hanami setup", :app_integration do
55
55
 
56
56
  expect { setup }.not_to raise_error
57
57
  end
58
+
59
+ %w[hanami-view hanami-actions hanami-router].each do |gem_name|
60
+ it "works when #{gem_name} gem is not bundled" do
61
+ allow(Hanami).to receive(:bundled?).and_call_original
62
+ expect(Hanami).to receive(:bundled?).with("hanami-router").and_return(false)
63
+
64
+ with_tmp_directory(Dir.mktmpdir) do
65
+ write "config/app.rb", <<~RUBY
66
+ require "hanami"
67
+
68
+ module TestApp
69
+ class App < Hanami::App
70
+ end
71
+ end
72
+ RUBY
73
+
74
+ expect { setup }.to change { Hanami.app? }.to true
75
+ end
76
+ end
77
+ end
58
78
  end
59
79
 
60
80
  describe "using hanami/setup require" do
@@ -27,10 +27,8 @@ RSpec.describe "Slices / External slices", :app_integration do
27
27
 
28
28
  module TestApp
29
29
  class Routes < Hanami::Routes
30
- define do
31
- slice :external, at: "/" do
32
- root to: "test_action"
33
- end
30
+ slice :external, at: "/" do
31
+ root to: "test_action"
34
32
  end
35
33
  end
36
34
  end
@@ -44,9 +44,7 @@ RSpec.describe "Slices / Slice routing", :app_integration do
44
44
 
45
45
  module TestApp
46
46
  class Routes < Hanami::Routes
47
- define do
48
- get "home", to: "home.show", as: :home
49
- end
47
+ get "home", to: "home.show", as: :home
50
48
  end
51
49
  end
52
50
  RUBY
@@ -79,9 +77,7 @@ RSpec.describe "Slices / Slice routing", :app_integration do
79
77
 
80
78
  module Main
81
79
  class Routes < Hanami::Routes
82
- define do
83
- get "home", to: "home.show", as: :home
84
- end
80
+ get "home", to: "home.show", as: :home
85
81
  end
86
82
  end
87
83
  RUBY
@@ -130,11 +126,9 @@ RSpec.describe "Slices / Slice routing", :app_integration do
130
126
  write "config/routes.rb", <<~'RUBY'
131
127
  module TestApp
132
128
  class Routes < Hanami::Routes
133
- define do
134
- root to: "home.show"
129
+ root to: "home.show"
135
130
 
136
- slice :main, at: "/main"
137
- end
131
+ slice :main, at: "/main"
138
132
  end
139
133
  end
140
134
  RUBY
@@ -158,9 +152,7 @@ RSpec.describe "Slices / Slice routing", :app_integration do
158
152
  write "slices/main/config/routes.rb", <<~'RUBY'
159
153
  module Main
160
154
  class Routes < Hanami::Routes
161
- define do
162
- root to: "home.show"
163
- end
155
+ root to: "home.show"
164
156
  end
165
157
  end
166
158
  RUBY