erubis 2.3.1 → 2.4.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.
Files changed (97) hide show
  1. data/CHANGES +69 -2
  2. data/README.txt +1 -1
  3. data/benchmark/bench.rb +1 -1
  4. data/bin/erubis +1 -1
  5. data/contrib/erubis +3295 -2
  6. data/contrib/inline-require +1 -1
  7. data/doc-api/classes/Erubis.html +1 -1
  8. data/doc-api/classes/Erubis/ArrayEnhancer.html +12 -12
  9. data/doc-api/classes/Erubis/Basic/Converter.html +4 -4
  10. data/doc-api/classes/Erubis/BiPatternEnhancer.html +12 -12
  11. data/doc-api/classes/Erubis/CGenerator.html +60 -60
  12. data/doc-api/classes/Erubis/Context.html +42 -42
  13. data/doc-api/classes/Erubis/Converter.html +3 -2
  14. data/doc-api/classes/Erubis/DeleteIndentEnhancer.html +6 -6
  15. data/doc-api/classes/Erubis/Engine.html +30 -30
  16. data/doc-api/classes/Erubis/ErboutEnhancer.html +12 -12
  17. data/doc-api/classes/Erubis/EscapeEnhancer.html +6 -6
  18. data/doc-api/classes/Erubis/HeaderFooterEnhancer.html +12 -12
  19. data/doc-api/classes/Erubis/Helpers/RailsHelper.html +62 -7
  20. data/doc-api/classes/Erubis/Helpers/RailsHelper/PreprocessingEruby.html +177 -0
  21. data/doc-api/classes/Erubis/JavaGenerator.html +54 -54
  22. data/doc-api/classes/Erubis/JavascriptGenerator.html +60 -60
  23. data/doc-api/classes/Erubis/Main.html +20 -20
  24. data/doc-api/classes/Erubis/NoTextEnhancer.html +6 -6
  25. data/doc-api/classes/Erubis/OptimizedEruby.html +6 -6
  26. data/doc-api/classes/Erubis/OptimizedGenerator.html +72 -72
  27. data/doc-api/classes/Erubis/OptimizedXmlEruby.html +6 -6
  28. data/doc-api/classes/Erubis/PI/Converter.html +3 -3
  29. data/doc-api/classes/Erubis/PercentLineEnhancer.html +6 -6
  30. data/doc-api/classes/Erubis/PhpGenerator.html +54 -54
  31. data/doc-api/classes/Erubis/PrintEnabledEnhancer.html +20 -20
  32. data/doc-api/classes/Erubis/PrintOutEnhancer.html +30 -30
  33. data/doc-api/classes/Erubis/RubyEvaluator.html +47 -15
  34. data/doc-api/classes/Erubis/StringBufferEnhancer.html +12 -12
  35. data/doc-api/classes/Erubis/TinyEruby.html +24 -24
  36. data/doc-api/classes/Erubis/XmlHelper.html +79 -14
  37. data/doc-api/created.rid +1 -1
  38. data/doc-api/files/README_txt.html +2 -2
  39. data/doc-api/files/erubis/context_rb.html +1 -1
  40. data/doc-api/files/erubis/converter_rb.html +2 -2
  41. data/doc-api/files/erubis/engine/ec_rb.html +1 -1
  42. data/doc-api/files/erubis/engine/ejava_rb.html +1 -1
  43. data/doc-api/files/erubis/engine/ejavascript_rb.html +1 -1
  44. data/doc-api/files/erubis/engine/enhanced_rb.html +1 -1
  45. data/doc-api/files/erubis/engine/eperl_rb.html +1 -1
  46. data/doc-api/files/erubis/engine/ephp_rb.html +1 -1
  47. data/doc-api/files/erubis/engine/eruby_rb.html +1 -1
  48. data/doc-api/files/erubis/engine/escheme_rb.html +1 -1
  49. data/doc-api/files/erubis/engine/optimized_rb.html +1 -1
  50. data/doc-api/files/erubis/engine_rb.html +1 -1
  51. data/doc-api/files/erubis/enhancer_rb.html +1 -1
  52. data/doc-api/files/erubis/error_rb.html +1 -1
  53. data/doc-api/files/erubis/evaluator_rb.html +2 -2
  54. data/doc-api/files/erubis/generator_rb.html +1 -1
  55. data/doc-api/files/erubis/helper_rb.html +2 -2
  56. data/doc-api/files/erubis/helpers/rails_helper_rb.html +3 -2
  57. data/doc-api/files/erubis/local-setting_rb.html +1 -1
  58. data/doc-api/files/erubis/main_rb.html +2 -2
  59. data/doc-api/files/erubis/tiny_rb.html +1 -1
  60. data/doc-api/files/erubis_rb.html +1 -1
  61. data/doc-api/fr_class_index.html +1 -0
  62. data/doc-api/fr_method_index.html +128 -120
  63. data/doc/users-guide.html +248 -88
  64. data/lib/erubis.rb +2 -2
  65. data/lib/erubis/context.rb +1 -1
  66. data/lib/erubis/converter.rb +3 -2
  67. data/lib/erubis/engine.rb +1 -1
  68. data/lib/erubis/engine/ec.rb +1 -1
  69. data/lib/erubis/engine/ejava.rb +1 -1
  70. data/lib/erubis/engine/ejavascript.rb +1 -1
  71. data/lib/erubis/engine/enhanced.rb +1 -1
  72. data/lib/erubis/engine/eperl.rb +1 -1
  73. data/lib/erubis/engine/ephp.rb +1 -1
  74. data/lib/erubis/engine/eruby.rb +1 -1
  75. data/lib/erubis/engine/escheme.rb +1 -1
  76. data/lib/erubis/engine/optimized.rb +1 -1
  77. data/lib/erubis/enhancer.rb +1 -1
  78. data/lib/erubis/error.rb +1 -1
  79. data/lib/erubis/evaluator.rb +15 -4
  80. data/lib/erubis/generator.rb +1 -1
  81. data/lib/erubis/helper.rb +14 -2
  82. data/lib/erubis/helpers/rails_helper.rb +48 -3
  83. data/lib/erubis/local-setting.rb +1 -1
  84. data/lib/erubis/main.rb +7 -8
  85. data/lib/erubis/tiny.rb +1 -1
  86. data/test/assert-text-equal.rb +1 -1
  87. data/test/data/users-guide/def_method.rb +14 -0
  88. data/test/data/users-guide/def_method.result +3 -0
  89. data/test/test-engines.rb +1 -1
  90. data/test/test-enhancers.rb +1 -1
  91. data/test/test-erubis.rb +40 -2
  92. data/test/test-main.rb +17 -4
  93. data/test/test-users-guide.rb +1 -1
  94. data/test/test.rb +1 -1
  95. data/test/testutil.rb +1 -1
  96. metadata +15 -11
  97. data/test/data/users-guide/stderr.log +0 -3
data/lib/erubis/engine.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  ##
2
2
  ## $Rev: 77 $
3
- ## $Release: 2.3.1 $
3
+ ## $Release: 2.4.0 $
4
4
  ## copyright(c) 2006-2007 kuwata-lab.com all rights reserved.
5
5
  ##
6
6
 
@@ -1,6 +1,6 @@
1
1
  ##
2
2
  ## $Rev: 77 $
3
- ## $Release: 2.3.1 $
3
+ ## $Release: 2.4.0 $
4
4
  ## copyright(c) 2006-2007 kuwata-lab.com all rights reserved.
5
5
  ##
6
6
 
@@ -1,6 +1,6 @@
1
1
  ##
2
2
  ## $Rev: 77 $
3
- ## $Release: 2.3.1 $
3
+ ## $Release: 2.4.0 $
4
4
  ## copyright(c) 2006-2007 kuwata-lab.com all rights reserved.
5
5
  ##
6
6
 
@@ -1,6 +1,6 @@
1
1
  ##
2
2
  ## $Rev: 77 $
3
- ## $Release: 2.3.1 $
3
+ ## $Release: 2.4.0 $
4
4
  ## copyright(c) 2006-2007 kuwata-lab.com all rights reserved.
5
5
  ##
6
6
 
@@ -1,6 +1,6 @@
1
1
  ##
2
2
  ## $Rev: 77 $
3
- ## $Release: 2.3.1 $
3
+ ## $Release: 2.4.0 $
4
4
  ## copyright(c) 2006-2007 kuwata-lab.com all rights reserved.
5
5
  ##
6
6
 
@@ -1,6 +1,6 @@
1
1
  ##
2
2
  ## $Rev: 77 $
3
- ## $Release: 2.3.1 $
3
+ ## $Release: 2.4.0 $
4
4
  ## copyright(c) 2006-2007 kuwata-lab.com all rights reserved.
5
5
  ##
6
6
 
@@ -1,6 +1,6 @@
1
1
  ##
2
2
  ## $Rev: 77 $
3
- ## $Release: 2.3.1 $
3
+ ## $Release: 2.4.0 $
4
4
  ## copyright(c) 2006-2007 kuwata-lab.com all rights reserved.
5
5
  ##
6
6
 
@@ -1,6 +1,6 @@
1
1
  ##
2
2
  ## $Rev: 77 $
3
- ## $Release: 2.3.1 $
3
+ ## $Release: 2.4.0 $
4
4
  ## copyright(c) 2006-2007 kuwata-lab.com all rights reserved.
5
5
  ##
6
6
 
@@ -1,6 +1,6 @@
1
1
  ##
2
2
  ## $Rev: 77 $
3
- ## $Release: 2.3.1 $
3
+ ## $Release: 2.4.0 $
4
4
  ## copyright(c) 2006-2007 kuwata-lab.com all rights reserved.
5
5
  ##
6
6
 
@@ -1,6 +1,6 @@
1
1
  ##
2
2
  ## $Rev: 77 $
3
- ## $Release: 2.3.1 $
3
+ ## $Release: 2.4.0 $
4
4
  ## copyright(c) 2006-2007 kuwata-lab.com all rights reserved.
5
5
  ##
6
6
 
@@ -1,6 +1,6 @@
1
1
  ##
2
2
  ## $Rev: 77 $
3
- ## $Release: 2.3.1 $
3
+ ## $Release: 2.4.0 $
4
4
  ## copyright(c) 2006-2007 kuwata-lab.com all rights reserved.
5
5
  ##
6
6
 
data/lib/erubis/error.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  ##
2
2
  ## $Rev: 77 $
3
- ## $Release: 2.3.1 $
3
+ ## $Release: 2.4.0 $
4
4
  ## copyright(c) 2006-2007 kuwata-lab.com all rights reserved.
5
5
  ##
6
6
 
@@ -1,6 +1,6 @@
1
1
  ##
2
- ## $Rev: 77 $
3
- ## $Release: 2.3.1 $
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, (@filename || '(erubis)'))
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
 
@@ -1,6 +1,6 @@
1
1
  ##
2
2
  ## $Rev: 77 $
3
- ## $Release: 2.3.1 $
3
+ ## $Release: 2.4.0 $
4
4
  ## copyright(c) 2006-2007 kuwata-lab.com all rights reserved.
5
5
  ##
6
6
 
data/lib/erubis/helper.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  ##
2
- ## $Rev: 77 $
3
- ## $Release: 2.3.1 $
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(/\&/,'&amp;').gsub(/</,'&lt;').gsub(/>/,'&gt;').gsub(/"/,'&quot;')
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: 82 $
3
- ### $Release: 2.3.1 $
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 # set true for debugging
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!(/&lt;%=(.*?)%&gt;/) { "<%=#{CGI.unescapeHTML($1)}%>" }
236
+ return arg
237
+ end
238
+ ##----------------------------------------
239
+
195
240
  end
196
241
 
197
242
 
@@ -1,6 +1,6 @@
1
1
  ##
2
2
  ## $Rev: 77 $
3
- ## $Release: 2.3.1 $
3
+ ## $Release: 2.4.0 $
4
4
  ## copyright(c) 2006-2007 kuwata-lab.com all rights reserved.
5
5
  ##
6
6
 
data/lib/erubis/main.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  ###
2
- ### $Rev: 78 $
3
- ### $Release: 2.3.1 $
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 = File.basename($0)
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 hash unless filenames
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
@@ -1,6 +1,6 @@
1
1
  ##
2
2
  ## $Rev: 77 $
3
- ## $Release: 2.3.1 $
3
+ ## $Release: 2.4.0 $
4
4
  ## copyright(c) 2006-2007 kuwata-lab.com all rights reserved.
5
5
  ##
6
6
 
@@ -1,6 +1,6 @@
1
1
  ###
2
2
  ### $Rev: 77 $
3
- ### $Release: 2.3.1 $
3
+ ### $Release: 2.4.0 $
4
4
  ### copyright(c) 2006-2007 kuwata-lab.com all rights reserved.
5
5
  ###
6
6
 
@@ -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"
@@ -0,0 +1,3 @@
1
+ $ ruby def_method.rb
2
+ "hello world"
3
+ "hello world"
data/test/test-engines.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  ##
2
2
  ## $Rev: 77 $
3
- ## $Release: 2.3.1 $
3
+ ## $Release: 2.4.0 $
4
4
  ## copyright(c) 2006-2007 kuwata-lab.com all rights reserved.
5
5
  ##
6
6
 
@@ -1,6 +1,6 @@
1
1
  ##
2
2
  ## $Rev: 77 $
3
- ## $Release: 2.3.1 $
3
+ ## $Release: 2.4.0 $
4
4
  ## copyright(c) 2006-2007 kuwata-lab.com all rights reserved.
5
5
  ##
6
6
 
data/test/test-erubis.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  ##
2
- ## $Rev: 77 $
3
- ## $Release: 2.3.1 $
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__