erubi 1.3.0 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +8 -0
- data/MIT-LICENSE +1 -1
- data/README.rdoc +5 -5
- data/lib/erubi.rb +20 -8
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 20b3fb23c6df5c201822001090290ca746da0c46
|
4
|
+
data.tar.gz: 1792657866eff6b28e95be1ab5a3463445be3a2b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e8e2c2e1e8bd7cbe522a1570f81fbd12a691c84a2332df3e1be760193b59b9ab73b6bf05f1d1944f64b902295d980229e63fe6098f1bebfa851f5816da81b1bb
|
7
|
+
data.tar.gz: 0b515eb522628f20f1843070c216ad1fc01a76a64235f87bc6ecec09116f20f6f97e77de85ba0518aeaa0fbe816c50e41096a197637f41b4edd24ba98791a614
|
data/CHANGELOG
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
=== 1.4.0 (2017-01-20)
|
2
|
+
|
3
|
+
* Allow postambles to depend on internal state of engine (jeremyevans)
|
4
|
+
|
5
|
+
* Allow overriding of behavior for <%= and <%== tags to depend on which indicator was used (jeremyevans)
|
6
|
+
|
7
|
+
* Make whitespace handling for <% %> tags more compatible with Erubis for subclasses overriding add_text (jeremyevans)
|
8
|
+
|
1
9
|
=== 1.3.0 (2016-12-29)
|
2
10
|
|
3
11
|
* Support :capture=>:explicit option in tilt support to use Erubi::CaptureEndEngine (jeremyevans)
|
data/MIT-LICENSE
CHANGED
data/README.rdoc
CHANGED
@@ -8,11 +8,11 @@ the following differences:
|
|
8
8
|
* Works with ruby's --enable-frozen-string-literal option
|
9
9
|
* Automatically freezes strings for template text when ruby optimizes it (on ruby 2.1+)
|
10
10
|
* Escapes ' (apostrophe) when escaping for better XSS protection
|
11
|
-
* Has
|
11
|
+
* Has 88% smaller memory footprint for base engine
|
12
12
|
* Has 75% smaller memory footprint for tilt support
|
13
13
|
* Does no monkey patching (Erubis adds a method to Kernel)
|
14
14
|
* Uses an immutable design (all options passed to the constructor, which returns a frozen object)
|
15
|
-
* Has simpler internals (1 file, <
|
15
|
+
* Has simpler internals (1 file, <150 lines of code)
|
16
16
|
* Has an open development model (Erubis doesn't have a public source control repository or bug tracker)
|
17
17
|
* Is not dead (Erubis hasn't been updated since 2011)
|
18
18
|
|
@@ -49,12 +49,12 @@ source:
|
|
49
49
|
== Capturing
|
50
50
|
|
51
51
|
Erubi does not support capturing block output into the template by default.
|
52
|
-
However, it comes with an +erubi/
|
53
|
-
via <tt><%|=</tt
|
52
|
+
However, it comes with an +erubi/capture_end+ file that supports capturing
|
53
|
+
via <tt><%|=</tt>, <tt><%|==</tt>, <tt><%|</tt> tags:
|
54
54
|
|
55
55
|
<%|= form do %>
|
56
56
|
<input>
|
57
|
-
|
57
|
+
<%| end %>
|
58
58
|
|
59
59
|
This offers similar functionality to that offered by Rails' <tt><%=</tt>
|
60
60
|
tags, but without the corner cases with that approach (which are due to
|
data/lib/erubi.rb
CHANGED
@@ -52,7 +52,7 @@ module Erubi
|
|
52
52
|
# :src :: The initial value to use for the source code
|
53
53
|
# :trim :: Whether to trim leading and trailing whitespace, true by default.
|
54
54
|
def initialize(input, properties={})
|
55
|
-
escape
|
55
|
+
@escape = escape = properties.fetch(:escape){properties.fetch(:escape_html, false)}
|
56
56
|
trim = properties[:trim] != false
|
57
57
|
@filename = properties[:filename]
|
58
58
|
@bufvar = bufvar = properties[:bufvar] || properties[:outvar] || "_buf"
|
@@ -116,11 +116,7 @@ module Erubi
|
|
116
116
|
when '='
|
117
117
|
rspace = nil if tailch && !tailch.empty?
|
118
118
|
add_text(lspace) if lspace
|
119
|
-
|
120
|
-
add_expression_result(code)
|
121
|
-
else
|
122
|
-
add_expression_result_escaped(code)
|
123
|
-
end
|
119
|
+
add_expression(indicator, code)
|
124
120
|
add_text(rspace) if rspace
|
125
121
|
when '#'
|
126
122
|
n = code.count("\n") + (rspace ? 1 : 0)
|
@@ -134,7 +130,7 @@ module Erubi
|
|
134
130
|
when '%'
|
135
131
|
add_text("#{lspace}#{prefix||='<%'}#{code}#{tailch}#{postfix||='%>'}#{rspace}")
|
136
132
|
when nil, '-'
|
137
|
-
if trim
|
133
|
+
if trim && lspace && rspace
|
138
134
|
add_code("#{lspace}#{code}#{rspace}")
|
139
135
|
else
|
140
136
|
add_text(lspace) if lspace
|
@@ -149,7 +145,7 @@ module Erubi
|
|
149
145
|
add_text(rest)
|
150
146
|
|
151
147
|
src << "\n" unless src[RANGE_LAST] == "\n"
|
152
|
-
|
148
|
+
add_postamble(postamble)
|
153
149
|
src << "; ensure\n #{bufvar} = __original_outvar\nend\n" if properties[:ensure]
|
154
150
|
src.freeze
|
155
151
|
freeze
|
@@ -168,6 +164,16 @@ module Erubi
|
|
168
164
|
@src << ';' unless code[RANGE_LAST] == "\n"
|
169
165
|
end
|
170
166
|
|
167
|
+
# Add the given ruby expression result to the template,
|
168
|
+
# escaping it based on the indicator given and escape flag.
|
169
|
+
def add_expression(indicator, code)
|
170
|
+
if ((indicator == '=') ^ @escape)
|
171
|
+
add_expression_result(code)
|
172
|
+
else
|
173
|
+
add_expression_result_escaped(code)
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
171
177
|
# Add the result of Ruby expression to the template
|
172
178
|
def add_expression_result(code)
|
173
179
|
@src << " #{@bufvar} << (" << code << ').to_s;'
|
@@ -178,6 +184,12 @@ module Erubi
|
|
178
184
|
@src << " #{@bufvar} << #{@escapefunc}((" << code << '));'
|
179
185
|
end
|
180
186
|
|
187
|
+
# Add the given postamble to the src. Can be overridden in subclasses
|
188
|
+
# to make additional changes to src that depend on the current state.
|
189
|
+
def add_postamble(postamble)
|
190
|
+
src << postamble
|
191
|
+
end
|
192
|
+
|
181
193
|
# Raise an exception, as the base engine class does not support handling other indicators.
|
182
194
|
def handle(indicator, code, tailch, rspace, lspace)
|
183
195
|
raise ArgumentError, "Invalid indicator: #{indicator}"
|
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.4.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:
|
12
|
+
date: 2017-01-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: tilt
|