erubi 1.7.1 → 1.8.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 +4 -0
- data/README.rdoc +32 -0
- data/lib/erubi.rb +1 -1
- data/lib/erubi/capture_end.rb +9 -1
- data/test/test.rb +108 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 30bbae115393cc4d2ff05acd506ebd7616aad0797454c91766b379bfbfecef8b
|
4
|
+
data.tar.gz: 4dd7876504af9f3a17674875daad4233b9731c7bd3f195ecdf2e2507a2fa33b1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 380753f81d65b28686ccc285bb77ed998fe95ef179fea87b28c74701c833182225ba22f544fbc2276cad1f5d1c8309a3c837e5e78ba120806b49b8b675d2ba30
|
7
|
+
data.tar.gz: 006365ddcb013ebb47789055993e176640ba8f285b4bb718c85d9a0793d7ba428587adab203976dc068dcb7fc0d466e76362f6fbcab7832d7463dfc05a7e3934
|
data/CHANGELOG
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
=== 1.8.0 (2018-12-18)
|
2
|
+
|
3
|
+
* Support :yield_returns_buffer option in capture_end for always returning the (potentially modified) buffer in <%|= tags (evanleck) (#15)
|
4
|
+
|
1
5
|
=== 1.7.1 (2018-03-05)
|
2
6
|
|
3
7
|
* Make whitespace handling for <%# %> tags more compatible with Erubis (jeremyevans) (#14)
|
data/README.rdoc
CHANGED
@@ -63,6 +63,38 @@ To use the capture_end support with tilt:
|
|
63
63
|
require 'erubi/capture_end'
|
64
64
|
Tilt.new("filename.erb", :engine_class=>Erubi::CaptureEndEngine).render
|
65
65
|
|
66
|
+
When using the capture_end support, any methods (such as +form+ in the example
|
67
|
+
above) should return the (potentially modified) buffer. Since the buffer
|
68
|
+
variable is a local variable and not an instance variable by default, you'll
|
69
|
+
probably want to set the +:bufvar+ variable when using the capture_end
|
70
|
+
support to an instance variable, and have any methods used access that
|
71
|
+
instance variable. Example:
|
72
|
+
|
73
|
+
def form
|
74
|
+
@_buf << "<form>"
|
75
|
+
yield
|
76
|
+
@_buf << "</form>"
|
77
|
+
@_buf
|
78
|
+
end
|
79
|
+
|
80
|
+
puts eval(Erubi::CaptureEndEngine.new(<<-END, :bufvar=>:@_buf).src)
|
81
|
+
before
|
82
|
+
<%|= form do %>
|
83
|
+
inside
|
84
|
+
<%| end %>
|
85
|
+
after
|
86
|
+
END
|
87
|
+
|
88
|
+
# Output:
|
89
|
+
# before
|
90
|
+
# <form>
|
91
|
+
# inside
|
92
|
+
# </form>
|
93
|
+
# after
|
94
|
+
|
95
|
+
Alternatively, passing the option +:yield_returns_buffer => true+ will return the
|
96
|
+
buffer captured by the block instead of the last expression in the block.
|
97
|
+
|
66
98
|
= Reporting Bugs
|
67
99
|
|
68
100
|
The bug tracker is located at https://github.com/jeremyevans/erubi/issues
|
data/lib/erubi.rb
CHANGED
data/lib/erubi/capture_end.rb
CHANGED
@@ -10,10 +10,17 @@ module Erubi
|
|
10
10
|
# additional options:
|
11
11
|
# :escape_capture :: Whether to make <%|= escape by default, and <%|== not escape by default,
|
12
12
|
# defaults to the same value as :escape.
|
13
|
+
# :yield_returns_buffer :: Whether to have <%| tags insert the buffer as an expression, so that
|
14
|
+
# <%| end %> tags will have the buffer be the last expression inside
|
15
|
+
# the block, and therefore have the buffer be returned by the yield
|
16
|
+
# expression. Normally the buffer will be returned anyway, but there
|
17
|
+
# are cases where the last expression will not be the buffer,
|
18
|
+
# and therefore a different object will be returned.
|
13
19
|
def initialize(input, properties={})
|
14
20
|
properties = Hash[properties]
|
15
21
|
escape = properties.fetch(:escape){properties.fetch(:escape_html, false)}
|
16
22
|
@escape_capture = properties.fetch(:escape_capture, escape)
|
23
|
+
@yield_returns_buffer = properties.fetch(:yield_returns_buffer, false)
|
17
24
|
@bufval = properties[:bufval] ||= 'String.new'
|
18
25
|
@bufstack = '__erubi_stack'
|
19
26
|
properties[:regexp] ||= /<%(\|?={1,2}|-|\#|%|\|)?(.*?)([-=])?%>([ \t]*\r?\n)?/m
|
@@ -34,7 +41,8 @@ module Erubi
|
|
34
41
|
when '|'
|
35
42
|
rspace = nil if tailch && !tailch.empty?
|
36
43
|
add_text(lspace) if lspace
|
37
|
-
|
44
|
+
result = @yield_returns_buffer ? " #{@bufvar}; " : ""
|
45
|
+
src << result << code << ")).to_s; ensure; #{@bufvar} = #{@bufstack}.pop; end;"
|
38
46
|
add_text(rspace) if rspace
|
39
47
|
else
|
40
48
|
super
|
data/test/test.rb
CHANGED
@@ -23,6 +23,8 @@ end
|
|
23
23
|
|
24
24
|
require 'erubi'
|
25
25
|
require 'erubi/capture_end'
|
26
|
+
|
27
|
+
ENV['MT_NO_PLUGINS'] = '1' # Work around stupid autoloading of plugins
|
26
28
|
require 'minitest/spec'
|
27
29
|
require 'minitest/autorun'
|
28
30
|
|
@@ -663,4 +665,110 @@ END3
|
|
663
665
|
proc{Erubi::Engine.new('<%] %>', :regexp =>/<%(={1,2}|\]|-|\#|%)?(.*?)([-=])?%>([ \t]*\r?\n)?/m)}.must_raise ArgumentError
|
664
666
|
proc{Erubi::CaptureEndEngine.new('<%] %>', :regexp =>/<%(={1,2}|\]|-|\#|%)?(.*?)([-=])?%>([ \t]*\r?\n)?/m)}.must_raise ArgumentError
|
665
667
|
end
|
668
|
+
|
669
|
+
it "should respect the :yield_returns_buffer option for making templates return the (potentially modified) buffer" do
|
670
|
+
@options[:engine] = ::Erubi::CaptureEndEngine
|
671
|
+
@options[:bufvar] = '@a'
|
672
|
+
|
673
|
+
def self.bar
|
674
|
+
a = String.new
|
675
|
+
a << "a"
|
676
|
+
yield 'burgers'
|
677
|
+
case b = (yield 'salads')
|
678
|
+
when String
|
679
|
+
a << b
|
680
|
+
a << 'b'
|
681
|
+
a.upcase
|
682
|
+
end
|
683
|
+
end
|
684
|
+
|
685
|
+
check_output(<<END1, <<END2, <<END3){}
|
686
|
+
<%|= bar do |item| %>
|
687
|
+
Let's eat <%= item %>!
|
688
|
+
<% nil %><%| end %>
|
689
|
+
END1
|
690
|
+
@a = String.new;begin; (__erubi_stack ||= []) << @a; @a = String.new; __erubi_stack.last << (( bar do |item| @a << '
|
691
|
+
'; @a << 'Let\\'s eat '; @a << ( item ).to_s; @a << '!
|
692
|
+
'; nil ; end )).to_s; ensure; @a = __erubi_stack.pop; end; @a << '
|
693
|
+
';
|
694
|
+
@a.to_s
|
695
|
+
END2
|
696
|
+
|
697
|
+
END3
|
698
|
+
|
699
|
+
@options[:yield_returns_buffer] = true
|
700
|
+
|
701
|
+
check_output(<<END1, <<END2, <<END3) {}
|
702
|
+
<%|= bar do |item| %>
|
703
|
+
Let's eat <%= item %>!
|
704
|
+
<% nil %><%| end %>
|
705
|
+
END1
|
706
|
+
@a = String.new;begin; (__erubi_stack ||= []) << @a; @a = String.new; __erubi_stack.last << (( bar do |item| @a << '
|
707
|
+
'; @a << 'Let\\'s eat '; @a << ( item ).to_s; @a << '!
|
708
|
+
'; nil ; @a; end )).to_s; ensure; @a = __erubi_stack.pop; end; @a << '
|
709
|
+
';
|
710
|
+
@a.to_s
|
711
|
+
END2
|
712
|
+
A
|
713
|
+
LET'S EAT BURGERS!
|
714
|
+
|
715
|
+
LET'S EAT SALADS!
|
716
|
+
B
|
717
|
+
END3
|
718
|
+
end
|
719
|
+
|
720
|
+
it "should respect the :yield_returns_buffer option for making templates return the (potentially modified) buffer as the result of the block" do
|
721
|
+
@options[:engine] = ::Erubi::CaptureEndEngine
|
722
|
+
@options[:yield_returns_buffer] = true
|
723
|
+
|
724
|
+
def self.bar(foo = nil)
|
725
|
+
if foo.nil?
|
726
|
+
yield
|
727
|
+
else
|
728
|
+
foo
|
729
|
+
end
|
730
|
+
end
|
731
|
+
|
732
|
+
check_output(<<END1, <<END2, <<END3) {}
|
733
|
+
<%|= bar do %>
|
734
|
+
Let's eat the tacos!
|
735
|
+
<%| end %>
|
736
|
+
|
737
|
+
Delicious!
|
738
|
+
END1
|
739
|
+
_buf = String.new;begin; (__erubi_stack ||= []) << _buf; _buf = String.new; __erubi_stack.last << (( bar do _buf << '
|
740
|
+
'; _buf << 'Let\\'s eat the tacos!
|
741
|
+
'; _buf; end )).to_s; ensure; _buf = __erubi_stack.pop; end; _buf << '
|
742
|
+
'; _buf << '
|
743
|
+
Delicious!
|
744
|
+
';
|
745
|
+
_buf.to_s
|
746
|
+
END2
|
747
|
+
|
748
|
+
Let's eat the tacos!
|
749
|
+
|
750
|
+
|
751
|
+
Delicious!
|
752
|
+
END3
|
753
|
+
|
754
|
+
check_output(<<END1, <<END2, <<END3) {}
|
755
|
+
<%|= bar("Don't eat the burgers!") do %>
|
756
|
+
Let's eat burgers!
|
757
|
+
<%| end %>
|
758
|
+
|
759
|
+
Delicious!
|
760
|
+
END1
|
761
|
+
_buf = String.new;begin; (__erubi_stack ||= []) << _buf; _buf = String.new; __erubi_stack.last << (( bar(\"Don't eat the burgers!\") do _buf << '
|
762
|
+
'; _buf << 'Let\\'s eat burgers!
|
763
|
+
'; _buf; end )).to_s; ensure; _buf = __erubi_stack.pop; end; _buf << '
|
764
|
+
'; _buf << '
|
765
|
+
Delicious!
|
766
|
+
';
|
767
|
+
_buf.to_s
|
768
|
+
END2
|
769
|
+
Don't eat the burgers!
|
770
|
+
|
771
|
+
Delicious!
|
772
|
+
END3
|
773
|
+
end
|
666
774
|
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.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeremy Evans
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2018-
|
12
|
+
date: 2018-12-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: minitest
|
@@ -68,7 +68,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
68
68
|
version: '0'
|
69
69
|
requirements: []
|
70
70
|
rubyforge_project:
|
71
|
-
rubygems_version: 2.7.
|
71
|
+
rubygems_version: 2.7.6
|
72
72
|
signing_key:
|
73
73
|
specification_version: 4
|
74
74
|
summary: Small ERB Implementation
|