stitch-rb 0.0.6 → 0.0.7
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 +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
|