hanami-view 1.2.0 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d4c5c33349b33efe1572d221dfd54d860ae04ce1b873a47e5fdfe9612af46387
4
- data.tar.gz: d60517a35dca1f695b63de1a046f0e15b2af822111cf2b5d33c07ac5c0370781
3
+ metadata.gz: 5bd8111fc0f2c00a03f7a4020932a2f35f672e8fd93a7db28865fb8c4116053b
4
+ data.tar.gz: 4b3b34acf3bc9dd63f58866d5c023063c94826add5d8ad54baa522030ee5185b
5
5
  SHA512:
6
- metadata.gz: b2cfcf0fe4ea4c177f5b6ecb9e2d4915af6643d6604e4365894e36e70f829105b87cdc09a3eb1bc0730f7b3af6e3fde38fdb94ae196a80cb9f41563acf4e5ce8
7
- data.tar.gz: c2e700dba8c01b4529d2993ebfa9a3587190f7d2f600400de0ba5209e9dc7490d12cfbea2cd03892d28af8448489f4064c18e4a4bc093b3c6411ba5b9a5a3ed9
6
+ metadata.gz: a66c97948ce7e2838e5a9772157ac9850c81f382caf278dc62a1e2123ca186d802111ee6699199a0d659433caeed868379be4a63626fd9bf3ed1c8c6a74264de
7
+ data.tar.gz: 774d9cb89c4300314420042be8873cfc463e9fc2858ae2d7fcc2676ac6e5176d6fc53883b77ddd565bbc5c17a880982b76af6820e5aecfa254fa43c4a379da7d
@@ -1,6 +1,14 @@
1
1
  # Hanami::View
2
2
  View layer for Hanami
3
3
 
4
+ ## v1.2.1 - 2018-10-16
5
+ ### Added
6
+ - [Luca Guidi] Introduced new, backward compatible, signature to render a layout for testing purposes (eg. `ApplicationLayout.new({ format: :html }, "contents").render`)
7
+
8
+ ### Fixed
9
+ - [Luca Guidi] Ensure layout to be rendered when using HAML 5
10
+ - [Luca Guidi] Ensure to raise `NoMethodError` when an unknown method is invoked by a view/template
11
+
4
12
  ## v1.2.0 - 2018-04-06
5
13
 
6
14
  ## v1.2.0.rc2 - 2018-04-06
data/README.md CHANGED
@@ -16,12 +16,12 @@ Like all the other Hanami components, it can be used as a standalone framework o
16
16
 
17
17
  ## Status
18
18
 
19
- [![Gem Version](http://img.shields.io/gem/v/hanami-view.svg)](https://badge.fury.io/rb/hanami-view)
20
- [![Build Status](http://img.shields.io/travis/hanami/view/master.svg)](https://travis-ci.org/hanami/view?branch=master)
21
- [![Coverage](http://img.shields.io/coveralls/hanami/view/master.svg)](https://coveralls.io/r/hanami/view)
22
- [![Code Climate](http://img.shields.io/codeclimate/github/hanami/view.svg)](https://codeclimate.com/github/hanami/view)
23
- [![Dependencies](http://img.shields.io/gemnasium/hanami/view.svg)](https://gemnasium.com/hanami/view)
24
- [![Inline docs](http://inch-ci.org/github/hanami/view.svg?branch=master)](http://inch-ci.org/github/hanami/view)
19
+ [![Gem Version](https://badge.fury.io/rb/hanami-view.svg)](https://badge.fury.io/rb/hanami-view)
20
+ [![TravisCI](https://travis-ci.org/hanami/view.svg?branch=master)](https://travis-ci.org/hanami/view)
21
+ [![CircleCI](https://circleci.com/gh/hanami/view/tree/master.svg?style=svg)](https://circleci.com/gh/hanami/view/tree/master)
22
+ [![Test Coverage](https://codecov.io/gh/hanami/view/branch/master/graph/badge.svg)](https://codecov.io/gh/hanami/view)
23
+ [![Depfu](https://badges.depfu.com/badges/4f5c8868d047d206f33893bc9194812d/overview.svg)](https://depfu.com/github/hanami/view?project=Bundler)
24
+ [![Inline Docs](http://inch-ci.org/github/hanami/view.svg)](http://inch-ci.org/github/hanami/view)
25
25
 
26
26
  ## Contact
27
27
 
@@ -2,6 +2,7 @@ require 'hanami/utils/class_attribute'
2
2
  require 'hanami/view/rendering/layout_registry'
3
3
  require 'hanami/view/rendering/layout_scope'
4
4
  require 'hanami/view/rendering/null_layout'
5
+ require 'hanami/view/rendering/null_view'
5
6
 
6
7
  module Hanami
7
8
  # Layout
@@ -116,7 +117,12 @@ module Hanami
116
117
 
117
118
  # Initialize a layout
118
119
  #
119
- # @param scope [Hanami::View::Rendering::Scope] view rendering scope
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
+ #
120
126
  # @param rendered [String] the output of the view rendering process
121
127
  #
122
128
  # @api private
@@ -124,7 +130,19 @@ module Hanami
124
130
  #
125
131
  # @see Hanami::View::Rendering#render
126
132
  def initialize(scope, rendered)
127
- @scope, @rendered = View::Rendering::LayoutScope.new(self, 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
128
146
  end
129
147
 
130
148
  # Render the layout
@@ -196,7 +196,7 @@ module Hanami
196
196
  # view = IndexView.new(template, {article: article})
197
197
  #
198
198
  # view.article # => #<Article:0x007fb0bbd3b6e8>
199
- def method_missing(m)
199
+ def method_missing(m, *)
200
200
  @scope.__send__ m
201
201
  end
202
202
  end
@@ -0,0 +1,26 @@
1
+ module Hanami
2
+ module View
3
+ module Rendering
4
+ # Null Object pattern for view
5
+ #
6
+ # It's used when a layout is rendered direcly for testing purposes
7
+ #
8
+ # @api private
9
+ # @since 1.2.1
10
+ class NullView
11
+ # Render the layout template
12
+ #
13
+ # @return [String] an empty string
14
+ #
15
+ # @api private
16
+ # @since 1.2.1
17
+ #
18
+ # @see Hanami::Layout#render
19
+ # @see Hanami::View::Rendering#render
20
+ def render
21
+ ""
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -12,9 +12,10 @@ module Hanami
12
12
  # @api private
13
13
  def self.build(options, locals, format)
14
14
  options.dup.tap do |opts|
15
- opts[:format] = format
15
+ opts[:format] ||= format
16
16
  opts[:locals] = locals
17
- opts[:locals].merge!(options.fetch(:locals) { ::Hash.new }).merge!(format: format)
17
+ opts[:locals].merge!(options.fetch(:locals) { ::Hash.new })
18
+ opts[:locals].merge!(format: opts.fetch(:format, format))
18
19
  end
19
20
  end
20
21
  end
@@ -7,9 +7,15 @@ module Hanami
7
7
  # @since 0.1.0
8
8
  class Template
9
9
  def initialize(template, encoding = Encoding::UTF_8)
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)
10
+ options = { default_encoding: encoding }
11
+
12
+ if slim?(template)
13
+ # NOTE disable_escape: true is for Slim compatibility
14
+ # See https://github.com/hanami/assets/issues/36
15
+ options[:disable_escape] = true
16
+ end
17
+
18
+ @_template = Tilt.new(template, nil, options)
13
19
  end
14
20
 
15
21
  # Returns the format that the template handles.
@@ -40,6 +46,12 @@ module Hanami
40
46
  def render(scope, &blk)
41
47
  @_template.render(scope, {}, &blk)
42
48
  end
49
+
50
+ private
51
+
52
+ def slim?(template)
53
+ File.extname(template) == ".slim".freeze
54
+ end
43
55
  end
44
56
  end
45
57
  end
@@ -3,6 +3,6 @@ module Hanami
3
3
  # Defines the version
4
4
  #
5
5
  # @since 0.1.0
6
- VERSION = '1.2.0'.freeze
6
+ VERSION = '1.2.1'.freeze
7
7
  end
8
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hanami-view
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luca Guidi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-11 00:00:00.000000000 Z
11
+ date: 2018-10-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tilt
@@ -113,6 +113,7 @@ files:
113
113
  - lib/hanami/view/rendering/null_layout.rb
114
114
  - lib/hanami/view/rendering/null_local.rb
115
115
  - lib/hanami/view/rendering/null_template.rb
116
+ - lib/hanami/view/rendering/null_view.rb
116
117
  - lib/hanami/view/rendering/options.rb
117
118
  - lib/hanami/view/rendering/partial.rb
118
119
  - lib/hanami/view/rendering/partial_file.rb
@@ -148,7 +149,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
148
149
  version: '0'
149
150
  requirements: []
150
151
  rubyforge_project:
151
- rubygems_version: 2.7.6
152
+ rubygems_version: 2.7.7
152
153
  signing_key:
153
154
  specification_version: 4
154
155
  summary: View layer for Hanami, with a separation between views and templates