handlebars_assets 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,20 +1,29 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- handlebars_assets (0.0.3)
5
- therubyracer
4
+ handlebars_assets (0.1.0)
5
+ execjs
6
6
  tilt
7
7
 
8
8
  GEM
9
9
  remote: http://rubygems.org/
10
10
  specs:
11
+ activesupport (3.1.0)
12
+ multi_json (~> 1.0)
13
+ execjs (1.2.4)
14
+ multi_json (~> 1.0)
11
15
  libv8 (3.3.10.2)
12
- therubyracer (0.9.3)
16
+ multi_json (1.0.3)
17
+ rake (0.9.2)
18
+ therubyracer (0.9.4)
13
19
  libv8 (~> 3.3.10)
14
- tilt (1.3.2)
20
+ tilt (1.3.3)
15
21
 
16
22
  PLATFORMS
17
23
  ruby
18
24
 
19
25
  DEPENDENCIES
26
+ activesupport (~> 3.1.0)
20
27
  handlebars_assets!
28
+ rake
29
+ therubyracer
@@ -0,0 +1,3 @@
1
+ ## v0.1.0
2
+
3
+ * use execjs (@spraints)
data/README.md CHANGED
@@ -82,3 +82,7 @@ Once you've made your great commits
82
82
  # Author
83
83
 
84
84
  Les Hill : @leshill
85
+
86
+ # Contributors
87
+
88
+ Matt Burke : @spraints ( execjs support )
data/Rakefile CHANGED
@@ -1 +1,7 @@
1
1
  require "bundler/gem_tasks"
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new do |t|
5
+ t.libs << 'test'
6
+ t.test_files = FileList['test/**/*_test.rb']
7
+ end
@@ -18,6 +18,10 @@ Gem::Specification.new do |s|
18
18
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
19
  s.require_paths = ["lib"]
20
20
 
21
- s.add_runtime_dependency "therubyracer"
21
+ s.add_runtime_dependency "execjs"
22
22
  s.add_runtime_dependency "tilt"
23
+
24
+ s.add_development_dependency "activesupport", "~> 3.1.0"
25
+ s.add_development_dependency "therubyracer"
26
+ s.add_development_dependency "rake"
23
27
  end
@@ -3,6 +3,5 @@ require 'handlebars_assets/engine'
3
3
 
4
4
  module HandlebarsAssets
5
5
  autoload(:Handlebars, 'handlebars_assets/handlebars')
6
- autoload(:Loader, 'handlebars_assets/loader')
7
6
  autoload(:TiltHandlebars, 'handlebars_assets/tilt_handlebars')
8
7
  end
@@ -1,17 +1,29 @@
1
- # Based on https://github.com/cowboyd/handlebars.rb
1
+ # Based on https://github.com/josh/ruby-coffee-script
2
+ require 'execjs'
3
+ require 'pathname'
4
+
2
5
  module HandlebarsAssets
3
- module Handlebars
4
- @loader = Loader.new
6
+ class Handlebars
7
+ class << self
8
+ def precompile(*args)
9
+ context.call('Handlebars.precompile', *args)
10
+ end
5
11
 
6
- module_function
12
+ private
13
+ def context
14
+ @context ||= ExecJS.compile(source)
15
+ end
7
16
 
8
- def precompile(*args)
9
- handlebars.precompile(*args)
10
- end
17
+ def source
18
+ @source ||= path.read
19
+ end
20
+
21
+ def path
22
+ @path ||= assets_path.join('javascripts', 'handlebars.js')
23
+ end
11
24
 
12
- def handlebars
13
- Handlebars.module_eval do
14
- @loader.require('handlebars')
25
+ def assets_path
26
+ @assets_path ||= Pathname(__FILE__).dirname.join('..','..','vendor','assets')
15
27
  end
16
28
  end
17
29
  end
@@ -1,3 +1,3 @@
1
1
  module HandlebarsAssets
2
- VERSION = "0.0.3"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -0,0 +1,31 @@
1
+ require 'test_helper'
2
+
3
+ module HandlebarsAssets
4
+ class TiltHandlebarsTest < Test::Unit::TestCase
5
+ def test_render
6
+ # Try to act like sprockets.
7
+ scope = Object.new
8
+ class << scope
9
+ def logical_path ; 'x11' ; end
10
+ end
11
+ template = HandlebarsAssets::TiltHandlebars.new('/myapp/app/assets/templates/x11.jst.hbs') { "This is {{handlebars}}" }
12
+ assert_equal <<END_EXPECTED, template.render(scope, {})
13
+ function(context) {
14
+ return HandlebarsTemplates["x11"](context);
15
+ };
16
+ this.HandlebarsTemplates || (this.HandlebarsTemplates = {});
17
+ this.HandlebarsTemplates["x11"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
18
+ helpers = helpers || Handlebars.helpers;
19
+ var buffer = "", stack1, self=this, functionType="function", helperMissing=helpers.helperMissing, undef=void 0, escapeExpression=this.escapeExpression;
20
+
21
+
22
+ buffer += "This is ";
23
+ stack1 = helpers.handlebars || depth0.handlebars
24
+ if(typeof stack1 === functionType) { stack1 = stack1.call(depth0, { hash: {} }); }
25
+ else if(stack1=== undef) { stack1 = helperMissing.call(depth0, "handlebars", { hash: {} }); }
26
+ buffer += escapeExpression(stack1);
27
+ return buffer;});
28
+ END_EXPECTED
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,6 @@
1
+ require 'active_support/core_ext/string/starts_ends_with'
2
+
3
+ require 'handlebars_assets/tilt_handlebars'
4
+ require 'handlebars_assets/handlebars'
5
+
6
+ require 'test/unit'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: handlebars_assets
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-09-01 00:00:00.000000000Z
12
+ date: 2011-09-09 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: therubyracer
16
- requirement: &70230656005660 !ruby/object:Gem::Requirement
15
+ name: execjs
16
+ requirement: &70162067012660 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70230656005660
24
+ version_requirements: *70162067012660
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: tilt
27
- requirement: &70230656005240 !ruby/object:Gem::Requirement
27
+ requirement: &70162067012160 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,7 +32,40 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70230656005240
35
+ version_requirements: *70162067012160
36
+ - !ruby/object:Gem::Dependency
37
+ name: activesupport
38
+ requirement: &70162067011380 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: 3.1.0
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *70162067011380
47
+ - !ruby/object:Gem::Dependency
48
+ name: therubyracer
49
+ requirement: &70162067010880 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *70162067010880
58
+ - !ruby/object:Gem::Dependency
59
+ name: rake
60
+ requirement: &70162067010420 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *70162067010420
36
69
  description: Compile Handlebars templates in the Rails asset pipeline.
37
70
  email:
38
71
  - leshill@gmail.com
@@ -44,15 +77,17 @@ files:
44
77
  - .rvmrc
45
78
  - Gemfile
46
79
  - Gemfile.lock
80
+ - HISTORY.md
47
81
  - README.md
48
82
  - Rakefile
49
83
  - handlebars_assets.gemspec
50
84
  - lib/handlebars_assets.rb
51
85
  - lib/handlebars_assets/engine.rb
52
86
  - lib/handlebars_assets/handlebars.rb
53
- - lib/handlebars_assets/loader.rb
54
87
  - lib/handlebars_assets/tilt_handlebars.rb
55
88
  - lib/handlebars_assets/version.rb
89
+ - test/handlebars_assets/tilt_handlebars_test.rb
90
+ - test/test_helper.rb
56
91
  - vendor/assets/javascripts/handlebars.js
57
92
  homepage: ''
58
93
  licenses: []
@@ -74,8 +109,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
74
109
  version: '0'
75
110
  requirements: []
76
111
  rubyforge_project: handlebars_assets
77
- rubygems_version: 1.8.6
112
+ rubygems_version: 1.8.10
78
113
  signing_key:
79
114
  specification_version: 3
80
115
  summary: Compile Handlebars templates in the Rails asset pipeline.
81
- test_files: []
116
+ test_files:
117
+ - test/handlebars_assets/tilt_handlebars_test.rb
118
+ - test/test_helper.rb
@@ -1,28 +0,0 @@
1
- # Based on https://github.com/cowboyd/handlebars.rb
2
- require 'v8'
3
- require 'pathname'
4
-
5
- module HandlebarsAssets
6
- class Loader
7
- def initialize
8
- @cxt = V8::Context.new
9
- @path = Pathname(__FILE__).dirname.join('..','..','vendor','assets','javascripts')
10
- @modules = {}
11
- end
12
-
13
- def require(modname)
14
- unless mod = @modules[modname]
15
- filename = modname =~ /\.js$/ ? modname : "#{modname}.js"
16
- filepath = @path.join(filename)
17
- fail LoadError, "no such file: #{filename}" unless filepath.exist?
18
- load = @cxt.eval("(function(require, module, exports) {#{File.read(filepath)} module.exports = Handlebars;})", filepath.expand_path)
19
- object = @cxt['Object']
20
- mod = object.new
21
- mod['exports'] = object.new
22
- @modules[modname] = mod
23
- load.call(method(:require), mod, mod.exports)
24
- end
25
- return mod.exports
26
- end
27
- end
28
- end