hanami 2.0.2 → 2.1.0.beta1

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 (78) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +31 -0
  3. data/LICENSE.md +1 -1
  4. data/README.md +25 -9
  5. data/hanami.gemspec +2 -2
  6. data/lib/hanami/config/actions.rb +0 -4
  7. data/lib/hanami/config/logger.rb +1 -1
  8. data/lib/hanami/config/views.rb +0 -4
  9. data/lib/hanami/config.rb +54 -0
  10. data/lib/hanami/extensions/action/slice_configured_action.rb +15 -7
  11. data/lib/hanami/extensions/action.rb +4 -4
  12. data/lib/hanami/extensions/router/errors.rb +58 -0
  13. data/lib/hanami/extensions/view/context.rb +129 -60
  14. data/lib/hanami/extensions/view/part.rb +26 -0
  15. data/lib/hanami/extensions/view/scope.rb +26 -0
  16. data/lib/hanami/extensions/view/slice_configured_context.rb +0 -2
  17. data/lib/hanami/extensions/view/slice_configured_helpers.rb +44 -0
  18. data/lib/hanami/extensions/view/slice_configured_view.rb +106 -21
  19. data/lib/hanami/extensions/view/standard_helpers.rb +14 -0
  20. data/lib/hanami/extensions.rb +10 -3
  21. data/lib/hanami/helpers/form_helper/form_builder.rb +1391 -0
  22. data/lib/hanami/helpers/form_helper/values.rb +75 -0
  23. data/lib/hanami/helpers/form_helper.rb +213 -0
  24. data/lib/hanami/middleware/public_errors_app.rb +75 -0
  25. data/lib/hanami/middleware/render_errors.rb +93 -0
  26. data/lib/hanami/slice.rb +28 -2
  27. data/lib/hanami/slice_configurable.rb +3 -2
  28. data/lib/hanami/version.rb +1 -1
  29. data/lib/hanami/web/rack_logger.rb +8 -20
  30. data/lib/hanami.rb +1 -1
  31. data/spec/integration/action/view_rendering/view_context_spec.rb +221 -0
  32. data/spec/integration/action/view_rendering_spec.rb +0 -18
  33. data/spec/integration/rack_app/middleware_spec.rb +23 -23
  34. data/spec/integration/rack_app/rack_app_spec.rb +5 -1
  35. data/spec/integration/slices/slice_registrations_spec.rb +80 -0
  36. data/spec/integration/view/config/default_context_spec.rb +149 -0
  37. data/spec/integration/view/{inflector_spec.rb → config/inflector_spec.rb} +1 -1
  38. data/spec/integration/view/config/part_class_spec.rb +147 -0
  39. data/spec/integration/view/config/part_namespace_spec.rb +103 -0
  40. data/spec/integration/view/config/paths_spec.rb +119 -0
  41. data/spec/integration/view/config/scope_class_spec.rb +147 -0
  42. data/spec/integration/view/config/scope_namespace_spec.rb +103 -0
  43. data/spec/integration/view/config/template_spec.rb +38 -0
  44. data/spec/integration/view/context/request_spec.rb +3 -7
  45. data/spec/integration/view/helpers/form_helper_spec.rb +174 -0
  46. data/spec/integration/view/helpers/part_helpers_spec.rb +124 -0
  47. data/spec/integration/view/helpers/scope_helpers_spec.rb +84 -0
  48. data/spec/integration/view/helpers/user_defined_helpers/part_helpers_spec.rb +162 -0
  49. data/spec/integration/view/helpers/user_defined_helpers/scope_helpers_spec.rb +119 -0
  50. data/spec/integration/view/slice_configuration_spec.rb +9 -9
  51. data/spec/integration/web/render_detailed_errors_spec.rb +90 -0
  52. data/spec/integration/web/render_errors_spec.rb +240 -0
  53. data/spec/spec_helper.rb +1 -1
  54. data/spec/support/matchers.rb +32 -0
  55. data/spec/unit/hanami/config/actions/default_values_spec.rb +0 -4
  56. data/spec/unit/hanami/config/logger_spec.rb +9 -0
  57. data/spec/unit/hanami/config/render_detailed_errors_spec.rb +25 -0
  58. data/spec/unit/hanami/config/render_errors_spec.rb +25 -0
  59. data/spec/unit/hanami/config/views_spec.rb +0 -18
  60. data/spec/unit/hanami/extensions/view/context_spec.rb +59 -0
  61. data/spec/unit/hanami/helpers/form_helper_spec.rb +2826 -0
  62. data/spec/unit/hanami/router/errors/not_allowed_error_spec.rb +27 -0
  63. data/spec/unit/hanami/router/errors/not_found_error_spec.rb +22 -0
  64. data/spec/unit/hanami/slice_configurable_spec.rb +18 -0
  65. data/spec/unit/hanami/version_spec.rb +1 -1
  66. data/spec/unit/hanami/web/rack_logger_spec.rb +1 -1
  67. metadata +67 -33
  68. data/spec/integration/action/view_integration_spec.rb +0 -165
  69. data/spec/integration/view/part_namespace_spec.rb +0 -96
  70. data/spec/integration/view/path_spec.rb +0 -56
  71. data/spec/integration/view/template_spec.rb +0 -68
  72. data/spec/isolation/hanami/application/already_configured_spec.rb +0 -19
  73. data/spec/isolation/hanami/application/inherit_anonymous_class_spec.rb +0 -10
  74. data/spec/isolation/hanami/application/inherit_concrete_class_spec.rb +0 -14
  75. data/spec/isolation/hanami/application/not_configured_spec.rb +0 -9
  76. data/spec/isolation/hanami/application/routes/configured_spec.rb +0 -44
  77. data/spec/isolation/hanami/application/routes/not_configured_spec.rb +0 -16
  78. data/spec/isolation/hanami/boot/success_spec.rb +0 -50
@@ -1,68 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "hanami"
4
-
5
- RSpec.describe "App view / Template", :app_integration do
6
- before do
7
- module TestApp
8
- class App < Hanami::App
9
- config.root = "/test_app"
10
- end
11
- end
12
-
13
- Hanami.app.instance_eval(&app_hook) if respond_to?(:app_hook)
14
- Hanami.app.register_slice :main
15
- Hanami.app.prepare
16
-
17
- module TestApp
18
- class View < Hanami::View
19
- end
20
- end
21
- end
22
-
23
- subject(:template) { view_class.config.template }
24
-
25
- context "Ordinary app view" do
26
- before do
27
- module TestApp
28
- module Views
29
- module Article
30
- class Index < TestApp::View
31
- end
32
- end
33
- end
34
- end
35
- end
36
-
37
- let(:view_class) { TestApp::Views::Article::Index }
38
-
39
- it "configures the tempalte to match the class name" do
40
- expect(template).to eq "article/index"
41
- end
42
- end
43
-
44
- context "Slice view with namespace matching template inference base" do
45
- before do
46
- module TestApp
47
- module MyViews
48
- module Users
49
- class Show < TestApp::View
50
- end
51
- end
52
- end
53
- end
54
- end
55
-
56
- let(:app_hook) {
57
- proc do
58
- config.views.template_inference_base = "my_views"
59
- end
60
- }
61
-
62
- let(:view_class) { TestApp::MyViews::Users::Show }
63
-
64
- it "configures the tempalte to match the class name" do
65
- expect(template).to eq "users/show"
66
- end
67
- end
68
- end
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Bookshelf
4
- class App < Hanami::App
5
- end
6
- end
7
-
8
- RSpec.describe Hanami do
9
- describe ".application" do
10
- it "it raises error when already assigned" do
11
- expect do
12
- module Soundcard
13
- class App < Hanami::App
14
- end
15
- end
16
- end.to raise_error("Hanami.app already configured")
17
- end
18
- end
19
- end
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Hanami do
4
- describe ".application" do
5
- it "it doesn't assign when anonymous class inherits Hanami::Application" do
6
- Class.new(Hanami::Application)
7
- expect { Hanami.app }.to raise_error("Hanami.app not configured")
8
- end
9
- end
10
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Bookshelf
4
- class App < Hanami::App
5
- end
6
- end
7
-
8
- RSpec.describe Hanami do
9
- describe ".application" do
10
- it "it assign when concrete class inherits Hanami::Application" do
11
- expect(Hanami.app).to eq(Bookshelf::Application)
12
- end
13
- end
14
- end
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Hanami do
4
- describe ".application" do
5
- it "it raises error when not configured" do
6
- expect { Hanami.app }.to raise_error("Hanami.app not configured")
7
- end
8
- end
9
- end
@@ -1,44 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "hanami/action"
4
-
5
- module Bookshelf
6
- class App < Hanami::App
7
- end
8
- end
9
-
10
- module Web
11
- end
12
- Hanami.app.register_slice :web, namespace: Web
13
-
14
- Hanami.prepare
15
-
16
- module Web
17
- class Action < Hanami::Action
18
- end
19
-
20
- module Actions
21
- module Home
22
- class Index < Web::Action
23
- end
24
- end
25
- end
26
- end
27
-
28
- Hanami.app.routes do
29
- mount :web, at: "/" do
30
- root to: "home#index"
31
- end
32
- end
33
-
34
- RSpec.describe Hanami::Application do
35
- describe ".routes" do
36
- subject { Hanami.app.routes }
37
-
38
- it "returns configured routes" do
39
- expect(subject).to be_kind_of(Proc)
40
- # FIXME: make this expectation to pass
41
- # expect(subject.for(:web).url(:root)).to eq("/")
42
- end
43
- end
44
- end
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Bookshelf
4
- class App < Hanami::App
5
- end
6
- end
7
-
8
- RSpec.describe Hanami::Application do
9
- describe ".routes" do
10
- subject { Hanami.app.routes }
11
-
12
- it "raises error when not configured" do
13
- expect { subject }.to raise_error("Hanami.app.routes not configured")
14
- end
15
- end
16
- end
@@ -1,50 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "hanami/action"
4
- require "hanami/logger"
5
-
6
- module Bookshelf
7
- class App < Hanami::App
8
- end
9
- end
10
-
11
- module Web
12
- end
13
- slice = Hanami.app.register_slice :web, namespace: Web
14
-
15
- Hanami.prepare
16
-
17
- Hanami.app.routes do
18
- mount :web, at: "/" do
19
- root to: "home#index"
20
- end
21
- end
22
-
23
- module Web
24
- class Action < Hanami::Action
25
- end
26
-
27
- module Actions
28
- module Home
29
- class Index < Web::Action
30
- end
31
- end
32
- end
33
- end
34
-
35
- slice.register "actions.home.index" do
36
- Web::Actions::Home::Index.new
37
- end
38
-
39
- RSpec.describe Hanami do
40
- describe ".boot" do
41
- it "assigns Hanami.app, .root, and .logger" do
42
- pending "Failing due to dry-system changes"
43
-
44
- Hanami.boot
45
- expect(Hanami.app.ancestors).to include(Hanami::Application)
46
- expect(Hanami.app.root).to eq(Dir.pwd)
47
- expect(Hanami.logger).to be_kind_of(Dry::Logger::Dispatcher)
48
- end
49
- end
50
- end