liquid_assets 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/test/helper.rb ADDED
@@ -0,0 +1,77 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'test/unit'
11
+
12
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
13
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
14
+ require 'liquid_assets'
15
+
16
+ module LiquidAssets::Config
17
+ def reset!
18
+ %w(env path_prefix template_namespace filters ).each do |option|
19
+ send "#{option}=", nil
20
+ end
21
+ end
22
+ end
23
+
24
+ class DummyController
25
+ attr_reader :headers
26
+ def initialize
27
+ @headers = {}
28
+ end
29
+ end
30
+
31
+ class DummyView
32
+ attr_reader :controller, :assigns
33
+ def initialize
34
+ @controller = DummyController.new
35
+ @assigns = {}
36
+ end
37
+ def content_for?(block)
38
+ nil
39
+ end
40
+ end
41
+
42
+ class Hash
43
+ def transform_keys
44
+ result = {}
45
+ each_key do |key|
46
+ result[yield(key)] = self[key]
47
+ end
48
+ result
49
+ end
50
+ def stringify_keys
51
+ transform_keys{ |key| key.to_s }
52
+ end
53
+ end
54
+
55
+ class String
56
+ def html_safe
57
+ self
58
+ end
59
+ end
60
+
61
+ module TestSupport
62
+ # Try to act like sprockets.
63
+ def make_scope(root, file)
64
+ Class.new do
65
+ define_method(:logical_path) { pathname.to_s.gsub(root + '/', '').gsub(/\..*/, '') }
66
+
67
+ define_method(:pathname) { Pathname.new(root) + file }
68
+
69
+ define_method(:root_path) { root }
70
+
71
+ define_method(:s_path) { pathname.to_s }
72
+ end.new
73
+ end
74
+ end
75
+
76
+ class Test::Unit::TestCase
77
+ end
@@ -0,0 +1,33 @@
1
+ require 'helper'
2
+
3
+ class TestLiquidAssets < Test::Unit::TestCase
4
+
5
+ include TestSupport
6
+
7
+ def teardown
8
+ LiquidAssets::Config.reset!
9
+ end
10
+
11
+ def test_mime_type
12
+ assert_equal 'application/javascript', LiquidAssets::TiltEngine.default_mime_type
13
+ end
14
+
15
+ def test_tilt_engine_rendering
16
+ scope = make_scope '/myapp/app/assets/javascripts', 'path/to/template.mustache'
17
+
18
+ template = LiquidAssets::TiltEngine.new(scope.s_path) { "This is {{me}}" }
19
+
20
+ assert_equal <<-END_EXPECTED, template.render(scope, {})
21
+ this.LQT || (this.LQT = {});
22
+ this.LQT[\"path/to/template\"] = function(locals,filters){\nvar $_tmpbuf, $_html = LQT._FNS.html, $_err = LQT._FNS.err, $_rethrow=LQT._FNS.rethrow, $_merge=LQT._FNS.merge, $_range=LQT._FNS.range, $_array=LQT._FNS.array;\n/* == Template Begin == */\nvar $_buf = '';\nvar $_line_num = 0;\n/* == define cycles == */\nvar $_cycle_next = function (n) {\nn.i++;\nif (n.i >= n.length) n.i = 0;\n}\n$_buf+=('This is ');\n$_line_num = 1;\n$_tmpbuf = locals.me;\n$_buf+=($_tmpbuf===null||typeof($_tmpbuf)===\"undefined\"?\"\":$_tmpbuf);\nreturn $_buf;\n};
23
+ END_EXPECTED
24
+ end
25
+
26
+ def test_template_rendering
27
+ locals = {foo:'bar'}
28
+ source = 'foo={{foo}}'
29
+ template = LiquidAssets::TemplateHandler.new(DummyView.new).render(source, locals)
30
+ assert_equal 'foo=bar', template
31
+ end
32
+
33
+ end
@@ -0,0 +1,57 @@
1
+ this.LQT || (this.LQT = {});
2
+
3
+ LQT._FNS = {
4
+
5
+ html: function (html) {
6
+ return html.replace(/\\/g, '\\\\')
7
+ .replace(/'/g, '\\\'')
8
+ .replace(/"/g, '\\\"')
9
+ .replace(/\r/g, '\\r')
10
+ .replace(/\n/g, '\\n');
11
+ },
12
+ err: function (msg) {
13
+ var html = '<pre style="font-family:Courier; font-weight:bold; \
14
+ font-size:14px; color:red; padding:4px 20px 4px 20px; border:1px solid #CCC; \
15
+ background-color:#FFF5F0; line-height:1.6em; white-space:pre-wrap; \
16
+ white-space:-moz-pre-wrap; white-space:-pre-wrap; white-space:-o-pre-wrap; \
17
+ word-wrap:break-word; z-index:9999">' + msg + '</pre>';
18
+ return html;
19
+ },
20
+ rethrow: function (err, filename) {
21
+ var msg = 'An error occurred while rendering\n' +
22
+ 'Line: ' + $_line_num + (filename ? ' File: ' + filename : '') +
23
+ '\n ' + err;
24
+ $_buf += $_err(msg);
25
+ },
26
+ merge: function () {
27
+ var ret = {};
28
+ for (var i in arguments) {
29
+ var obj = arguments[i];
30
+ for (var j in obj) {
31
+ ret[j] = obj[j];
32
+ }
33
+ }
34
+ return ret;
35
+ },
36
+ range: function (s, e) {
37
+ s = parseInt(s);
38
+ e = parseInt(e);
39
+ var r = [];
40
+ if (isNaN(s) || isNaN(e)) return r;
41
+ for (; s <= e; s++) {
42
+ r.push(s);
43
+ }
44
+ return r;
45
+ },
46
+ array: function (data) {
47
+ if (Array.isArray(data)) return data;
48
+ var ret = [];
49
+ for (var i in data) {
50
+ if (i !== 'size') {
51
+ ret.push(data[i]);
52
+ }
53
+ }
54
+ return ret;
55
+ }
56
+
57
+ }