Class: Opal::ERB::Compiler
Constant Summary
- BLOCK_EXPR =
/\s+(do|\{)(\s*\|[^|]*\|)?\s*\Z/
Instance Method Summary collapse
- #compile ⇒ Object
- #find_code(result) ⇒ Object
- #find_contents(result) ⇒ Object
- #fix_quotes(result) ⇒ Object
-
#initialize(source, file_name = '(erb)') ⇒ Compiler
constructor
A new instance of Compiler.
- #prepared_source ⇒ Object
- #require_erb(result) ⇒ Object
- #wrap_compiled(result) ⇒ Object
Constructor Details
#initialize(source, file_name = '(erb)') ⇒ Compiler
Returns a new instance of Compiler
32 33 34
# File 'opal/lib/opal/erb.rb', line 32 def initialize(source, file_name = '(erb)') @source, @file_name, @result = source, file_name, source end
Instance Method Details
#compile ⇒ Object
#find_code(result) ⇒ Object
72 73 74 75 76
# File 'opal/lib/opal/erb.rb', line 72 def find_code(result) result.gsub(/<%([\s\S]+?)%>/) do "\")\n#{ 1ドル }\noutput_buffer.append(\"" end end
#find_contents(result) ⇒ Object
60 61 62 63 64 65 66 67 68 69 70
# File 'opal/lib/opal/erb.rb', line 60 def find_contents(result) result.gsub(/<%=([\s\S]+?)%>/) do inner = 1ドル.gsub(/\\'/, "'").gsub(/\\"/, '"') if inner =~ BLOCK_EXPR "\")\noutput_buffer.append= #{ inner }\noutput_buffer.append(\"" else "\")\noutput_buffer.append=(#{ inner })\noutput_buffer.append(\"" end end end
#fix_quotes(result) ⇒ Object
52 53 54
# File 'opal/lib/opal/erb.rb', line 52 def fix_quotes(result) result.gsub '"', '\\"' end
#prepared_source ⇒ Object
36 37 38 39 40 41 42 43 44 45 46
# File 'opal/lib/opal/erb.rb', line 36 def prepared_source @prepared_source ||= begin source = @source source = fix_quotes(source) source = find_contents(source) source = find_code(source) source = wrap_compiled(source) source = require_erb(source) source end end
#require_erb(result) ⇒ Object
56 57 58
# File 'opal/lib/opal/erb.rb', line 56 def require_erb(result) 'require "erb";'+result end
#wrap_compiled(result) ⇒ Object
78 79 80 81
# File 'opal/lib/opal/erb.rb', line 78 def wrap_compiled(result) path = @file_name.sub(/\.opalerb$/, '') result = "Template.new('#{path}') do |output_buffer|\noutput_buffer.append(\"#{result}\")\noutput_buffer.join\nend\n" end