erubis 2.3.1 → 2.7.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|