hanami-view 1.3.1 → 2.0.0.alpha3
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -0
- data/LICENSE +20 -0
- data/README.md +17 -835
- data/hanami-view.gemspec +26 -16
- data/lib/hanami/view/application_configuration.rb +77 -0
- data/lib/hanami/view/application_context.rb +35 -0
- data/lib/hanami/view/application_view.rb +89 -0
- data/lib/hanami/view/context.rb +97 -0
- data/lib/hanami/view/context_helpers/content_helpers.rb +26 -0
- data/lib/hanami/view/decorated_attributes.rb +82 -0
- data/lib/hanami/view/errors.rb +31 -53
- data/lib/hanami/view/exposure.rb +126 -0
- data/lib/hanami/view/exposures.rb +74 -0
- data/lib/hanami/view/part.rb +217 -0
- data/lib/hanami/view/part_builder.rb +140 -0
- data/lib/hanami/view/path.rb +68 -0
- data/lib/hanami/view/render_environment.rb +62 -0
- data/lib/hanami/view/render_environment_missing.rb +44 -0
- data/lib/hanami/view/rendered.rb +55 -0
- data/lib/hanami/view/renderer.rb +79 -0
- data/lib/hanami/view/scope.rb +189 -0
- data/lib/hanami/view/scope_builder.rb +98 -0
- data/lib/hanami/view/standalone_view.rb +400 -0
- data/lib/hanami/view/tilt/erb.rb +26 -0
- data/lib/hanami/view/tilt/erbse.rb +21 -0
- data/lib/hanami/view/tilt/haml.rb +26 -0
- data/lib/hanami/view/tilt.rb +78 -0
- data/lib/hanami/view/version.rb +5 -5
- data/lib/hanami/view.rb +208 -223
- data/lib/hanami-view.rb +3 -1
- metadata +120 -70
- data/LICENSE.md +0 -22
- data/lib/hanami/layout.rb +0 -190
- data/lib/hanami/presenter.rb +0 -98
- data/lib/hanami/view/configuration.rb +0 -504
- data/lib/hanami/view/dsl.rb +0 -347
- data/lib/hanami/view/escape.rb +0 -225
- data/lib/hanami/view/inheritable.rb +0 -54
- data/lib/hanami/view/rendering/layout_finder.rb +0 -128
- data/lib/hanami/view/rendering/layout_registry.rb +0 -69
- data/lib/hanami/view/rendering/layout_scope.rb +0 -274
- data/lib/hanami/view/rendering/null_layout.rb +0 -52
- data/lib/hanami/view/rendering/null_local.rb +0 -82
- data/lib/hanami/view/rendering/null_template.rb +0 -83
- data/lib/hanami/view/rendering/null_view.rb +0 -26
- data/lib/hanami/view/rendering/options.rb +0 -24
- data/lib/hanami/view/rendering/partial.rb +0 -31
- data/lib/hanami/view/rendering/partial_file.rb +0 -29
- data/lib/hanami/view/rendering/partial_finder.rb +0 -75
- data/lib/hanami/view/rendering/partial_templates_finder.rb +0 -73
- data/lib/hanami/view/rendering/registry.rb +0 -134
- data/lib/hanami/view/rendering/scope.rb +0 -108
- data/lib/hanami/view/rendering/subscope.rb +0 -56
- data/lib/hanami/view/rendering/template.rb +0 -69
- data/lib/hanami/view/rendering/template_finder.rb +0 -55
- data/lib/hanami/view/rendering/template_name.rb +0 -50
- data/lib/hanami/view/rendering/templates_finder.rb +0 -144
- data/lib/hanami/view/rendering/view_finder.rb +0 -37
- data/lib/hanami/view/rendering.rb +0 -294
- data/lib/hanami/view/template.rb +0 -57
metadata
CHANGED
@@ -1,145 +1,194 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hanami-view
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0.alpha3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
8
|
-
|
7
|
+
- Tim Riley
|
8
|
+
- Piotr Solnica
|
9
|
+
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
12
|
+
date: 2021-11-09 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
15
|
+
name: concurrent-ruby
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
16
17
|
requirements:
|
17
18
|
- - "~>"
|
18
19
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
20
|
+
version: '1.0'
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - "~>"
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '1.0'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: dry-configurable
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - "~>"
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0.13'
|
20
35
|
- - ">="
|
21
36
|
- !ruby/object:Gem::Version
|
22
|
-
version:
|
37
|
+
version: 0.13.0
|
23
38
|
type: :runtime
|
24
39
|
prerelease: false
|
25
40
|
version_requirements: !ruby/object:Gem::Requirement
|
26
41
|
requirements:
|
27
42
|
- - "~>"
|
28
43
|
- !ruby/object:Gem::Version
|
29
|
-
version: '
|
44
|
+
version: '0.13'
|
30
45
|
- - ">="
|
31
46
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
47
|
+
version: 0.13.0
|
33
48
|
- !ruby/object:Gem::Dependency
|
34
|
-
name:
|
49
|
+
name: dry-core
|
35
50
|
requirement: !ruby/object:Gem::Requirement
|
36
51
|
requirements:
|
37
52
|
- - "~>"
|
38
53
|
- !ruby/object:Gem::Version
|
39
|
-
version: '
|
54
|
+
version: '0.5'
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: '0.5'
|
40
58
|
type: :runtime
|
41
59
|
prerelease: false
|
42
60
|
version_requirements: !ruby/object:Gem::Requirement
|
43
61
|
requirements:
|
44
62
|
- - "~>"
|
45
63
|
- !ruby/object:Gem::Version
|
46
|
-
version: '
|
64
|
+
version: '0.5'
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0.5'
|
47
68
|
- !ruby/object:Gem::Dependency
|
48
|
-
name:
|
69
|
+
name: dry-inflector
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0.1'
|
75
|
+
type: :runtime
|
76
|
+
prerelease: false
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - "~>"
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0.1'
|
82
|
+
- !ruby/object:Gem::Dependency
|
83
|
+
name: tilt
|
49
84
|
requirement: !ruby/object:Gem::Requirement
|
50
85
|
requirements:
|
86
|
+
- - "~>"
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '2.0'
|
51
89
|
- - ">="
|
52
90
|
- !ruby/object:Gem::Version
|
53
|
-
version:
|
54
|
-
|
91
|
+
version: 2.0.6
|
92
|
+
type: :runtime
|
93
|
+
prerelease: false
|
94
|
+
version_requirements: !ruby/object:Gem::Requirement
|
95
|
+
requirements:
|
96
|
+
- - "~>"
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '2.0'
|
99
|
+
- - ">="
|
55
100
|
- !ruby/object:Gem::Version
|
56
|
-
version:
|
101
|
+
version: 2.0.6
|
102
|
+
- !ruby/object:Gem::Dependency
|
103
|
+
name: bundler
|
104
|
+
requirement: !ruby/object:Gem::Requirement
|
105
|
+
requirements:
|
106
|
+
- - ">="
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: '0'
|
57
109
|
type: :development
|
58
110
|
prerelease: false
|
59
111
|
version_requirements: !ruby/object:Gem::Requirement
|
60
112
|
requirements:
|
61
113
|
- - ">="
|
62
114
|
- !ruby/object:Gem::Version
|
63
|
-
version: '
|
64
|
-
- - "<"
|
65
|
-
- !ruby/object:Gem::Version
|
66
|
-
version: '3'
|
115
|
+
version: '0'
|
67
116
|
- !ruby/object:Gem::Dependency
|
68
|
-
name:
|
117
|
+
name: rake
|
69
118
|
requirement: !ruby/object:Gem::Requirement
|
70
119
|
requirements:
|
71
|
-
- - "
|
120
|
+
- - ">="
|
72
121
|
- !ruby/object:Gem::Version
|
73
|
-
version: '
|
122
|
+
version: '0'
|
74
123
|
type: :development
|
75
124
|
prerelease: false
|
76
125
|
version_requirements: !ruby/object:Gem::Requirement
|
77
126
|
requirements:
|
78
|
-
- - "
|
127
|
+
- - ">="
|
79
128
|
- !ruby/object:Gem::Version
|
80
|
-
version: '
|
129
|
+
version: '0'
|
81
130
|
- !ruby/object:Gem::Dependency
|
82
|
-
name:
|
131
|
+
name: rspec
|
83
132
|
requirement: !ruby/object:Gem::Requirement
|
84
133
|
requirements:
|
85
|
-
- - "
|
134
|
+
- - ">="
|
86
135
|
- !ruby/object:Gem::Version
|
87
|
-
version: '
|
136
|
+
version: '0'
|
88
137
|
type: :development
|
89
138
|
prerelease: false
|
90
139
|
version_requirements: !ruby/object:Gem::Requirement
|
91
140
|
requirements:
|
92
|
-
- - "
|
141
|
+
- - ">="
|
93
142
|
- !ruby/object:Gem::Version
|
94
|
-
version: '
|
95
|
-
description:
|
143
|
+
version: '0'
|
144
|
+
description: A complete, standalone view rendering system that gives you everything
|
145
|
+
you need to write well-factored view code
|
96
146
|
email:
|
97
|
-
-
|
147
|
+
- tim@icelab.com.au
|
148
|
+
- piotr.solnica@gmail.com
|
98
149
|
executables: []
|
99
150
|
extensions: []
|
100
151
|
extra_rdoc_files: []
|
101
152
|
files:
|
102
153
|
- CHANGELOG.md
|
103
|
-
- LICENSE
|
154
|
+
- LICENSE
|
104
155
|
- README.md
|
105
156
|
- hanami-view.gemspec
|
106
157
|
- lib/hanami-view.rb
|
107
|
-
- lib/hanami/layout.rb
|
108
|
-
- lib/hanami/presenter.rb
|
109
158
|
- lib/hanami/view.rb
|
110
|
-
- lib/hanami/view/
|
111
|
-
- lib/hanami/view/
|
159
|
+
- lib/hanami/view/application_configuration.rb
|
160
|
+
- lib/hanami/view/application_context.rb
|
161
|
+
- lib/hanami/view/application_view.rb
|
162
|
+
- lib/hanami/view/context.rb
|
163
|
+
- lib/hanami/view/context_helpers/content_helpers.rb
|
164
|
+
- lib/hanami/view/decorated_attributes.rb
|
112
165
|
- lib/hanami/view/errors.rb
|
113
|
-
- lib/hanami/view/
|
114
|
-
- lib/hanami/view/
|
115
|
-
- lib/hanami/view/
|
116
|
-
- lib/hanami/view/
|
117
|
-
- lib/hanami/view/
|
118
|
-
- lib/hanami/view/
|
119
|
-
- lib/hanami/view/
|
120
|
-
- lib/hanami/view/
|
121
|
-
- lib/hanami/view/
|
122
|
-
- lib/hanami/view/
|
123
|
-
- lib/hanami/view/
|
124
|
-
- lib/hanami/view/
|
125
|
-
- lib/hanami/view/
|
126
|
-
- lib/hanami/view/
|
127
|
-
- lib/hanami/view/
|
128
|
-
- lib/hanami/view/
|
129
|
-
- lib/hanami/view/rendering/scope.rb
|
130
|
-
- lib/hanami/view/rendering/subscope.rb
|
131
|
-
- lib/hanami/view/rendering/template.rb
|
132
|
-
- lib/hanami/view/rendering/template_finder.rb
|
133
|
-
- lib/hanami/view/rendering/template_name.rb
|
134
|
-
- lib/hanami/view/rendering/templates_finder.rb
|
135
|
-
- lib/hanami/view/rendering/view_finder.rb
|
136
|
-
- lib/hanami/view/template.rb
|
166
|
+
- lib/hanami/view/exposure.rb
|
167
|
+
- lib/hanami/view/exposures.rb
|
168
|
+
- lib/hanami/view/part.rb
|
169
|
+
- lib/hanami/view/part_builder.rb
|
170
|
+
- lib/hanami/view/path.rb
|
171
|
+
- lib/hanami/view/render_environment.rb
|
172
|
+
- lib/hanami/view/render_environment_missing.rb
|
173
|
+
- lib/hanami/view/rendered.rb
|
174
|
+
- lib/hanami/view/renderer.rb
|
175
|
+
- lib/hanami/view/scope.rb
|
176
|
+
- lib/hanami/view/scope_builder.rb
|
177
|
+
- lib/hanami/view/standalone_view.rb
|
178
|
+
- 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
|
137
182
|
- lib/hanami/view/version.rb
|
138
|
-
homepage:
|
183
|
+
homepage: https://dry-rb.org/gems/hanami-view
|
139
184
|
licenses:
|
140
185
|
- MIT
|
141
|
-
metadata:
|
142
|
-
|
186
|
+
metadata:
|
187
|
+
allowed_push_host: https://rubygems.org
|
188
|
+
changelog_uri: https://github.com/hanami/view/blob/main/CHANGELOG.md
|
189
|
+
source_code_uri: https://github.com/hanami/view
|
190
|
+
bug_tracker_uri: https://github.com/hanami/view/issues
|
191
|
+
post_install_message:
|
143
192
|
rdoc_options: []
|
144
193
|
require_paths:
|
145
194
|
- lib
|
@@ -147,15 +196,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
147
196
|
requirements:
|
148
197
|
- - ">="
|
149
198
|
- !ruby/object:Gem::Version
|
150
|
-
version: 2.
|
199
|
+
version: 2.4.0
|
151
200
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
152
201
|
requirements:
|
153
|
-
- - "
|
202
|
+
- - ">"
|
154
203
|
- !ruby/object:Gem::Version
|
155
|
-
version:
|
204
|
+
version: 1.3.1
|
156
205
|
requirements: []
|
157
|
-
rubygems_version: 3.
|
158
|
-
signing_key:
|
206
|
+
rubygems_version: 3.2.3
|
207
|
+
signing_key:
|
159
208
|
specification_version: 4
|
160
|
-
summary:
|
209
|
+
summary: A complete, standalone view rendering system that gives you everything you
|
210
|
+
need to write well-factored view code
|
161
211
|
test_files: []
|
data/LICENSE.md
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
Copyright (c) 2014-2017 Luca Guidi
|
2
|
-
|
3
|
-
MIT License
|
4
|
-
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
-
a copy of this software and associated documentation files (the
|
7
|
-
"Software"), to deal in the Software without restriction, including
|
8
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
-
permit persons to whom the Software is furnished to do so, subject to
|
11
|
-
the following conditions:
|
12
|
-
|
13
|
-
The above copyright notice and this permission notice shall be
|
14
|
-
included in all copies or substantial portions of the Software.
|
15
|
-
|
16
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
-
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/lib/hanami/layout.rb
DELETED
@@ -1,190 +0,0 @@
|
|
1
|
-
require 'hanami/utils/class_attribute'
|
2
|
-
require 'hanami/view/rendering/layout_registry'
|
3
|
-
require 'hanami/view/rendering/layout_scope'
|
4
|
-
require 'hanami/view/rendering/null_layout'
|
5
|
-
require 'hanami/view/rendering/null_view'
|
6
|
-
|
7
|
-
module Hanami
|
8
|
-
# Layout
|
9
|
-
#
|
10
|
-
# @since 0.1.0
|
11
|
-
#
|
12
|
-
# @see Hanami::Layout::ClassMethods
|
13
|
-
module Layout
|
14
|
-
# Register a layout
|
15
|
-
#
|
16
|
-
# @api private
|
17
|
-
# @since 0.1.0
|
18
|
-
#
|
19
|
-
# @example
|
20
|
-
# require 'hanami/view'
|
21
|
-
#
|
22
|
-
# class ApplicationLayout
|
23
|
-
# include Hanami::Layout
|
24
|
-
# end
|
25
|
-
def self.included(base)
|
26
|
-
conf = Hanami::View::Configuration.for(base)
|
27
|
-
conf.add_layout(base)
|
28
|
-
|
29
|
-
base.class_eval do
|
30
|
-
extend Hanami::View::Dsl.dup
|
31
|
-
extend ClassMethods
|
32
|
-
|
33
|
-
include Utils::ClassAttribute
|
34
|
-
class_attribute :configuration
|
35
|
-
|
36
|
-
self.configuration = conf.duplicate
|
37
|
-
end
|
38
|
-
|
39
|
-
conf.copy!(base)
|
40
|
-
end
|
41
|
-
|
42
|
-
# Class level API
|
43
|
-
#
|
44
|
-
# @since 0.1.0
|
45
|
-
module ClassMethods
|
46
|
-
# Template name suffix
|
47
|
-
#
|
48
|
-
# @api private
|
49
|
-
# @since 0.1.0
|
50
|
-
#
|
51
|
-
# @see Hanami::Layout::ClassMethods#suffix
|
52
|
-
# @see Hanami::Layout::ClassMethods#template
|
53
|
-
SUFFIX = '_layout'.freeze
|
54
|
-
|
55
|
-
# A registry that holds all the registered layouts.
|
56
|
-
#
|
57
|
-
# @api private
|
58
|
-
# @since 0.1.0
|
59
|
-
#
|
60
|
-
# @see Hanami::View::Rendering::LayoutRegistry
|
61
|
-
def registry
|
62
|
-
@registry ||= View::Rendering::LayoutRegistry.new(self)
|
63
|
-
end
|
64
|
-
|
65
|
-
# Template name
|
66
|
-
#
|
67
|
-
# @api private
|
68
|
-
# @since 0.1.0
|
69
|
-
#
|
70
|
-
# @see Hanami::Layout::ClassMethods#SUFFIX
|
71
|
-
# @see Hanami::Layout::ClassMethods#suffix
|
72
|
-
#
|
73
|
-
# @example
|
74
|
-
# # Given a template 'templates/application.html.erb'
|
75
|
-
#
|
76
|
-
# class ApplicationLayout
|
77
|
-
# include Hanami::Layout
|
78
|
-
# end
|
79
|
-
#
|
80
|
-
# ApplicationLayout.template # => 'application'
|
81
|
-
def template
|
82
|
-
super.sub(suffix, '')
|
83
|
-
end
|
84
|
-
|
85
|
-
# Template name suffix
|
86
|
-
#
|
87
|
-
# @api private
|
88
|
-
# @since 0.1.0
|
89
|
-
#
|
90
|
-
# @see Hanami::Layout::ClassMethods#SUFFIX
|
91
|
-
# @see Hanami::Layout::ClassMethods#template
|
92
|
-
def suffix
|
93
|
-
SUFFIX
|
94
|
-
end
|
95
|
-
|
96
|
-
protected
|
97
|
-
|
98
|
-
# Loading mechanism hook.
|
99
|
-
#
|
100
|
-
# @api private
|
101
|
-
# @since 0.1.0
|
102
|
-
#
|
103
|
-
# @see Hanami::View.load!
|
104
|
-
def load!
|
105
|
-
load_registry!
|
106
|
-
configuration.freeze
|
107
|
-
end
|
108
|
-
|
109
|
-
private
|
110
|
-
|
111
|
-
# @api private
|
112
|
-
def load_registry!
|
113
|
-
@registry = nil
|
114
|
-
registry.freeze
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
# Initialize a layout
|
119
|
-
#
|
120
|
-
# @param scope [Hanami::View::Rendering::Scope,::Hash] view rendering scope.
|
121
|
-
# Optionally a scope can be expressed as a Ruby `::Hash`, but it MUST contain
|
122
|
-
# the `:format` key, to specify which template to render.
|
123
|
-
# @option scope [Symbol] :format the format to render (e.g. `:html`, `:xml`, `:json`)
|
124
|
-
# This is mandatory only if a `:Hash` is passed as `scope`.
|
125
|
-
#
|
126
|
-
# @param rendered [String] the output of the view rendering process
|
127
|
-
#
|
128
|
-
# @api private
|
129
|
-
# @since 0.1.0
|
130
|
-
#
|
131
|
-
# @see Hanami::View::Rendering#render
|
132
|
-
def initialize(scope, rendered)
|
133
|
-
# NOTE: This complex data transformation is due to a combination of a bug and the intent of maintaing backward compat (SemVer).
|
134
|
-
# See https://github.com/hanami/view/pull/156
|
135
|
-
s, r = *case scope
|
136
|
-
when ::Hash
|
137
|
-
[Hanami::View::Rendering::Scope.new(Hanami::View::Rendering::NullView, scope), rendered]
|
138
|
-
when Hanami::View::Template
|
139
|
-
[Hanami::View::Rendering::Scope.new(Hanami::View::Rendering::NullView, rendered.merge(format: scope.format)), ""]
|
140
|
-
else
|
141
|
-
[scope, rendered]
|
142
|
-
end
|
143
|
-
|
144
|
-
@scope = View::Rendering::LayoutScope.new(self, s)
|
145
|
-
@rendered = r
|
146
|
-
end
|
147
|
-
|
148
|
-
# Render the layout
|
149
|
-
#
|
150
|
-
# @return [String] the output of the rendering process
|
151
|
-
#
|
152
|
-
# @api private
|
153
|
-
# @since 0.1.0
|
154
|
-
#
|
155
|
-
# @see Hanami::View::Rendering#render
|
156
|
-
def render
|
157
|
-
template.render(@scope, &Proc.new{@rendered})
|
158
|
-
end
|
159
|
-
|
160
|
-
# It tries to invoke a method for the view or a local for the given key.
|
161
|
-
# If the lookup fails, it returns a null object.
|
162
|
-
#
|
163
|
-
# @return [Object,Hanami::View::Rendering::NullLocal] the returning value
|
164
|
-
#
|
165
|
-
# @since 1.1.0
|
166
|
-
#
|
167
|
-
# @example Safe method navigation
|
168
|
-
# class ApplicationLayout
|
169
|
-
# include Hanami::Layout
|
170
|
-
#
|
171
|
-
# def render_flash
|
172
|
-
# return if local(:flash).nil?
|
173
|
-
#
|
174
|
-
# # ...
|
175
|
-
# end
|
176
|
-
# end
|
177
|
-
def local(key)
|
178
|
-
@scope.local(key)
|
179
|
-
end
|
180
|
-
|
181
|
-
protected
|
182
|
-
# The template for the current format
|
183
|
-
#
|
184
|
-
# @api private
|
185
|
-
# @since 0.1.0
|
186
|
-
def template
|
187
|
-
self.class.registry.resolve({format: @scope.format})
|
188
|
-
end
|
189
|
-
end
|
190
|
-
end
|
data/lib/hanami/presenter.rb
DELETED
@@ -1,98 +0,0 @@
|
|
1
|
-
require 'hanami/view/escape'
|
2
|
-
|
3
|
-
module Hanami
|
4
|
-
# Presenter pattern implementation
|
5
|
-
#
|
6
|
-
# It delegates to the wrapped object the missing method invocations.
|
7
|
-
#
|
8
|
-
# The output of concrete and delegated methods is escaped as XSS prevention.
|
9
|
-
#
|
10
|
-
# @since 0.1.0
|
11
|
-
#
|
12
|
-
# @example Basic usage
|
13
|
-
# require 'hanami/view'
|
14
|
-
#
|
15
|
-
# class Map
|
16
|
-
# attr_reader :locations
|
17
|
-
#
|
18
|
-
# def initialize(locations)
|
19
|
-
# @locations = locations
|
20
|
-
# end
|
21
|
-
#
|
22
|
-
# def location_names
|
23
|
-
# @locations.join(', ')
|
24
|
-
# end
|
25
|
-
# end
|
26
|
-
#
|
27
|
-
# class MapPresenter
|
28
|
-
# include Hanami::Presenter
|
29
|
-
#
|
30
|
-
# def count
|
31
|
-
# locations.count
|
32
|
-
# end
|
33
|
-
#
|
34
|
-
# def location_names
|
35
|
-
# super.upcase
|
36
|
-
# end
|
37
|
-
#
|
38
|
-
# def inspect_object
|
39
|
-
# @object.inspect
|
40
|
-
# end
|
41
|
-
# end
|
42
|
-
#
|
43
|
-
# map = Map.new(['Rome', 'Boston'])
|
44
|
-
# presenter = MapPresenter.new(map)
|
45
|
-
#
|
46
|
-
# # access a map method
|
47
|
-
# puts presenter.locations # => ['Rome', 'Boston']
|
48
|
-
#
|
49
|
-
# # access presenter concrete methods
|
50
|
-
# puts presenter.count # => 1
|
51
|
-
#
|
52
|
-
# # uses super to access original object implementation
|
53
|
-
# puts presenter.location_names # => 'ROME, BOSTON'
|
54
|
-
#
|
55
|
-
# # it has private access to the original object
|
56
|
-
# puts presenter.inspect_object # => #<Map:0x007fdeada0b2f0 @locations=["Rome", "Boston"]>
|
57
|
-
#
|
58
|
-
# @example Escape
|
59
|
-
# require 'hanami/view'
|
60
|
-
#
|
61
|
-
# User = Struct.new(:first_name, :last_name)
|
62
|
-
#
|
63
|
-
# class UserPresenter
|
64
|
-
# include Hanami::Presenter
|
65
|
-
#
|
66
|
-
# def full_name
|
67
|
-
# [first_name, last_name].join(' ')
|
68
|
-
# end
|
69
|
-
#
|
70
|
-
# def raw_first_name
|
71
|
-
# _raw first_name
|
72
|
-
# end
|
73
|
-
# end
|
74
|
-
#
|
75
|
-
# first_name = '<script>alert('xss')</script>'
|
76
|
-
#
|
77
|
-
# user = User.new(first_name, nil)
|
78
|
-
# presenter = UserPresenter.new(user)
|
79
|
-
#
|
80
|
-
# presenter.full_name
|
81
|
-
# # => "<script>alert('xss')</script>"
|
82
|
-
#
|
83
|
-
# presenter.raw_full_name
|
84
|
-
# # => "<script>alert('xss')</script>"
|
85
|
-
module Presenter
|
86
|
-
# Inject escape logic into the given class.
|
87
|
-
#
|
88
|
-
# @since 0.4.0
|
89
|
-
# @api private
|
90
|
-
#
|
91
|
-
# @see Hanami::View::Escape
|
92
|
-
def self.included(base)
|
93
|
-
base.class_eval do
|
94
|
-
include ::Hanami::View::Escape::Presentable
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|