handlebars_rb 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,48 @@
1
+ require 'v8'
2
+ require 'multi_json'
3
+
4
+
5
+ module Handlebars
6
+
7
+ V8::Context.new do |cxt|
8
+ cxt.load(File.expand_path(File.join(File.dirname(__FILE__), '..','js','lib','handlebars.js')))
9
+ @context = cxt
10
+ @handlebars = cxt['Handlebars']
11
+ end
12
+
13
+ class << self
14
+ attr_reader :context
15
+ end
16
+
17
+ class CompiledTemplate
18
+
19
+ def initialize(context, template)
20
+ @context, @template = context, template
21
+ end
22
+
23
+ def call(data)
24
+ json = MultiJson.encode(data)
25
+ @context['template'] = @template
26
+ @context.eval "template(#{json})"
27
+ end
28
+
29
+ end
30
+
31
+
32
+ def compile(*args)
33
+ Handlebars.module_eval do
34
+ CompiledTemplate.new(@context, @handlebars.compile(*args))
35
+ end
36
+ end
37
+ module_function :compile
38
+
39
+
40
+ def registerHelper(name, fn)
41
+ Handlebars.module_eval do
42
+ @handlebars.registerHelper(name, fn)
43
+ end
44
+ end
45
+ module_function :registerHelper
46
+
47
+
48
+ end
@@ -0,0 +1,3 @@
1
+ module Handlebars
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,95 @@
1
+ require 'handlebars'
2
+
3
+ class TestCollector
4
+
5
+ def initialize(suite)
6
+ @suite = suite
7
+ @proxy = HandlebarsProxy.new
8
+ end
9
+
10
+ def module(name)
11
+ @suite.add_module(name)
12
+ end
13
+
14
+ def test(desc, code)
15
+ @suite.add_test(desc, code)
16
+ end
17
+
18
+ def equal(actual, expected)
19
+ @suite.add_assertion do
20
+ actual.should == expected
21
+ end
22
+ end
23
+
24
+ def shouldCompileTo(string, hash, result, message = nil)
25
+ @suite.add_assertion do
26
+ context = {}
27
+ for k,v in hash
28
+ context[k] = v
29
+ end
30
+ Handlebars.compile(string).call(context).should == result
31
+ end
32
+ end
33
+
34
+ def shouldThrow(*args)
35
+ #we could proxy the throw assertions, but why bother?
36
+ end
37
+
38
+ def Handlebars
39
+ @proxy
40
+ end
41
+
42
+ end
43
+
44
+ class HandlebarsProxy
45
+ def compile(*args)
46
+ Handlebars.compile(*args)
47
+ end
48
+ end
49
+
50
+ require 'ostruct'
51
+ class QUnitSuite
52
+
53
+ attr_reader :modules
54
+
55
+ def initialize
56
+ @modules = []
57
+ end
58
+
59
+ def add_module(name)
60
+ @modules << OpenStruct.new(:name => name, :tests => [])
61
+ end
62
+
63
+ def add_test(desc, code)
64
+ unless ["safestring", "partials"].include?(@modules.last.name) #the should be passing, but aren't
65
+ @modules.last.tests << OpenStruct.new(:desc => desc, :assertions => [])
66
+ code.call()
67
+ end
68
+ end
69
+
70
+ def add_assertion(&code)
71
+ @modules.last.tests.last.assertions << code
72
+ end
73
+ end
74
+
75
+ describe(Handlebars) do
76
+
77
+ suite = QUnitSuite.new
78
+ V8::Context.new(:with => TestCollector.new(suite)) do |cxt|
79
+ cxt.load(File.expand_path(File.dirname(__FILE__) + '/../js/lib/handlebars.js'))
80
+
81
+ for mod in suite.modules
82
+ describe mod.name do
83
+ for test in mod.tests
84
+ it test.desc do
85
+ for assertion in test.assertions
86
+ assertion.call()
87
+ end
88
+ end
89
+ end
90
+ end unless mod.tests.empty?
91
+
92
+ end
93
+ end
94
+
95
+ end
metadata ADDED
@@ -0,0 +1,139 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: handlebars_rb
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Charles Lowell
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-05-31 00:00:00 -04:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: therubyracer
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - "="
28
+ - !ruby/object:Gem::Version
29
+ hash: 61
30
+ segments:
31
+ - 0
32
+ - 8
33
+ - 1
34
+ version: 0.8.1
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: multi_json
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ hash: 3
46
+ segments:
47
+ - 0
48
+ version: "0"
49
+ type: :runtime
50
+ version_requirements: *id002
51
+ - !ruby/object:Gem::Dependency
52
+ name: yajl-ruby
53
+ prerelease: false
54
+ requirement: &id003 !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ~>
58
+ - !ruby/object:Gem::Version
59
+ hash: 19
60
+ segments:
61
+ - 0
62
+ - 7
63
+ - 8
64
+ version: 0.7.8
65
+ type: :runtime
66
+ version_requirements: *id003
67
+ - !ruby/object:Gem::Dependency
68
+ name: rspec
69
+ prerelease: false
70
+ requirement: &id004 !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ hash: 15
76
+ segments:
77
+ - 2
78
+ - 0
79
+ - 0
80
+ version: 2.0.0
81
+ type: :development
82
+ version_requirements: *id004
83
+ description: Uses he ruby racer
84
+ email:
85
+ - cowboyd@thefrontside.net
86
+ executables: []
87
+
88
+ extensions: []
89
+
90
+ extra_rdoc_files: []
91
+
92
+ files:
93
+ - .gitignore
94
+ - .rspec
95
+ - Gemfile
96
+ - Gemfile.lock
97
+ - README.mdown
98
+ - Rakefile
99
+ - handlebars_rb.gemspec
100
+ - js/lib/handlebars.js
101
+ - lib/handlebars.rb
102
+ - lib/handlebars/version.rb
103
+ - spec/handlebars_spec.rb
104
+ has_rdoc: true
105
+ homepage: http://github.com/cowboyd/handlebars.rb
106
+ licenses: []
107
+
108
+ post_install_message:
109
+ rdoc_options: []
110
+
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
+ hash: 3
119
+ segments:
120
+ - 0
121
+ version: "0"
122
+ required_rubygems_version: !ruby/object:Gem::Requirement
123
+ none: false
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ hash: 3
128
+ segments:
129
+ - 0
130
+ version: "0"
131
+ requirements: []
132
+
133
+ rubyforge_project: handlebars
134
+ rubygems_version: 1.5.0
135
+ signing_key:
136
+ specification_version: 3
137
+ summary: Ruby bindings for the handlebars.js templating library
138
+ test_files:
139
+ - spec/handlebars_spec.rb