hanami 2.0.2 → 2.1.0.beta1

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