class Ember::Emblem::Precompiler

Public Class Methods

compile(template) click to toggle source
# File lib/ember/emblem/precompiler.rb, line 7
def self.compile template
  new.compile(template)
end

Public Instance Methods

compile(template) click to toggle source
# File lib/ember/emblem/precompiler.rb, line 11
def compile template
  context.call precompile_function, sanitize(template)
rescue ExecJS::ProgramError => ex
  raise Barber::PrecompilerError.new(template, ex)
end

Private Instance Methods

context() click to toggle source
# File lib/ember/emblem/precompiler.rb, line 19
def context
  @context ||= ExecJS.compile(source)
end
emblem_source_path() click to toggle source
# File lib/ember/emblem/precompiler.rb, line 35
def emblem_source_path
  File.expand_path("../../../emblem/emblem.amd.js", __FILE__)
end
loader_path() click to toggle source
# File lib/ember/emblem/precompiler.rb, line 39
def loader_path
  File.expand_path("../../../emblem/loader.js", __FILE__)
end
precompile_function() click to toggle source
# File lib/ember/emblem/precompiler.rb, line 23
def precompile_function
  "Emblem.compile"
end
precompiler_path() click to toggle source
# File lib/ember/emblem/precompiler.rb, line 43
def precompiler_path
  File.expand_path("../../../emblem/precompiler.js", __FILE__)
end
sanitize(template) click to toggle source
# File lib/ember/emblem/precompiler.rb, line 47
def sanitize(template)
  begin
    if template =~ /\A".+"\Z/m
      # Case 1
      sanitize_with_json(template)
    else
      # Case 2
      sanitize_with_regexp(template)
    end
  rescue JSON::ParserError
    # Case 3
    template
  end
end
sanitize_with_json(template) click to toggle source
# File lib/ember/emblem/precompiler.rb, line 62
def sanitize_with_json(template)
  JSON.load(%Q|{"template":#{template}}|)['template']
end
sanitize_with_regexp(template) click to toggle source
# File lib/ember/emblem/precompiler.rb, line 66
def sanitize_with_regexp(template)
  if template.respond_to? :gsub
    sanitized = template.gsub(/\\n/,"\n")
    sanitized = sanitized.gsub(/\\["']/, '"')
    sanitized
  else
    template
  end
end
source() click to toggle source
# File lib/ember/emblem/precompiler.rb, line 27
def source
  [
    File.read(loader_path),
    File.read(emblem_source_path),
    File.read(precompiler_path),
  ].join("\n;\n")
end