barber 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,6 @@
1
+ // Precompiler
2
+ var Barber = {
3
+ precompile: function(string) {
4
+ return Handlebars.precompile(string).toString();
5
+ }
6
+ };
@@ -0,0 +1,51 @@
1
+ require 'json'
2
+ require 'execjs'
3
+
4
+ module Barber
5
+ class Precompiler
6
+ class << self
7
+ def compile(template)
8
+ new.compile(template)
9
+ end
10
+ end
11
+
12
+ def compile(source)
13
+ # if the source is a prescaped JSON string then
14
+ # it should be parse, else just use it as is
15
+ content = begin
16
+ JSON.load source
17
+ rescue JSON::ParserError
18
+ source
19
+ end
20
+
21
+ context.call precompile_function, content
22
+ rescue ExecJS::ProgramError => ex
23
+ raise Barber::PrecompilerError.new(source, ex)
24
+ end
25
+
26
+ def precompile_function
27
+ "Barber.precompile"
28
+ end
29
+
30
+ def sources
31
+ [precompiler_path, handlebars_path]
32
+ end
33
+
34
+ def handlebars_path
35
+ @handlebears_path ||= File.new(File.expand_path("../javascripts/handlebars.js", __FILE__))
36
+ end
37
+
38
+ private
39
+ def precompiler_path
40
+ @precompiler_path ||= File.new(File.expand_path("../javascripts/handlebars_precompiler.js", __FILE__))
41
+ end
42
+
43
+ def context
44
+ @context ||= ExecJS.compile source
45
+ end
46
+
47
+ def source
48
+ @source ||= sources.map(&:read).join("\n")
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,21 @@
1
+ module Barber
2
+ class InlinePrecompiler
3
+ class << self
4
+ def call(template)
5
+ "Handlebars.template(#{compile(template)})"
6
+ end
7
+
8
+ def compile(template)
9
+ Barber::Precompiler.compile template
10
+ end
11
+ end
12
+ end
13
+
14
+ class FilePrecompiler < InlinePrecompiler
15
+ class << self
16
+ def call(template)
17
+ "#{super};"
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,3 @@
1
+ module Barber
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,18 @@
1
+ require 'test_helper'
2
+
3
+ class EmberPrecompilerTest < MiniTest::Unit::TestCase
4
+ def test_calls_the_ember_handlebars_precompiler
5
+ result = compile "Hello {{name}}"
6
+ assert result
7
+ assert_match result, /Ember\.Handlebars/
8
+ end
9
+
10
+ def test_is_a_precompiler
11
+ assert Barber::Ember::Precompiler < Barber::Precompiler,
12
+ "Ember precompile should inherit from Barber::Precompiler"
13
+ end
14
+
15
+ def compile(template)
16
+ Barber::Ember::Precompiler.compile template
17
+ end
18
+ end
@@ -0,0 +1,20 @@
1
+ require 'test_helper'
2
+
3
+ class EmberPrecompilersTest < MiniTest::Unit::TestCase
4
+ def template ; "{{hello}}" ; end
5
+ def compiled_template ; "function()" ; end
6
+
7
+ def test_precompiles_inline_templates
8
+ Barber::Ember::Precompiler.expects(:compile).with(template).returns(compiled_template)
9
+
10
+ result = Barber::Ember::InlinePrecompiler.call(template)
11
+ assert_equal "Ember.Handlebars.template(#{compiled_template})", result
12
+ end
13
+
14
+ def test_precompiles_template_files
15
+ Barber::Ember::Precompiler.expects(:compile).with(template).returns(compiled_template)
16
+
17
+ result = Barber::Ember::FilePrecompiler.call(template)
18
+ assert_equal "Ember.Handlebars.template(#{compiled_template});", result
19
+ end
20
+ end
@@ -0,0 +1,47 @@
1
+ require 'test_helper'
2
+ require 'stringio'
3
+
4
+ class PrecompilerTest < MiniTest::Unit::TestCase
5
+ def test_returns_a_template
6
+ result = compile "Hello {{name}}"
7
+ assert result
8
+ end
9
+
10
+ def test_compiles_templates_with_quotes
11
+ template = <<-hbs
12
+ <div class="calendar">
13
+ <a {{action switchToNextYear target="view"}}>{{view.nextYear}}</a>
14
+ </div>
15
+
16
+ {{view Radium.RangeChangerView}}
17
+ hbs
18
+
19
+ result = compile JSON.dump({:template => template})['template']
20
+ assert result
21
+ end
22
+
23
+ def test_raises_an_error_on_bad_templates
24
+ assert_raises Barber::PrecompilerError do
25
+ compile "Hello {{"
26
+ end
27
+ end
28
+
29
+ def test_has_an_easy_to_customize_public_interface
30
+ custom_compiler = Class.new Barber::Precompiler do
31
+ def sources
32
+ [StringIO.new(compiler_source)]
33
+ end
34
+
35
+ def compiler_source
36
+ %Q|var Barber = { precompile: function(string) { return "Foo"; }};|
37
+ end
38
+ end
39
+
40
+ assert_equal "Foo", custom_compiler.compile("{{hello}}")
41
+ end
42
+
43
+ private
44
+ def compile(template)
45
+ Barber::Precompiler.compile template
46
+ end
47
+ end
@@ -0,0 +1,20 @@
1
+ require 'test_helper'
2
+
3
+ class PrecompilersTest < MiniTest::Unit::TestCase
4
+ def template ; "{{hello}}" ; end
5
+ def compiled_template ; "function()" ; end
6
+
7
+ def test_precompiles_inline_templates
8
+ Barber::Precompiler.expects(:compile).with(template).returns(compiled_template)
9
+
10
+ result = Barber::InlinePrecompiler.call(template)
11
+ assert_equal "Handlebars.template(#{compiled_template})", result
12
+ end
13
+
14
+ def test_precompiles_template_files
15
+ Barber::Precompiler.expects(:compile).with(template).returns(compiled_template)
16
+
17
+ result = Barber::FilePrecompiler.call(template)
18
+ assert_equal "Handlebars.template(#{compiled_template});", result
19
+ end
20
+ end
@@ -0,0 +1,9 @@
1
+ require 'simplecov'
2
+ SimpleCov.start
3
+
4
+ require 'barber'
5
+
6
+ require 'minitest/unit'
7
+ require 'minitest/autorun'
8
+
9
+ require 'mocha'
metadata ADDED
@@ -0,0 +1,142 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: barber
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - tchak
9
+ - twinturbo
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2012-11-01 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: execjs
17
+ requirement: !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ! '>='
29
+ - !ruby/object:Gem::Version
30
+ version: '0'
31
+ - !ruby/object:Gem::Dependency
32
+ name: rake
33
+ requirement: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ type: :development
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: simplecov
49
+ requirement: !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: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ - !ruby/object:Gem::Dependency
64
+ name: mocha
65
+ requirement: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ type: :development
72
+ prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ description: Handlebars precompilation
80
+ email:
81
+ - paul@chavard.net
82
+ executables: []
83
+ extensions: []
84
+ extra_rdoc_files: []
85
+ files:
86
+ - .gitignore
87
+ - Gemfile
88
+ - LICENSE
89
+ - README.md
90
+ - Rakefile
91
+ - barber.gemspec
92
+ - lib/barber.rb
93
+ - lib/barber/ember/precompiler.rb
94
+ - lib/barber/ember/precompilers.rb
95
+ - lib/barber/javascripts/ember.js
96
+ - lib/barber/javascripts/ember_precompiler.js
97
+ - lib/barber/javascripts/handlebars.js
98
+ - lib/barber/javascripts/handlebars_precompiler.js
99
+ - lib/barber/precompiler.rb
100
+ - lib/barber/precompilers.rb
101
+ - lib/barber/version.rb
102
+ - test/ember/precompiler_test.rb
103
+ - test/ember/precompilers_test.rb
104
+ - test/precompiler_test.rb
105
+ - test/precompilers_test.rb
106
+ - test/test_helper.rb
107
+ homepage: https://github.com/tchak/barber
108
+ licenses: []
109
+ post_install_message:
110
+ rdoc_options: []
111
+ require_paths:
112
+ - lib
113
+ required_ruby_version: !ruby/object:Gem::Requirement
114
+ none: false
115
+ requirements:
116
+ - - ! '>='
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ segments:
120
+ - 0
121
+ hash: 2188144724700774625
122
+ required_rubygems_version: !ruby/object:Gem::Requirement
123
+ none: false
124
+ requirements:
125
+ - - ! '>='
126
+ - !ruby/object:Gem::Version
127
+ version: '0'
128
+ segments:
129
+ - 0
130
+ hash: 2188144724700774625
131
+ requirements: []
132
+ rubyforge_project:
133
+ rubygems_version: 1.8.23
134
+ signing_key:
135
+ specification_version: 3
136
+ summary: Handlebars precompilation toolkit
137
+ test_files:
138
+ - test/ember/precompiler_test.rb
139
+ - test/ember/precompilers_test.rb
140
+ - test/precompiler_test.rb
141
+ - test/precompilers_test.rb
142
+ - test/test_helper.rb