Report abuse

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
diff --git a/lib/sprockets/engines.rb b/lib/sprockets/engines.rb
index ebeb765..d1f8d30 100644
--- a/lib/sprockets/engines.rb
+++ b/lib/sprockets/engines.rb
@@ -1,4 +1,5 @@
 require 'sprockets/ejs_template'
+require 'sprockets/eco_template'
 require 'sprockets/jst_processor'
 require 'sprockets/utils'
 require 'tilt'
@@ -30,6 +31,7 @@ module Sprockets
   register_engine '.coffee', Tilt::CoffeeScriptTemplate
   register_engine '.erb',    Tilt::ERBTemplate
   register_engine '.ejs',    EjsTemplate
+  register_engine '.eco',    EcoTemplate
   register_engine '.jst',    JstProcessor
   register_engine '.less',   Tilt::LessTemplate
   register_engine '.sass',   Tilt::SassTemplate
diff --git a/sprockets.gemspec b/sprockets.gemspec
index 0756e8e..4b2620c 100644
--- a/sprockets.gemspec
+++ b/sprockets.gemspec
@@ -14,6 +14,7 @@ Gem::Specification.new do |s|
   s.add_development_dependency "ejs", "~> 1.0"
   s.add_development_dependency "execjs", "~> 1.0"
   s.add_development_dependency "json"
+  s.add_development_dependency "reco"
   s.add_development_dependency "rack-test"
   s.add_development_dependency "rake"
 
diff --git a/test/test_environment.rb b/test/test_environment.rb
index c4aa6a4..6a200eb 100644
--- a/test/test_environment.rb
+++ b/test/test_environment.rb
@@ -56,6 +56,11 @@ module EnvironmentTests
     assert_equal "window.JST || (window.JST = {});\nwindow.JST[\"hello\"] = function(obj){var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('hello: ', name ,'\\n');}return __p.join('');};\n", asset.to_s
   end
 
+  test "eco templates" do
+    asset = @env["goodbye.jst"]
+    assert_equal "window.JST || (window.JST = {});\nwindow.JST[\"goodbye\"] = function(__obj) {\n  if (!__obj) __obj = {};\n  var __out = [], __capture = function(callback) {\n    var out = __out, result;\n    __out = [];\n    callback.call(this);\n    result = __out.join('');\n    __out = out;\n    return __safe(result);\n  }, __sanitize = function(value) {\n    if (value && value.ecoSafe) {\n      return value;\n    } else if (typeof value !== 'undefined' && value != null) {\n      return __escape(value);\n    } else {\n      return '';\n    }\n  }, __safe, __objSafe = __obj.safe, __escape = __obj.escape;\n  __safe = __obj.safe = function(value) {\n    if (value && value.ecoSafe) {\n      return value;\n    } else {\n      if (!(typeof value !== 'undefined' && value != null)) value = '';\n      var result = new String(value);\n      result.ecoSafe = true;\n      return result;\n    }\n  };\n  if (!__escape) {\n    __escape = __obj.escape = function(value) {\n      return ('' + value)\n        .replace(/&/g, '&amp;')\n        .replace(/</g, '&lt;')\n        .replace(/>/g, '&gt;')\n        .replace(/\\x22/g, '&quot;');\n    };\n  }\n  (function() {\n    (function() {\n  __out.push('goodbye: ');\n  __out.push(__sanitize(name));\n  __out.push('\\n');\n}).call(this);\n\n  }).call(__obj);\n  __obj.safe = __objSafe, __obj.escape = __escape;\n  return __out.join('');\n};\n", asset.to_s
+  end
+
   test "lookup mime type" do
     assert_equal "application/javascript", @env.mime_types(".js")
     assert_equal "application/javascript", @env.mime_types("js")