stitch-rb 0.0.6 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/Gemfile +6 -0
- data/README.md +6 -6
- data/Rakefile +8 -0
- data/lib/stitch/compilers/tmpl.rb +1 -1
- data/lib/stitch/package.rb +11 -59
- data/lib/stitch/server.rb +1 -1
- data/lib/stitch/source.rb +26 -1
- data/lib/stitch/stitch.js.erb +59 -0
- data/lib/stitch/version.rb +1 -1
- data/test/fixtures/app/controllers/users.coffee +1 -0
- data/test/fixtures/app/index.js +4 -0
- data/test/fixtures/app/models/orm.js +4 -0
- data/test/fixtures/app/models/person.js +1 -0
- data/test/fixtures/app/models/user.js +9 -0
- data/test/fixtures/lib/jquery.js +1 -0
- data/test/fixtures/lib/lib.coffee +3 -0
- data/test/jasmine/index.html +186 -0
- data/test/jasmine/specs.js +27 -0
- data/test/test_helper.rb +2 -0
- data/test/test_source.rb +46 -0
- data/test/test_stitch.rb +17 -0
- metadata +69 -22
data/.gitignore
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Stitch
|
2
2
|
|
3
|
-
This is a port of Sam Stephenson's [
|
3
|
+
This is a port of Sam Stephenson's [Stitch](https://github.com/sstephenson/stitch) to Ruby. Stitch allows you to:
|
4
4
|
|
5
5
|
> Develop and test your JavaScript applications as CommonJS modules in Node.js. Then __Stitch__ them together to run in the browser.
|
6
6
|
|
@@ -9,16 +9,16 @@ In other words, this is a [CommonJS](http://dailyjs.com/2010/10/18/modules/) Jav
|
|
9
9
|
##Usage
|
10
10
|
|
11
11
|
Install the gem, or add it to your Gemfile:
|
12
|
-
|
12
|
+
|
13
13
|
gem 'stitch-rb'
|
14
14
|
|
15
15
|
You can compile your application like this:
|
16
16
|
|
17
17
|
Stitch::Package.new(:paths => ["app"], :dependencies => ["lib/jquery.js"]).compile
|
18
|
-
|
18
|
+
|
19
19
|
It returns a JavaScript file that you can serve to your users, or write to disk and cache.
|
20
20
|
|
21
|
-
You should give `Stitch::Package` an array of `:paths`, the relative directories your JavaScript application is served from. You can also specify an array of `:dependencies`, JavaScript files which will be concatenated without being wrapped in CommonJS modules.
|
21
|
+
You should give `Stitch::Package` an array of `:paths`, the relative directories your JavaScript application is served from. You can also specify an array of `:dependencies`, JavaScript files which will be concatenated without being wrapped in CommonJS modules.
|
22
22
|
|
23
23
|
##Rails & Rack
|
24
24
|
|
@@ -33,8 +33,8 @@ Compilers need to inherit from `Stitch::Compiler`. They're very simple, for exam
|
|
33
33
|
class TmplCompiler < Stitch::Compiler
|
34
34
|
# List of supported extensions
|
35
35
|
extensions :tmpl
|
36
|
-
|
37
|
-
# A compile method which takes a file path,
|
36
|
+
|
37
|
+
# A compile method which takes a file path,
|
38
38
|
# and returns a compiled string
|
39
39
|
def compile(path)
|
40
40
|
content = File.read(path)
|
data/Rakefile
CHANGED
data/lib/stitch/package.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require "erb"
|
2
|
+
|
1
3
|
module Stitch
|
2
4
|
class Package
|
3
5
|
DEFAULTS = {
|
@@ -39,71 +41,21 @@ module Stitch
|
|
39
41
|
Source.from_file(@root, file)
|
40
42
|
}.flatten
|
41
43
|
|
44
|
+
sources.uniq!
|
45
|
+
|
42
46
|
if sources.any?
|
43
47
|
stitch(sources)
|
44
48
|
end
|
45
49
|
end
|
46
50
|
|
47
|
-
def stitch(
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
var modules = {}, cache = {}, require = function(name, root) {
|
52
|
-
var module = cache[name], path = expand(root, name), fn;
|
53
|
-
if (module) {
|
54
|
-
return module;
|
55
|
-
} else if (fn = modules[path] || modules[path = expand(path, './index')]) {
|
56
|
-
module = {id: name, exports: {}};
|
57
|
-
try {
|
58
|
-
cache[name] = module.exports;
|
59
|
-
fn(module.exports, function(name) {
|
60
|
-
return require(name, dirname(path));
|
61
|
-
}, module);
|
62
|
-
return cache[name] = module.exports;
|
63
|
-
} catch (err) {
|
64
|
-
delete cache[name];
|
65
|
-
throw err;
|
66
|
-
}
|
67
|
-
} else {
|
68
|
-
throw 'module \\'' + name + '\\' not found';
|
69
|
-
}
|
70
|
-
}, expand = function(root, name) {
|
71
|
-
var results = [], parts, part;
|
72
|
-
if (/^\\.\\.?(\\/|$)/.test(name)) {
|
73
|
-
parts = [root, name].join('/').split('/');
|
74
|
-
} else {
|
75
|
-
parts = name.split('/');
|
76
|
-
}
|
77
|
-
for (var i = 0, length = parts.length; i < length; i++) {
|
78
|
-
part = parts[i];
|
79
|
-
if (part == '..') {
|
80
|
-
results.pop();
|
81
|
-
} else if (part != '.' && part != '') {
|
82
|
-
results.push(part);
|
83
|
-
}
|
84
|
-
}
|
85
|
-
return results.join('/');
|
86
|
-
}, dirname = function(path) {
|
87
|
-
return path.split('/').slice(0, -1).join('/');
|
88
|
-
};
|
89
|
-
this.#{@identifier} = function(name) {
|
90
|
-
return require(name, '');
|
91
|
-
}
|
92
|
-
this.#{@identifier}.define = function(bundle) {
|
93
|
-
for (var key in bundle)
|
94
|
-
modules[key] = bundle[key];
|
95
|
-
};
|
96
|
-
}
|
97
|
-
return this.#{@identifier}.define;
|
98
|
-
}).call(this)({
|
99
|
-
EOF
|
100
|
-
sources.each_with_index do |source, i|
|
101
|
-
result += i == 0 ? "" : ", "
|
102
|
-
result += source.name.to_json
|
103
|
-
result += ": function(exports, require, module) {\n#{source.compile}\n}"
|
104
|
-
end
|
51
|
+
def stitch(modules)
|
52
|
+
# ERB binding variables
|
53
|
+
identifier = @identifier
|
54
|
+
modules = modules
|
105
55
|
|
106
|
-
|
56
|
+
template = File.read(File.join(File.dirname(__FILE__), "stitch.js.erb"))
|
57
|
+
template = ERB.new(template)
|
58
|
+
template.result(binding)
|
107
59
|
end
|
108
60
|
end
|
109
61
|
end
|
data/lib/stitch/server.rb
CHANGED
data/lib/stitch/source.rb
CHANGED
@@ -3,6 +3,10 @@ require "pathname"
|
|
3
3
|
module Stitch
|
4
4
|
class Source
|
5
5
|
class << self
|
6
|
+
# Recursively load all the sources from a given directory
|
7
|
+
# Usage:
|
8
|
+
# sources = Source.from_path("./app")
|
9
|
+
#
|
6
10
|
def from_path(root, path = nil, result = [])
|
7
11
|
path ||= root
|
8
12
|
path = Pathname.new(path)
|
@@ -18,7 +22,14 @@ module Stitch
|
|
18
22
|
result
|
19
23
|
end
|
20
24
|
|
25
|
+
# Recursively resolve sources from a given file,
|
26
|
+
# dynamically resolving its dependencies
|
27
|
+
# Usage:
|
28
|
+
# sources = Source.from_file("./app/index.js")
|
29
|
+
#
|
21
30
|
def from_file(root, path = nil, result = [])
|
31
|
+
root = Pathname.new(root)
|
32
|
+
|
22
33
|
unless path
|
23
34
|
path = root
|
24
35
|
root = root.dirname
|
@@ -29,10 +40,13 @@ module Stitch
|
|
29
40
|
from_file(root, child, result)
|
30
41
|
end
|
31
42
|
|
32
|
-
raise "Recursive" if result.include?(source)
|
33
43
|
result << source
|
34
44
|
end
|
35
45
|
|
46
|
+
# Resolve a require call to an absolute path
|
47
|
+
# Usage:
|
48
|
+
# path = Source.resolve("../index.js", "/my/file.js")
|
49
|
+
#
|
36
50
|
def resolve(path, relative_to)
|
37
51
|
path = Pathname.new(path)
|
38
52
|
relative_to = Pathname.new(relative_to)
|
@@ -77,12 +91,23 @@ module Stitch
|
|
77
91
|
!!compiler
|
78
92
|
end
|
79
93
|
|
94
|
+
# Return an array of resolved paths
|
95
|
+
# specifying this source's dependencies
|
80
96
|
def requires
|
81
97
|
return [] unless source?
|
82
98
|
requires = path.read.scan(/require\(("|')(.+)\1\)/)
|
83
99
|
requires.map {|(_, pn)| self.class.resolve(pn, root) }
|
84
100
|
end
|
85
101
|
|
102
|
+
def hash
|
103
|
+
self.path.hash
|
104
|
+
end
|
105
|
+
|
106
|
+
def eql?(source)
|
107
|
+
source.is_a?(Source) &&
|
108
|
+
source.path.to_s == self.path.to_s
|
109
|
+
end
|
110
|
+
|
86
111
|
protected
|
87
112
|
def source?
|
88
113
|
valid? && compiler.source?
|
@@ -0,0 +1,59 @@
|
|
1
|
+
(function(/*! Stitch !*/) {
|
2
|
+
if (!this.<%= identifier %>) {
|
3
|
+
var modules = {}, cache = {};
|
4
|
+
var require = function(name, root) {
|
5
|
+
var path = expand(root, name), indexPath = expand(path, './index'), module, fn;
|
6
|
+
module = cache[path] || cache[indexPath];
|
7
|
+
if (module) {
|
8
|
+
return module;
|
9
|
+
} else if (fn = modules[path] || modules[path = indexPath]) {
|
10
|
+
module = {id: path, exports: {}};
|
11
|
+
cache[path] = module.exports;
|
12
|
+
fn(module.exports, function(name) {
|
13
|
+
return require(name, dirname(path));
|
14
|
+
}, module);
|
15
|
+
return cache[path] = module.exports;
|
16
|
+
} else {
|
17
|
+
throw 'module ' + name + ' not found';
|
18
|
+
}
|
19
|
+
};
|
20
|
+
var expand = function(root, name) {
|
21
|
+
var results = [], parts, part;
|
22
|
+
// If path is relative
|
23
|
+
if (/^\.\.?(\/|$)/.test(name)) {
|
24
|
+
parts = [root, name].join('/').split('/');
|
25
|
+
} else {
|
26
|
+
parts = name.split('/');
|
27
|
+
}
|
28
|
+
for (var i = 0, length = parts.length; i < length; i++) {
|
29
|
+
part = parts[i];
|
30
|
+
if (part == '..') {
|
31
|
+
results.pop();
|
32
|
+
} else if (part != '.' && part != '') {
|
33
|
+
results.push(part);
|
34
|
+
}
|
35
|
+
}
|
36
|
+
return results.join('/');
|
37
|
+
};
|
38
|
+
var dirname = function(path) {
|
39
|
+
return path.split('/').slice(0, -1).join('/');
|
40
|
+
};
|
41
|
+
this.<%= identifier %> = function(name) {
|
42
|
+
return require(name, '');
|
43
|
+
};
|
44
|
+
this.<%= identifier %>.define = function(bundle) {
|
45
|
+
for (var key in bundle) {
|
46
|
+
modules[key] = bundle[key];
|
47
|
+
}
|
48
|
+
};
|
49
|
+
this.<%= identifier %>.modules = modules;
|
50
|
+
this.<%= identifier %>.cache = cache;
|
51
|
+
}
|
52
|
+
return this.<%= identifier %>.define;
|
53
|
+
}).call(this)({
|
54
|
+
<%=
|
55
|
+
modules.map do |mod|
|
56
|
+
"#{mod.name.to_json}: function(exports, require, module) {\n#{mod.compile}\n}"
|
57
|
+
end.join(', ')
|
58
|
+
%>
|
59
|
+
});
|
data/lib/stitch/version.rb
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
someCoffeeScript = true
|
@@ -0,0 +1 @@
|
|
1
|
+
var ORM = require('models/orm');
|
@@ -0,0 +1 @@
|
|
1
|
+
// A dependency - jquery.js
|
@@ -0,0 +1,186 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>Jasmine Test Runner</title>
|
5
|
+
<script type="text/javascript" src="https://raw.github.com/pivotal/jasmine/v1.1.0.rc4/lib/jasmine-core/jasmine.js"></script>
|
6
|
+
<script type="text/javascript" src="https://raw.github.com/pivotal/jasmine/v1.1.0.rc4/lib/jasmine-core/jasmine-html.js"></script>
|
7
|
+
|
8
|
+
<script src="index.js" type="text/javascript" charset="utf-8"></script>
|
9
|
+
<script src="specs.js" type="text/javascript" charset="utf-8"></script>
|
10
|
+
|
11
|
+
<style type="text/css" media="screen">
|
12
|
+
body {
|
13
|
+
font-family: "Helvetica Neue Light", "Lucida Grande", "Calibri", "Arial", sans-serif;
|
14
|
+
}
|
15
|
+
|
16
|
+
|
17
|
+
.jasmine_reporter a:visited, .jasmine_reporter a {
|
18
|
+
color: #303;
|
19
|
+
}
|
20
|
+
|
21
|
+
.jasmine_reporter a:hover, .jasmine_reporter a:active {
|
22
|
+
color: blue;
|
23
|
+
}
|
24
|
+
|
25
|
+
.run_spec {
|
26
|
+
float:right;
|
27
|
+
padding-right: 5px;
|
28
|
+
font-size: .8em;
|
29
|
+
text-decoration: none;
|
30
|
+
}
|
31
|
+
|
32
|
+
.jasmine_reporter {
|
33
|
+
margin: 0 5px;
|
34
|
+
}
|
35
|
+
|
36
|
+
.banner {
|
37
|
+
color: #303;
|
38
|
+
background-color: #fef;
|
39
|
+
padding: 5px;
|
40
|
+
}
|
41
|
+
|
42
|
+
.logo {
|
43
|
+
float: left;
|
44
|
+
font-size: 1.1em;
|
45
|
+
padding-left: 5px;
|
46
|
+
}
|
47
|
+
|
48
|
+
.logo .version {
|
49
|
+
font-size: .6em;
|
50
|
+
padding-left: 1em;
|
51
|
+
}
|
52
|
+
|
53
|
+
.runner.running {
|
54
|
+
background-color: yellow;
|
55
|
+
}
|
56
|
+
|
57
|
+
|
58
|
+
.options {
|
59
|
+
text-align: right;
|
60
|
+
font-size: .8em;
|
61
|
+
}
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
|
66
|
+
.suite {
|
67
|
+
border: 1px outset gray;
|
68
|
+
margin: 5px 0;
|
69
|
+
padding-left: 1em;
|
70
|
+
}
|
71
|
+
|
72
|
+
.suite .suite {
|
73
|
+
margin: 5px;
|
74
|
+
}
|
75
|
+
|
76
|
+
.suite.passed {
|
77
|
+
background-color: #dfd;
|
78
|
+
}
|
79
|
+
|
80
|
+
.suite.failed {
|
81
|
+
background-color: #fdd;
|
82
|
+
}
|
83
|
+
|
84
|
+
.spec {
|
85
|
+
margin: 5px;
|
86
|
+
padding-left: 1em;
|
87
|
+
clear: both;
|
88
|
+
}
|
89
|
+
|
90
|
+
.spec.failed, .spec.passed, .spec.skipped {
|
91
|
+
padding-bottom: 5px;
|
92
|
+
border: 1px solid gray;
|
93
|
+
}
|
94
|
+
|
95
|
+
.spec.failed {
|
96
|
+
background-color: #fbb;
|
97
|
+
border-color: red;
|
98
|
+
}
|
99
|
+
|
100
|
+
.spec.passed {
|
101
|
+
background-color: #bfb;
|
102
|
+
border-color: green;
|
103
|
+
}
|
104
|
+
|
105
|
+
.spec.skipped {
|
106
|
+
background-color: #bbb;
|
107
|
+
}
|
108
|
+
|
109
|
+
.messages {
|
110
|
+
border-left: 1px dashed gray;
|
111
|
+
padding-left: 1em;
|
112
|
+
padding-right: 1em;
|
113
|
+
}
|
114
|
+
|
115
|
+
.passed {
|
116
|
+
background-color: #cfc;
|
117
|
+
display: none;
|
118
|
+
}
|
119
|
+
|
120
|
+
.failed {
|
121
|
+
background-color: #fbb;
|
122
|
+
}
|
123
|
+
|
124
|
+
.skipped {
|
125
|
+
color: #777;
|
126
|
+
background-color: #eee;
|
127
|
+
display: none;
|
128
|
+
}
|
129
|
+
|
130
|
+
|
131
|
+
/*.resultMessage {*/
|
132
|
+
/*white-space: pre;*/
|
133
|
+
/*}*/
|
134
|
+
|
135
|
+
.resultMessage span.result {
|
136
|
+
display: block;
|
137
|
+
line-height: 2em;
|
138
|
+
color: black;
|
139
|
+
}
|
140
|
+
|
141
|
+
.resultMessage .mismatch {
|
142
|
+
color: black;
|
143
|
+
}
|
144
|
+
|
145
|
+
.stackTrace {
|
146
|
+
white-space: pre;
|
147
|
+
font-size: .8em;
|
148
|
+
margin-left: 10px;
|
149
|
+
max-height: 5em;
|
150
|
+
overflow: auto;
|
151
|
+
border: 1px inset red;
|
152
|
+
padding: 1em;
|
153
|
+
background: #eef;
|
154
|
+
}
|
155
|
+
|
156
|
+
.finished-at {
|
157
|
+
padding-left: 1em;
|
158
|
+
font-size: .6em;
|
159
|
+
}
|
160
|
+
|
161
|
+
.show-passed .passed,
|
162
|
+
.show-skipped .skipped {
|
163
|
+
display: block;
|
164
|
+
}
|
165
|
+
|
166
|
+
|
167
|
+
#jasmine_content {
|
168
|
+
position:fixed;
|
169
|
+
right: 100%;
|
170
|
+
}
|
171
|
+
|
172
|
+
.runner {
|
173
|
+
border: 1px solid gray;
|
174
|
+
display: block;
|
175
|
+
margin: 5px 0;
|
176
|
+
padding: 2px 0 2px 10px;
|
177
|
+
}
|
178
|
+
</style>
|
179
|
+
</head>
|
180
|
+
<body>
|
181
|
+
<script type="text/javascript">
|
182
|
+
jasmine.getEnv().addReporter(new jasmine.TrivialReporter());
|
183
|
+
jasmine.getEnv().execute();
|
184
|
+
</script>
|
185
|
+
</body>
|
186
|
+
</html>
|
@@ -0,0 +1,27 @@
|
|
1
|
+
describe("Stitch", function(){
|
2
|
+
it("should have require function", function(){
|
3
|
+
expect(typeof require).toBe("function");
|
4
|
+
});
|
5
|
+
|
6
|
+
it("should be able to require modules", function(){
|
7
|
+
expect(typeof require("models/user")).toBe("function");
|
8
|
+
});
|
9
|
+
|
10
|
+
it("should recursively find modules", function(){
|
11
|
+
var obj = require("models/orm");
|
12
|
+
|
13
|
+
expect(obj).toEqual({orm: true});
|
14
|
+
expect(obj).toBe(require("models/orm"));
|
15
|
+
});
|
16
|
+
|
17
|
+
it("should transitively require dependencies", function(){
|
18
|
+
expect(require("models/user").ORM).toEqual({orm: true});
|
19
|
+
});
|
20
|
+
|
21
|
+
it("should not load the same module twice", function(){
|
22
|
+
require("models/user");
|
23
|
+
require("models/person");
|
24
|
+
|
25
|
+
expect(window.ormCount).toBe(1);
|
26
|
+
});
|
27
|
+
});
|
data/test/test_helper.rb
ADDED
data/test/test_source.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/test_helper.rb"
|
2
|
+
|
3
|
+
class TestSource < Test::Unit::TestCase
|
4
|
+
FIXTURES = Pathname.new(File.join(File.dirname(__FILE__), "fixtures"))
|
5
|
+
|
6
|
+
def setup
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_from_file
|
10
|
+
sources = Stitch::Source.from_file(FIXTURES + "app" + "index.js")
|
11
|
+
sources = sources.map {|s| s.path.relative_path_from(FIXTURES).to_s }
|
12
|
+
assert_equal [
|
13
|
+
"app/models/orm.js",
|
14
|
+
"app/models/user.js",
|
15
|
+
"app/models/orm.js",
|
16
|
+
"app/models/person.js",
|
17
|
+
"app/index.js"
|
18
|
+
], sources
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_from_path
|
22
|
+
sources = Stitch::Source.from_path(FIXTURES + "app")
|
23
|
+
sources = sources.map {|s| s.path.relative_path_from(FIXTURES).to_s }
|
24
|
+
assert_equal [
|
25
|
+
"app/controllers/users.coffee",
|
26
|
+
"app/index.js",
|
27
|
+
"app/models/orm.js",
|
28
|
+
"app/models/person.js",
|
29
|
+
"app/models/user.js"
|
30
|
+
], sources
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_resolve
|
34
|
+
path = Stitch::Source.resolve("index.js", FIXTURES + "app")
|
35
|
+
assert_equal path.relative_path_from(FIXTURES).to_s, "app/index.js"
|
36
|
+
|
37
|
+
path = Stitch::Source.resolve("index", FIXTURES + "app")
|
38
|
+
assert_equal path.relative_path_from(FIXTURES).to_s, "app/index.js"
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_require
|
42
|
+
source = Stitch::Source.new(FIXTURES + "app", FIXTURES + "app" + "index.js")
|
43
|
+
sources = source.requires.map {|s| s.relative_path_from(FIXTURES).to_s }
|
44
|
+
assert_equal ["app/models/user.js", "app/models/person.js"], sources
|
45
|
+
end
|
46
|
+
end
|
data/test/test_stitch.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
|
3
|
+
class TestJasmine < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
end
|
6
|
+
|
7
|
+
def test_stitch
|
8
|
+
root = File.dirname(__FILE__)
|
9
|
+
File.open(root + '/jasmine/index.js', 'w+') do |f|
|
10
|
+
f.write Stitch::Package.new(
|
11
|
+
:files => [root + '/fixtures/app/index.js'],
|
12
|
+
:root => root + '/fixtures/app'
|
13
|
+
).compile
|
14
|
+
end
|
15
|
+
system 'open', root + '/jasmine/index.html'
|
16
|
+
end
|
17
|
+
end
|
metadata
CHANGED
@@ -1,29 +1,39 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: stitch-rb
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 17
|
5
5
|
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 7
|
10
|
+
version: 0.0.7
|
6
11
|
platform: ruby
|
7
|
-
authors:
|
12
|
+
authors:
|
8
13
|
- Alex MacCaw
|
9
14
|
autorequire:
|
10
15
|
bindir: bin
|
11
16
|
cert_chain: []
|
12
|
-
|
17
|
+
|
18
|
+
date: 2011-12-07 00:00:00 -08:00
|
19
|
+
default_executable:
|
13
20
|
dependencies: []
|
21
|
+
|
14
22
|
description: A JavaScript package manager
|
15
|
-
email:
|
23
|
+
email:
|
16
24
|
- maccman@gmail.com
|
17
25
|
executables: []
|
26
|
+
|
18
27
|
extensions: []
|
28
|
+
|
19
29
|
extra_rdoc_files: []
|
20
|
-
|
30
|
+
|
31
|
+
files:
|
21
32
|
- .gitignore
|
22
33
|
- Gemfile
|
23
34
|
- LICENSE
|
24
35
|
- README.md
|
25
36
|
- Rakefile
|
26
|
-
- examples/.DS_Store
|
27
37
|
- examples/app/controllers/users.coffee
|
28
38
|
- examples/app/index.js
|
29
39
|
- examples/app/models/orm.js
|
@@ -41,30 +51,67 @@ files:
|
|
41
51
|
- lib/stitch/package.rb
|
42
52
|
- lib/stitch/server.rb
|
43
53
|
- lib/stitch/source.rb
|
54
|
+
- lib/stitch/stitch.js.erb
|
44
55
|
- lib/stitch/version.rb
|
45
56
|
- stitch.gemspec
|
46
|
-
|
57
|
+
- test/fixtures/app/controllers/users.coffee
|
58
|
+
- test/fixtures/app/index.js
|
59
|
+
- test/fixtures/app/models/orm.js
|
60
|
+
- test/fixtures/app/models/person.js
|
61
|
+
- test/fixtures/app/models/user.js
|
62
|
+
- test/fixtures/lib/jquery.js
|
63
|
+
- test/fixtures/lib/lib.coffee
|
64
|
+
- test/jasmine/index.html
|
65
|
+
- test/jasmine/index.js
|
66
|
+
- test/jasmine/specs.js
|
67
|
+
- test/test_helper.rb
|
68
|
+
- test/test_source.rb
|
69
|
+
- test/test_stitch.rb
|
70
|
+
has_rdoc: true
|
71
|
+
homepage: ""
|
47
72
|
licenses: []
|
73
|
+
|
48
74
|
post_install_message:
|
49
75
|
rdoc_options: []
|
50
|
-
|
76
|
+
|
77
|
+
require_paths:
|
51
78
|
- lib
|
52
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
79
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
53
80
|
none: false
|
54
|
-
requirements:
|
55
|
-
- -
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
|
58
|
-
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
hash: 3
|
85
|
+
segments:
|
86
|
+
- 0
|
87
|
+
version: "0"
|
88
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
59
89
|
none: false
|
60
|
-
requirements:
|
61
|
-
- -
|
62
|
-
- !ruby/object:Gem::Version
|
63
|
-
|
90
|
+
requirements:
|
91
|
+
- - ">="
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
hash: 3
|
94
|
+
segments:
|
95
|
+
- 0
|
96
|
+
version: "0"
|
64
97
|
requirements: []
|
98
|
+
|
65
99
|
rubyforge_project:
|
66
|
-
rubygems_version: 1.
|
100
|
+
rubygems_version: 1.6.2
|
67
101
|
signing_key:
|
68
102
|
specification_version: 3
|
69
103
|
summary: Stitch ported to Ruby
|
70
|
-
test_files:
|
104
|
+
test_files:
|
105
|
+
- test/fixtures/app/controllers/users.coffee
|
106
|
+
- test/fixtures/app/index.js
|
107
|
+
- test/fixtures/app/models/orm.js
|
108
|
+
- test/fixtures/app/models/person.js
|
109
|
+
- test/fixtures/app/models/user.js
|
110
|
+
- test/fixtures/lib/jquery.js
|
111
|
+
- test/fixtures/lib/lib.coffee
|
112
|
+
- test/jasmine/index.html
|
113
|
+
- test/jasmine/index.js
|
114
|
+
- test/jasmine/specs.js
|
115
|
+
- test/test_helper.rb
|
116
|
+
- test/test_source.rb
|
117
|
+
- test/test_stitch.rb
|