liquid_assets 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+ }