jadeite 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.
data/.gitignore ADDED
@@ -0,0 +1,27 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ /tmp
5
+ .DS_Store
6
+ .rvmrc
7
+ *~
8
+ coverage/
9
+ .idea
10
+ node_modules
11
+ npm-debug.log
12
+ /.sass-cache
13
+ /log/*
14
+ .config
15
+ .yardoc
16
+ Gemfile.lock
17
+ InstalledFiles
18
+ _yardoc
19
+ coverage
20
+ doc/
21
+ lib/bundler/man
22
+ pkg
23
+ rdoc
24
+ spec/reports
25
+ test/tmp
26
+ test/version_tmp
27
+ tmp
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'http://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in jadeite.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Bengler AS
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,100 @@
1
+ ```
2
+ ________ _________ __________
3
+ ______(_)_____ ______ /_______(_)_ /_____
4
+ _____ /_ __ `/ __ /_ _ \_ /_ __/ _ \
5
+ ____ / / /_/ // /_/ / / __/ / / /_ / __/
6
+ ___ / \__,_/ \__,_/ \___//_/ \__/ \___/
7
+ /___/ Compile and render Jade templates from Ruby
8
+
9
+ ```
10
+
11
+ Jadeite lets you compile and render [Jade](http://jade-lang.com) templates from your Ruby code.
12
+ Under the hood it uses the Jade node module running in
13
+ [therubyracer's](https://github.com/cowboyd/therubyracer) embedded V8 JavaScript engine.
14
+
15
+ It is pretty cool since it means you can easily share templates between the server side and front end.
16
+ Render with json/javascript data on the client side and ruby objects on the server side.
17
+
18
+ ## Getting started
19
+
20
+ Add this line to your application's Gemfile:
21
+
22
+ gem 'jadeite'
23
+
24
+ And then execute:
25
+
26
+ $ bundle
27
+
28
+ Or install it yourself as:
29
+
30
+ $ gem install jadeite
31
+
32
+ ## Usage
33
+
34
+ ### Render a template string with data
35
+
36
+ ```ruby
37
+ env = Jadeite::Environment.new
38
+ env.render('p Hello #{what}!', {:what =>"world"})
39
+ #=> "<p>Hello world!</p>"
40
+ ```
41
+
42
+ ### Compile once, render twice (or more)
43
+
44
+ ```ruby
45
+ env = Jadeite::Environment.new
46
+ compiled = env.compile('p Hello #{what}!')
47
+ compiled.render :what => "world"
48
+ #=> "<p>Hello world!</p>"
49
+ compiled.render :what => "moon"
50
+ #=> "<p>Hello moon!</p>"
51
+ ```
52
+
53
+ ### Compile / render a file
54
+
55
+ ```ruby
56
+ env = Jadeite::Environment.new
57
+
58
+ # compile first
59
+ compiled = env.compile_file("./hello.jade")
60
+ compiled.render :what => "world"
61
+ #=> "<p>Hello world!</p>"
62
+
63
+ # or simply
64
+ env.render_file("./hello.jade", :what => "moon")
65
+ #=> "<p>Hello moon!</p>"
66
+ ```
67
+
68
+ ### Output compiled template function (i.e. for serving your front-end views)
69
+
70
+ ```ruby
71
+ env = Jadeite::Environment.new
72
+ env.compile 'p Hello #{what}!', :client => true, :compileDebug => false
73
+ #=> function anonymous(locals, attrs, escape, rethrow, merge) {
74
+ # var attrs = jade.attrs, escape = jade.escape, rethrow = jade.rethrow, merge = jade.merge;
75
+ # var buf = [];
76
+ # with (locals || {}) {
77
+ # var interp;
78
+ # buf.push('<p>Hello ' + escape((interp = what) == null ? '' : interp) + '!</p>');
79
+ # }
80
+ # return buf.join("");
81
+ # }
82
+
83
+ ```
84
+
85
+ See https://github.com/visionmedia/jade#browser-support for more info.
86
+
87
+ ### API
88
+ Instances of Jadeite::Environment has two public methods:
89
+
90
+ `compile(template_string, options)` and `render(template_string, data, options)`
91
+ in where the `options` argument for both of them corresponds to the options argument in
92
+ [Jade's public api](https://github.com/visionmedia/jade#public-api).
93
+
94
+ ## Contributing
95
+
96
+ 1. Fork it
97
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
98
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
99
+ 4. Push to the branch (`git push origin my-new-feature`)
100
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
3
+
4
+ task :default => :prepare
5
+ task :prepare do
6
+ puts "Running npm install"
7
+ system("npm install")
8
+ system("npm shrinkwrap")
9
+ end
data/jadeite.gemspec ADDED
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/jadeite/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Bjørge Næss"]
6
+ gem.email = ["bjoerge@bengler.no"]
7
+ gem.description = %q{Compile and render Jade templates from Ruby}
8
+ gem.summary = %q{Jadeite lets you compile and render Jade templates from your Ruby code. Under the hood it uses the Jade node module running in therubyracer's embedded V8 JavaScript engine.}
9
+ gem.homepage = ""
10
+
11
+ gem.files = `git ls-files`.split($\)
12
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
+ gem.name = "jadeite"
15
+ gem.rubyforge_project = "jadeite"
16
+ gem.require_paths = ["lib"]
17
+ gem.version = Jadeite::VERSION
18
+
19
+ gem.extensions = "Rakefile"
20
+
21
+ gem.add_dependency "therubyracer"
22
+
23
+ gem.add_development_dependency "rspec"
24
+ gem.add_development_dependency "simplecov"
25
+ end
data/lib/jadeite.rb ADDED
@@ -0,0 +1,6 @@
1
+ require "jadeite/version"
2
+ require "jadeite/environment"
3
+
4
+ module Jadeite
5
+
6
+ end
@@ -0,0 +1,45 @@
1
+ require 'v8'
2
+ require "nodejs"
3
+
4
+ module Jadeite
5
+ class Environment
6
+ def initialize
7
+ context = V8::Context.new
8
+ context.eval("var process = {env: {}}")
9
+ context.load(File.expand_path(File.join('../../../', 'node_modules/jade/runtime.js'), __FILE__))
10
+
11
+ node_env = NodeJS::Environment.new(context, File.expand_path('../../', __FILE__))
12
+ @jade = node_env.require('jade')
13
+ end
14
+
15
+ def compile(template_str, opts={})
16
+ Template.new(@jade.compile(template_str.strip, opts))
17
+ end
18
+
19
+ def render(template_str, data={}, opts={})
20
+ compile(template_str, opts).render(data)
21
+ end
22
+
23
+ def compile_file(file, opts = {})
24
+ opts.merge!(:filename => File.expand_path(file))
25
+ compile(File.read(file), opts)
26
+ end
27
+
28
+ def render_file(file, data={}, opts = {})
29
+ compile_file(file, opts).render(data)
30
+ end
31
+ end
32
+
33
+ private
34
+ class Template
35
+ def initialize(compiled)
36
+ @compiled = compiled
37
+ end
38
+ def render(data={})
39
+ @compiled.call data
40
+ end
41
+ def to_s
42
+ @compiled.to_s
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,3 @@
1
+ module Jadeite
2
+ VERSION = "0.0.1"
3
+ end
data/lib/nodejs.rb ADDED
@@ -0,0 +1,13 @@
1
+ require "nodejs/environment"
2
+ require "nodejs/module"
3
+ module NodeJS
4
+ @builtins = {}
5
+ def self.register_builtin(sym, klass)
6
+ @builtins[sym.to_s] = klass
7
+ end
8
+ def self.builtins
9
+ @builtins
10
+ end
11
+
12
+ require "nodejs/builtins"
13
+ end
@@ -0,0 +1,29 @@
1
+ A Naïve implementation of Node.js require() in [therubyracer](https://github.com/cowboyd/therubyracer).
2
+
3
+ Based on [commonjs.rb](https://github.com/cowboyd/commonjs.rb) by Charles Lowell (cowboyd) but has a few notable extra features:
4
+
5
+ - If a directory is passed to require(), it will look for dirname/index.js
6
+ - If a module id is passed to require(), it will look in the node_modules subdirectory for a directory matching the module name,
7
+ read package.json from that directory and require the main entry javascript file.
8
+
9
+ # Disclaimer
10
+
11
+ This is by no means a solid implementation of the module loader in NPM. It is written to solve a very
12
+ specific task: to be able to require the jade npm module in therubyracer. If it works with other libraries,
13
+ it is most likely out of pure luck.
14
+
15
+ # Usage:
16
+
17
+ ```ruby
18
+
19
+ env = NodeJS::Environment.new(V8::Context.new, File.expand_path(__FILE__))
20
+
21
+ # Will look for ./node_modules/lalala/package.json and require() the specified main entry file
22
+ lalala = env.require("lalala")
23
+ puts lalala.saySomething("arg1", "arg2")
24
+
25
+ somejs = env.require("./path/to/some.js")
26
+
27
+ puts somejs.doSomething(:test => "hello")
28
+
29
+ ```
@@ -0,0 +1,21 @@
1
+ # Quick and dirty implementations of the node.js standard modules as required by Jade
2
+ module NodeJS
3
+
4
+ NodeJS.register_builtin('fs', {
5
+ :readFileSync => lambda {|this, file, encoding|
6
+ File.read(file).force_encoding("utf-8")
7
+ }
8
+ })
9
+
10
+ NodeJS.register_builtin('path', {
11
+ :dirname => lambda { |this, file|
12
+ File.dirname(file)
13
+ },
14
+ :basename => lambda { |this, *args|
15
+ File.basename(*args)
16
+ },
17
+ :join => lambda { |this, *args|
18
+ File.join(*args)
19
+ }
20
+ })
21
+ end
@@ -0,0 +1,52 @@
1
+ require 'json'
2
+ require 'pathname'
3
+ module NodeJS
4
+ class Environment
5
+ def initialize(runtime, base_path)
6
+ @runtime = runtime
7
+ @base_path = Pathname(base_path)
8
+ @cache = {}
9
+ end
10
+
11
+ def new_object
12
+ @runtime['Object'].new
13
+ end
14
+
15
+ def require(module_or_path)
16
+ # module main or single js file to require
17
+
18
+ return NodeJS.builtins[module_or_path] if NodeJS.builtins[module_or_path]
19
+
20
+ file = NodeJS.resolve(@base_path.dirname, module_or_path)
21
+ return @cache[file].exports if @cache[file]
22
+
23
+ mod = @cache[file] = Module.new(self, file)
24
+
25
+ loader = @runtime.eval("(function(module, require, exports) {#{File.read(file)}});", file.to_s)
26
+ loader.call(mod, mod.require_function, mod.exports)
27
+ mod.exports
28
+ end
29
+ end
30
+
31
+ def self.resolve(base_path, module_or_path)
32
+ NodeJS.send(module_or_path =~ /^(\.|\/)/ ? :resolve_file : :resolve_module, base_path, module_or_path)
33
+ end
34
+
35
+ def self.resolve_file(base_path, path)
36
+ full_path = base_path.join(path)
37
+ return NodeJS.resolve_file(base_path, full_path.join("index.js")) if full_path.directory?
38
+ unless File.exists?(full_path) && full_path.extname =~ /\.js$/
39
+ full_path = Pathname("#{full_path.to_s}.js")
40
+ end
41
+ fail LoadError, "Module '#{full_path}' not found" unless full_path.file?
42
+ full_path
43
+ end
44
+
45
+ def self.resolve_module(base_path, module_name)
46
+ module_dir = base_path.join("node_modules", module_name)
47
+ package_json = module_dir.join("package.json")
48
+ fail LoadError, "Module '#{module_name}' not found" unless package_json.file?
49
+ module_def = JSON.parse(File.read(package_json))
50
+ module_dir.join(module_def['main'])
51
+ end
52
+ end
@@ -0,0 +1,28 @@
1
+ module NodeJS
2
+ class Module
3
+ attr_accessor :exports
4
+ def initialize(environmnent, file)
5
+ @environment = environmnent
6
+ @file = file
7
+ @exports = @environment.new_object
8
+ end
9
+
10
+ # Used to require both script files and modules
11
+ # Script path is relative from base path and defines where the require function will begin looking for
12
+ # require()'d js-files
13
+ # script_path is ignored when requiring modules, i.e. require("jade")
14
+ def require_function
15
+ lambda do |*args|
16
+ this, module_id = *args
17
+
18
+ module_id ||= this #backwards compatibility with TRR < 0.10
19
+
20
+ return @environment.require(module_id) if NodeJS.builtins.keys.include?(module_id)
21
+
22
+ #puts "requiring #{module_id} from #{CommonJS.resolve(@file.dirname, module_id).to_s}"
23
+ @environment.require(NodeJS.resolve(@file.dirname, module_id).to_s)
24
+ end
25
+ end
26
+
27
+ end
28
+ end
data/package.json ADDED
@@ -0,0 +1,10 @@
1
+ {
2
+ "name": "jadeite",
3
+ "version": "0.0.0",
4
+ "dependencies": {
5
+ "jade": "latest"
6
+ },
7
+ "engines": {
8
+ "node": "*"
9
+ }
10
+ }
@@ -0,0 +1,3 @@
1
+ <script>
2
+ console.log("foo\nbar")
3
+ </script>
@@ -0,0 +1,6 @@
1
+ html
2
+ head
3
+ title My Application
4
+ block head
5
+ body
6
+ block content
@@ -0,0 +1,3 @@
1
+
2
+ mixin foo()
3
+ p bar
@@ -0,0 +1 @@
1
+ <p>:)</p>
@@ -0,0 +1,29 @@
1
+ form(method="post")
2
+ fieldset
3
+ legend General
4
+ p
5
+ label(for="user[name]") Username:
6
+ input(type="text", name="user[name]", value=user.name)
7
+ p
8
+ label(for="user[email]") Email:
9
+ input(type="text", name="user[email]", value=user.email)
10
+ .tip.
11
+ Enter a valid
12
+ email address
13
+ such as <em>tj@vision-media.ca</em>.
14
+ fieldset
15
+ legend Location
16
+ p
17
+ label(for="user[city]") City:
18
+ input(type="text", name="user[city]", value=user.city)
19
+ p
20
+ select(name="user[province]")
21
+ option(value="") -- Select Province --
22
+ option(value="AB") Alberta
23
+ option(value="BC") British Columbia
24
+ option(value="SK") Saskatchewan
25
+ option(value="MB") Manitoba
26
+ option(value="ON") Ontario
27
+ option(value="QC") Quebec
28
+ p.buttons
29
+ input(type="submit", value="Save")
@@ -0,0 +1,11 @@
1
+
2
+ extend auxiliary/layout
3
+
4
+ mixin article(title)
5
+ if title
6
+ h1= title
7
+ block
8
+
9
+ block content
10
+ +article("The meaning of life")
11
+ p Foo bar baz!
@@ -0,0 +1,7 @@
1
+ include auxiliary/mixins
2
+
3
+ +foo
4
+
5
+ body
6
+ include auxiliary/smile.html
7
+ include auxiliary/escapes.html
data/spec/jade_spec.rb ADDED
@@ -0,0 +1,79 @@
1
+ require 'spec_helper'
2
+ require 'jadeite'
3
+
4
+ describe "Jadeite" do
5
+ let(:template_str) {
6
+ <<-jade
7
+ p Hello \#{who}
8
+ - if (awesome)
9
+ em Pretty awesome
10
+ p=a.nested.title
11
+ p.
12
+ plain text can have a
13
+ body inside an element
14
+ jade
15
+ }
16
+ let(:template_data) {
17
+ {:who => "world", :awesome => true, :a => {:nested => {:title => "This is the nested title"}}}
18
+ }
19
+
20
+ let(:env) {
21
+ Jadeite::Environment.new
22
+ }
23
+ let(:fixtures_path) {"./spec/fixtures"}
24
+
25
+ it "renders a jade template with data" do
26
+ env.render(template_str, template_data).should eql "<p>Hello world<em>Pretty awesome</em><p>This is the nested title</p><p>plain text can have a\nbody inside an element</p></p>"
27
+ end
28
+
29
+ it "can reference a compiled template and render it several times with various data" do
30
+
31
+ compiled = env.compile(template_str, template_data)
32
+
33
+ compiled.render(template_data).should eql "<p>Hello world<em>Pretty awesome</em><p>This is the nested title</p><p>plain text can have a\nbody inside an element</p></p>"
34
+
35
+ other_data = {:who => "moon!", :awesome => false, :a => {:nested => {:title => "Have you seen my dark side?"}}}
36
+ compiled.render(other_data).should eql "<p>Hello moon!<p>Have you seen my dark side?</p><p>plain text can have a\nbody inside an element</p></p>"
37
+
38
+ end
39
+
40
+ it "Will fail if reference data is missing" do
41
+
42
+ compiled = env.compile(template_str, template_data)
43
+
44
+ other_data = {:who => "moon!", :awesome => false, :a => {}}
45
+ ->{ compiled.render(other_data) }.should raise_error(V8::JSError, "Cannot read property 'title' of undefined")
46
+ end
47
+
48
+ it "Can handle a more complex example" do
49
+
50
+ compiled = env.compile(File.read("#{fixtures_path}/form.jade"))
51
+
52
+ compiled.render(:user => {:name => "Bengel"}).should eq "<form method=\"post\"><fieldset><legend>General</legend><p><label for=\"user[name]\">Username:<input type=\"text\" name=\"user[name]\" value=\"Bengel\"/></label></p><p><label for=\"user[email]\">Email:<input type=\"text\" name=\"user[email]\"/><div class=\"tip\">Enter a valid \nemail address \nsuch as <em>tj@vision-media.ca</em>.</div></label></p></fieldset><fieldset><legend>Location</legend><p><label for=\"user[city]\">City:<input type=\"text\" name=\"user[city]\"/></label></p><p><select name=\"user[province]\"><option value=\"\">-- Select Province --</option><option value=\"AB\">Alberta</option><option value=\"BC\">British Columbia</option><option value=\"SK\">Saskatchewan</option><option value=\"MB\">Manitoba</option><option value=\"ON\">Ontario</option><option value=\"QC\">Quebec</option></select></p></fieldset><p class=\"buttons\"><input type=\"submit\" value=\"Save\"/></p></form>"
53
+
54
+ end
55
+
56
+ it "Handles includes" do
57
+
58
+ compiled = env.compile_file("#{fixtures_path}/includes.jade")
59
+
60
+ compiled.render.should eq "<p>bar</p><body><p>:)</p><script>\n console.log(\"foo\\nbar\")\n</script></body>"
61
+
62
+ end
63
+
64
+ it "Handles includes and mixins" do
65
+
66
+ compiled = env.compile_file("#{fixtures_path}/include-mixin.jade")
67
+
68
+ compiled.render.should eq "<html><head><title>My Application</title></head><body><h1>The meaning of life</h1><p>Foo bar baz!</p></body></html>"
69
+
70
+ end
71
+
72
+ it "Can render a file" do
73
+ env.render_file("#{fixtures_path}/include-mixin.jade").should eq "<html><head><title>My Application</title></head><body><h1>The meaning of life</h1><p>Foo bar baz!</p></body></html>"
74
+ end
75
+
76
+ it "Returns a string of the compiled template" do
77
+ env.compile("p", :client => true, :compileDebug => false).to_s.should eq "function anonymous(locals, attrs, escape, rethrow, merge) {\nattrs = attrs || jade.attrs; escape = escape || jade.escape; rethrow = rethrow || jade.rethrow; merge = merge || jade.merge;\nvar buf = [];\nwith (locals || {}) {\nvar interp;\nbuf.push('<p></p>');\n}\nreturn buf.join(\"\");\n}"
78
+ end
79
+ end
@@ -0,0 +1,6 @@
1
+ require 'bundler'
2
+ require 'simplecov'
3
+ SimpleCov.add_filter "spec"
4
+ SimpleCov.start
5
+
6
+ Bundler.require
metadata ADDED
@@ -0,0 +1,131 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jadeite
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Bjørge Næss
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-08-16 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: therubyracer
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rspec
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: simplecov
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ description: Compile and render Jade templates from Ruby
63
+ email:
64
+ - bjoerge@bengler.no
65
+ executables: []
66
+ extensions:
67
+ - Rakefile
68
+ extra_rdoc_files: []
69
+ files:
70
+ - .gitignore
71
+ - .rspec
72
+ - Gemfile
73
+ - LICENSE
74
+ - README.md
75
+ - Rakefile
76
+ - jadeite.gemspec
77
+ - lib/jadeite.rb
78
+ - lib/jadeite/environment.rb
79
+ - lib/jadeite/version.rb
80
+ - lib/nodejs.rb
81
+ - lib/nodejs/README.md
82
+ - lib/nodejs/builtins.rb
83
+ - lib/nodejs/environment.rb
84
+ - lib/nodejs/module.rb
85
+ - package.json
86
+ - spec/fixtures/auxiliary/escapes.html
87
+ - spec/fixtures/auxiliary/layout.jade
88
+ - spec/fixtures/auxiliary/mixins.jade
89
+ - spec/fixtures/auxiliary/smile.html
90
+ - spec/fixtures/form.jade
91
+ - spec/fixtures/include-mixin.jade
92
+ - spec/fixtures/includes.jade
93
+ - spec/jade_spec.rb
94
+ - spec/spec_helper.rb
95
+ homepage: ''
96
+ licenses: []
97
+ post_install_message:
98
+ rdoc_options: []
99
+ require_paths:
100
+ - lib
101
+ required_ruby_version: !ruby/object:Gem::Requirement
102
+ none: false
103
+ requirements:
104
+ - - ! '>='
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
107
+ required_rubygems_version: !ruby/object:Gem::Requirement
108
+ none: false
109
+ requirements:
110
+ - - ! '>='
111
+ - !ruby/object:Gem::Version
112
+ version: '0'
113
+ requirements: []
114
+ rubyforge_project: jadeite
115
+ rubygems_version: 1.8.19
116
+ signing_key:
117
+ specification_version: 3
118
+ summary: Jadeite lets you compile and render Jade templates from your Ruby code. Under
119
+ the hood it uses the Jade node module running in therubyracer's embedded V8 JavaScript
120
+ engine.
121
+ test_files:
122
+ - spec/fixtures/auxiliary/escapes.html
123
+ - spec/fixtures/auxiliary/layout.jade
124
+ - spec/fixtures/auxiliary/mixins.jade
125
+ - spec/fixtures/auxiliary/smile.html
126
+ - spec/fixtures/form.jade
127
+ - spec/fixtures/include-mixin.jade
128
+ - spec/fixtures/includes.jade
129
+ - spec/jade_spec.rb
130
+ - spec/spec_helper.rb
131
+ has_rdoc: