hanami-view 0.6.0 → 0.6.1
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 +7 -0
- data/hanami-view.gemspec +1 -1
- data/lib/hanami/view/configuration.rb +33 -0
- data/lib/hanami/view/rendering/partial_file.rb +19 -0
- data/lib/hanami/view/rendering/partial_finder.rb +13 -8
- data/lib/hanami/view/rendering/partial_templates_finder.rb +70 -0
- data/lib/hanami/view/template.rb +3 -1
- data/lib/hanami/view/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2814a76015d67720fc54b6aab3acb54cce7f65a4
|
4
|
+
data.tar.gz: db8a5cb5b152d93e837d7a3bddd7e755d85db277
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2132c9ae9e477ee2f99bdd71e7596946bb4fa69d1d6dde525b325df11e2859bfe0186f5b972a0942c21acb5f4e1d7e64b2c7d84ca761600f2af29e78db7490d1
|
7
|
+
data.tar.gz: b9de16d5e18f760165b367b042b69a0a21a079d61d9b894512295f9fd5192cd65a5df9c4d243242a59352267fa818f04005d52f76c5cf918200c943740fde20c
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
# Hanami::View
|
2
2
|
View layer for Hanami
|
3
3
|
|
4
|
+
## v0.6.1 - 2016-02-05
|
5
|
+
### Changed
|
6
|
+
- [Steve Hook] Preload partial templates in order to boost performances for partials rendering (2x faster)
|
7
|
+
|
8
|
+
### Fixed
|
9
|
+
- [Luca Guidi] Disable Slim autoescape to use `Hanami::View`'s feature
|
10
|
+
|
4
11
|
## v0.6.0 - 2016-01-22
|
5
12
|
### Changed
|
6
13
|
- [Luca Guidi] Renamed the project
|
data/hanami-view.gemspec
CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
spec.required_ruby_version = '>= 2.0.0'
|
21
21
|
|
22
|
-
spec.add_runtime_dependency 'tilt',
|
22
|
+
spec.add_runtime_dependency 'tilt', '~> 2.0', '>= 2.0.1'
|
23
23
|
spec.add_runtime_dependency 'hanami-utils', '~> 0.7'
|
24
24
|
|
25
25
|
spec.add_development_dependency 'bundler', '~> 1.5'
|
@@ -4,6 +4,7 @@ require 'hanami/utils/kernel'
|
|
4
4
|
require 'hanami/utils/string'
|
5
5
|
require 'hanami/utils/load_paths'
|
6
6
|
require 'hanami/view/rendering/layout_finder'
|
7
|
+
require 'hanami/view/rendering/partial_templates_finder'
|
7
8
|
|
8
9
|
module Hanami
|
9
10
|
module View
|
@@ -39,6 +40,7 @@ module Hanami
|
|
39
40
|
attr_reader :views
|
40
41
|
attr_reader :layouts
|
41
42
|
attr_reader :modules
|
43
|
+
attr_reader :partials
|
42
44
|
|
43
45
|
# Return the original configuration of the framework instance associated
|
44
46
|
# with the given class.
|
@@ -418,9 +420,39 @@ module Hanami
|
|
418
420
|
def load!
|
419
421
|
views.each { |v| v.__send__(:load!) }
|
420
422
|
layouts.each { |l| l.__send__(:load!) }
|
423
|
+
load_partials!
|
421
424
|
freeze
|
422
425
|
end
|
423
426
|
|
427
|
+
# Load partials for each partial template file found under the
|
428
|
+
# given load paths
|
429
|
+
#
|
430
|
+
# @since x.x.x
|
431
|
+
# @api private
|
432
|
+
def load_partials!
|
433
|
+
Hanami::View::Rendering::PartialTemplatesFinder.new(self).find.each do |partial|
|
434
|
+
add_partial(partial)
|
435
|
+
end
|
436
|
+
end
|
437
|
+
|
438
|
+
# Load partials for each partial template file found under the
|
439
|
+
# given load paths
|
440
|
+
#
|
441
|
+
# @since x.x.x
|
442
|
+
# @api private
|
443
|
+
def find_partial(relative_partial_path, template_name, format)
|
444
|
+
partials_for_view = partials.has_key?(relative_partial_path) ? partials[relative_partial_path] : partials[template_name]
|
445
|
+
partials_for_view ? partials_for_view[format.to_sym] : nil
|
446
|
+
end
|
447
|
+
|
448
|
+
# Add a partial to the registry
|
449
|
+
#
|
450
|
+
# @since x.x.x
|
451
|
+
# @api private
|
452
|
+
def add_partial(partial)
|
453
|
+
@partials[partial.key][partial.format.to_sym] = partial.template
|
454
|
+
end
|
455
|
+
|
424
456
|
# Reset all the values to the defaults
|
425
457
|
#
|
426
458
|
# @since 0.2.0
|
@@ -429,6 +461,7 @@ module Hanami
|
|
429
461
|
root DEFAULT_ROOT
|
430
462
|
default_encoding DEFAULT_ENCODING
|
431
463
|
|
464
|
+
@partials = Hash.new { |h, k| h[k] = Hash.new }
|
432
465
|
@views = Set.new
|
433
466
|
@layouts = Set.new
|
434
467
|
@load_paths = Utils::LoadPaths.new(root)
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Hanami
|
2
|
+
module View
|
3
|
+
module Rendering
|
4
|
+
# @since x.x.x
|
5
|
+
# @api private
|
6
|
+
class PartialFile
|
7
|
+
attr_reader :key, :format, :template
|
8
|
+
|
9
|
+
# @since x.x.x
|
10
|
+
# @api private
|
11
|
+
def initialize(key, format, template)
|
12
|
+
@key = key
|
13
|
+
@format = format
|
14
|
+
@template = template
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -23,9 +23,10 @@ module Hanami
|
|
23
23
|
PREFIX = '_'.freeze
|
24
24
|
|
25
25
|
# Find a template for a partial. Initially it will look for the
|
26
|
-
# partial template
|
27
|
-
#
|
28
|
-
# the view
|
26
|
+
# partial template in the framework configuration where it may
|
27
|
+
# already be cached. Failing that it will look under the
|
28
|
+
# directory of the parent directory view template, if not found
|
29
|
+
# it will search recursively from the view root.
|
29
30
|
#
|
30
31
|
# @return [Hanami::View::Template] the requested template
|
31
32
|
#
|
@@ -34,14 +35,18 @@ module Hanami
|
|
34
35
|
# @since 0.4.3
|
35
36
|
# @api private
|
36
37
|
def find
|
37
|
-
|
38
|
-
|
39
|
-
else
|
40
|
-
super
|
41
|
-
end
|
38
|
+
Hanami::View::Configuration.for(@view).
|
39
|
+
find_partial(relative_partial_path, template_name, format)
|
42
40
|
end
|
43
41
|
|
44
42
|
protected
|
43
|
+
|
44
|
+
# @since x.x.x
|
45
|
+
# @api private
|
46
|
+
def relative_partial_path
|
47
|
+
[view_template_dir, template_name].join(separator)
|
48
|
+
end
|
49
|
+
|
45
50
|
# @since 0.4.3
|
46
51
|
# @api private
|
47
52
|
def partial_template_under_view_path
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'hanami/view/template'
|
2
|
+
require 'hanami/view/rendering/partial_file'
|
3
|
+
|
4
|
+
module Hanami
|
5
|
+
module View
|
6
|
+
module Rendering
|
7
|
+
# Find partial templates in the file system
|
8
|
+
#
|
9
|
+
# @api private
|
10
|
+
# @since x.x.x
|
11
|
+
#
|
12
|
+
# @see View::Template
|
13
|
+
class PartialTemplatesFinder
|
14
|
+
# Search pattern for partial file names
|
15
|
+
#
|
16
|
+
# @api private
|
17
|
+
# @since x.x.x
|
18
|
+
PARTIAL_PATTERN = '_*'.freeze
|
19
|
+
|
20
|
+
# @api private
|
21
|
+
# @since x.x.x
|
22
|
+
PARTIAL_PARTS_SEPARATOR = '.'.freeze
|
23
|
+
|
24
|
+
attr_reader :configuration
|
25
|
+
|
26
|
+
# Initializes a new PartialTemplatesFinder
|
27
|
+
#
|
28
|
+
# @param configuration [Configuration] the configuration object
|
29
|
+
#
|
30
|
+
# @since x.x.x
|
31
|
+
def initialize(configuration)
|
32
|
+
@configuration = configuration
|
33
|
+
end
|
34
|
+
|
35
|
+
# Find partials under the given path
|
36
|
+
#
|
37
|
+
# @return [Array] array of PartialFinder objects
|
38
|
+
#
|
39
|
+
# @since x.x.x
|
40
|
+
def find
|
41
|
+
_find_partials(configuration.root).map do |template|
|
42
|
+
partial_path, partial_base_name = Pathname(template).relative_path_from(configuration.root).split
|
43
|
+
partial_base_parts = partial_base_name.to_s.split(PARTIAL_PARTS_SEPARATOR)
|
44
|
+
|
45
|
+
PartialFile.new(
|
46
|
+
"#{partial_path}#{::File::SEPARATOR}#{partial_base_parts[0]}",
|
47
|
+
partial_base_parts[1],
|
48
|
+
View::Template.new(template, configuration.default_encoding)
|
49
|
+
)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
# Find partial template file paths
|
56
|
+
#
|
57
|
+
# @param path [String] the path under which we should search for partials
|
58
|
+
#
|
59
|
+
# @return [Array] an array of strings for each matching partial template file found
|
60
|
+
#
|
61
|
+
# @since x.x.x
|
62
|
+
# @api private
|
63
|
+
def _find_partials(path)
|
64
|
+
Dir.glob("#{ [path, TemplatesFinder::RECURSIVE, PARTIAL_PATTERN].join(::File::SEPARATOR) }.#{TemplatesFinder::FORMAT}.#{TemplatesFinder::ENGINES}")
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
data/lib/hanami/view/template.rb
CHANGED
@@ -7,7 +7,9 @@ module Hanami
|
|
7
7
|
# @since 0.1.0
|
8
8
|
class Template
|
9
9
|
def initialize(template, encoding = Encoding::UTF_8)
|
10
|
-
|
10
|
+
# NOTE disable_escape: true is for Slim compatibility
|
11
|
+
# See https://github.com/hanami/assets/issues/36
|
12
|
+
@_template = Tilt.new(template, nil, default_encoding: encoding, disable_escape: true)
|
11
13
|
end
|
12
14
|
|
13
15
|
# Returns the format that the template handles.
|
data/lib/hanami/view/version.rb
CHANGED
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: 0.6.
|
4
|
+
version: 0.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Luca Guidi
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2016-
|
13
|
+
date: 2016-02-05 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: tilt
|
@@ -117,7 +117,9 @@ files:
|
|
117
117
|
- lib/hanami/view/rendering/null_layout.rb
|
118
118
|
- lib/hanami/view/rendering/null_template.rb
|
119
119
|
- lib/hanami/view/rendering/partial.rb
|
120
|
+
- lib/hanami/view/rendering/partial_file.rb
|
120
121
|
- lib/hanami/view/rendering/partial_finder.rb
|
122
|
+
- lib/hanami/view/rendering/partial_templates_finder.rb
|
121
123
|
- lib/hanami/view/rendering/registry.rb
|
122
124
|
- lib/hanami/view/rendering/scope.rb
|
123
125
|
- lib/hanami/view/rendering/template.rb
|