erubi 1.4.0 → 1.5.0
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 +6 -0
- data/README.rdoc +14 -13
- data/test/test.rb +1 -152
- metadata +2 -18
- data/lib/erubi/capture.rb +0 -88
- data/lib/tilt/erubi.rb +0 -35
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fd16f88fa55dfb16632b96ad51f1b9d8b4dfcb3a
|
4
|
+
data.tar.gz: 369980088c6de4f7309f53ccbc1f4d77c40569d7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5bea95cdd30ba995ffd760d40131dab30cfbbe0f4dd57c87957c8b8d55cd0a55b2e4c7fd92d692defc1e2d90ae7a0b564462d8c5b48babdd14947c7137be2708
|
7
|
+
data.tar.gz: a0850dc7e918bf33c5e32707f1747cdfa0cb2902f8308be7d4f19d120b006426e9efc5b384fde46c1a2b920d23fa7432a37fdaf08a636928355f0391b03df6b2
|
data/CHANGELOG
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
=== 1.5.0 (2017-01-26)
|
2
|
+
|
3
|
+
* Drop tilt/erubi file, as tilt now ships with Erubi support (jeremyevans)
|
4
|
+
|
5
|
+
* Drop erubi/capture file, Erubi::CaptureEngine support (jeremyevans)
|
6
|
+
|
1
7
|
=== 1.4.0 (2017-01-20)
|
2
8
|
|
3
9
|
* Allow postambles to depend on internal state of engine (jeremyevans)
|
data/README.rdoc
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
= Erubi
|
2
2
|
|
3
|
-
Erubi is a ERB template engine for ruby. It is a simplified fork of Erubis,
|
4
|
-
the following differences:
|
3
|
+
Erubi is a ERB template engine for ruby. It is a simplified fork of Erubis, using
|
4
|
+
the same basic algorithm, with the following differences:
|
5
5
|
|
6
6
|
* Handles postfix conditionals when using escaping (e.g. <tt><%= foo if bar %></tt>)
|
7
7
|
* Supports frozen_string_literal: true in templates via :freeze option
|
@@ -31,21 +31,16 @@ Source code is available on GitHub at https://github.com/jeremyevans/erubi
|
|
31
31
|
|
32
32
|
= Usage
|
33
33
|
|
34
|
-
|
35
|
-
|
36
|
-
require 'tilt/erubi'
|
37
|
-
Tilt.new("filename.erb").render
|
38
|
-
|
39
|
-
Requiring +tilt/erubi+ sets erubi as the default erb/rhtml template processor
|
40
|
-
for tilt. In most cases, you can use Erubi as a replacement for Erubis if
|
41
|
-
you are using tilt.
|
42
|
-
|
43
|
-
You can use the library manually, but it's only useful to get the generated
|
44
|
-
source:
|
34
|
+
Erubi only has built in support for retrieving the generated source for a
|
35
|
+
file:
|
45
36
|
|
46
37
|
require 'erubi'
|
47
38
|
eval(Erubi::Engine.new(File.read('filename.erb')).src)
|
48
39
|
|
40
|
+
Most users are will probably use Erubi via Rails or Tilt. Erubi is the default
|
41
|
+
erb template handler in Tilt 2.0.6+ and will be the default template handler in
|
42
|
+
Rails 5.1+.
|
43
|
+
|
49
44
|
== Capturing
|
50
45
|
|
51
46
|
Erubi does not support capturing block output into the template by default.
|
@@ -63,6 +58,12 @@ and <tt><%==</tt> tags, <tt><%|=</tt> captures by default and
|
|
63
58
|
<tt><%|==</tt> captures and escapes by default, but this can be reversed
|
64
59
|
via the +:escape_capture+ or +:escape+ options.
|
65
60
|
|
61
|
+
To use the capture_end support with tilt:
|
62
|
+
|
63
|
+
require 'tilt'
|
64
|
+
require 'erubi/capture_end'
|
65
|
+
Tilt.new("filename.erb", :engine_class=>Erubi::CaptureEndEngine).render
|
66
|
+
|
66
67
|
= Reporting Bugs
|
67
68
|
|
68
69
|
The bug tracker is located at https://github.com/jeremyevans/erubi/issues
|
data/test/test.rb
CHANGED
@@ -22,9 +22,7 @@ if ENV['COVERAGE']
|
|
22
22
|
end
|
23
23
|
|
24
24
|
require 'erubi'
|
25
|
-
require 'erubi/capture'
|
26
25
|
require 'erubi/capture_end'
|
27
|
-
require 'tilt/erubi'
|
28
26
|
require 'minitest/spec'
|
29
27
|
require 'minitest/autorun'
|
30
28
|
|
@@ -161,88 +159,6 @@ END3
|
|
161
159
|
@a.must_equal 'bar'
|
162
160
|
end
|
163
161
|
|
164
|
-
[['', false], ['=', true]].each do |ind, escape|
|
165
|
-
it "should allow <%|=#{ind} for capturing with CaptureEngine with :escape_capture => #{escape} and :escape => #{escape}" do
|
166
|
-
@options[:bufvar] = '@a'
|
167
|
-
@options[:capture] = true
|
168
|
-
@options[:escape_capture] = escape
|
169
|
-
@options[:escape] = !escape
|
170
|
-
@options[:engine] = ::Erubi::CaptureEngine
|
171
|
-
setup_foo
|
172
|
-
check_output(<<END1, <<END2, <<END3){}
|
173
|
-
<table>
|
174
|
-
<tbody>
|
175
|
-
<%|=#{ind} @foo.bar do %>
|
176
|
-
<tr>
|
177
|
-
<td><%=#{ind} 1 %></td>
|
178
|
-
<td><%=#{ind} '&' %></td>
|
179
|
-
</tr>
|
180
|
-
<% end %>
|
181
|
-
</tbody>
|
182
|
-
</table>
|
183
|
-
END1
|
184
|
-
#{'__erubi = ::Erubi;' unless escape}@a = ::Erubi::Buffer.new; @a << '<table>
|
185
|
-
<tbody>
|
186
|
-
'; @a << ' '; @a.before_append!; @a.append= @foo.bar do @a << '
|
187
|
-
'; @a << ' <tr>
|
188
|
-
<td>'; @a << #{!escape ? '__erubi' : '::Erubi'}.h(( 1 )); @a << '</td>
|
189
|
-
<td>'; @a << #{!escape ? '__erubi' : '::Erubi'}.h(( '&' )); @a << '</td>
|
190
|
-
</tr>
|
191
|
-
'; end
|
192
|
-
@a << ' </tbody>
|
193
|
-
</table>
|
194
|
-
';
|
195
|
-
@a.to_s
|
196
|
-
END2
|
197
|
-
<table>
|
198
|
-
<tbody>
|
199
|
-
A
|
200
|
-
<TR>
|
201
|
-
<TD>1</TD>
|
202
|
-
<TD>&</TD>
|
203
|
-
</TR>
|
204
|
-
B </tbody>
|
205
|
-
</table>
|
206
|
-
END3
|
207
|
-
end
|
208
|
-
end
|
209
|
-
|
210
|
-
[['', true], ['=', false]].each do |ind, escape|
|
211
|
-
it "should allow <%|=#{ind} for capturing with CaptureEngine with :escape => #{escape}" do
|
212
|
-
@options[:bufvar] = '@a'
|
213
|
-
@options[:capture] = true
|
214
|
-
@options[:escape] = escape
|
215
|
-
@options[:engine] = ::Erubi::CaptureEngine
|
216
|
-
setup_foo
|
217
|
-
check_output(<<END1, <<END2, <<END3){}
|
218
|
-
<table>
|
219
|
-
<tbody>
|
220
|
-
<%|=#{ind} @foo.bar do %>
|
221
|
-
<b><%=#{ind} '&' %></b>
|
222
|
-
<% end %>
|
223
|
-
</tbody>
|
224
|
-
</table>
|
225
|
-
END1
|
226
|
-
#{'__erubi = ::Erubi;' if escape}@a = ::Erubi::Buffer.new; @a << '<table>
|
227
|
-
<tbody>
|
228
|
-
'; @a << ' '; @a.before_append!; @a.escape= @foo.bar do @a << '
|
229
|
-
'; @a << ' <b>'; @a << #{escape ? '__erubi' : '::Erubi'}.h(( '&' )); @a << '</b>
|
230
|
-
'; end
|
231
|
-
@a << ' </tbody>
|
232
|
-
</table>
|
233
|
-
';
|
234
|
-
@a.to_s
|
235
|
-
END2
|
236
|
-
<table>
|
237
|
-
<tbody>
|
238
|
-
A
|
239
|
-
<B>&AMP;</B>
|
240
|
-
B </tbody>
|
241
|
-
</table>
|
242
|
-
END3
|
243
|
-
end
|
244
|
-
end
|
245
|
-
|
246
162
|
[['', false], ['=', true]].each do |ind, escape|
|
247
163
|
it "should allow <%|=#{ind} and <%| for capturing with CaptureEndEngine with :escape_capture => #{escape} and :escape => #{!escape}" do
|
248
164
|
@options[:bufvar] = '@a'
|
@@ -284,7 +200,6 @@ END3
|
|
284
200
|
[['', true], ['=', false]].each do |ind, escape|
|
285
201
|
it "should allow <%|=#{ind} and <%| for capturing with CaptureEndEngine when with :escape => #{escape}" do
|
286
202
|
@options[:bufvar] = '@a'
|
287
|
-
@options[:capture] = true
|
288
203
|
@options[:escape] = escape
|
289
204
|
@options[:engine] = ::Erubi::CaptureEndEngine
|
290
205
|
setup_bar
|
@@ -319,7 +234,6 @@ END3
|
|
319
234
|
|
320
235
|
it "should allow <%|=#{ind} and <%| for nested capturing with CaptureEndEngine when with :escape => #{escape}" do
|
321
236
|
@options[:bufvar] = '@a'
|
322
|
-
@options[:capture] = true
|
323
237
|
@options[:escape] = escape
|
324
238
|
@options[:engine] = ::Erubi::CaptureEndEngine
|
325
239
|
setup_bar
|
@@ -622,71 +536,6 @@ END3
|
|
622
536
|
|
623
537
|
it "should raise an error if a tag is not handled when a custom regexp is used" do
|
624
538
|
proc{Erubi::Engine.new('<%] %>', :regexp =>/<%(={1,2}|\]|-|\#|%)?(.*?)([-=])?%>([ \t]*\r?\n)?/m)}.must_raise ArgumentError
|
625
|
-
proc{Erubi::
|
626
|
-
end
|
627
|
-
|
628
|
-
it "should have working tilt support" do
|
629
|
-
@list = ['&\'<>"2']
|
630
|
-
Tilt::ErubiTemplate.new{<<END1}.render(self).must_equal(<<END2)
|
631
|
-
<table>
|
632
|
-
<tbody>
|
633
|
-
<% i = 0
|
634
|
-
@list.each_with_index do |item, i| %>
|
635
|
-
<tr>
|
636
|
-
<td><%= i+1 %></td>
|
637
|
-
<td><%== item %></td>
|
638
|
-
</tr>
|
639
|
-
<% end %>
|
640
|
-
</tbody>
|
641
|
-
</table>
|
642
|
-
<%== i+1 %>
|
643
|
-
END1
|
644
|
-
<table>
|
645
|
-
<tbody>
|
646
|
-
<tr>
|
647
|
-
<td>1</td>
|
648
|
-
<td>&'<>"2</td>
|
649
|
-
</tr>
|
650
|
-
</tbody>
|
651
|
-
</table>
|
652
|
-
1
|
653
|
-
END2
|
654
|
-
end
|
655
|
-
|
656
|
-
it "should have working tilt support for capturing" do
|
657
|
-
setup_foo
|
658
|
-
Tilt::ErubiTemplate.new(:capture=>true, :outvar=>'@a'){<<END1}.render(self).must_equal(<<END2)
|
659
|
-
1<%|= @foo.bar do %>bar<% end %>2
|
660
|
-
END1
|
661
|
-
1ABARB2
|
662
|
-
END2
|
663
|
-
end
|
664
|
-
|
665
|
-
it "should have working tilt support for explicit capturing" do
|
666
|
-
setup_bar
|
667
|
-
Tilt::ErubiTemplate.new(:capture=>:explicit, :outvar=>'@a'){<<END1}.render(self).must_equal(<<END2)
|
668
|
-
1<%|= bar do %>b<%|= baz do %>e<%| end %>ar<%| end %>2
|
669
|
-
END1
|
670
|
-
1ABCEDCEDARB2
|
671
|
-
END2
|
672
|
-
end
|
673
|
-
|
674
|
-
it "should have working tilt support for specifying engine class" do
|
675
|
-
setup_foo
|
676
|
-
@a = 1
|
677
|
-
Tilt::ErubiTemplate.new(:engine_class=>Erubi::CaptureEngine, :outvar=>'@a'){<<END1}.render(self).must_equal(<<END2)
|
678
|
-
1<%|= @foo.bar do %>bar<% end %>2
|
679
|
-
END1
|
680
|
-
1ABARB2
|
681
|
-
END2
|
682
|
-
@a.must_equal 1
|
683
|
-
end
|
684
|
-
|
685
|
-
it "should have working tilt support for locals" do
|
686
|
-
Tilt::ErubiTemplate.new{<<END1}.render(self, :b=>3).must_equal(<<END2)
|
687
|
-
<%= b %>
|
688
|
-
END1
|
689
|
-
3
|
690
|
-
END2
|
539
|
+
proc{Erubi::CaptureEndEngine.new('<%] %>', :regexp =>/<%(={1,2}|\]|-|\#|%)?(.*?)([-=])?%>([ \t]*\r?\n)?/m)}.must_raise ArgumentError
|
691
540
|
end
|
692
541
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: erubi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeremy Evans
|
@@ -9,22 +9,8 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-01-
|
12
|
+
date: 2017-01-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
-
- !ruby/object:Gem::Dependency
|
15
|
-
name: tilt
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
-
requirements:
|
18
|
-
- - ">="
|
19
|
-
- !ruby/object:Gem::Version
|
20
|
-
version: '2'
|
21
|
-
type: :development
|
22
|
-
prerelease: false
|
23
|
-
version_requirements: !ruby/object:Gem::Requirement
|
24
|
-
requirements:
|
25
|
-
- - ">="
|
26
|
-
- !ruby/object:Gem::Version
|
27
|
-
version: '2'
|
28
14
|
- !ruby/object:Gem::Dependency
|
29
15
|
name: minitest
|
30
16
|
requirement: !ruby/object:Gem::Requirement
|
@@ -53,9 +39,7 @@ files:
|
|
53
39
|
- README.rdoc
|
54
40
|
- Rakefile
|
55
41
|
- lib/erubi.rb
|
56
|
-
- lib/erubi/capture.rb
|
57
42
|
- lib/erubi/capture_end.rb
|
58
|
-
- lib/tilt/erubi.rb
|
59
43
|
- test/test.rb
|
60
44
|
homepage: https://github.com/jeremyevans/erubi
|
61
45
|
licenses:
|
data/lib/erubi/capture.rb
DELETED
@@ -1,88 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'erubi'
|
4
|
-
|
5
|
-
module Erubi
|
6
|
-
# A buffer class used for templates that support captures
|
7
|
-
class Buffer
|
8
|
-
def initialize
|
9
|
-
@bufs = [new_buffer]
|
10
|
-
end
|
11
|
-
|
12
|
-
# Return the current buffer
|
13
|
-
def buffer
|
14
|
-
@bufs.last
|
15
|
-
end
|
16
|
-
|
17
|
-
# Append to the current buffer
|
18
|
-
def <<(str)
|
19
|
-
buffer << str
|
20
|
-
end
|
21
|
-
|
22
|
-
# Add a new buffer, that future appends will go to.
|
23
|
-
def before_append!
|
24
|
-
@bufs << new_buffer
|
25
|
-
end
|
26
|
-
|
27
|
-
# Take the current buffer and append it to the previous buffer.
|
28
|
-
def append=(_)
|
29
|
-
buf = @bufs.pop
|
30
|
-
buffer << buf.to_s
|
31
|
-
end
|
32
|
-
|
33
|
-
# Escape the current buffer and append it to the previous buffer,
|
34
|
-
def escape=(_)
|
35
|
-
buf = @bufs.pop
|
36
|
-
buffer << escape(buf.to_s)
|
37
|
-
end
|
38
|
-
|
39
|
-
# Return the current buffer, as a string.
|
40
|
-
def to_s
|
41
|
-
buffer.to_s
|
42
|
-
end
|
43
|
-
|
44
|
-
private
|
45
|
-
|
46
|
-
# An object to use for the underlying buffers.
|
47
|
-
def new_buffer
|
48
|
-
String.new
|
49
|
-
end
|
50
|
-
|
51
|
-
# HTML/XML escape the given string.
|
52
|
-
def escape(str)
|
53
|
-
::Erubi.h(str)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
# An engine class that supports capturing blocks via the <%|= and <%|== tags.
|
58
|
-
class CaptureEngine < Engine
|
59
|
-
# Initializes the engine. Accepts the same arguments as ::Erubi::Engine, and these
|
60
|
-
# additional options:
|
61
|
-
# :escape_capture :: Whether to make <%|= escape by default, and <%|== not escape by default,
|
62
|
-
# defaults to the same value as :escape.
|
63
|
-
def initialize(input, properties={})
|
64
|
-
properties = Hash[properties]
|
65
|
-
escape = properties.fetch(:escape){properties.fetch(:escape_html, false)}
|
66
|
-
@escape_capture = properties.fetch(:escape_capture, escape)
|
67
|
-
properties[:regexp] ||= /<%(\|?={1,2}|-|\#|%)?(.*?)([-=])?%>([ \t]*\r?\n)?/m
|
68
|
-
properties[:bufval] ||= "::Erubi::Buffer.new"
|
69
|
-
super
|
70
|
-
end
|
71
|
-
|
72
|
-
private
|
73
|
-
|
74
|
-
# Handle the <%|= and <%|== tags
|
75
|
-
def handle(indicator, code, tailch, rspace, lspace)
|
76
|
-
case indicator
|
77
|
-
when '|=', '|=='
|
78
|
-
rspace = nil if tailch && !tailch.empty?
|
79
|
-
add_text(lspace) if lspace
|
80
|
-
meth = ((indicator == '|=') ^ @escape_capture) ? 'append' : 'escape'
|
81
|
-
src << " #{@bufvar}.before_append!; #{@bufvar}.#{meth}= " << code
|
82
|
-
add_text(rspace) if rspace
|
83
|
-
else
|
84
|
-
super
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
data/lib/tilt/erubi.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
require 'tilt'
|
2
|
-
require 'tilt/template'
|
3
|
-
require 'erubi'
|
4
|
-
|
5
|
-
module Tilt
|
6
|
-
# Erubi (a simplified version of Erubis) template implementation
|
7
|
-
class ErubiTemplate < Template
|
8
|
-
def prepare
|
9
|
-
@options.merge!(:preamble => false, :postamble => false, :ensure=>true)
|
10
|
-
|
11
|
-
engine_class = if @options[:engine_class]
|
12
|
-
@options[:engine_class]
|
13
|
-
elsif capture = @options[:capture]
|
14
|
-
if capture == :explicit
|
15
|
-
Erubi::CaptureEndEngine
|
16
|
-
else
|
17
|
-
Erubi::CaptureEngine
|
18
|
-
end
|
19
|
-
else
|
20
|
-
Erubi::Engine
|
21
|
-
end
|
22
|
-
|
23
|
-
@engine = engine_class.new(data, @options)
|
24
|
-
@outvar = @engine.bufvar
|
25
|
-
@src = @engine.src.dup
|
26
|
-
@engine
|
27
|
-
end
|
28
|
-
|
29
|
-
def precompiled_template(locals)
|
30
|
-
@src
|
31
|
-
end
|
32
|
-
|
33
|
-
Tilt.register self, 'erb', 'rhtml', 'erubi'
|
34
|
-
end
|
35
|
-
end
|