liquid_assets 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +5 -0
- data/Gemfile +18 -0
- data/Gemfile.lock +37 -0
- data/LICENSE.txt +20 -0
- data/README.md +160 -0
- data/Rakefile +46 -0
- data/VERSION +1 -0
- data/lib/liquid_assets/config.rb +102 -0
- data/lib/liquid_assets/engine.rb +25 -0
- data/lib/liquid_assets/template_handler.rb +52 -0
- data/lib/liquid_assets/tilt_engine.rb +54 -0
- data/lib/liquid_assets/tiny_liquid.rb +41 -0
- data/lib/liquid_assets/version.rb +3 -0
- data/lib/liquid_assets.rb +21 -0
- data/liquid_assets.gemspec +76 -0
- data/test/helper.rb +77 -0
- data/test/test_liquid_assets.rb +33 -0
- data/vendor/assets/javascripts/liquid_assets.js +57 -0
- data/vendor/tinyliquid.js +2730 -0
- metadata +183 -0
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
|
+
}
|