hanami-view 2.0.0.alpha7 → 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 (44) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +38 -0
  3. data/README.md +15 -3
  4. data/hanami-view.gemspec +5 -3
  5. data/lib/hanami/view/cache.rb +16 -0
  6. data/lib/hanami/view/context.rb +12 -70
  7. data/lib/hanami/view/context_helpers/content_helpers.rb +5 -5
  8. data/lib/hanami/view/decorated_attributes.rb +2 -2
  9. data/lib/hanami/view/erb/engine.rb +27 -0
  10. data/lib/hanami/view/erb/filters/block.rb +44 -0
  11. data/lib/hanami/view/erb/filters/trimming.rb +42 -0
  12. data/lib/hanami/view/erb/parser.rb +161 -0
  13. data/lib/hanami/view/erb/template.rb +30 -0
  14. data/lib/hanami/view/errors.rb +5 -7
  15. data/lib/hanami/view/exposure.rb +23 -17
  16. data/lib/hanami/view/exposures.rb +22 -13
  17. data/lib/hanami/view/helpers/escape_helper.rb +221 -0
  18. data/lib/hanami/view/helpers/number_formatting_helper.rb +182 -0
  19. data/lib/hanami/view/helpers/tag_helper/tag_builder.rb +230 -0
  20. data/lib/hanami/view/helpers/tag_helper.rb +210 -0
  21. data/lib/hanami/view/html.rb +104 -0
  22. data/lib/hanami/view/html_safe_string_buffer.rb +46 -0
  23. data/lib/hanami/view/part.rb +13 -15
  24. data/lib/hanami/view/part_builder.rb +68 -108
  25. data/lib/hanami/view/path.rb +4 -31
  26. data/lib/hanami/view/renderer.rb +36 -44
  27. data/lib/hanami/view/rendering.rb +42 -0
  28. data/lib/hanami/view/{render_environment_missing.rb → rendering_missing.rb} +8 -13
  29. data/lib/hanami/view/scope.rb +15 -16
  30. data/lib/hanami/view/scope_builder.rb +42 -78
  31. data/lib/hanami/view/tilt/haml_adapter.rb +40 -0
  32. data/lib/hanami/view/tilt/slim_adapter.rb +40 -0
  33. data/lib/hanami/view/tilt.rb +22 -46
  34. data/lib/hanami/view/version.rb +1 -1
  35. data/lib/hanami/view.rb +351 -26
  36. metadata +64 -29
  37. data/LICENSE +0 -20
  38. data/lib/hanami/view/application_configuration.rb +0 -77
  39. data/lib/hanami/view/application_context.rb +0 -98
  40. data/lib/hanami/view/render_environment.rb +0 -62
  41. data/lib/hanami/view/standalone_view.rb +0 -400
  42. data/lib/hanami/view/tilt/erb.rb +0 -26
  43. data/lib/hanami/view/tilt/erbse.rb +0 -21
  44. data/lib/hanami/view/tilt/haml.rb +0 -26
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hanami-view
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.alpha7
4
+ version: 2.1.0.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Riley
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-03-08 00:00:00.000000000 Z
12
+ date: 2023-06-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: concurrent-ruby
@@ -31,54 +31,68 @@ dependencies:
31
31
  requirements:
32
32
  - - "~>"
33
33
  - !ruby/object:Gem::Version
34
- version: '0.13'
35
- - - ">="
36
- - !ruby/object:Gem::Version
37
- version: 0.13.0
34
+ version: '1.0'
38
35
  type: :runtime
39
36
  prerelease: false
40
37
  version_requirements: !ruby/object:Gem::Requirement
41
38
  requirements:
42
39
  - - "~>"
43
40
  - !ruby/object:Gem::Version
44
- version: '0.13'
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: 0.13.0
41
+ version: '1.0'
48
42
  - !ruby/object:Gem::Dependency
49
43
  name: dry-core
50
44
  requirement: !ruby/object:Gem::Requirement
51
45
  requirements:
52
46
  - - "~>"
53
47
  - !ruby/object:Gem::Version
54
- version: '0.5'
55
- - - ">="
48
+ version: '1.0'
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '1.0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: dry-inflector
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
56
61
  - !ruby/object:Gem::Version
57
- version: '0.5'
62
+ version: '1.0'
63
+ - - "<"
64
+ - !ruby/object:Gem::Version
65
+ version: '2'
58
66
  type: :runtime
59
67
  prerelease: false
60
68
  version_requirements: !ruby/object:Gem::Requirement
61
69
  requirements:
62
70
  - - "~>"
63
71
  - !ruby/object:Gem::Version
64
- version: '0.5'
65
- - - ">="
72
+ version: '1.0'
73
+ - - "<"
66
74
  - !ruby/object:Gem::Version
67
- version: '0.5'
75
+ version: '2'
68
76
  - !ruby/object:Gem::Dependency
69
- name: dry-inflector
77
+ name: temple
70
78
  requirement: !ruby/object:Gem::Requirement
71
79
  requirements:
72
80
  - - "~>"
73
81
  - !ruby/object:Gem::Version
74
- version: '0.1'
82
+ version: 0.10.0
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: 0.10.2
75
86
  type: :runtime
76
87
  prerelease: false
77
88
  version_requirements: !ruby/object:Gem::Requirement
78
89
  requirements:
79
90
  - - "~>"
80
91
  - !ruby/object:Gem::Version
81
- version: '0.1'
92
+ version: 0.10.0
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: 0.10.2
82
96
  - !ruby/object:Gem::Dependency
83
97
  name: tilt
84
98
  requirement: !ruby/object:Gem::Requirement
@@ -99,6 +113,20 @@ dependencies:
99
113
  - - ">="
100
114
  - !ruby/object:Gem::Version
101
115
  version: 2.0.6
116
+ - !ruby/object:Gem::Dependency
117
+ name: zeitwerk
118
+ requirement: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - "~>"
121
+ - !ruby/object:Gem::Version
122
+ version: '2.6'
123
+ type: :runtime
124
+ prerelease: false
125
+ version_requirements: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - "~>"
128
+ - !ruby/object:Gem::Version
129
+ version: '2.6'
102
130
  - !ruby/object:Gem::Dependency
103
131
  name: bundler
104
132
  requirement: !ruby/object:Gem::Requirement
@@ -151,34 +179,41 @@ extensions: []
151
179
  extra_rdoc_files: []
152
180
  files:
153
181
  - CHANGELOG.md
154
- - LICENSE
155
182
  - README.md
156
183
  - hanami-view.gemspec
157
184
  - lib/hanami-view.rb
158
185
  - lib/hanami/view.rb
159
- - lib/hanami/view/application_configuration.rb
160
- - lib/hanami/view/application_context.rb
161
186
  - lib/hanami/view/application_view.rb
187
+ - lib/hanami/view/cache.rb
162
188
  - lib/hanami/view/context.rb
163
189
  - lib/hanami/view/context_helpers/content_helpers.rb
164
190
  - lib/hanami/view/decorated_attributes.rb
191
+ - lib/hanami/view/erb/engine.rb
192
+ - lib/hanami/view/erb/filters/block.rb
193
+ - lib/hanami/view/erb/filters/trimming.rb
194
+ - lib/hanami/view/erb/parser.rb
195
+ - lib/hanami/view/erb/template.rb
165
196
  - lib/hanami/view/errors.rb
166
197
  - lib/hanami/view/exposure.rb
167
198
  - lib/hanami/view/exposures.rb
199
+ - lib/hanami/view/helpers/escape_helper.rb
200
+ - lib/hanami/view/helpers/number_formatting_helper.rb
201
+ - lib/hanami/view/helpers/tag_helper.rb
202
+ - lib/hanami/view/helpers/tag_helper/tag_builder.rb
203
+ - lib/hanami/view/html.rb
204
+ - lib/hanami/view/html_safe_string_buffer.rb
168
205
  - lib/hanami/view/part.rb
169
206
  - lib/hanami/view/part_builder.rb
170
207
  - lib/hanami/view/path.rb
171
- - lib/hanami/view/render_environment.rb
172
- - lib/hanami/view/render_environment_missing.rb
173
208
  - lib/hanami/view/rendered.rb
174
209
  - lib/hanami/view/renderer.rb
210
+ - lib/hanami/view/rendering.rb
211
+ - lib/hanami/view/rendering_missing.rb
175
212
  - lib/hanami/view/scope.rb
176
213
  - lib/hanami/view/scope_builder.rb
177
- - lib/hanami/view/standalone_view.rb
178
214
  - lib/hanami/view/tilt.rb
179
- - lib/hanami/view/tilt/erb.rb
180
- - lib/hanami/view/tilt/erbse.rb
181
- - lib/hanami/view/tilt/haml.rb
215
+ - lib/hanami/view/tilt/haml_adapter.rb
216
+ - lib/hanami/view/tilt/slim_adapter.rb
182
217
  - lib/hanami/view/version.rb
183
218
  homepage: https://dry-rb.org/gems/hanami-view
184
219
  licenses:
@@ -204,7 +239,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
204
239
  - !ruby/object:Gem::Version
205
240
  version: 1.3.1
206
241
  requirements: []
207
- rubygems_version: 3.3.3
242
+ rubygems_version: 3.4.13
208
243
  signing_key:
209
244
  specification_version: 4
210
245
  summary: A complete, standalone view rendering system that gives you everything you
data/LICENSE DELETED
@@ -1,20 +0,0 @@
1
- The MIT License (MIT)
2
-
3
- Copyright (c) 2015-2020 dry-rb team
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy of
6
- this software and associated documentation files (the "Software"), to deal in
7
- the Software without restriction, including without limitation the rights to
8
- use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9
- the Software, and to permit persons to whom the Software is furnished to do so,
10
- subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17
- FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18
- COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19
- IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20
- CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -1,77 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "dry/configurable"
4
- require_relative "../view"
5
-
6
- module Hanami
7
- class View
8
- class ApplicationConfiguration
9
- include Dry::Configurable
10
-
11
- setting :parts_path, default: "view/parts"
12
-
13
- def initialize(*)
14
- super
15
-
16
- @base_config = View.config.dup
17
-
18
- configure_defaults
19
- end
20
-
21
- # Returns the list of available settings
22
- #
23
- # @return [Set]
24
- #
25
- # @since 2.0.0
26
- # @api private
27
- def settings
28
- self.class.settings + View.settings - NON_FORWARDABLE_METHODS
29
- end
30
-
31
- def finalize!
32
- return self if frozen?
33
-
34
- base_config.finalize!
35
-
36
- super
37
- end
38
-
39
- private
40
-
41
- attr_reader :base_config
42
-
43
- def configure_defaults
44
- self.paths = ["templates"]
45
- self.template_inference_base = "views"
46
- self.layout = "application"
47
- end
48
-
49
- # An inflector for views is not configurable via `config.views.inflector` on an
50
- # `Hanami::Application`. The application-wide inflector is already configurable
51
- # there as `config.inflector` and will be used as the default inflector for views.
52
- #
53
- # A custom inflector may still be provided in an `Hanami::View` subclass, via
54
- # `config.inflector=`.
55
- NON_FORWARDABLE_METHODS = [:inflector, :inflector=].freeze
56
- private_constant :NON_FORWARDABLE_METHODS
57
-
58
- def method_missing(name, *args, &block)
59
- return super if NON_FORWARDABLE_METHODS.include?(name)
60
-
61
- if config.respond_to?(name)
62
- config.public_send(name, *args, &block)
63
- elsif base_config.respond_to?(name)
64
- base_config.public_send(name, *args, &block)
65
- else
66
- super
67
- end
68
- end
69
-
70
- def respond_to_missing?(name, _include_all = false)
71
- return false if NON_FORWARDABLE_METHODS.include?(name)
72
-
73
- config.respond_to?(name) || base_config.respond_to?(name) || super
74
- end
75
- end
76
- end
77
- end
@@ -1,98 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "hanami/view/errors"
4
-
5
- module Hanami
6
- class View
7
- class ApplicationContext < Module
8
- attr_reader :provider
9
- attr_reader :application
10
-
11
- def initialize(provider)
12
- @provider = provider
13
- @application = provider.respond_to?(:application) ? provider.application : Hanami.application
14
- end
15
-
16
- def included(context_class)
17
- define_initialize
18
- context_class.include(InstanceMethods)
19
- end
20
-
21
- private
22
-
23
- def define_initialize
24
- inflector = application.inflector
25
- settings = application[:settings] if application.key?(:settings)
26
- routes = application[:routes_helper] if application.key?(:routes_helper)
27
- assets = application[:assets] if application.key?(:assets)
28
-
29
- define_method :initialize do |**options|
30
- @inflector = options[:inflector] || inflector
31
- @settings = options[:settings] || settings
32
- @routes = options[:routes] || routes
33
- @assets = options[:assets] || assets
34
- super(**options)
35
- end
36
- end
37
-
38
- module InstanceMethods
39
- attr_reader :inflector
40
- attr_reader :routes
41
- attr_reader :settings
42
-
43
- def initialize(**args)
44
- defaults = {content: {}}
45
-
46
- super(**defaults.merge(args))
47
- end
48
-
49
- def content_for(key, value = nil, &block)
50
- content = _options[:content]
51
- output = nil
52
-
53
- if block
54
- content[key] = yield
55
- elsif value
56
- content[key] = value
57
- else
58
- output = content[key]
59
- end
60
-
61
- output
62
- end
63
-
64
- def current_path
65
- request.fullpath
66
- end
67
-
68
- def csrf_token
69
- request.session[Hanami::Action::CSRFProtection::CSRF_TOKEN]
70
- end
71
-
72
- def request
73
- _options.fetch(:request)
74
- end
75
-
76
- def session
77
- request.session
78
- end
79
-
80
- def flash
81
- response.flash
82
- end
83
-
84
- def assets
85
- @assets or
86
- raise Hanami::View::MissingProviderError.new("hanami-assets")
87
- end
88
-
89
- private
90
-
91
- # TODO: create `Request#flash` so we no longer need the `response`
92
- def response
93
- _options.fetch(:response)
94
- end
95
- end
96
- end
97
- end
98
- end
@@ -1,62 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "dry/core/equalizer"
4
-
5
- module Hanami
6
- class View
7
- # @api private
8
- class RenderEnvironment
9
- def self.prepare(renderer, config, context)
10
- new(
11
- renderer: renderer,
12
- inflector: config.inflector,
13
- context: context,
14
- scope_builder: config.scope_builder.new(namespace: config.scope_namespace),
15
- part_builder: config.part_builder.new(namespace: config.part_namespace)
16
- )
17
- end
18
-
19
- include Dry::Equalizer(:renderer, :inflector, :context, :scope_builder, :part_builder)
20
-
21
- attr_reader :renderer, :inflector, :context, :scope_builder, :part_builder
22
-
23
- def initialize(renderer:, inflector:, context:, scope_builder:, part_builder:)
24
- @renderer = renderer
25
- @inflector = inflector
26
- @context = context.for_render_env(self)
27
- @scope_builder = scope_builder.for_render_env(self)
28
- @part_builder = part_builder.for_render_env(self)
29
- end
30
-
31
- def format
32
- renderer.format
33
- end
34
-
35
- def part(name, value, **options)
36
- part_builder.(name, value, **options)
37
- end
38
-
39
- def scope(name = nil, locals) # rubocop:disable Style/OptionalArguments
40
- scope_builder.(name, locals)
41
- end
42
-
43
- def template(name, scope, &block)
44
- renderer.template(name, scope, &block)
45
- end
46
-
47
- def partial(name, scope, &block)
48
- renderer.partial(name, scope, &block)
49
- end
50
-
51
- def chdir(dirname)
52
- self.class.new(
53
- renderer: renderer.chdir(dirname),
54
- inflector: inflector,
55
- context: context,
56
- scope_builder: scope_builder,
57
- part_builder: part_builder
58
- )
59
- end
60
- end
61
- end
62
- end