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