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/.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
|
+
}
|