erubis 2.3.1 → 2.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +69 -2
- data/README.txt +1 -1
- data/benchmark/bench.rb +1 -1
- data/bin/erubis +1 -1
- data/contrib/erubis +3295 -2
- data/contrib/inline-require +1 -1
- data/doc-api/classes/Erubis.html +1 -1
- data/doc-api/classes/Erubis/ArrayEnhancer.html +12 -12
- data/doc-api/classes/Erubis/Basic/Converter.html +4 -4
- data/doc-api/classes/Erubis/BiPatternEnhancer.html +12 -12
- data/doc-api/classes/Erubis/CGenerator.html +60 -60
- data/doc-api/classes/Erubis/Context.html +42 -42
- data/doc-api/classes/Erubis/Converter.html +3 -2
- data/doc-api/classes/Erubis/DeleteIndentEnhancer.html +6 -6
- data/doc-api/classes/Erubis/Engine.html +30 -30
- data/doc-api/classes/Erubis/ErboutEnhancer.html +12 -12
- data/doc-api/classes/Erubis/EscapeEnhancer.html +6 -6
- data/doc-api/classes/Erubis/HeaderFooterEnhancer.html +12 -12
- data/doc-api/classes/Erubis/Helpers/RailsHelper.html +62 -7
- data/doc-api/classes/Erubis/Helpers/RailsHelper/PreprocessingEruby.html +177 -0
- data/doc-api/classes/Erubis/JavaGenerator.html +54 -54
- data/doc-api/classes/Erubis/JavascriptGenerator.html +60 -60
- data/doc-api/classes/Erubis/Main.html +20 -20
- data/doc-api/classes/Erubis/NoTextEnhancer.html +6 -6
- data/doc-api/classes/Erubis/OptimizedEruby.html +6 -6
- data/doc-api/classes/Erubis/OptimizedGenerator.html +72 -72
- data/doc-api/classes/Erubis/OptimizedXmlEruby.html +6 -6
- data/doc-api/classes/Erubis/PI/Converter.html +3 -3
- data/doc-api/classes/Erubis/PercentLineEnhancer.html +6 -6
- data/doc-api/classes/Erubis/PhpGenerator.html +54 -54
- data/doc-api/classes/Erubis/PrintEnabledEnhancer.html +20 -20
- data/doc-api/classes/Erubis/PrintOutEnhancer.html +30 -30
- data/doc-api/classes/Erubis/RubyEvaluator.html +47 -15
- data/doc-api/classes/Erubis/StringBufferEnhancer.html +12 -12
- data/doc-api/classes/Erubis/TinyEruby.html +24 -24
- data/doc-api/classes/Erubis/XmlHelper.html +79 -14
- data/doc-api/created.rid +1 -1
- data/doc-api/files/README_txt.html +2 -2
- data/doc-api/files/erubis/context_rb.html +1 -1
- data/doc-api/files/erubis/converter_rb.html +2 -2
- data/doc-api/files/erubis/engine/ec_rb.html +1 -1
- data/doc-api/files/erubis/engine/ejava_rb.html +1 -1
- data/doc-api/files/erubis/engine/ejavascript_rb.html +1 -1
- data/doc-api/files/erubis/engine/enhanced_rb.html +1 -1
- data/doc-api/files/erubis/engine/eperl_rb.html +1 -1
- data/doc-api/files/erubis/engine/ephp_rb.html +1 -1
- data/doc-api/files/erubis/engine/eruby_rb.html +1 -1
- data/doc-api/files/erubis/engine/escheme_rb.html +1 -1
- data/doc-api/files/erubis/engine/optimized_rb.html +1 -1
- data/doc-api/files/erubis/engine_rb.html +1 -1
- data/doc-api/files/erubis/enhancer_rb.html +1 -1
- data/doc-api/files/erubis/error_rb.html +1 -1
- data/doc-api/files/erubis/evaluator_rb.html +2 -2
- data/doc-api/files/erubis/generator_rb.html +1 -1
- data/doc-api/files/erubis/helper_rb.html +2 -2
- data/doc-api/files/erubis/helpers/rails_helper_rb.html +3 -2
- data/doc-api/files/erubis/local-setting_rb.html +1 -1
- data/doc-api/files/erubis/main_rb.html +2 -2
- data/doc-api/files/erubis/tiny_rb.html +1 -1
- data/doc-api/files/erubis_rb.html +1 -1
- data/doc-api/fr_class_index.html +1 -0
- data/doc-api/fr_method_index.html +128 -120
- data/doc/users-guide.html +248 -88
- data/lib/erubis.rb +2 -2
- data/lib/erubis/context.rb +1 -1
- data/lib/erubis/converter.rb +3 -2
- data/lib/erubis/engine.rb +1 -1
- data/lib/erubis/engine/ec.rb +1 -1
- data/lib/erubis/engine/ejava.rb +1 -1
- data/lib/erubis/engine/ejavascript.rb +1 -1
- data/lib/erubis/engine/enhanced.rb +1 -1
- data/lib/erubis/engine/eperl.rb +1 -1
- data/lib/erubis/engine/ephp.rb +1 -1
- data/lib/erubis/engine/eruby.rb +1 -1
- data/lib/erubis/engine/escheme.rb +1 -1
- data/lib/erubis/engine/optimized.rb +1 -1
- data/lib/erubis/enhancer.rb +1 -1
- data/lib/erubis/error.rb +1 -1
- data/lib/erubis/evaluator.rb +15 -4
- data/lib/erubis/generator.rb +1 -1
- data/lib/erubis/helper.rb +14 -2
- data/lib/erubis/helpers/rails_helper.rb +48 -3
- data/lib/erubis/local-setting.rb +1 -1
- data/lib/erubis/main.rb +7 -8
- data/lib/erubis/tiny.rb +1 -1
- data/test/assert-text-equal.rb +1 -1
- data/test/data/users-guide/def_method.rb +14 -0
- data/test/data/users-guide/def_method.result +3 -0
- data/test/test-engines.rb +1 -1
- data/test/test-enhancers.rb +1 -1
- data/test/test-erubis.rb +40 -2
- data/test/test-main.rb +17 -4
- data/test/test-users-guide.rb +1 -1
- data/test/test.rb +1 -1
- data/test/testutil.rb +1 -1
- metadata +15 -11
- data/test/data/users-guide/stderr.log +0 -3
data/lib/erubis/engine.rb
CHANGED
data/lib/erubis/engine/ec.rb
CHANGED
data/lib/erubis/engine/ejava.rb
CHANGED
data/lib/erubis/engine/eperl.rb
CHANGED
data/lib/erubis/engine/ephp.rb
CHANGED
data/lib/erubis/engine/eruby.rb
CHANGED
data/lib/erubis/enhancer.rb
CHANGED
data/lib/erubis/error.rb
CHANGED
data/lib/erubis/evaluator.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
##
|
2
|
-
## $Rev:
|
3
|
-
## $Release: 2.
|
2
|
+
## $Rev: 91 $
|
3
|
+
## $Release: 2.4.0 $
|
4
4
|
## copyright(c) 2006-2007 kuwata-lab.com all rights reserved.
|
5
5
|
##
|
6
6
|
|
@@ -53,7 +53,8 @@ module Erubis
|
|
53
53
|
_arg = _binding_or_hash
|
54
54
|
if _arg.is_a?(Hash)
|
55
55
|
## load _context data as local variables by eval
|
56
|
-
eval _arg.keys.inject("") { |s, k| s << "#{k.to_s} = _arg[#{k.inspect}];" }
|
56
|
+
#eval _arg.keys.inject("") { |s, k| s << "#{k.to_s} = _arg[#{k.inspect}];" }
|
57
|
+
eval _arg.collect{|k,v| "#{k} = _arg[#{k.inspect}]; "}.join
|
57
58
|
_arg = binding()
|
58
59
|
end
|
59
60
|
return eval(@src, _arg, (@filename || '(erubis)'))
|
@@ -62,9 +63,19 @@ module Erubis
|
|
62
63
|
## invoke context.instance_eval(@src)
|
63
64
|
def evaluate(context=Context.new)
|
64
65
|
context = Context.new(context) if context.is_a?(Hash)
|
65
|
-
return context.instance_eval(@src,
|
66
|
+
#return context.instance_eval(@src, @filename || '(erubis)')
|
67
|
+
@_proc ||= eval("proc { #{@src} }", TOPLEVEL_BINDING, @filename || '(erubis)')
|
68
|
+
return context.instance_eval(&@_proc)
|
66
69
|
end
|
67
70
|
|
71
|
+
## if object is an Class or Module then define instance method to it,
|
72
|
+
## else define singleton method to it.
|
73
|
+
def def_method(object, method_name, filename=nil)
|
74
|
+
m = object.is_a?(Module) ? :module_eval : :instance_eval
|
75
|
+
object.__send__(m, "def #{method_name}; #{@src}; end", filename || @filename || '(erubis)')
|
76
|
+
end
|
77
|
+
|
78
|
+
|
68
79
|
end
|
69
80
|
|
70
81
|
|
data/lib/erubis/generator.rb
CHANGED
data/lib/erubis/helper.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
##
|
2
|
-
## $Rev:
|
3
|
-
## $Release: 2.
|
2
|
+
## $Rev: 89 $
|
3
|
+
## $Release: 2.4.0 $
|
4
4
|
## copyright(c) 2006-2007 kuwata-lab.com all rights reserved.
|
5
5
|
##
|
6
6
|
|
@@ -27,9 +27,21 @@ module Erubis
|
|
27
27
|
#value.to_s.gsub(/[&<>"]/) { ESCAPE_TABLE[$&] }
|
28
28
|
end
|
29
29
|
|
30
|
+
def escape_xml2(value)
|
31
|
+
return value.to_s.gsub(/\&/,'&').gsub(/</,'<').gsub(/>/,'>').gsub(/"/,'"')
|
32
|
+
end
|
33
|
+
|
30
34
|
alias h escape_xml
|
31
35
|
alias html_escape escape_xml
|
32
36
|
|
37
|
+
def url_encode(str)
|
38
|
+
return str.gsub(/[^-_.a-zA-Z0-9]+/) { |s|
|
39
|
+
s.unpack('C*').collect { |i| "%%%02X" % i }.join
|
40
|
+
}
|
41
|
+
end
|
42
|
+
|
43
|
+
alias u url_encode
|
44
|
+
|
33
45
|
end
|
34
46
|
|
35
47
|
|
@@ -1,11 +1,12 @@
|
|
1
1
|
###
|
2
|
-
### $Rev:
|
3
|
-
### $Release: 2.
|
2
|
+
### $Rev: 90 $
|
3
|
+
### $Release: 2.4.0 $
|
4
4
|
### copyright(c) 2006-2007 kuwata-lab.com all rights reserved.
|
5
5
|
###
|
6
6
|
|
7
7
|
|
8
8
|
require 'erubis'
|
9
|
+
require 'cgi'
|
9
10
|
|
10
11
|
|
11
12
|
module Erubis
|
@@ -30,7 +31,8 @@ module Erubis
|
|
30
31
|
## require 'erubis/helpers/rails_helper'
|
31
32
|
## #Erubis::Helpers::RailsHelper.engine_class = Erubis::Eruby # or Erubis::FastEruby
|
32
33
|
## #Erubis::Helpers::RailsHelper.init_properties = {}
|
33
|
-
## #Erubis::Helpers::RailsHelper.show_src = false
|
34
|
+
## #Erubis::Helpers::RailsHelper.show_src = false # set true for debugging
|
35
|
+
## #Erubis::Helpers::RailsHelper.preprocessing = true # set true to enable preprocessing
|
34
36
|
##
|
35
37
|
## 2. (optional) apply the patch for 'action_view/base.rb'
|
36
38
|
##
|
@@ -78,6 +80,27 @@ module Erubis
|
|
78
80
|
@@show_src = flag
|
79
81
|
end
|
80
82
|
|
83
|
+
##----- preprocessor: experimental -----
|
84
|
+
@@preprocessing = false
|
85
|
+
def self.preprocessing
|
86
|
+
@@preprocessing
|
87
|
+
end
|
88
|
+
def self.preprocessing=(flag)
|
89
|
+
@@preprocessing = flag
|
90
|
+
end
|
91
|
+
class PreprocessingEruby < Erubis::Eruby
|
92
|
+
def initialize(input, params={})
|
93
|
+
params = params.dup
|
94
|
+
params[:pattern] = '\[% %\]' # use '[%= %]' instead of '<%= %>'
|
95
|
+
params[:escape] = true # transport '[%= %]' and '[%== %]'
|
96
|
+
super
|
97
|
+
end
|
98
|
+
def add_expr_escaped(src, code)
|
99
|
+
add_expr_literal(src, "_decode((#{code}))")
|
100
|
+
end
|
101
|
+
end
|
102
|
+
##----------------------------------------
|
103
|
+
|
81
104
|
end
|
82
105
|
|
83
106
|
end
|
@@ -187,11 +210,33 @@ class ActionView::Base # :nodoc:
|
|
187
210
|
klass = Erubis::Helpers::RailsHelper.engine_class
|
188
211
|
properties = Erubis::Helpers::RailsHelper.init_properties
|
189
212
|
show_src = Erubis::Helpers::RailsHelper.show_src
|
213
|
+
##----- preprocessing: experimental -----
|
214
|
+
if Erubis::Helpers::RailsHelper.preprocessing
|
215
|
+
preprocessor = Erubis::Helpers::RailsHelper::PreprocessingEruby.new(template)
|
216
|
+
template = self.instance_eval(preprocessor.src)
|
217
|
+
logger.debug "** Erubis: preprocessed==<<'END'\n#{template}END\n" if show_src
|
218
|
+
end
|
219
|
+
##----------------------------------------
|
190
220
|
src = klass.new(template, properties).src
|
191
221
|
#src.insert(0, '_erbout = ')
|
192
222
|
logger.debug "** Erubis: src==<<'END'\n#{src}END\n" if show_src
|
193
223
|
src
|
194
224
|
end
|
225
|
+
|
226
|
+
##----- preprocessing: experimental -----
|
227
|
+
def _expr(arg)
|
228
|
+
return "<%=#{arg}%>"
|
229
|
+
end
|
230
|
+
alias _x _expr
|
231
|
+
alias _? _expr
|
232
|
+
def _decode(arg)
|
233
|
+
arg = arg.to_s
|
234
|
+
arg.gsub!(/%3C%25%3D(.*?)%25%3E/) { "<%=#{CGI.unescape($1)}%>" }
|
235
|
+
arg.gsub!(/<%=(.*?)%>/) { "<%=#{CGI.unescapeHTML($1)}%>" }
|
236
|
+
return arg
|
237
|
+
end
|
238
|
+
##----------------------------------------
|
239
|
+
|
195
240
|
end
|
196
241
|
|
197
242
|
|
data/lib/erubis/local-setting.rb
CHANGED
data/lib/erubis/main.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
###
|
2
|
-
### $Rev:
|
3
|
-
### $Release: 2.
|
2
|
+
### $Rev: 91 $
|
3
|
+
### $Release: 2.4.0 $
|
4
4
|
### copyright(c) 2006-2007 kuwata-lab.com all rights reserved.
|
5
5
|
###
|
6
6
|
|
@@ -173,7 +173,7 @@ module Erubis
|
|
173
173
|
msg = nil if val
|
174
174
|
end
|
175
175
|
else
|
176
|
-
engine.filename = '(stdin)'
|
176
|
+
engine.filename = filename = '(stdin)'
|
177
177
|
engine.convert!($stdin.read())
|
178
178
|
val = do_action(action, engine, context, filename, opts)
|
179
179
|
msg = nil if val
|
@@ -215,8 +215,8 @@ module Erubis
|
|
215
215
|
return source
|
216
216
|
end
|
217
217
|
|
218
|
-
def usage
|
219
|
-
command
|
218
|
+
def usage(command=nil)
|
219
|
+
command ||= File.basename($0)
|
220
220
|
buf = []
|
221
221
|
buf << "erubis - embedded program converter for multi-language"
|
222
222
|
buf << "Usage: #{command} [..options..] [file ...]"
|
@@ -247,10 +247,9 @@ module Erubis
|
|
247
247
|
# -c class : class name (XmlEruby/PercentLineEruby/...) (default Eruby)
|
248
248
|
# -r library : require library
|
249
249
|
# -a : action (convert/execute)
|
250
|
-
return join("\n")
|
250
|
+
return buf.join("\n")
|
251
251
|
end
|
252
252
|
|
253
|
-
|
254
253
|
def collect_supported_properties(erubis_klass)
|
255
254
|
list = []
|
256
255
|
erubis_klass.ancestors.each do |klass|
|
@@ -407,7 +406,7 @@ module Erubis
|
|
407
406
|
|
408
407
|
def load_datafiles(filenames, opts)
|
409
408
|
context = Erubis::Context.new
|
410
|
-
return
|
409
|
+
return context unless filenames
|
411
410
|
filenames.split(/,/).each do |filename|
|
412
411
|
filename.strip!
|
413
412
|
test(?f, filename) or raise CommandOptionError.new("#{filename}: file not found.")
|
data/lib/erubis/tiny.rb
CHANGED
data/test/assert-text-equal.rb
CHANGED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'erubis'
|
2
|
+
s = "hello <%= name %>"
|
3
|
+
eruby = Erubis::Eruby.new(s)
|
4
|
+
filename = 'hello.rhtml'
|
5
|
+
|
6
|
+
## define instance method to Dummy class (or module)
|
7
|
+
class Dummy; end
|
8
|
+
eruby.def_method(Dummy, 'render(name)', filename) # filename is optional
|
9
|
+
p Dummy.new.render('world') #=> "hello world"
|
10
|
+
|
11
|
+
## define singleton method to dummy object
|
12
|
+
obj = Object.new
|
13
|
+
eruby.def_method(obj, 'render(name)', filename) # filename is optional
|
14
|
+
p obj.render('world') #=> "hello world"
|
data/test/test-engines.rb
CHANGED
data/test/test-enhancers.rb
CHANGED
data/test/test-erubis.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
##
|
2
|
-
## $Rev:
|
3
|
-
## $Release: 2.
|
2
|
+
## $Rev: 91 $
|
3
|
+
## $Release: 2.4.0 $
|
4
4
|
## copyright(c) 2006-2007 kuwata-lab.com all rights reserved.
|
5
5
|
##
|
6
6
|
|
@@ -154,6 +154,44 @@ END
|
|
154
154
|
end
|
155
155
|
|
156
156
|
|
157
|
+
class Dummy
|
158
|
+
end
|
159
|
+
|
160
|
+
def test_def_method1
|
161
|
+
s = "<%for i in list%>i=<%=i%>\n<%end%>"
|
162
|
+
eruby = Erubis::Eruby.new(s)
|
163
|
+
assert(! Dummy.instance_methods.include?('render'))
|
164
|
+
eruby.def_method(Dummy, 'render(list)', 'foo.rhtml')
|
165
|
+
assert(Dummy.instance_methods.include?('render'))
|
166
|
+
actual = Dummy.new().render(%w[1 2 3])
|
167
|
+
assert_equal("i=1\ni=2\ni=3\n", actual)
|
168
|
+
end
|
169
|
+
|
170
|
+
def test_def_method2
|
171
|
+
s = "<%for i in list%>i=<%=i%>\n<%end%>"
|
172
|
+
eruby = Erubis::Eruby.new(s)
|
173
|
+
assert(! (eruby.respond_to? :render))
|
174
|
+
eruby.def_method(eruby, 'render(list)', 'foo.rhtml')
|
175
|
+
assert eruby.respond_to?(:render)
|
176
|
+
actual = eruby.render([1, 2, 3])
|
177
|
+
assert_equal("i=1\ni=2\ni=3\n", actual)
|
178
|
+
assert !(eruby.class.instance_methods.include? :render)
|
179
|
+
end
|
180
|
+
|
181
|
+
def test_evaluate_creates_proc
|
182
|
+
s = "hello <%= @name %>"
|
183
|
+
eruby = Erubis::Eruby.new(s)
|
184
|
+
assert_nil(eruby.instance_variable_get('@_proc'))
|
185
|
+
actual1 = eruby.evaluate(:name=>'world')
|
186
|
+
assert_not_nil(eruby.instance_variable_get('@_proc'))
|
187
|
+
assert_instance_of(Proc, eruby.instance_variable_get('@_proc'))
|
188
|
+
actual2 = eruby.evaluate(:name=>'world')
|
189
|
+
assert_equal(actual1, actual2)
|
190
|
+
# convert() must clear @_proc
|
191
|
+
eruby.convert(s)
|
192
|
+
assert_nil(eruby.instance_variable_get('@_proc'))
|
193
|
+
end
|
194
|
+
|
157
195
|
end
|
158
196
|
|
159
197
|
__END__
|