elkinsware-erubis_rails_helper 0.3.0 → 0.4.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,8 +1,4 @@
1
- #This code is a copy of /lib/erubis/helper/rails_helper.rb from Erubis 2.6.4 as a base and then some modifications
2
- # to make it work with Rails 2.3. The only significant change is the addition of OutputBufferEnhancer module
3
- # and including this module in the Eruby and FastEruby class.
4
-
5
- if defined?(Rails) and defined?(ActionController)
1
+ unless defined?(Rails) and defined?(ActionController)
6
2
  $stderr.puts %[This erubis_rails requires actionpack 2.2.2 or higher]
7
3
  end
8
4
 
@@ -14,366 +10,11 @@ rescue LoadError
14
10
  Add "config.gem 'erubis', :version => 2.6.4" to config/environment.rb]
15
11
  end
16
12
 
17
- module Erubis
18
-
19
- #FOR_FIX: Added to make Erubis and Rails 2.3 work together
20
- module OutputBufferEnhancer
21
-
22
- def self.desc # :nodoc:
23
- "set 'output_buffer = _buf = \"\";'"
24
- end
25
-
26
- def add_preamble(src)
27
- src << "__in_erubis_template=true; output_buffer = _buf = '';"
28
- end
29
-
30
- end
31
-
32
- #FOR_FIX: Changed to make Erubis and Rails 2.3 work together
33
- class Eruby
34
- #include ErboutEnhancer # will generate '_erbout = _buf = ""; '
35
- include OutputBufferEnhancer
36
- end
37
-
38
- #FOR_FIX: Changed to make Erubis and Rails 2.3 work together
39
- class FastEruby
40
- #include ErboutEnhancer # will generate '_erbout = _buf = ""; '
41
- include OutputBufferEnhancer
42
- end
43
-
44
- module Helpers
45
-
46
- ##
47
- ## helper module for Ruby on Rails
48
- ##
49
- ## howto:
50
- ##
51
- ## 1. add the folliwng code in your 'config/environment.rb'
52
- ##
53
- ## require 'erubis/helpers/rails_helper'
54
- ## #Erubis::Helpers::RailsHelper.engine_class = Erubis::Eruby # or Erubis::FastEruby
55
- ## #Erubis::Helpers::RailsHelper.init_properties = {}
56
- ## #Erubis::Helpers::RailsHelper.show_src = false # set true for debugging
57
- ## #Erubis::Helpers::RailsHelper.preprocessing = true # set true to enable preprocessing
58
- ##
59
- ## 2. restart web server.
60
- ##
61
- ## if Erubis::Helper::Rails.show_src is true, Erubis prints converted Ruby code
62
- ## into log file ('log/development.log' or so). if false, it doesn't.
63
- ## if nil, Erubis prints converted Ruby code if ENV['RAILS_ENV'] == 'development'.
64
- ##
65
- module RailsHelper
66
-
67
- #cattr_accessor :init_properties
68
- @@engine_class = ::Erubis::Eruby
69
- #@@engine_class = ::Erubis::FastEruby
70
- def self.engine_class
71
- @@engine_class
72
- end
73
- def self.engine_class=(klass)
74
- @@engine_class = klass
75
- end
76
-
77
- #cattr_accessor :init_properties
78
- @@init_properties = {}
79
- def self.init_properties
80
- @@init_properties
81
- end
82
- def self.init_properties=(hash)
83
- @@init_properties = hash
84
- end
85
-
86
- #cattr_accessor :show_src
87
- @@show_src = nil
88
- def self.show_src
89
- @@show_src
90
- end
91
- def self.show_src=(flag)
92
- @@show_src = flag
93
- end
94
-
95
- #cattr_accessor :preprocessing
96
- @@preprocessing = false
97
- def self.preprocessing
98
- @@preprocessing
99
- end
100
- def self.preprocessing=(flag)
101
- @@preprocessing = flag
102
- end
103
-
104
-
105
- ## define class for backward-compatibility
106
- class PreprocessingEruby < Erubis::PreprocessingEruby # :nodoc:
107
- end
108
-
109
-
110
- module TemplateConverter
111
- ## covert eRuby string into ruby code
112
- def _convert_template(template) # :nodoc:
113
- #src = ::Erubis::Eruby.new(template).src
114
- klass = ::Erubis::Helpers::RailsHelper.engine_class
115
- properties = ::Erubis::Helpers::RailsHelper.init_properties
116
- show_src = ::Erubis::Helpers::RailsHelper.show_src
117
- show_src = ENV['RAILS_ENV'] == 'development' if show_src.nil?
118
- ## preprocessing
119
- if ::Erubis::Helpers::RailsHelper.preprocessing
120
- preprocessor = _create_preprocessor(template)
121
- template = preprocessor.evaluate(_preprocessing_context_object())
122
- _logger_info "** Erubis: preprocessed==<<'END'\n#{template}END\n" if show_src
123
- end
124
- ## convert into ruby code
125
- src = klass.new(template, properties).src
126
- #src.insert(0, '_erbout = ')
127
- _logger_info "** Erubis: src==<<'END'\n#{src}END\n" if show_src
128
- return src
129
- end
130
- def _create_preprocessor(template)
131
- return PreprocessingEruby.new(template, :escape=>true)
132
- end
133
- def _preprocessing_context_object
134
- return self
135
- end
136
- def _logger_info(message)
137
- logger.info message
138
- end
139
- end
140
-
141
- end
142
-
143
- end
144
-
145
- end
146
-
147
-
148
- class ActionView::Base # :nodoc:
149
- include ::Erubis::Helpers::RailsHelper::TemplateConverter
150
- include ::Erubis::PreprocessingHelper
151
- private
152
- # convert template into ruby code
153
- def convert_template_into_ruby_code(template)
154
- #ERB.new(template, nil, @@erb_trim_mode).src
155
- return _convert_template(template)
156
- end
157
- end
158
-
159
-
160
- require 'action_pack/version'
161
-
162
- rails22 = false
163
-
164
- if ActionPack::VERSION::MAJOR >= 2 ### Rails 2.X
165
-
166
-
167
- if ActionPack::VERSION::MINOR >=2 ### Rails 2.2, 2.3 or higher
168
-
169
- rails22 = true
170
- module ActionView
171
- module TemplateHandlers
172
- class ErubisHandler < TemplateHandler
173
- include Compilable
174
- include ::Erubis::Helpers::RailsHelper::TemplateConverter
175
- include ::Erubis::PreprocessingHelper
176
- def compile(template)
177
- #src = ::ERB.new("<% __in_erb_template=true %>#{template.source}", nil, erb_trim_mode, '@output_buffer').src
178
- return _convert_template("<% __in_erb_template=true %>#{template.source}")
179
- end
180
- end
181
- end
182
- handler_klass = TemplateHandlers::ErubisHandler
183
- Template.register_default_template_handler :erb, handler_klass
184
- Template.register_template_handler :rhtml, handler_klass
185
- end
186
- module Erubis::Helpers::RailsHelper::TemplateConverter
187
- def _logger_info(message)
188
- #logger.info message # logger.info seems not available in Rails 2.2
189
- ActionController::Base.new.logger.info message
190
- end
191
- end
192
-
193
- elsif ActionPack::VERSION::MINOR >=1 ### Rails 2.1
194
-
195
- module ActionView
196
- module TemplateHandlers # :nodoc:
197
- class ErubisHandler < TemplateHandler
198
- include Compilable
199
- include Erubis::Helpers::RailsHelper::TemplateConverter
200
- include Erubis::PreprocessingHelper
201
- #
202
- def compile(template)
203
- return _convert_template(template.source) # template.is_a?(ActionView::Template)
204
- end
205
- def logger #:nodoc:
206
- return @view.controller.logger
207
- end
208
- def _preprocessing_context_object #:nodoc:
209
- return @view.controller.instance_variable_get('@template')
210
- end
211
- #
212
- def cache_fragment(block, name = {}, options = nil) #:nodoc:
213
- @view.fragment_for(block, name, options) do
214
- #eval(ActionView::Base.erb_variable, block.binding)
215
- eval('_buf', block.binding)
216
- end
217
- end
218
- end
219
- end
220
- handler_klass = TemplateHandlers::ErubisHandler
221
- Template.register_default_template_handler :erb, handler_klass
222
- Template.register_template_handler :rhtml, handler_klass
223
- end
224
-
225
- elsif ActionPack::VERSION::TINY >= 2 ### Rails 2.0.X (X >= 2)
226
-
227
- module ActionView
228
- module TemplateHandlers # :nodoc:
229
- class ErubisHandler < TemplateHandler
230
- include Erubis::Helpers::RailsHelper::TemplateConverter
231
- include Erubis::PreprocessingHelper
232
- def compile(template)
233
- return _convert_template(template) # template.is_a?(String)
234
- end
235
- def logger #:nodoc:
236
- return @view.controller.logger
237
- end
238
- def _preprocessing_context_object #:nodoc:
239
- return @view.controller.instance_variable_get('@template')
240
- end
241
- end
242
- end
243
- Base.class_eval do
244
- handler_klass = TemplateHandlers::ErubisHandler
245
- register_default_template_handler :erb, handler_klass
246
- register_template_handler :rhtml, handler_klass
247
- end
248
- end
249
-
250
- else ### Rails 2.0.0 or 2.0.1
251
-
252
- class ActionView::Base # :nodoc:
253
- private
254
- # Method to create the source code for a given template.
255
- def create_template_source(extension, template, render_symbol, locals)
256
- if template_requires_setup?(extension)
257
- body = case extension.to_sym
258
- when :rxml, :builder
259
- content_type_handler = (controller.respond_to?(:response) ? "controller.response" : "controller")
260
- "#{content_type_handler}.content_type ||= Mime::XML\n" +
261
- "xml = Builder::XmlMarkup.new(:indent => 2)\n" +
262
- template +
263
- "\nxml.target!\n"
264
- when :rjs
265
- "controller.response.content_type ||= Mime::JS\n" +
266
- "update_page do |page|\n#{template}\nend"
267
- end
268
- else
269
- #body = ERB.new(template, nil, @@erb_trim_mode).src
270
- body = convert_template_into_ruby_code(template)
271
- end
272
- #
273
- @@template_args[render_symbol] ||= {}
274
- locals_keys = @@template_args[render_symbol].keys | locals
275
- @@template_args[render_symbol] = locals_keys.inject({}) { |h, k| h[k] = true; h }
276
- #
277
- locals_code = ""
278
- locals_keys.each do |key|
279
- locals_code << "#{key} = local_assigns[:#{key}]\n"
280
- end
281
- #
282
- "def #{render_symbol}(local_assigns)\n#{locals_code}#{body}\nend"
283
- end
284
- end
285
-
286
- end #if
287
-
288
-
289
- else ### Rails 1.X
290
-
291
-
292
- if ActionPack::VERSION::MINOR > 12 ### Rails 1.2
293
-
294
- class ActionView::Base # :nodoc:
295
- private
296
- # Create source code for given template
297
- def create_template_source(extension, template, render_symbol, locals)
298
- if template_requires_setup?(extension)
299
- body = case extension.to_sym
300
- when :rxml
301
- "controller.response.content_type ||= 'application/xml'\n" +
302
- "xml = Builder::XmlMarkup.new(:indent => 2)\n" +
303
- template
304
- when :rjs
305
- "controller.response.content_type ||= 'text/javascript'\n" +
306
- "update_page do |page|\n#{template}\nend"
307
- end
308
- else
309
- #body = ERB.new(template, nil, @@erb_trim_mode).src
310
- body = convert_template_into_ruby_code(template)
311
- end
312
- #
313
- @@template_args[render_symbol] ||= {}
314
- locals_keys = @@template_args[render_symbol].keys | locals
315
- @@template_args[render_symbol] = locals_keys.inject({}) { |h, k| h[k] = true; h }
316
- #
317
- locals_code = ""
318
- locals_keys.each do |key|
319
- locals_code << "#{key} = local_assigns[:#{key}]\n"
320
- end
321
- #
322
- "def #{render_symbol}(local_assigns)\n#{locals_code}#{body}\nend"
323
- end
324
- end
325
-
326
- else ### Rails 1.1
327
-
328
- class ActionView::Base # :nodoc:
329
- private
330
- # Create source code for given template
331
- def create_template_source(extension, template, render_symbol, locals)
332
- if template_requires_setup?(extension)
333
- body = case extension.to_sym
334
- when :rxml
335
- "xml = Builder::XmlMarkup.new(:indent => 2)\n" +
336
- "@controller.headers['Content-Type'] ||= 'application/xml'\n" +
337
- template
338
- when :rjs
339
- "@controller.headers['Content-Type'] ||= 'text/javascript'\n" +
340
- "update_page do |page|\n#{template}\nend"
341
- end
342
- else
343
- #body = ERB.new(template, nil, @@erb_trim_mode).src
344
- body = convert_template_into_ruby_code(template)
345
- end
346
- #
347
- @@template_args[render_symbol] ||= {}
348
- locals_keys = @@template_args[render_symbol].keys | locals
349
- @@template_args[render_symbol] = locals_keys.inject({}) { |h, k| h[k] = true; h }
350
- #
351
- locals_code = ""
352
- locals_keys.each do |key|
353
- locals_code << "#{key} = local_assigns[:#{key}] if local_assigns.has_key?(:#{key})\n"
354
- end
355
- #
356
- "def #{render_symbol}(local_assigns)\n#{locals_code}#{body}\nend"
357
- end
358
- end
359
-
360
- end #if
361
-
362
- ## make h() method faster (only for Rails 1.X)
363
- module ERB::Util # :nodoc:
364
- ESCAPE_TABLE = { '&'=>'&amp;', '<'=>'&lt;', '>'=>'&gt;', '"'=>'&quot;', "'"=>'&#039;', }
365
- def h(value)
366
- value.to_s.gsub(/[&<>"]/) {|s| ESCAPE_TABLE[s] }
367
- end
368
- module_function :h
369
- end
370
-
371
- end ###
372
-
13
+ require 'erubis_rails_helper/erubis/generator'
14
+ require 'erubis_rails_helper/template_handlers/erubis'
373
15
 
374
16
  ## finish
375
- #FOR_FIX: Changed this for logging and feedback that this gem is being loaded on startup
376
17
  if defined?(Rails) and defined?(ActionController)
377
18
  ActionController::Base.new.logger.info "** Erubis #{::Erubis::VERSION}"
378
19
  end
379
- $stdout.puts "** Erubis #{::Erubis::VERSION}....rails22=#{rails22}" if rails22
20
+ $stdout.puts "** Erubis #{::Erubis::VERSION}"
@@ -0,0 +1,100 @@
1
+ ##
2
+ ## This is a copy of the generator.rb from the Erubis 2.6.4 gem
3
+ ## The modification I made was that you can substitute any variable name (i.e. @output_buffer) for _buf.
4
+ ## This is necessary for Erubis to work with Rails 2.3 and 2.2 because ActionView code like CaptureHelper
5
+ ## relies on @output_buffer to be used and not _buf to work correctly.
6
+ ##
7
+
8
+ ##
9
+ ## $Rev: 77 $
10
+ ## $Release: 2.6.4 $
11
+ ## copyright(c) 2006-2009 kuwata-lab.com all rights reserved.
12
+ ##
13
+
14
+ require 'erubis/engine'
15
+ require 'erubis/enhancer'
16
+
17
+
18
+ module Erubis
19
+
20
+
21
+ ##
22
+ ## code generator for Ruby
23
+ ##
24
+ module RubyGenerator
25
+ include Generator
26
+ #include ArrayBufferEnhancer
27
+ include StringBufferEnhancer
28
+
29
+ def init_generator(properties={})
30
+ super
31
+
32
+ @escapefunc ||= "Erubis::XmlHelper.escape_xml"
33
+
34
+ set_eoutvar(properties[:eoutvar] || '_buf')
35
+ end
36
+
37
+ def self.supported_properties() # :nodoc:
38
+ return []
39
+ end
40
+
41
+ def escape_text(text)
42
+ text.gsub(/['\\]/, '\\\\\&') # "'" => "\\'", '\\' => '\\\\'
43
+ end
44
+
45
+ def escaped_expr(code)
46
+ return "#{@escapefunc}(#{code})"
47
+ end
48
+
49
+ #--
50
+ #def add_preamble(src)
51
+ # src << "_buf = [];"
52
+ #end
53
+ #++
54
+
55
+ def add_text(src, text)
56
+ #src << " _buf << '" << escape_text(text) << "';" unless text.empty?
57
+ src << " #{eoutvar} << '" << escape_text(text) << "';" unless text.empty?
58
+ end
59
+
60
+ def add_stmt(src, code)
61
+ #src << code << ';'
62
+ src << code
63
+ src << ';' unless code[-1] == ?\n
64
+ end
65
+
66
+ def add_expr_literal(src, code)
67
+ #src << ' _buf << (' << code << ').to_s;'
68
+ src << " #{eoutvar} << (" << code << ").to_s;"
69
+ end
70
+
71
+ def add_expr_escaped(src, code)
72
+ #src << ' _buf << ' << escaped_expr(code) << ';'
73
+ src << " #{eoutvar} << " << escaped_expr(code) << ';'
74
+ end
75
+
76
+ def add_expr_debug(src, code)
77
+ code.strip!
78
+ s = (code.dump =~ /\A"(.*)"\z/) && $1
79
+ src << ' $stderr.puts("*** debug: ' << s << '=#{(' << code << ').inspect}");'
80
+ end
81
+
82
+ #--
83
+ #def add_postamble(src)
84
+ # src << "\n_buf.join\n"
85
+ #end
86
+ #++
87
+
88
+ private
89
+ ##
90
+ ## Added to set the buffer variable name. defaults to _buf.
91
+ ##
92
+ def set_eoutvar(new_eoutvar = '_buf')
93
+ @eoutvar = new_eoutvar
94
+ end
95
+
96
+ def eoutvar
97
+ @eoutvar || '_buf'
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,156 @@
1
+ module Erubis
2
+ module OutputBufferEnhancer
3
+ def self.desc # :nodoc:
4
+ "set '@output_buffer = _buf = \"\";'"
5
+ end
6
+
7
+ def add_preamble(src)
8
+ src << "@output_buffer = _buf = '';"
9
+ end
10
+
11
+ def add_postamble(src)
12
+ src << "\n" unless src[-1] == ?\n
13
+ src << "@output_buffer.to_s\n"
14
+ end
15
+ end
16
+
17
+ class Eruby
18
+ include ::Erubis::PercentLineEnhancer
19
+ include ::Erubis::DeleteIndentEnhancer
20
+ include OutputBufferEnhancer
21
+ end
22
+
23
+ class FastEruby
24
+ include ::Erubis::PercentLineEnhancer
25
+ include ::Erubis::DeleteIndentEnhancer
26
+ include OutputBufferEnhancer
27
+ end
28
+
29
+ module Helpers
30
+ ##
31
+ ## helper module for Ruby on Rails
32
+ ##
33
+ ## howto:
34
+ ##
35
+ ## 1. add the folliwng code in your 'config/environment.rb'
36
+ ##
37
+ ## require 'erubis/helpers/rails_helper'
38
+ ## #Erubis::Helpers::RailsHelper.engine_class = Erubis::Eruby # or Erubis::FastEruby
39
+ ## #Erubis::Helpers::RailsHelper.init_properties = {}
40
+ ## #Erubis::Helpers::RailsHelper.show_src = false # set true for debugging
41
+ ## #Erubis::Helpers::RailsHelper.preprocessing = true # set true to enable preprocessing
42
+ ##
43
+ ## 2. restart web server.
44
+ ##
45
+ ## if Erubis::Helper::Rails.show_src is true, Erubis prints converted Ruby code
46
+ ## into log file ('log/development.log' or so). if false, it doesn't.
47
+ ## if nil, Erubis prints converted Ruby code if ENV['RAILS_ENV'] == 'development'.
48
+ ##
49
+ module RailsHelper
50
+ #cattr_accessor :init_properties
51
+ @@engine_class = ::Erubis::Eruby
52
+ #@@engine_class = ::Erubis::FastEruby
53
+ def self.engine_class
54
+ @@engine_class
55
+ end
56
+ def self.engine_class=(klass)
57
+ @@engine_class = klass
58
+ end
59
+
60
+ #cattr_accessor :init_properties
61
+ @@init_properties = {}
62
+ def self.init_properties
63
+ @@init_properties
64
+ end
65
+ def self.init_properties=(hash)
66
+ @@init_properties = hash
67
+ end
68
+
69
+ #cattr_accessor :show_src
70
+ @@show_src = nil
71
+ def self.show_src
72
+ @@show_src
73
+ end
74
+ def self.show_src=(flag)
75
+ @@show_src = flag
76
+ end
77
+
78
+ #cattr_accessor :preprocessing
79
+ @@preprocessing = false
80
+ def self.preprocessing
81
+ @@preprocessing
82
+ end
83
+ def self.preprocessing=(flag)
84
+ @@preprocessing = flag
85
+ end
86
+
87
+ ## define class for backward-compatibility
88
+ class PreprocessingEruby < Erubis::PreprocessingEruby # :nodoc:
89
+ end
90
+
91
+ module TemplateConverter
92
+ def _convert_template(template) # :nodoc:
93
+
94
+ klass = ::Erubis::Helpers::RailsHelper.engine_class
95
+ properties = ::Erubis::Helpers::RailsHelper.init_properties || {}
96
+
97
+ if preprocess?
98
+ preprocessor = _create_preprocessor(template)
99
+ template = preprocessor.evaluate(_preprocessing_context_object())
100
+ end
101
+
102
+ src = klass.new(template, properties.merge(:eoutvar => "@output_buffer")).src
103
+ return src
104
+ end
105
+
106
+ def _create_preprocessor(template)
107
+ return PreprocessingEruby.new(template, :escape=>true)
108
+ end
109
+
110
+ def _preprocessing_context_object
111
+ return self
112
+ end
113
+
114
+ def preprocess?
115
+ ::Erubis::Helpers::RailsHelper.preprocessing
116
+ end
117
+ end
118
+ end
119
+ end
120
+ end
121
+
122
+ module ActionView
123
+ module TemplateHandlers
124
+ class Erubis < TemplateHandler
125
+ include Compilable
126
+ include ::Erubis::Helpers::RailsHelper::TemplateConverter
127
+ include ::Erubis::PreprocessingHelper
128
+
129
+ def compile(template)
130
+ src = _convert_template("#{template.source}")
131
+
132
+ if show_source?
133
+ logger.debug("** Erubis: src==<<'END'\n#{src}END\n")
134
+ end
135
+
136
+ # Ruby 1.9 prepends an encoding to the source. However this is
137
+ # useless because you can only set an encoding on the first line
138
+ RUBY_VERSION >= '1.9' ? src.sub(/\A#coding:.*\n/, '') : src
139
+ end
140
+
141
+ protected
142
+ def logger
143
+ @logger ||= ActionController::Base.new.logger
144
+ end
145
+
146
+ def show_source?
147
+ return ::Erubis::Helpers::RailsHelper.show_src if not ::Erubis::Helpers::RailsHelper.show_src.nil?
148
+ ENV['RAILS_ENV'] == 'development' if ::Erubis::Helpers::RailsHelper.show_src.nil?
149
+ end
150
+ end
151
+
152
+ handler_klass = TemplateHandlers::Erubis
153
+ Template.register_default_template_handler(:erb, handler_klass)
154
+ Template.register_template_handler(:rhtml, handler_klass)
155
+ end
156
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elkinsware-erubis_rails_helper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dave Elkins
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-06-15 00:00:00 -07:00
12
+ date: 2009-06-17 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -42,6 +42,8 @@ extra_rdoc_files:
42
42
  - README.rdoc
43
43
  files:
44
44
  - lib/erubis_rails_helper.rb
45
+ - lib/erubis_rails_helper/erubis/generator.rb
46
+ - lib/erubis_rails_helper/template_handlers/erubis.rb
45
47
  - README.rdoc
46
48
  has_rdoc: true
47
49
  homepage: http://github.com/elkinsware/erubis_rails_helper/tree/master