erubis 2.3.1 → 2.7.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.
- data/{CHANGES → CHANGES.txt} +373 -3
- data/MIT-LICENSE +1 -1
- data/README.txt +6 -5
- data/benchmark/bench.rb +18 -11
- data/bin/erubis +3 -4
- data/contrib/erubis +3462 -5
- data/contrib/inline-require +54 -28
- data/doc/docstyle.css +25 -4
- data/doc/users-guide.html +814 -110
- data/doc-api/classes/ActionView/TemplateHandlers/ErubisHandler.html +209 -0
- data/doc-api/classes/ActionView.html +105 -0
- data/doc-api/classes/Erubis/ArrayBufferEnhancer.html +14 -14
- data/doc-api/classes/Erubis/ArrayEnhancer.html +16 -16
- data/doc-api/classes/Erubis/Basic/Converter.html +36 -31
- data/doc-api/classes/Erubis/BiPatternEnhancer.html +16 -13
- data/doc-api/classes/Erubis/CGenerator.html +70 -70
- data/doc-api/classes/Erubis/Context.html +49 -49
- data/doc-api/classes/Erubis/Converter.html +30 -29
- data/doc-api/classes/Erubis/CppGenerator.html +382 -0
- data/doc-api/classes/Erubis/DeleteIndentEnhancer.html +7 -7
- data/doc-api/classes/Erubis/Ecpp.html +126 -0
- data/doc-api/classes/Erubis/Engine.html +46 -43
- data/doc-api/classes/Erubis/ErboutEnhancer.html +16 -16
- data/doc-api/classes/Erubis/EscapeEnhancer.html +7 -7
- data/doc-api/classes/Erubis/EscapedEcpp.html +120 -0
- data/doc-api/classes/Erubis/Evaluator.html +22 -22
- data/doc-api/classes/Erubis/Generator.html +70 -70
- data/doc-api/classes/Erubis/HeaderFooterEnhancer.html +18 -15
- data/doc-api/classes/Erubis/Helpers/RailsFormHelper.html +787 -0
- data/doc-api/classes/Erubis/Helpers/RailsHelper/TemplateConverter.html +213 -0
- data/doc-api/classes/Erubis/Helpers/RailsHelper.html +103 -54
- data/doc-api/classes/Erubis/Helpers.html +6 -1
- data/doc-api/classes/Erubis/InterpolationEnhancer.html +42 -41
- data/doc-api/classes/Erubis/JavaGenerator.html +69 -69
- data/doc-api/classes/Erubis/JavascriptGenerator.html +79 -74
- data/doc-api/classes/Erubis/Main.html +49 -48
- data/doc-api/classes/Erubis/NoCodeEnhancer.html +35 -35
- data/doc-api/classes/Erubis/NoTextEnhancer.html +7 -7
- data/doc-api/classes/Erubis/OptimizedEruby.html +7 -7
- data/doc-api/classes/Erubis/OptimizedGenerator.html +84 -84
- data/doc-api/classes/Erubis/OptimizedXmlEruby.html +7 -7
- data/doc-api/classes/Erubis/PI/Converter.html +23 -22
- data/doc-api/classes/Erubis/PI/Ec.html +7 -7
- data/doc-api/classes/Erubis/PI/Ecpp.html +166 -0
- data/doc-api/classes/Erubis/PI/Ejava.html +7 -7
- data/doc-api/classes/Erubis/PI/Ejavascript.html +7 -7
- data/doc-api/classes/Erubis/PI/Eperl.html +7 -7
- data/doc-api/classes/Erubis/PI/Ephp.html +7 -7
- data/doc-api/classes/Erubis/PI/Eruby.html +6 -6
- data/doc-api/classes/Erubis/PI/Escheme.html +7 -7
- data/doc-api/classes/Erubis/PI/TinyEruby.html +28 -27
- data/doc-api/classes/Erubis/PI.html +1 -0
- data/doc-api/classes/Erubis/PercentLineEnhancer.html +18 -29
- data/doc-api/classes/Erubis/PerlGenerator.html +63 -63
- data/doc-api/classes/Erubis/PhpGenerator.html +63 -63
- data/doc-api/classes/Erubis/PrefixedLineEnhancer.html +210 -0
- data/doc-api/classes/Erubis/PrefixedLineEruby.html +120 -0
- data/doc-api/classes/Erubis/PreprocessingEruby.html +183 -0
- data/doc-api/classes/Erubis/PreprocessingHelper.html +212 -0
- data/doc-api/classes/Erubis/PrintEnabledEnhancer.html +23 -23
- data/doc-api/classes/Erubis/PrintOutEnhancer.html +38 -38
- data/doc-api/classes/Erubis/RubyEvaluator.html +59 -22
- data/doc-api/classes/Erubis/RubyGenerator.html +53 -52
- data/doc-api/classes/Erubis/SchemeGenerator.html +70 -70
- data/doc-api/classes/Erubis/SimplifyEnhancer.html +10 -9
- data/doc-api/classes/Erubis/StdoutEnhancer.html +3 -3
- data/doc-api/classes/Erubis/StringBufferEnhancer.html +16 -16
- data/doc-api/classes/Erubis/TinyEruby.html +33 -33
- data/doc-api/classes/Erubis/XmlHelper.html +80 -15
- data/doc-api/classes/Erubis.html +25 -1
- data/doc-api/classes/Kernel.html +155 -0
- data/doc-api/created.rid +1 -1
- data/doc-api/files/README_txt.html +8 -8
- data/doc-api/files/erubis/context_rb.html +2 -2
- data/doc-api/files/erubis/converter_rb.html +3 -3
- data/doc-api/files/erubis/engine/ec_rb.html +2 -2
- data/doc-api/files/erubis/engine/ecpp_rb.html +115 -0
- data/doc-api/files/erubis/engine/ejava_rb.html +2 -2
- data/doc-api/files/erubis/engine/ejavascript_rb.html +2 -2
- data/doc-api/files/erubis/engine/enhanced_rb.html +2 -2
- data/doc-api/files/erubis/engine/eperl_rb.html +2 -2
- data/doc-api/files/erubis/engine/ephp_rb.html +2 -2
- data/doc-api/files/erubis/engine/eruby_rb.html +2 -2
- data/doc-api/files/erubis/engine/escheme_rb.html +2 -2
- data/doc-api/files/erubis/engine/optimized_rb.html +2 -2
- data/doc-api/files/erubis/engine_rb.html +2 -2
- data/doc-api/files/erubis/enhancer_rb.html +2 -2
- data/doc-api/files/erubis/error_rb.html +2 -2
- data/doc-api/files/erubis/evaluator_rb.html +2 -2
- data/doc-api/files/erubis/generator_rb.html +3 -3
- data/doc-api/files/erubis/helper_rb.html +2 -2
- data/doc-api/files/erubis/helpers/rails_form_helper_rb.html +107 -0
- data/doc-api/files/erubis/helpers/rails_helper_rb.html +3 -2
- data/doc-api/files/erubis/local-setting_rb.html +2 -2
- data/doc-api/files/erubis/main_rb.html +4 -2
- data/doc-api/files/erubis/preprocessing_rb.html +114 -0
- data/doc-api/files/erubis/tiny_rb.html +2 -2
- data/doc-api/files/erubis/util_rb.html +107 -0
- data/doc-api/files/erubis_rb.html +2 -2
- data/doc-api/fr_class_index.html +13 -0
- data/doc-api/fr_file_index.html +4 -0
- data/doc-api/fr_method_index.html +237 -179
- data/examples/basic/Makefile +7 -2
- data/examples/basic/example.ecpp +33 -0
- data/lib/erubis/context.rb +2 -3
- data/lib/erubis/converter.rb +17 -11
- data/lib/erubis/engine/ec.rb +2 -3
- data/lib/erubis/engine/ecpp.rb +113 -0
- data/lib/erubis/engine/ejava.rb +9 -10
- data/lib/erubis/engine/ejavascript.rb +14 -9
- data/lib/erubis/engine/enhanced.rb +7 -3
- data/lib/erubis/engine/eperl.rb +2 -3
- data/lib/erubis/engine/ephp.rb +2 -3
- data/lib/erubis/engine/eruby.rb +8 -8
- data/lib/erubis/engine/escheme.rb +2 -3
- data/lib/erubis/engine/optimized.rb +2 -3
- data/lib/erubis/engine.rb +13 -11
- data/lib/erubis/enhancer.rb +101 -34
- data/lib/erubis/error.rb +2 -3
- data/lib/erubis/evaluator.rb +27 -10
- data/lib/erubis/generator.rb +3 -4
- data/lib/erubis/helper.rb +14 -3
- data/lib/erubis/helpers/rails_form_helper.rb +197 -0
- data/lib/erubis/helpers/rails_helper.rb +219 -77
- data/lib/erubis/local-setting.rb +2 -3
- data/lib/erubis/main.rb +85 -60
- data/lib/erubis/preprocessing.rb +58 -0
- data/lib/erubis/tiny.rb +9 -9
- data/lib/erubis/util.rb +22 -0
- data/lib/erubis.rb +4 -4
- data/test/assert-text-equal.rb +2 -3
- data/test/data/users-guide/bufvar-example.rb +10 -0
- data/test/data/users-guide/bufvar-example.result +17 -0
- data/test/data/users-guide/def_method.rb +14 -0
- data/test/data/users-guide/def_method.result +3 -0
- data/test/data/users-guide/example.ecpp +30 -0
- data/test/data/users-guide/example1.rb +1 -0
- data/test/data/users-guide/example_c.result +22 -19
- data/test/data/users-guide/fasteruby-example.rb +8 -0
- data/test/data/users-guide/fasteruby-example.result +18 -0
- data/test/data/users-guide/main_program1.rb +8 -0
- data/test/data/users-guide/main_program1.result +6 -0
- data/test/data/users-guide/main_program2.rb +8 -0
- data/test/data/users-guide/main_program2.result +6 -0
- data/test/data/users-guide/percentline-example.rhtml +3 -1
- data/test/data/users-guide/percentline_example.result +5 -3
- data/test/data/users-guide/prefixedline-example.rb +9 -0
- data/test/data/users-guide/prefixedline-example.rhtml +6 -0
- data/test/data/users-guide/prefixedline_example.result +9 -0
- data/test/data/users-guide/tail_260.result +4 -0
- data/test/data/users-guide/tailnewline.rhtml +3 -0
- data/test/data/users-guide/template1.rhtml +4 -0
- data/test/data/users-guide/template2.rhtml +4 -0
- data/test/test-engines.rb +88 -5
- data/test/test-enhancers.rb +83 -6
- data/test/test-erubis.rb +115 -11
- data/test/test-index-cgi.rb +191 -0
- data/test/test-main.rb +143 -31
- data/test/test-users-guide.rb +20 -3
- data/test/test.rb +18 -3
- data/test/testutil.rb +44 -8
- metadata +104 -67
- data/contrib/action_view_base_rb.patch +0 -23
data/lib/erubis/enhancer.rb
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
##
|
|
2
|
-
## $
|
|
3
|
-
##
|
|
4
|
-
## copyright(c) 2006-2007 kuwata-lab.com all rights reserved.
|
|
2
|
+
## $Release: 2.7.0 $
|
|
3
|
+
## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
|
|
5
4
|
##
|
|
6
5
|
|
|
7
6
|
|
|
@@ -68,7 +67,7 @@ module Erubis
|
|
|
68
67
|
end
|
|
69
68
|
|
|
70
69
|
def add_preamble(src)
|
|
71
|
-
src << "
|
|
70
|
+
src << "#{@bufvar} = $stdout;"
|
|
72
71
|
end
|
|
73
72
|
|
|
74
73
|
def add_postamble(src)
|
|
@@ -93,15 +92,15 @@ module Erubis
|
|
|
93
92
|
end
|
|
94
93
|
|
|
95
94
|
def add_text(src, text)
|
|
96
|
-
src << " print '
|
|
95
|
+
src << " print '#{escape_text(text)}';" unless text.empty?
|
|
97
96
|
end
|
|
98
97
|
|
|
99
98
|
def add_expr_literal(src, code)
|
|
100
|
-
src <<
|
|
99
|
+
src << " print((#{code}).to_s);"
|
|
101
100
|
end
|
|
102
101
|
|
|
103
102
|
def add_expr_escaped(src, code)
|
|
104
|
-
src <<
|
|
103
|
+
src << " print #{escaped_expr(code)};"
|
|
105
104
|
end
|
|
106
105
|
|
|
107
106
|
def add_postamble(src)
|
|
@@ -163,12 +162,12 @@ module Erubis
|
|
|
163
162
|
end
|
|
164
163
|
|
|
165
164
|
def add_preamble(src)
|
|
166
|
-
src << "
|
|
165
|
+
src << "#{@bufvar} = [];"
|
|
167
166
|
end
|
|
168
167
|
|
|
169
168
|
def add_postamble(src)
|
|
170
169
|
src << "\n" unless src[-1] == ?\n
|
|
171
|
-
src << "
|
|
170
|
+
src << "#{@bufvar}\n"
|
|
172
171
|
end
|
|
173
172
|
|
|
174
173
|
end
|
|
@@ -209,12 +208,12 @@ module Erubis
|
|
|
209
208
|
end
|
|
210
209
|
|
|
211
210
|
def add_preamble(src)
|
|
212
|
-
src << "
|
|
211
|
+
src << "#{@bufvar} = '';"
|
|
213
212
|
end
|
|
214
213
|
|
|
215
214
|
def add_postamble(src)
|
|
216
215
|
src << "\n" unless src[-1] == ?\n
|
|
217
|
-
src << "
|
|
216
|
+
src << "#{@bufvar}.to_s\n"
|
|
218
217
|
end
|
|
219
218
|
|
|
220
219
|
end
|
|
@@ -232,12 +231,12 @@ module Erubis
|
|
|
232
231
|
end
|
|
233
232
|
|
|
234
233
|
def add_preamble(src)
|
|
235
|
-
src << "
|
|
234
|
+
src << "#{@bufvar} = StringIO.new;"
|
|
236
235
|
end
|
|
237
236
|
|
|
238
237
|
def add_postamble(src)
|
|
239
238
|
src << "\n" unless src[-1] == ?\n
|
|
240
|
-
src << "
|
|
239
|
+
src << "#{@bufvar}.string\n"
|
|
241
240
|
end
|
|
242
241
|
|
|
243
242
|
end
|
|
@@ -255,12 +254,12 @@ module Erubis
|
|
|
255
254
|
end
|
|
256
255
|
|
|
257
256
|
def add_preamble(src)
|
|
258
|
-
src << "_erbout =
|
|
257
|
+
src << "_erbout = #{@bufvar} = '';"
|
|
259
258
|
end
|
|
260
259
|
|
|
261
260
|
def add_postamble(src)
|
|
262
261
|
src << "\n" unless src[-1] == ?\n
|
|
263
|
-
src << "
|
|
262
|
+
src << "#{@bufvar}.to_s\n"
|
|
264
263
|
end
|
|
265
264
|
|
|
266
265
|
end
|
|
@@ -360,7 +359,8 @@ module Erubis
|
|
|
360
359
|
add_expr(src, code, indicator)
|
|
361
360
|
end
|
|
362
361
|
end
|
|
363
|
-
rest = $' || input
|
|
362
|
+
#rest = $' || input # ruby1.8
|
|
363
|
+
rest = pos == 0 ? input : input[pos..-1] # ruby1.9
|
|
364
364
|
add_text(src, rest)
|
|
365
365
|
add_postamble(src)
|
|
366
366
|
return src
|
|
@@ -419,11 +419,72 @@ module Erubis
|
|
|
419
419
|
|
|
420
420
|
def add_text(src, text)
|
|
421
421
|
return unless text
|
|
422
|
+
m = nil
|
|
422
423
|
text.scan(@bipattern_regexp) do |txt, indicator, code|
|
|
424
|
+
m = Regexp.last_match
|
|
423
425
|
super(src, txt)
|
|
424
426
|
add_expr(src, code, '=' + indicator)
|
|
425
427
|
end
|
|
426
|
-
rest = $' || text
|
|
428
|
+
#rest = $' || text # ruby1.8
|
|
429
|
+
rest = m ? text[m.end(0)..-1] : text # ruby1.9
|
|
430
|
+
super(src, rest)
|
|
431
|
+
end
|
|
432
|
+
|
|
433
|
+
end
|
|
434
|
+
|
|
435
|
+
|
|
436
|
+
##
|
|
437
|
+
## regards lines starting with '^[ \t]*%' as program code
|
|
438
|
+
##
|
|
439
|
+
## in addition you can specify prefix character (default '%')
|
|
440
|
+
##
|
|
441
|
+
## this is language-independent.
|
|
442
|
+
##
|
|
443
|
+
module PrefixedLineEnhancer
|
|
444
|
+
|
|
445
|
+
def self.desc # :nodoc:
|
|
446
|
+
"regard lines matched to '^[ \t]*%' as program code"
|
|
447
|
+
end
|
|
448
|
+
|
|
449
|
+
def init_generator(properties={})
|
|
450
|
+
super
|
|
451
|
+
@prefixchar = properties[:prefixchar]
|
|
452
|
+
end
|
|
453
|
+
|
|
454
|
+
def add_text(src, text)
|
|
455
|
+
unless @prefixrexp
|
|
456
|
+
@prefixchar ||= '%'
|
|
457
|
+
@prefixrexp = Regexp.compile("^([ \\t]*)\\#{@prefixchar}(.*?\\r?\\n)")
|
|
458
|
+
end
|
|
459
|
+
pos = 0
|
|
460
|
+
text2 = ''
|
|
461
|
+
text.scan(@prefixrexp) do
|
|
462
|
+
space = $1
|
|
463
|
+
line = $2
|
|
464
|
+
space, line = '', $1 unless $2
|
|
465
|
+
match = Regexp.last_match
|
|
466
|
+
len = match.begin(0) - pos
|
|
467
|
+
str = text[pos, len]
|
|
468
|
+
pos = match.end(0)
|
|
469
|
+
if text2.empty?
|
|
470
|
+
text2 = str
|
|
471
|
+
else
|
|
472
|
+
text2 << str
|
|
473
|
+
end
|
|
474
|
+
if line[0, 1] == @prefixchar
|
|
475
|
+
text2 << space << line
|
|
476
|
+
else
|
|
477
|
+
super(src, text2)
|
|
478
|
+
text2 = ''
|
|
479
|
+
add_stmt(src, space + line)
|
|
480
|
+
end
|
|
481
|
+
end
|
|
482
|
+
#rest = pos == 0 ? text : $' # ruby1.8
|
|
483
|
+
rest = pos == 0 ? text : text[pos..-1] # ruby1.9
|
|
484
|
+
unless text2.empty?
|
|
485
|
+
text2 << rest if rest
|
|
486
|
+
rest = text2
|
|
487
|
+
end
|
|
427
488
|
super(src, rest)
|
|
428
489
|
end
|
|
429
490
|
|
|
@@ -438,24 +499,26 @@ module Erubis
|
|
|
438
499
|
## this is language-independent.
|
|
439
500
|
##
|
|
440
501
|
module PercentLineEnhancer
|
|
502
|
+
include PrefixedLineEnhancer
|
|
441
503
|
|
|
442
504
|
def self.desc # :nodoc:
|
|
443
505
|
"regard lines starting with '%' as program code"
|
|
444
506
|
end
|
|
445
507
|
|
|
446
|
-
|
|
508
|
+
#--
|
|
509
|
+
#def init_generator(properties={})
|
|
510
|
+
# super
|
|
511
|
+
# @prefixchar = '%'
|
|
512
|
+
# @prefixrexp = /^\%(.*?\r?\n)/
|
|
513
|
+
#end
|
|
514
|
+
#++
|
|
447
515
|
|
|
448
516
|
def add_text(src, text)
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
super(src, line)
|
|
453
|
-
else
|
|
454
|
-
add_stmt(src, line)
|
|
455
|
-
end
|
|
517
|
+
unless @prefixrexp
|
|
518
|
+
@prefixchar = '%'
|
|
519
|
+
@prefixrexp = /^\%(.*?\r?\n)/
|
|
456
520
|
end
|
|
457
|
-
|
|
458
|
-
super(src, rest)
|
|
521
|
+
super(src, text)
|
|
459
522
|
end
|
|
460
523
|
|
|
461
524
|
end
|
|
@@ -520,7 +583,9 @@ module Erubis
|
|
|
520
583
|
HEADER_FOOTER_PATTERN = /(.*?)(^[ \t]*)?<!--\#(\w+):(.*?)\#-->([ \t]*\r?\n)?/m
|
|
521
584
|
|
|
522
585
|
def add_text(src, text)
|
|
586
|
+
m = nil
|
|
523
587
|
text.scan(HEADER_FOOTER_PATTERN) do |txt, lspace, word, content, rspace|
|
|
588
|
+
m = Regexp.last_match
|
|
524
589
|
flag_trim = @trim && lspace && rspace
|
|
525
590
|
super(src, txt)
|
|
526
591
|
content = "#{lspace}#{content}#{rspace}" if flag_trim
|
|
@@ -528,7 +593,8 @@ module Erubis
|
|
|
528
593
|
instance_variable_set("@#{word}", content)
|
|
529
594
|
super(src, rspace) if !flag_trim && rspace
|
|
530
595
|
end
|
|
531
|
-
rest = $' || text
|
|
596
|
+
#rest = $' || text # ruby1.8
|
|
597
|
+
rest = m ? text[m.end(0)..-1] : text # ruby1.9
|
|
532
598
|
super(src, rest)
|
|
533
599
|
end
|
|
534
600
|
|
|
@@ -578,7 +644,7 @@ module Erubis
|
|
|
578
644
|
pos = 0
|
|
579
645
|
is_bol = true # is beginning of line
|
|
580
646
|
str = ''
|
|
581
|
-
input.scan(regexp) do |indicator, code, rspace|
|
|
647
|
+
input.scan(regexp) do |indicator, code, tailch, rspace|
|
|
582
648
|
match = Regexp.last_match()
|
|
583
649
|
len = match.begin(0) - pos
|
|
584
650
|
text = input[pos, len]
|
|
@@ -590,6 +656,7 @@ module Erubis
|
|
|
590
656
|
## * when '<%= %>', do nothing
|
|
591
657
|
## * when '<% %>' or '<%# %>', delete spaces iff only spaces are around '<% %>'
|
|
592
658
|
if ch == ?= # <%= %>
|
|
659
|
+
rspace = nil if tailch && !tailch.empty?
|
|
593
660
|
str << lspace if lspace
|
|
594
661
|
add_expr(str, code, indicator)
|
|
595
662
|
str << rspace if rspace
|
|
@@ -620,7 +687,8 @@ module Erubis
|
|
|
620
687
|
end
|
|
621
688
|
end
|
|
622
689
|
end
|
|
623
|
-
rest = $' || input
|
|
690
|
+
#rest = $' || input # ruby1.8
|
|
691
|
+
rest = pos == 0 ? input : input[pos..-1] # ruby1.9
|
|
624
692
|
_add_text_to_str(str, rest)
|
|
625
693
|
add_text(src, str)
|
|
626
694
|
end
|
|
@@ -630,16 +698,15 @@ module Erubis
|
|
|
630
698
|
#src << " _buf << %Q`" << text << "`;"
|
|
631
699
|
if text[-1] == ?\n
|
|
632
700
|
text[-1] = "\\n"
|
|
633
|
-
src << "
|
|
701
|
+
src << " #{@bufvar} << %Q`#{text}`\n"
|
|
634
702
|
else
|
|
635
|
-
src << "
|
|
703
|
+
src << " #{@bufvar} << %Q`#{text}`;"
|
|
636
704
|
end
|
|
637
705
|
end
|
|
638
706
|
|
|
639
707
|
def _add_text_to_str(str, text)
|
|
640
708
|
return if !text || text.empty?
|
|
641
|
-
text.gsub
|
|
642
|
-
str << text
|
|
709
|
+
str << text.gsub(/[`\#\\]/, '\\\\\&')
|
|
643
710
|
end
|
|
644
711
|
|
|
645
712
|
def add_expr_escaped(str, code)
|
data/lib/erubis/error.rb
CHANGED
data/lib/erubis/evaluator.rb
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
##
|
|
2
|
-
## $
|
|
3
|
-
##
|
|
4
|
-
## copyright(c) 2006-2007 kuwata-lab.com all rights reserved.
|
|
2
|
+
## $Release: 2.7.0 $
|
|
3
|
+
## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
|
|
5
4
|
##
|
|
6
5
|
|
|
7
6
|
require 'erubis/error'
|
|
@@ -10,6 +9,8 @@ require 'erubis/context'
|
|
|
10
9
|
|
|
11
10
|
module Erubis
|
|
12
11
|
|
|
12
|
+
EMPTY_BINDING = binding()
|
|
13
|
+
|
|
13
14
|
|
|
14
15
|
##
|
|
15
16
|
## evaluate code
|
|
@@ -52,19 +53,35 @@ module Erubis
|
|
|
52
53
|
def result(_binding_or_hash=TOPLEVEL_BINDING)
|
|
53
54
|
_arg = _binding_or_hash
|
|
54
55
|
if _arg.is_a?(Hash)
|
|
55
|
-
|
|
56
|
-
eval _arg.
|
|
57
|
-
|
|
56
|
+
_b = binding()
|
|
57
|
+
eval _arg.collect{|k,v| "#{k} = _arg[#{k.inspect}]; "}.join, _b
|
|
58
|
+
elsif _arg.is_a?(Binding)
|
|
59
|
+
_b = _arg
|
|
60
|
+
elsif _arg.nil?
|
|
61
|
+
_b = binding()
|
|
62
|
+
else
|
|
63
|
+
raise ArgumentError.new("#{self.class.name}#result(): argument should be Binding or Hash but passed #{_arg.class.name} object.")
|
|
58
64
|
end
|
|
59
|
-
return eval(@src,
|
|
65
|
+
return eval(@src, _b, (@filename || '(erubis'))
|
|
60
66
|
end
|
|
61
67
|
|
|
62
68
|
## invoke context.instance_eval(@src)
|
|
63
|
-
def evaluate(
|
|
64
|
-
|
|
65
|
-
return
|
|
69
|
+
def evaluate(_context=Context.new)
|
|
70
|
+
_context = Context.new(_context) if _context.is_a?(Hash)
|
|
71
|
+
#return _context.instance_eval(@src, @filename || '(erubis)')
|
|
72
|
+
#@_proc ||= eval("proc { #{@src} }", Erubis::EMPTY_BINDING, @filename || '(erubis)')
|
|
73
|
+
@_proc ||= eval("proc { #{@src} }", binding(), @filename || '(erubis)')
|
|
74
|
+
return _context.instance_eval(&@_proc)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
## if object is an Class or Module then define instance method to it,
|
|
78
|
+
## else define singleton method to it.
|
|
79
|
+
def def_method(object, method_name, filename=nil)
|
|
80
|
+
m = object.is_a?(Module) ? :module_eval : :instance_eval
|
|
81
|
+
object.__send__(m, "def #{method_name}; #{@src}; end", filename || @filename || '(erubis)')
|
|
66
82
|
end
|
|
67
83
|
|
|
84
|
+
|
|
68
85
|
end
|
|
69
86
|
|
|
70
87
|
|
data/lib/erubis/generator.rb
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
##
|
|
2
|
-
## $
|
|
3
|
-
##
|
|
4
|
-
## copyright(c) 2006-2007 kuwata-lab.com all rights reserved.
|
|
2
|
+
## $Release: 2.7.0 $
|
|
3
|
+
## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
|
|
5
4
|
##
|
|
6
5
|
|
|
7
|
-
require '
|
|
6
|
+
require 'erubis/util'
|
|
8
7
|
|
|
9
8
|
module Erubis
|
|
10
9
|
|
data/lib/erubis/helper.rb
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
##
|
|
2
|
-
## $
|
|
3
|
-
##
|
|
4
|
-
## copyright(c) 2006-2007 kuwata-lab.com all rights reserved.
|
|
2
|
+
## $Release: 2.7.0 $
|
|
3
|
+
## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
|
|
5
4
|
##
|
|
6
5
|
|
|
7
6
|
|
|
@@ -27,9 +26,21 @@ module Erubis
|
|
|
27
26
|
#value.to_s.gsub(/[&<>"]/) { ESCAPE_TABLE[$&] }
|
|
28
27
|
end
|
|
29
28
|
|
|
29
|
+
def escape_xml2(value)
|
|
30
|
+
return value.to_s.gsub(/\&/,'&').gsub(/</,'<').gsub(/>/,'>').gsub(/"/,'"')
|
|
31
|
+
end
|
|
32
|
+
|
|
30
33
|
alias h escape_xml
|
|
31
34
|
alias html_escape escape_xml
|
|
32
35
|
|
|
36
|
+
def url_encode(str)
|
|
37
|
+
return str.gsub(/[^-_.a-zA-Z0-9]+/) { |s|
|
|
38
|
+
s.unpack('C*').collect { |i| "%%%02X" % i }.join
|
|
39
|
+
}
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
alias u url_encode
|
|
43
|
+
|
|
33
44
|
end
|
|
34
45
|
|
|
35
46
|
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
###
|
|
2
|
+
### $Release: 2.7.0 $
|
|
3
|
+
### copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
|
|
4
|
+
###
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
module Erubis
|
|
8
|
+
module Helpers
|
|
9
|
+
module RailsFormHelper
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
module Erubis::Helpers::RailsFormHelper
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
if ActionPack::VERSION::MAJOR == 1 ### Rails 1.X
|
|
19
|
+
def pp_template_filename(basename)
|
|
20
|
+
return "#{RAILS_ROOT}/app/views/#{controller.controller_name}/#{basename}.rhtml"
|
|
21
|
+
end
|
|
22
|
+
else ### Rails 2.X
|
|
23
|
+
def pp_template_filename(basename)
|
|
24
|
+
fname = "#{RAILS_ROOT}/app/views/#{controller.controller_name}/#{basename}.html.erb"
|
|
25
|
+
return fname if test(?f, fname)
|
|
26
|
+
return "#{RAILS_ROOT}/app/views/#{controller.controller_name}/#{basename}.rhtml"
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def pp_render_partial(basename)
|
|
31
|
+
basename = "_#{basename}" unless basename[0] == ?_
|
|
32
|
+
filename = pp_template_filename(basename)
|
|
33
|
+
preprocessor = _create_preprocessor(File.read(filename))
|
|
34
|
+
return preprocessor.evaluate(_preprocessing_context_object())
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def pp_error_on(object_name, method)
|
|
38
|
+
s = ''
|
|
39
|
+
s << "<% _stag, _etag = _pp_error_tags(@#{object_name}.errors.on('#{method}')) %>"
|
|
40
|
+
s << "<%= _stag %>"
|
|
41
|
+
s << yield(object_name, method)
|
|
42
|
+
s << "<%= _etag %>"
|
|
43
|
+
return s
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def _pp_error_tags(value)
|
|
47
|
+
return value ? ['<div class="fieldWithErrors">', '</div>'] : ['', '']
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def _pp_remove_error_div(s)
|
|
51
|
+
s.sub!(/\A<div class="fieldWithErrors">(.*)<\/div>\z/, '\1')
|
|
52
|
+
return s
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def pp_tag_helper(helper, object_name, method, options={})
|
|
56
|
+
if object_name.is_a?(ActionView::Helpers::FormHelper)
|
|
57
|
+
object_name = object_name.object_name
|
|
58
|
+
end
|
|
59
|
+
unless options.key?(:value) || options.key?('value')
|
|
60
|
+
options['value'] = _?("h @#{object_name}.#{method}")
|
|
61
|
+
end
|
|
62
|
+
#$stderr.puts "*** debug: pp_tag_helper(): options=#{options.inspect}"
|
|
63
|
+
return pp_error_on(object_name, method) {
|
|
64
|
+
s = __send__(helper, object_name, method, options)
|
|
65
|
+
_pp_remove_error_div(s)
|
|
66
|
+
}
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def pp_form_tag(url_for_options={}, options={}, *parameters_for_url, &block)
|
|
70
|
+
return form_tag(url_for_options, options, *parameters_for_url, &block)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
#--
|
|
74
|
+
#def pp_form_for(object_name, *args, &block)
|
|
75
|
+
# return form_for(object_name, *args, &block)
|
|
76
|
+
#end
|
|
77
|
+
#++
|
|
78
|
+
|
|
79
|
+
def pp_text_field(object_name, method, options={})
|
|
80
|
+
return pp_tag_helper(:text_field, object_name, method, options)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def pp_password_field(object_name, method, options={})
|
|
84
|
+
return pp_tag_helper(:password_field, object_name, method, options)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def pp_hidden_field(object_name, method, options={})
|
|
88
|
+
return pp_tag_helper(:hidden_field, object_name, method, options)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def pp_file_field(object_name, method, options={})
|
|
92
|
+
return pp_tag_helper(:file_field, object_name, method, options)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def pp_text_area(object_name, method, options={})
|
|
96
|
+
return pp_tag_helper(:text_area, object_name, method, options)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def pp_check_box(object_name, method, options={}, checked_value="1", unchecked_value="0")
|
|
100
|
+
s = check_box(object_name, method, options, checked_value, unchecked_value)
|
|
101
|
+
s.sub!(/\schecked=\"checked\"/, '')
|
|
102
|
+
s.sub!(/type="checkbox"/, "\\&<%= _pp_check_box_checked?(@#{object_name}.#{method}, #{checked_value.inspect}) ? ' checked=\"checked\"' : '' %>")
|
|
103
|
+
return pp_error_on(object_name, method) { _pp_remove_error_div(s) }
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def _pp_check_box_checked?(value, checked_value)
|
|
107
|
+
return ActionView::Helpers::InstanceTag::check_box_checked?(value, checked_value)
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def pp_radio_button(object_name, method, tag_value, options={})
|
|
111
|
+
s = radio_button(object_name, method, tag_value, options)
|
|
112
|
+
s.sub!(/\schecked=\"checked\"/, '')
|
|
113
|
+
s.sub!(/type="radio"/, "\\&<%= _pp_radio_button_checked?(@#{object_name}.#{method}, #{tag_value.inspect}) ? ' checked=\"checked\"' : '' %>")
|
|
114
|
+
return pp_error_on(object_name, method) { _pp_remove_error_div(s) }
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def _pp_radio_button_checked?(value, tag_value)
|
|
118
|
+
return ActionView::Helpers::InstanceTag::radio_button_checked?(value, tag_value)
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def _pp_select(object, method, collection, priority_collection, options={}, html_options={})
|
|
122
|
+
return pp_error_on(object, method) do
|
|
123
|
+
s = ""
|
|
124
|
+
## start tag
|
|
125
|
+
s << "<select id=\"#{object}_#{method}\" name=\"#{object}[#{method}]\""
|
|
126
|
+
for key, val in html_options:
|
|
127
|
+
s << " #{key}=\"#{val}\""
|
|
128
|
+
end
|
|
129
|
+
s << ">\n"
|
|
130
|
+
## selected table
|
|
131
|
+
key = options.key?(:value) ? :value : (options.key?('value') ? 'value' : nil)
|
|
132
|
+
if key.nil? ; selected = "@#{object}.#{method}"
|
|
133
|
+
elsif (val=options[key]).nil? ; selected = nil
|
|
134
|
+
elsif val =~ /\A<%=(.*)%>\z/ ; selected = $1
|
|
135
|
+
else ; selected = val.inspect
|
|
136
|
+
end
|
|
137
|
+
s << "<% _table = {#{selected}=>' selected=\"selected\"'} %>\n" if selected
|
|
138
|
+
## <option> tags
|
|
139
|
+
if options[:include_blank] || options['include_blank']
|
|
140
|
+
s << "<option value=\"\"></option>\n"
|
|
141
|
+
end
|
|
142
|
+
unless priority_collection.blank?
|
|
143
|
+
_pp_select_options(s, priority_collection, selected, 'delete')
|
|
144
|
+
s << "<option value=\"\">-------------</option>\n"
|
|
145
|
+
end
|
|
146
|
+
_pp_select_options(s, collection, selected, '[]')
|
|
147
|
+
## end tag
|
|
148
|
+
s << "</select>"
|
|
149
|
+
s
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
def _pp_select_options(s, collection, selected, operator)
|
|
154
|
+
for item in collection
|
|
155
|
+
value, text = item.is_a?(Array) ? item : [item, item]
|
|
156
|
+
if !selected
|
|
157
|
+
t = ''
|
|
158
|
+
elsif operator == 'delete'
|
|
159
|
+
t = "<%= _table.delete(#{value.inspect}) %>"
|
|
160
|
+
else
|
|
161
|
+
t = "<%= _table[#{value.inspect}] %>"
|
|
162
|
+
end
|
|
163
|
+
s << "<option value=\"#{h value}\"#{t}>#{h text}</option>\n"
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def pp_select(object, method, collection, options={}, html_options={})
|
|
168
|
+
return _pp_select(object, method, collection, nil, options, html_options)
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
def pp_collection_select(object, method, collection, value_method, text_method, options={}, html_options={})
|
|
172
|
+
collection2 = collection.collect { |e|
|
|
173
|
+
[e.__send__(value_method), e.__send__(text_method)]
|
|
174
|
+
}
|
|
175
|
+
return _pp_select(object, method, collection2, nil, options, html_options)
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
def pp_country_select(object, method, priority_countries=nil, options={}, html_options={})
|
|
179
|
+
collection = ActionView::Helpers::FormOptionsHelper::COUNTRIES
|
|
180
|
+
return _pp_select(object, method, collection, priority_countries, options, html_options)
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
def pp_time_zone_select(object, method, priority_zones=nil, options={}, html_options={})
|
|
184
|
+
model = options[:model] || options['model'] || TimeZone
|
|
185
|
+
collection = model.all.collect { |e| [e.name, e.to_s] }
|
|
186
|
+
return _pp_select(object, method, collection, priority_zones, options, html_options)
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
def pp_submit_tag(value="Save changes", options={})
|
|
190
|
+
return submit_tag(value, options)
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
def pp_image_submit_tag(source, options={})
|
|
194
|
+
return image_submit_tag(source, options)
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
end
|