liquid_assets 0.1.1 → 0.3.2

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 05277be46cbe2e2d7d1cce109ca15d5e7ce156cf
4
+ data.tar.gz: 376327fb4e7fe7c2d6edeff878d530330d54d290
5
+ SHA512:
6
+ metadata.gz: 390677abed5cd524a34c634b8210a551ddfb0168a8ce8030d14cf315615e9db6d32d5acd8b211b01d7c788ad2185473cef2c45d95252d3ee78eb773cf94cd2f5
7
+ data.tar.gz: 52236d4d965716c356fd7246c8c64eee782a2758ff4336d5df6f9c1ab563ea97ffa214f4554d22c5aac7ea302b2596cfbb51ace171635d12c45716e2385186ec
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile CHANGED
@@ -1,18 +1,11 @@
1
- source "http://rubygems.org"
2
- # Add dependencies required to use your gem here.
3
- # Example:
4
- # gem "activesupport", ">= 2.3.5"
5
-
6
- gem 'liquid'
7
- gem 'tilt'
8
- gem 'sprockets'
9
- gem 'execjs'
1
+ source 'https://rubygems.org'
10
2
 
3
+ # Specify your gem's dependencies in liquid_assets.gemspec
4
+ gemspec
11
5
 
12
6
  # Add dependencies to develop your gem here.
13
7
  # Include everything needed to run rake, tests, features, etc.
14
8
  group :development do
15
- gem "rdoc"
16
- gem "bundler"
17
- gem "jeweler"
9
+ gem "rdoc"
10
+ gem "bundler"
18
11
  end
data/Gemfile.lock CHANGED
@@ -1,37 +1,59 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ liquid_assets (0.3.2)
5
+ actionpack (>= 3.2)
6
+ execjs
7
+ liquid
8
+ tilt
9
+
1
10
  GEM
2
- remote: http://rubygems.org/
11
+ remote: https://rubygems.org/
3
12
  specs:
13
+ actionpack (3.2.13)
14
+ activemodel (= 3.2.13)
15
+ activesupport (= 3.2.13)
16
+ builder (~> 3.0.0)
17
+ erubis (~> 2.7.0)
18
+ journey (~> 1.0.4)
19
+ rack (~> 1.4.5)
20
+ rack-cache (~> 1.2)
21
+ rack-test (~> 0.6.1)
22
+ sprockets (~> 2.2.1)
23
+ activemodel (3.2.13)
24
+ activesupport (= 3.2.13)
25
+ builder (~> 3.0.0)
26
+ activesupport (3.2.13)
27
+ i18n (= 0.6.1)
28
+ multi_json (~> 1.0)
29
+ builder (3.0.4)
30
+ erubis (2.7.0)
4
31
  execjs (1.4.0)
5
32
  multi_json (~> 1.0)
6
- git (1.2.5)
7
33
  hike (1.2.1)
8
- jeweler (1.8.4)
9
- bundler (~> 1.0)
10
- git (>= 1.2.5)
11
- rake
12
- rdoc
13
- json (1.7.7)
34
+ i18n (0.6.1)
35
+ journey (1.0.4)
14
36
  liquid (2.5.0)
15
- multi_json (1.6.1)
16
- rack (1.5.2)
17
- rake (10.0.3)
37
+ multi_json (1.7.2)
38
+ rack (1.4.5)
39
+ rack-cache (1.2)
40
+ rack (>= 0.4)
41
+ rack-test (0.6.2)
42
+ rack (>= 1.0)
43
+ rake (10.0.4)
18
44
  rdoc (4.0.0)
19
- json (~> 1.4)
20
45
  sprockets (2.2.2)
21
46
  hike (~> 1.2)
22
47
  multi_json (~> 1.0)
23
48
  rack (~> 1.0)
24
49
  tilt (~> 1.1, != 1.3.0)
25
- tilt (1.3.5)
50
+ tilt (1.3.6)
26
51
 
27
52
  PLATFORMS
28
53
  ruby
29
54
 
30
55
  DEPENDENCIES
31
56
  bundler
32
- execjs
33
- jeweler
34
- liquid
57
+ liquid_assets!
58
+ rake
35
59
  rdoc
36
- sprockets
37
- tilt
data/LICENSE.txt CHANGED
@@ -1,5 +1,7 @@
1
1
  Copyright (c) 2013 Nathan Stitt
2
2
 
3
+ MIT License
4
+
3
5
  Permission is hereby granted, free of charge, to any person obtaining
4
6
  a copy of this software and associated documentation files (the
5
7
  "Software"), to deal in the Software without restriction, including
data/README.md CHANGED
@@ -1,160 +1,29 @@
1
- # liquid_assets version 0.1.0
1
+ # LiquidAssets
2
2
 
3
- ## Description
3
+ TODO: Write a gem description
4
4
 
5
- Allows you to use the Liquid template language in Rails, both as
6
- templates and as JavaScript via the asset_pipeline.
5
+ ## Installation
7
6
 
8
- **Warning!** This is very rough, and only minimally tested. Version
9
- 0.1 really does mean 0.1 in this case!
7
+ Add this line to your application's Gemfile:
10
8
 
11
- Although I'm going to attempt to minimize breaking changes, there may
12
- be a few as I discover bugs and/or better methods of implementing
13
- features.
9
+ gem 'liquid_assets'
14
10
 
15
- My future goals for it are to add template inheritance/override
16
- support and read template's from active_record. *(probably via a
17
- supplied Proc)*
11
+ And then execute:
18
12
 
19
- The Ruby bits are via the standard Liquid http://liquidmarkup.org/
20
- gem.
13
+ $ bundle
21
14
 
22
- The JavaScript support is possible through the TinyLiquid
23
- https://github.com/leizongmin/tinyliquid JavaScript library, which
24
- execjs calls to compiles the templates to JavaScript. I did have to
25
- perform a few small modifications to the library in order to get it to
26
- support partials in the same manner as the Ruby library
27
-
28
- ## Rationale
29
- I am currently developing a largish project that has a requirement for
30
- user edited html that needs to be rendered both as a standard website
31
- and as a single page Backbone application.
32
-
33
- I'd originally attempted to use Mustache templates but discarded that
34
- idea after not being able to do simple things like formatting numbers
35
- in the views.
36
-
37
- Liquid templates were ideal, but they lacked a suitable JS
38
- environment. I then ran across the TinyLiquid project and decided to
39
- create a gem to unite the two.
15
+ Or install it yourself as:
40
16
 
17
+ $ gem install liquid_assets
41
18
 
42
19
  ## Usage
43
20
 
44
- Set the root in an initializer, i.e. config/initializers/liquid_assets.rb
45
- The root defaults to app/assets/templates.
46
-
47
- LiquidAssets::Config.configure do |config|
48
- config.path_prefix = 'app/assets/templates'
49
- config.filters = MyFilterModule
50
- config.template_namespace = 'LQT'
51
- end
52
-
53
-
54
- ### Use as Rails views
55
-
56
- Create a view just like you would with erb, except with .liquid as the extension.
57
-
58
- app/assets/templates/blog/post.liquid
59
-
60
- Since the template is written in Liquid, it DOES NOT have access to
61
- the normal rails helper methods.
62
-
63
- It does have access to instance variables, but can only interact with
64
- simple Strings, Numbers, Arrays, & Hashes. An additional restriction
65
- is that Hashes must use strings for keys, not symbols.
66
-
67
- I'm sure some of these limitations could be worked around, but my
68
- needs do not include supporting them at this time. *Patches are welcomed*
69
-
70
-
71
- By default the filters are set to the Liquid::StandardFilters
72
- http://liquid.rubyforge.org/classes/Liquid/StandardFilters.html This
73
- can be changed by including a liquid_filters method on the controller,
74
- or in application_controller to set system-wide. *(assuming you are
75
- inheriting from it)*
76
-
77
- A short example:
78
-
79
- blog_controller.rb:
80
-
81
- def show
82
- @ages={'bob'=>28,'joe'=>23}
83
- render :template=>'blog/post'
84
- end
85
-
86
- app/assets/templates/blog/post.liquid :
87
-
88
- Bob is {{ages.bob}}, older than Joe - who's only {{ages.joe}}.
89
-
90
- But this will not since @bob is not a hash.
91
-
92
- controller:
93
-
94
- def show
95
- @old=People.where({:name=>'bob',:age=>100}).first
96
- render :template=>'blog/post'
97
- end
98
-
99
- (contrived) liquid view:
100
-
101
- Bob's age is {{old.age}}
102
-
103
- **Hint:** To get it to work, call as_json on your models:
104
-
105
- @old=People.where({:name=>'bob',:age=>100}).first.as_json
106
-
107
-
108
- ### Use as AssetPipeline pre-compiled javascript
109
-
110
- You can include your liquid templates in the asset_pipeline by
111
- using the standard //= syntax in one of your existing JavaScript files
112
-
113
- //=require liquid_assets
114
- //=require templates/blog/post
115
-
116
- Will compile post.liquid to JavaScript using TinyLiquid and include it like so
117
-
118
- LQT['templates/blog/post'] = function(locals,filters){ ... }
119
-
120
- It can be used similar to underscore's JST template.
121
-
122
- With filters:
123
-
124
- LQT['templates/blog/post']( { bob:{ age: 23 } }, {
125
- plusTen: function(num){ return num+10; }
126
- })
127
-
128
- Template:
129
-
130
- Bob will be {{bob.age | plusTen}} in ten years.
131
-
132
- Renders to:
133
- Bob will be 33 in ten years.
134
-
135
- The LQT namespace is short for LiQuid Template, à la JST from underscore.
136
-
137
- It can be modified by configuring:
138
-
139
- LiquidAssets::Config.configure do |config|
140
- config.template_namespace = 'FANCY_NAME'
141
- end
142
-
143
- ## Thanks
144
-
145
- [Shopify](http://www.shopify.com/)
146
- for creating the liquid template language and Ruby implementation. [leizongmin](https://github.com/leizongmin/tinyliquid) for the
147
- tinyliquid Javascript support.
148
-
149
- I cribbed from [hogan_assets](https://github.com/leshill/hogan_assets/), [Poirot](https://github.com/olivernn/poirot) and [Stache](https://github.com/agoragames/stache/) in creating this gem. Good parts
150
- are thanks to those projects, mistakes are mine.
151
-
21
+ TODO: Write usage instructions here
152
22
 
153
23
  ## Contributing
154
- Fork on [github](https://github.com/nathanstitt/liquid_assets), implement your change, submit a pull request.
155
-
156
-
157
- ## Copyright
158
24
 
159
- Copyright (c) 2013 Nathan Stitt. See LICENSE.txt for
160
- further details.
25
+ 1. Fork it
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create new Pull Request
data/Rakefile CHANGED
@@ -1,7 +1,8 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  require 'rubygems'
4
- require 'bundler'
4
+ require 'bundler/gem_tasks'
5
+
5
6
  begin
6
7
  Bundler.setup(:default, :development)
7
8
  rescue Bundler::BundlerError => e
@@ -11,21 +12,6 @@ rescue Bundler::BundlerError => e
11
12
  end
12
13
  require 'rake'
13
14
 
14
- require 'jeweler'
15
- Jeweler::Tasks.new do |gem|
16
- # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
- gem.name = "liquid_assets"
18
- gem.homepage = "http://github.com/nathanstitt/liquid_assets"
19
- gem.license = "MIT"
20
- gem.summary = %Q{Liquid formmated views and assets}
21
- gem.description = %Q{Allows you to use Liquid format templates in Rails, both as
22
- view templates and as compiled JavaScript via the asset_pipeline.}
23
- gem.email = "nathan@stitt.org"
24
- gem.authors = ["Nathan Stitt"]
25
- # dependencies defined in Gemfile
26
- end
27
- Jeweler::RubygemsDotOrgTasks.new
28
-
29
15
  require 'rake/testtask'
30
16
  Rake::TestTask.new(:test) do |test|
31
17
  test.libs << 'lib' << 'test'
@@ -3,21 +3,23 @@ require 'yaml'
3
3
  module LiquidAssets
4
4
  # Change config options in an initializer:
5
5
  #
6
- # LiquidAssets::Config.template_namespace = 'LT'
6
+ # LiquidAssets::Config.namespace = 'LT'
7
7
  #
8
8
  # Or in a block:
9
9
  #
10
10
  # LiquidAssets::Config.configure do |config|
11
11
  # config.path_prefix = 'app/assets/templates'
12
12
  # config.filters = MyFilterModule
13
- # config.template_namespace = 'LQT'
13
+ # config.namespace = 'LQT'
14
14
  # end
15
15
  #
16
16
  # Or change config options in a YAML file (config/liquid_assets.yml):
17
17
  #
18
18
  # defaults: &defaults
19
19
  # path_prefix: 'templates'
20
- # template_namespace: 'LQT'
20
+ # namespace: 'LQT'
21
+ # globals:
22
+ # company: 'BigCorp Inc'
21
23
  # development:
22
24
  # <<: *defaults
23
25
  # test:
@@ -33,10 +35,23 @@ module LiquidAssets
33
35
  # Directory to read templates from. Default = app/assets/templates
34
36
  attr_writer :path_prefix
35
37
  # The name of the global JS object that will contain the templates. Defaults = LQT
36
- attr_writer :template_namespace
38
+ attr_writer :namespace
37
39
  # A Ruby module implementing the Liquid Filters that are accessible when templates are evaluated as views
38
- # Javascript filters must be passed as the second parameter given when evaluating a precompiled template
40
+ # Javascript filters can be set by modifying the LQT.Filters object.
41
+ # A set of the standard Shopify filters are provided for both Ruby & Javascript.
42
+ # https://github.com/Shopify/liquid/wiki/Liquid-for-Designers
39
43
  attr_writer :filters
44
+ # May be set to a Proc/Lambda which will be passed the path to a
45
+ # potential template
46
+ #
47
+ # The lambda should return the contents of a liquid template
48
+ # or false to indicate it is not found
49
+ attr_writer :content_provider
50
+ #
51
+ # A hash of 'global' variables that should always be available to
52
+ # templates. This will be merged into the template local variables
53
+ # when the template is rendered and may overwrite them
54
+ attr_writer :globals
40
55
 
41
56
  def configure
42
57
  yield self
@@ -53,8 +68,9 @@ module LiquidAssets
53
68
  end
54
69
 
55
70
  def load_yml!
56
- @path_prefix = yml['path_prefix'] if yml.has_key? 'path_prefix'
57
- @template_namespace = yml['template_namespace'] if yml.has_key? 'template_namespace'
71
+ %{path_prefix namespace globals}.each do | name |
72
+ self.instance_variable_set( "@#{name}", yml[name] ) if yaml.has_key?(name)
73
+ end
58
74
  end
59
75
 
60
76
  def path_prefix
@@ -68,11 +84,22 @@ module LiquidAssets
68
84
  Pathname.new('.')
69
85
  end
70
86
  end
87
+
88
+ def content_provider
89
+ @content_provider ||= lambda{|path| false }
90
+ end
91
+ def globals
92
+ ( @globals && @globals.is_a?(Proc) ) ? @globals.call : @globals ||= {}
93
+ end
94
+ def template_root_path
95
+ root_path.join( 'app','assets','templates' )
96
+ end
97
+
71
98
  def filters
72
99
  @filters ||= Liquid::StandardFilters
73
100
  end
74
- def template_namespace
75
- @template_namespace ||= 'LQT'
101
+ def namespace
102
+ @namespace ||= 'LQT'
76
103
  end
77
104
 
78
105
  def yml
@@ -1,4 +1,4 @@
1
- require 'liquid_assets/tilt_engine'
1
+ require 'liquid_assets/pipeline_template_engine'
2
2
 
3
3
  module LiquidAssets
4
4
 
@@ -9,14 +9,14 @@ module LiquidAssets
9
9
 
10
10
  LiquidAssets::Config.load_yml! if LiquidAssets::Config.yml_exists?
11
11
 
12
-
13
12
  ActionView::Template.register_template_handler(:liquid, LiquidAssets::TemplateHandler )
14
13
 
15
- app.assets.register_engine(".liquid", ::LiquidAssets::TiltEngine )
14
+ app.assets.register_engine(".liquid", ::LiquidAssets::PipelineTemplateEngine )
16
15
 
17
16
  app.config.to_prepare do
18
- Liquid::Template.file_system = Liquid::LocalFileSystem.new( Config.root_path )
17
+ Liquid::Template.file_system = Liquid::LocalFileSystem.new( Config.template_root_path )
19
18
  ApplicationController.send( :append_view_path, LiquidAssets::Config.path_prefix )
19
+ ApplicationController.send( :prepend_view_path, LiquidAssets::Resolver.instance )
20
20
  end
21
21
  end
22
22
 
@@ -0,0 +1,20 @@
1
+
2
+ module LiquidAssets
3
+
4
+
5
+ class LiquidWrapper < Struct.new(:template)
6
+
7
+ def render( variables={}, config={} )
8
+ assigns = Config.globals.dup
9
+ assigns.merge!( variables )
10
+ config[:filters] ||= ::LiquidAssets::Config.filters
11
+ template.render(assigns, config )
12
+ end
13
+ end
14
+
15
+ def self.parse( source )
16
+ LiquidWrapper.new( ::Liquid::Template.parse( source ) )
17
+ end
18
+
19
+
20
+ end
@@ -2,7 +2,7 @@ require 'tilt'
2
2
 
3
3
  module LiquidAssets
4
4
 
5
- class TiltEngine < Tilt::Template
5
+ class PipelineTemplateEngine < Tilt::Template
6
6
 
7
7
  self.default_mime_type = 'application/javascript'
8
8
 
@@ -10,16 +10,13 @@ module LiquidAssets
10
10
  # end
11
11
 
12
12
  def evaluate(scope, locals, &block)
13
-
14
13
  template_path = TemplatePath.new scope
15
- template_namespace = LiquidAssets::Config.template_namespace
16
-
17
- compiled_template = TinyLiquid.compile(data)
18
14
 
19
- <<-TEMPLATE
20
- this.#{template_namespace} || (this.#{template_namespace} = {});
21
- this.#{template_namespace}[#{template_path.name}] = #{compiled_template};
22
- TEMPLATE
15
+ source = Config.content_provider.call( template_path.name )
16
+ if false == source
17
+ source = data
18
+ end
19
+ "#{LiquidAssets::Config.namespace}.Templates[#{template_path.name.dump}] = #{ TinyLiquid.compile( source ) };"
23
20
  end
24
21
 
25
22
  protected
@@ -38,15 +35,14 @@ module LiquidAssets
38
35
  end
39
36
 
40
37
  def name
41
- @name ||= relative_path.dump
38
+ @name ||= relative_path
42
39
  end
43
40
 
44
- private
45
41
 
46
42
  attr_accessor :template_path
47
43
 
48
44
  def relative_path
49
- @relative_path ||= template_path.gsub(/^#{LiquidAssets::Config.path_prefix}\/(.*)$/i, "\\1")
45
+ @relative_path ||= template_path.sub(/^#{LiquidAssets::Config.path_prefix}\/(.*)$/i, '\1' )
50
46
  end
51
47
  end
52
48
  end
@@ -0,0 +1,68 @@
1
+ require 'singleton'
2
+ require 'action_view'
3
+ require 'action_view/template'
4
+
5
+ module LiquidAssets
6
+ class Resolver < ActionView::Resolver
7
+
8
+ include Singleton
9
+
10
+ def to_s
11
+ 'LiquidAssets::Resolver'
12
+ end
13
+
14
+ def find_templates(name, prefix, partial, details)
15
+
16
+ source = Config.content_provider.call( name )
17
+ if false == source
18
+ return []
19
+ else
20
+ return [ make_template( source, normalize_path( prefix, name ), details, partial ) ]
21
+ end
22
+ end
23
+
24
+ def clear_cache_for( expired_path )
25
+ @cached.each do |context, prefix_hash |
26
+ prefix_hash.each do | prefix, name_hash |
27
+ name_hash.delete_if{ | name, partial_hash |
28
+ normalize_path( prefix, name ) == expired_path
29
+ }
30
+ end
31
+ end
32
+ end
33
+
34
+ private
35
+
36
+ def normalize_path( prefix, name )
37
+ if prefix.present? && name.present?
38
+ prefix + '/' + name
39
+ elsif prefix.present?
40
+ prefix
41
+ else
42
+ name
43
+ end
44
+ end
45
+
46
+ def make_template( source, path, details, partial )
47
+ handler = ::ActionView::Template.registered_template_handler('.liquid')
48
+ details = {
49
+ :virtual_path => partial_path(path, partial ),
50
+ :locale => details[:locale].first.to_s,
51
+ :format => details[:formats].first.to_s,
52
+ :handler => details[:handlers].map(&:to_s),
53
+ :partial => partial || false
54
+ }
55
+ handler = ActionView::Template.registered_template_handler(:liquid)
56
+ return ActionView::Template.new(source, "LiquidTemplate - #{path}", handler, details)
57
+ end
58
+
59
+ def partial_path( path, partial )
60
+ return path if ! partial
61
+ if index.path.rindex('/') # had: gsub(/\/([^\/]+)$/,'/_\1')
62
+ path.insert(index+1,'_') # this is better
63
+ else
64
+ '_' + path
65
+ end
66
+ end
67
+ end
68
+ end
@@ -6,9 +6,6 @@ module LiquidAssets
6
6
  class TemplateHandler
7
7
 
8
8
  def self.call(template)
9
- # view_path = "#{template.virtual_path}_view"
10
- # abs_view_path = Rails.root.join('app/views', view_path)
11
- # Rails.logger.warn "looking for: #{abs_view_path}"
12
9
  return "LiquidAssets::TemplateHandler.new(self).render(#{template.source.inspect}, local_assigns)"
13
10
  end
14
11
 
@@ -19,27 +16,16 @@ module LiquidAssets
19
16
  def render(template, local_assigns = {})
20
17
  @view.controller.headers["Content-Type"] ||= 'text/html; charset=utf-8'
21
18
 
22
- assigns = @view.assigns
19
+ assigns = @view.assigns.dup
20
+ assigns.merge!( local_assigns.stringify_keys )
23
21
 
24
22
  if content = @view.content_for?(:layout)
25
23
  assigns["content_for_layout"] = content
26
24
  end
27
- assigns.merge!(local_assigns.stringify_keys)
28
-
29
- controller = @view.controller
30
- filters = if controller.respond_to?(:liquid_filters, true)
31
- controller.send(:liquid_filters)
32
- else
33
- Config.filters
34
- end
35
-
36
- liquid = ::Liquid::Template.parse(template)
37
- liquid.render(assigns,
38
- :filters => filters,
39
- :registers => {
40
- :action_view => @view,
41
- :controller => @view.controller
42
- } ).html_safe
25
+ LiquidAssets.parse(template).render( assigns, :registers=>{
26
+ :action_view => @view,
27
+ :controller => @view.controller
28
+ } ).html_safe
43
29
  end
44
30
 
45
31
  def compilable?
@@ -8,13 +8,17 @@ module LiquidAssets
8
8
 
9
9
  class << self
10
10
  def compile(source, options = {})
11
- js = context.eval("TinyLiquid.parse(#{source.inspect},{partials_namespace:'#{Config.template_namespace}'}).code")
12
- # js = context.eval("TinyLiquid.compile(#{source.inspect}, {original: true}).toString()")
13
- "function(locals,filters){
14
- var $_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;
15
- #{js}
16
- return $_buf;
17
- }"
11
+ ns = ::LiquidAssets::Config.namespace
12
+ js = context.eval("TinyLiquid.parse(#{source.inspect},{namespace:'#{Config.namespace}'}).code")
13
+ <<-TEMPLATE
14
+ function(locals,filters){
15
+ var $_tmpbuf, $_html = #{ns}._FNS.html, $_err = #{ns}._FNS.err,
16
+ $_rethrow=#{ns}._FNS.rethrow, $_merge=#{ns}._FNS.merge,
17
+ $_range=#{ns}._FNS.range, $_array=#{ns}._FNS.array;
18
+ #{js}
19
+ return $_buf;
20
+ }
21
+ TEMPLATE
18
22
  end
19
23
 
20
24
  private
@@ -1,3 +1,3 @@
1
1
  module LiquidAssets
2
- VERSION = "0.1.0"
2
+ VERSION = "0.3.2"
3
3
  end