stitch-rb 0.0.5 → 0.0.6
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/examples/app/controllers/{controller.coffee → users.coffee} +0 -0
- data/examples/app/index.js +3 -0
- data/examples/app/models/orm.js +1 -0
- data/examples/app/models/user.js +4 -0
- data/examples/compile.rb +2 -1
- data/lib/stitch.rb +1 -0
- data/lib/stitch/compiler.rb +30 -11
- data/lib/stitch/compilers/coffeescript.rb +4 -2
- data/lib/stitch/compilers/javascript.rb +3 -1
- data/lib/stitch/compilers/mustache.rb +11 -0
- data/lib/stitch/package.rb +26 -14
- data/lib/stitch/source.rb +56 -13
- data/lib/stitch/version.rb +1 -1
- metadata +8 -4
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
module.exports = "A ORM";
|
data/examples/compile.rb
CHANGED
@@ -2,4 +2,5 @@ $: << File.join(File.dirname(__FILE__), *%w[.. lib])
|
|
2
2
|
|
3
3
|
require "stitch"
|
4
4
|
|
5
|
-
puts Stitch::Package.new(:paths => ["app"], :dependencies => ["lib"]).compile
|
5
|
+
# puts Stitch::Package.new(:paths => ["app"], :dependencies => ["lib"]).compile
|
6
|
+
puts Stitch::Package.new(:files => ["./app/index.js"], :root => './app', :dependencies => ["lib"]).compile
|
data/lib/stitch.rb
CHANGED
data/lib/stitch/compiler.rb
CHANGED
@@ -4,38 +4,55 @@ module Stitch
|
|
4
4
|
def compilers
|
5
5
|
@compilers ||= []
|
6
6
|
end
|
7
|
-
|
7
|
+
|
8
8
|
def inherited(child)
|
9
9
|
Compiler.compilers.unshift(child)
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
|
+
def all
|
13
|
+
Compiler.compilers.select {|c| c.enabled? }
|
14
|
+
end
|
15
|
+
|
16
|
+
def source_extensions
|
17
|
+
compilers = all.select {|c| c.source? }
|
18
|
+
compilers.map {|c| c.extensions }.flatten
|
19
|
+
end
|
20
|
+
|
12
21
|
def for_extension(extension)
|
13
22
|
extension.gsub!(/^\./, "")
|
14
|
-
|
15
|
-
item.extensions.include?(extension)
|
23
|
+
all.find do |item|
|
24
|
+
item.extensions.include?(extension)
|
16
25
|
end
|
17
26
|
end
|
18
|
-
|
27
|
+
|
19
28
|
# Child methods
|
20
|
-
|
29
|
+
|
21
30
|
def extensions(*exts)
|
22
31
|
@extensions ||= []
|
23
32
|
@extensions |= exts.map(&:to_s)
|
24
33
|
end
|
25
|
-
|
34
|
+
|
26
35
|
def enabled(value)
|
27
36
|
@enabled = value
|
28
37
|
end
|
29
|
-
|
38
|
+
|
30
39
|
def enabled?
|
31
40
|
@enabled != false
|
32
41
|
end
|
33
|
-
|
42
|
+
|
43
|
+
def source(value)
|
44
|
+
@source = value
|
45
|
+
end
|
46
|
+
|
47
|
+
def source?
|
48
|
+
@source || false
|
49
|
+
end
|
50
|
+
|
34
51
|
def compile(*args)
|
35
52
|
self.new.compile(*args)
|
36
53
|
end
|
37
54
|
end
|
38
|
-
|
55
|
+
|
39
56
|
def compile(filename)
|
40
57
|
raise "Re-implement"
|
41
58
|
end
|
@@ -44,4 +61,6 @@ end
|
|
44
61
|
|
45
62
|
# Require default compilers
|
46
63
|
require "stitch/compilers/javascript"
|
47
|
-
require "stitch/compilers/coffeescript"
|
64
|
+
require "stitch/compilers/coffeescript"
|
65
|
+
require "stitch/compilers/tmpl"
|
66
|
+
require "stitch/compilers/mustache"
|
@@ -1,14 +1,16 @@
|
|
1
1
|
module Stitch
|
2
2
|
class CoffeeScriptCompiler < Compiler
|
3
3
|
extensions :cs, :coffee
|
4
|
-
|
4
|
+
|
5
5
|
enabled begin
|
6
6
|
require "coffee-script"
|
7
7
|
true
|
8
8
|
rescue LoadError
|
9
9
|
false
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
|
+
source true
|
13
|
+
|
12
14
|
def compile(path)
|
13
15
|
source = File.read(path)
|
14
16
|
CoffeeScript.compile(source, :filename => path.to_s)
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module Stitch
|
2
|
+
class MustacheCompiler < Compiler
|
3
|
+
extensions :mustache
|
4
|
+
|
5
|
+
def compile(path)
|
6
|
+
content = File.read(path)
|
7
|
+
%{var template = #{content.to_json};
|
8
|
+
module.exports = (function(view){ return Mustache.to_html(template, view); });}
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
data/lib/stitch/package.rb
CHANGED
@@ -2,23 +2,26 @@ module Stitch
|
|
2
2
|
class Package
|
3
3
|
DEFAULTS = {
|
4
4
|
:identifier => "require",
|
5
|
-
:paths => [
|
5
|
+
:paths => [],
|
6
|
+
:files => [],
|
6
7
|
:dependencies => []
|
7
8
|
}
|
8
|
-
|
9
|
+
|
9
10
|
def initialize(options = {})
|
10
11
|
options = DEFAULTS.merge(options)
|
11
|
-
|
12
|
+
|
12
13
|
@identifier = options[:identifier]
|
13
|
-
@paths = options[:paths]
|
14
|
-
@
|
14
|
+
@paths = Array(options[:paths])
|
15
|
+
@files = Array(options[:files])
|
16
|
+
@root = options[:root]
|
17
|
+
@dependencies = Array(options[:dependencies])
|
15
18
|
end
|
16
|
-
|
19
|
+
|
17
20
|
def compile
|
18
21
|
[compile_dependencies, compile_sources].join("\n")
|
19
22
|
end
|
20
|
-
|
21
|
-
protected
|
23
|
+
|
24
|
+
protected
|
22
25
|
def compile_dependencies
|
23
26
|
@dependencies.map {|path|
|
24
27
|
Source.from_path(path)
|
@@ -26,12 +29,22 @@ module Stitch
|
|
26
29
|
dep.compile
|
27
30
|
}.join("\n")
|
28
31
|
end
|
29
|
-
|
32
|
+
|
30
33
|
def compile_sources
|
31
|
-
sources = @paths.map {|path|
|
32
|
-
Source.from_path(path)
|
34
|
+
sources = @paths.map {|path|
|
35
|
+
Source.from_path(path)
|
33
36
|
}.flatten
|
34
|
-
|
37
|
+
|
38
|
+
sources |= @files.map {|file|
|
39
|
+
Source.from_file(@root, file)
|
40
|
+
}.flatten
|
41
|
+
|
42
|
+
if sources.any?
|
43
|
+
stitch(sources)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def stitch(sources)
|
35
48
|
result = <<-EOF
|
36
49
|
(function(/*! Stitch !*/) {
|
37
50
|
if (!this.#{@identifier}) {
|
@@ -84,11 +97,10 @@ module Stitch
|
|
84
97
|
return this.#{@identifier}.define;
|
85
98
|
}).call(this)({
|
86
99
|
EOF
|
87
|
-
|
88
100
|
sources.each_with_index do |source, i|
|
89
101
|
result += i == 0 ? "" : ", "
|
90
102
|
result += source.name.to_json
|
91
|
-
result += ": function(exports, require, module) {#{source.compile}}"
|
103
|
+
result += ": function(exports, require, module) {\n#{source.compile}\n}"
|
92
104
|
end
|
93
105
|
|
94
106
|
result += "});\n"
|
data/lib/stitch/source.rb
CHANGED
@@ -6,9 +6,9 @@ module Stitch
|
|
6
6
|
def from_path(root, path = nil, result = [])
|
7
7
|
path ||= root
|
8
8
|
path = Pathname.new(path)
|
9
|
-
|
9
|
+
|
10
10
|
if path.directory?
|
11
|
-
path.children.each do |child|
|
11
|
+
path.children.each do |child|
|
12
12
|
from_path(root, child, result)
|
13
13
|
end
|
14
14
|
else
|
@@ -17,36 +17,79 @@ module Stitch
|
|
17
17
|
end
|
18
18
|
result
|
19
19
|
end
|
20
|
+
|
21
|
+
def from_file(root, path = nil, result = [])
|
22
|
+
unless path
|
23
|
+
path = root
|
24
|
+
root = root.dirname
|
25
|
+
end
|
26
|
+
|
27
|
+
source = self.new(root, path)
|
28
|
+
source.requires.each do |child|
|
29
|
+
from_file(root, child, result)
|
30
|
+
end
|
31
|
+
|
32
|
+
raise "Recursive" if result.include?(source)
|
33
|
+
result << source
|
34
|
+
end
|
35
|
+
|
36
|
+
def resolve(path, relative_to)
|
37
|
+
path = Pathname.new(path)
|
38
|
+
relative_to = Pathname.new(relative_to)
|
39
|
+
|
40
|
+
unless path.absolute?
|
41
|
+
path = path.expand_path(relative_to)
|
42
|
+
end
|
43
|
+
|
44
|
+
return path if path.exist?
|
45
|
+
|
46
|
+
Compiler.source_extensions.each do |ext|
|
47
|
+
candidate = Pathname.new(path.to_s + "." + ext)
|
48
|
+
return candidate if candidate.exist?
|
49
|
+
end
|
50
|
+
|
51
|
+
raise "#{path} not found"
|
52
|
+
end
|
20
53
|
end
|
21
|
-
|
54
|
+
|
22
55
|
attr_reader :root, :path
|
23
|
-
|
56
|
+
|
24
57
|
def initialize(root, path)
|
25
|
-
@root = Pathname.new(root)
|
26
|
-
@path = Pathname.new(path)
|
58
|
+
@root = Pathname.new(root).expand_path
|
59
|
+
@path = Pathname.new(path).expand_path
|
27
60
|
end
|
28
|
-
|
61
|
+
|
29
62
|
def name
|
30
63
|
name = path.relative_path_from(root)
|
31
64
|
name = name.dirname + name.basename(".*")
|
32
65
|
name.to_s
|
33
66
|
end
|
34
|
-
|
67
|
+
|
35
68
|
def ext
|
36
69
|
path.extname
|
37
70
|
end
|
38
|
-
|
71
|
+
|
39
72
|
def compile
|
40
73
|
compiler.compile(path)
|
41
74
|
end
|
42
|
-
|
75
|
+
|
43
76
|
def valid?
|
44
77
|
!!compiler
|
45
78
|
end
|
46
|
-
|
47
|
-
|
79
|
+
|
80
|
+
def requires
|
81
|
+
return [] unless source?
|
82
|
+
requires = path.read.scan(/require\(("|')(.+)\1\)/)
|
83
|
+
requires.map {|(_, pn)| self.class.resolve(pn, root) }
|
84
|
+
end
|
85
|
+
|
86
|
+
protected
|
87
|
+
def source?
|
88
|
+
valid? && compiler.source?
|
89
|
+
end
|
90
|
+
|
48
91
|
def compiler
|
49
|
-
Compiler.for_extension(ext)
|
92
|
+
@compiler ||= Compiler.for_extension(ext)
|
50
93
|
end
|
51
94
|
end
|
52
95
|
end
|
data/lib/stitch/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stitch-rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
12
|
+
date: 2011-12-03 00:00:00.000000000Z
|
13
13
|
dependencies: []
|
14
14
|
description: A JavaScript package manager
|
15
15
|
email:
|
@@ -24,7 +24,10 @@ files:
|
|
24
24
|
- README.md
|
25
25
|
- Rakefile
|
26
26
|
- examples/.DS_Store
|
27
|
-
- examples/app/controllers/
|
27
|
+
- examples/app/controllers/users.coffee
|
28
|
+
- examples/app/index.js
|
29
|
+
- examples/app/models/orm.js
|
30
|
+
- examples/app/models/user.js
|
28
31
|
- examples/compile.rb
|
29
32
|
- examples/lib/jquery.js
|
30
33
|
- examples/lib/lib.coffee
|
@@ -33,6 +36,7 @@ files:
|
|
33
36
|
- lib/stitch/compiler.rb
|
34
37
|
- lib/stitch/compilers/coffeescript.rb
|
35
38
|
- lib/stitch/compilers/javascript.rb
|
39
|
+
- lib/stitch/compilers/mustache.rb
|
36
40
|
- lib/stitch/compilers/tmpl.rb
|
37
41
|
- lib/stitch/package.rb
|
38
42
|
- lib/stitch/server.rb
|
@@ -59,7 +63,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
59
63
|
version: '0'
|
60
64
|
requirements: []
|
61
65
|
rubyforge_project:
|
62
|
-
rubygems_version: 1.8.
|
66
|
+
rubygems_version: 1.8.10
|
63
67
|
signing_key:
|
64
68
|
specification_version: 3
|
65
69
|
summary: Stitch ported to Ruby
|