slinky 0.4.1 → 0.4.2
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/VERSION +1 -1
- data/bin/slinky +2 -2
- data/lib/slinky/builder.rb +2 -2
- data/lib/slinky/config_reader.rb +23 -0
- data/lib/slinky/manifest.rb +38 -16
- data/lib/slinky/proxy_server.rb +74 -0
- data/lib/slinky/runner.rb +7 -2
- data/lib/slinky/server.rb +6 -3
- data/lib/slinky.rb +1 -1
- data/slinky.gemspec +12 -8
- data/spec/slinky_spec.rb +12 -10
- data/spec/spec_helper.rb +1 -0
- metadata +129 -121
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.2
|
data/bin/slinky
CHANGED
data/lib/slinky/builder.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Slinky
|
2
2
|
class Builder
|
3
|
-
def self.build dir, build_dir
|
4
|
-
manifest = Manifest.new(dir, :build_to => build_dir, :devel => false)
|
3
|
+
def self.build dir, build_dir, config
|
4
|
+
manifest = Manifest.new(dir, config, :build_to => build_dir, :devel => false)
|
5
5
|
manifest.build
|
6
6
|
end
|
7
7
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Slinky
|
2
|
+
class ConfigReader
|
3
|
+
def self.from_file path
|
4
|
+
new File.open(path).read
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.empty
|
8
|
+
new "{}"
|
9
|
+
end
|
10
|
+
|
11
|
+
def initialize string
|
12
|
+
@config = YAML::load(string)
|
13
|
+
end
|
14
|
+
|
15
|
+
def proxies
|
16
|
+
@config["proxies"]
|
17
|
+
end
|
18
|
+
|
19
|
+
def ignore
|
20
|
+
@config["ignore"] || []
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/slinky/manifest.rb
CHANGED
@@ -21,24 +21,31 @@ module Slinky
|
|
21
21
|
class Manifest
|
22
22
|
attr_accessor :manifest_dir, :dir
|
23
23
|
|
24
|
-
def initialize dir, options = {}
|
24
|
+
def initialize dir, config, options = {}
|
25
25
|
@dir = dir
|
26
26
|
@build_to = if d = options[:build_to]
|
27
27
|
File.absolute_path(d)
|
28
28
|
else
|
29
29
|
dir
|
30
30
|
end
|
31
|
-
@manifest_dir = ManifestDir.new dir, @build_to, self
|
31
|
+
@manifest_dir = ManifestDir.new dir, self, @build_to, self
|
32
32
|
@devel = (options[:devel].nil?) ? true : options[:devel]
|
33
|
+
@config = config
|
33
34
|
end
|
34
35
|
|
35
36
|
# Returns a list of all files contained in this manifest
|
36
37
|
#
|
37
38
|
# @return [ManifestFile] a list of manifest files
|
38
|
-
def files
|
39
|
-
@files
|
40
|
-
|
41
|
-
|
39
|
+
def files include_ignores = true
|
40
|
+
unless @files
|
41
|
+
@files = []
|
42
|
+
files_rec @manifest_dir
|
43
|
+
end
|
44
|
+
if include_ignores
|
45
|
+
@files
|
46
|
+
else
|
47
|
+
@files.reject{|f| @config.ignore.any?{|p| f.in_tree? p}}
|
48
|
+
end
|
42
49
|
end
|
43
50
|
|
44
51
|
# Finds the file at the given path in the manifest if one exists,
|
@@ -109,7 +116,7 @@ module Slinky
|
|
109
116
|
# @return [[ManifestFile, ManifestFile]] the graph
|
110
117
|
def build_dependency_graph
|
111
118
|
graph = []
|
112
|
-
files.each{|mf|
|
119
|
+
files(false).each{|mf|
|
113
120
|
mf.directives[:slinky_require].each{|rf|
|
114
121
|
required = mf.parent.find_by_path(rf)
|
115
122
|
if required
|
@@ -134,11 +141,11 @@ module Slinky
|
|
134
141
|
# will contain sorted elements
|
135
142
|
l = []
|
136
143
|
# start nodes, those with no incoming edges
|
137
|
-
s =
|
144
|
+
s = files(false).reject{|mf| mf.directives[:slinky_require]}
|
138
145
|
while s.size > 0
|
139
146
|
n = s.delete s.first
|
140
147
|
l << n
|
141
|
-
|
148
|
+
files(false).each{|m|
|
142
149
|
e = graph.find{|e| e[0] == n && e[1] == m}
|
143
150
|
next unless e
|
144
151
|
graph.delete e
|
@@ -171,9 +178,10 @@ module Slinky
|
|
171
178
|
end
|
172
179
|
|
173
180
|
class ManifestDir
|
174
|
-
attr_accessor :dir, :files, :children
|
175
|
-
def initialize dir, build_dir, manifest
|
181
|
+
attr_accessor :dir, :parent, :files, :children
|
182
|
+
def initialize dir, parent, build_dir, manifest
|
176
183
|
@dir = dir
|
184
|
+
@parent = parent
|
177
185
|
@files = []
|
178
186
|
@children = []
|
179
187
|
@build_dir = Pathname.new(build_dir)
|
@@ -184,7 +192,7 @@ module Slinky
|
|
184
192
|
next if Pathname.new(File.absolute_path(path)) == Pathname.new(build_dir)
|
185
193
|
if File.directory? path
|
186
194
|
build_dir = (@build_dir + File.basename(path)).cleanpath
|
187
|
-
@children << ManifestDir.new(path, build_dir, manifest)
|
195
|
+
@children << ManifestDir.new(path, self, build_dir, manifest)
|
188
196
|
else
|
189
197
|
@files << ManifestFile.new(path, @build_dir, manifest, self)
|
190
198
|
end
|
@@ -205,10 +213,14 @@ module Slinky
|
|
205
213
|
when 1
|
206
214
|
@files.find{|f| f.matches? components[0]}
|
207
215
|
else
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
216
|
+
if components[0] == ".."
|
217
|
+
@parent.find_by_path components[1..-1].join(File::SEPARATOR)
|
218
|
+
else
|
219
|
+
child = @children.find{|d|
|
220
|
+
Pathname.new(d.dir).basename.to_s == components[0]
|
221
|
+
}
|
222
|
+
child ? child.find_by_path(components[1..-1].join(File::SEPARATOR)) : nil
|
223
|
+
end
|
212
224
|
end
|
213
225
|
end
|
214
226
|
|
@@ -252,6 +264,16 @@ module Slinky
|
|
252
264
|
name == s || output_path.basename.to_s == s
|
253
265
|
end
|
254
266
|
|
267
|
+
# Predicate which determines whether the file is the supplied path
|
268
|
+
# or lies on supplied tree
|
269
|
+
def in_tree? path
|
270
|
+
return true if matches? path
|
271
|
+
abs_path = Pathname.new(path).expand_path.to_s
|
272
|
+
asdf = Pathname.new(@source).dirname.expand_path.to_s
|
273
|
+
# puts [abs_path, asdf, asdf.start_with?(abs_path), abs_path == asdf].inspect
|
274
|
+
asdf.start_with?(abs_path)
|
275
|
+
end
|
276
|
+
|
255
277
|
# Returns the path to which this file should be output. This is
|
256
278
|
# equal to the source path unless the file needs to be compiled,
|
257
279
|
# in which case the extension returned is the output extension
|
@@ -0,0 +1,74 @@
|
|
1
|
+
module Slinky
|
2
|
+
module ProxyServer
|
3
|
+
HTTP_MATCHER = /(GET|POST|PUT|DELETE|HEAD) (.+?)(?= HTTP)/
|
4
|
+
HOST_MATCHER = /Host: (.+)/
|
5
|
+
|
6
|
+
def self.process_proxies proxy_hash
|
7
|
+
proxy_hash.map{|from, to|
|
8
|
+
begin
|
9
|
+
[from, URI::parse(to)]
|
10
|
+
rescue
|
11
|
+
$stderr.puts "Invalid proxy setting: #{from} => #{to}".foreground(:red)
|
12
|
+
end
|
13
|
+
}.compact
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.process_proxy_servers proxies
|
17
|
+
proxies_servers = proxies.map{|p| [p[1].host, p[1].port]}
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.find_matcher proxies, path
|
21
|
+
proxies.find{|p| path.start_with?(p[0])}
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.replace_path http, old_path, new_path, addition
|
25
|
+
# TODO: This may fail in certain, rare cases
|
26
|
+
addition = addition[0..-2] if addition[-1] == "/"
|
27
|
+
http.gsub(old_path, addition + new_path)
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.replace_host http, host
|
31
|
+
http.gsub(HOST_MATCHER, "Host: #{host}")
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.run proxy_hash, port, slinky_port
|
35
|
+
proxies = process_proxies proxy_hash
|
36
|
+
proxy_servers = process_proxy_servers proxies
|
37
|
+
|
38
|
+
Proxy.start(:host => "0.0.0.0", :port => port){|conn|
|
39
|
+
conn.server :slinky, :host => "127.0.0.1", :port => slinky_port
|
40
|
+
proxy_servers.each{|p|
|
41
|
+
conn.server p, :host => p[0], :port => p[1]
|
42
|
+
}
|
43
|
+
|
44
|
+
conn.on_data do |data|
|
45
|
+
begin
|
46
|
+
_, path = data.match(ProxyServer::HTTP_MATCHER)[1..2]
|
47
|
+
proxy = ProxyServer.find_matcher(proxies, path)
|
48
|
+
server = if proxy
|
49
|
+
new_path = path.gsub(/^#{proxy[0]}/, "")
|
50
|
+
data = ProxyServer.replace_path(data, path, new_path, proxy[1].path)
|
51
|
+
new_host = proxy[1].select(:host, :port).join(":")
|
52
|
+
data = ProxyServer.replace_host(data, new_host)
|
53
|
+
puts [data, [proxy[1].host, proxy[1].port]].inspect
|
54
|
+
[proxy[1].host, proxy[1].port]
|
55
|
+
else :slinky
|
56
|
+
end
|
57
|
+
[data, [server]]
|
58
|
+
rescue
|
59
|
+
$stderr.puts "Got error: #{$!}".foreground(:red)
|
60
|
+
conn.send_data "HTTP/1.1 500 Ooops...something went wrong\r\n"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
conn.on_response do |server, resp|
|
65
|
+
resp
|
66
|
+
end
|
67
|
+
|
68
|
+
conn.on_finish do |name|
|
69
|
+
unbind
|
70
|
+
end
|
71
|
+
}
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
data/lib/slinky/runner.rb
CHANGED
@@ -15,7 +15,11 @@ module Slinky
|
|
15
15
|
@arguments = @argv
|
16
16
|
|
17
17
|
config_path = "#{@options[:src_dir]}/slinky.yaml"
|
18
|
-
@config =
|
18
|
+
@config = if File.exist?(config_path)
|
19
|
+
ConfigReader.from_file(config_path)
|
20
|
+
else
|
21
|
+
ConfigReader.empty
|
22
|
+
end
|
19
23
|
end
|
20
24
|
|
21
25
|
def version
|
@@ -53,6 +57,7 @@ module Slinky
|
|
53
57
|
|
54
58
|
EM::run {
|
55
59
|
Slinky::Server.dir = @options[:src_dir]
|
60
|
+
Slinky::Server.config = @config
|
56
61
|
if @config && @config.proxies && !@options[:no_proxy]
|
57
62
|
server = EM::start_server "127.0.0.1", 5324, Slinky::Server
|
58
63
|
ProxyServer.run(@config.proxies, @options[:port], 5324)
|
@@ -64,7 +69,7 @@ module Slinky
|
|
64
69
|
end
|
65
70
|
|
66
71
|
def command_build
|
67
|
-
Builder.build(@options[:src_dir], @options[:build_dir])
|
72
|
+
Builder.build(@options[:src_dir], @options[:build_dir], @config)
|
68
73
|
end
|
69
74
|
end
|
70
75
|
end
|
data/lib/slinky/server.rb
CHANGED
@@ -7,6 +7,9 @@ module Slinky
|
|
7
7
|
# Gets the root directory from which files should be served
|
8
8
|
def self.dir; @dir || "."; end
|
9
9
|
|
10
|
+
def self.config= _config; @config = _config; end
|
11
|
+
def self.config; @config || {}; end
|
12
|
+
|
10
13
|
# Splits a uri into its components, returning only the path sans
|
11
14
|
# initial forward slash.
|
12
15
|
def self.path_for_uri uri
|
@@ -21,7 +24,7 @@ module Slinky
|
|
21
24
|
serve_file resp, path.to_s
|
22
25
|
else
|
23
26
|
resp.status = 500
|
24
|
-
resp.content = "Error compiling #{mf.source}"
|
27
|
+
resp.content = "Error compiling #{mf.source}\n"
|
25
28
|
end
|
26
29
|
else
|
27
30
|
not_found resp
|
@@ -52,12 +55,12 @@ module Slinky
|
|
52
55
|
# Returns the proper response for files that do not exist
|
53
56
|
def self.not_found resp
|
54
57
|
resp.status = 404
|
55
|
-
resp.content = "File not found"
|
58
|
+
resp.content = "File not found\n"
|
56
59
|
end
|
57
60
|
|
58
61
|
# Method called for every HTTP request made
|
59
62
|
def process_http_request
|
60
|
-
@manifest = Manifest.new(Server.dir)
|
63
|
+
@manifest = Manifest.new(Server.dir, Server.config)
|
61
64
|
|
62
65
|
path = Server.path_for_uri(@http_request_uri)
|
63
66
|
file = @manifest.find_by_path(path)
|
data/lib/slinky.rb
CHANGED
data/slinky.gemspec
CHANGED
@@ -5,15 +5,14 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{slinky}
|
8
|
-
s.version = "0.4.
|
8
|
+
s.version = "0.4.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = [
|
12
|
-
s.date = %q{2011-
|
13
|
-
s.default_executable = %q{slinky}
|
11
|
+
s.authors = [%q{mwylde}]
|
12
|
+
s.date = %q{2011-09-15}
|
14
13
|
s.description = %q{A static file server for rich javascript apps that automatically compiles SASS, HAML, CoffeeScript and more}
|
15
14
|
s.email = %q{mwylde@wesleyan.edu}
|
16
|
-
s.executables = [
|
15
|
+
s.executables = [%q{slinky}]
|
17
16
|
s.extra_rdoc_files = [
|
18
17
|
"LICENSE.txt",
|
19
18
|
"README.md"
|
@@ -35,8 +34,10 @@ Gem::Specification.new do |s|
|
|
35
34
|
"lib/slinky/compilers/coffee-helper",
|
36
35
|
"lib/slinky/compilers/haml-compiler.rb",
|
37
36
|
"lib/slinky/compilers/sass-compiler.rb",
|
37
|
+
"lib/slinky/config_reader.rb",
|
38
38
|
"lib/slinky/em-popen3.rb",
|
39
39
|
"lib/slinky/manifest.rb",
|
40
|
+
"lib/slinky/proxy_server.rb",
|
40
41
|
"lib/slinky/runner.rb",
|
41
42
|
"lib/slinky/server.rb",
|
42
43
|
"slinky.gemspec",
|
@@ -44,9 +45,9 @@ Gem::Specification.new do |s|
|
|
44
45
|
"spec/spec_helper.rb"
|
45
46
|
]
|
46
47
|
s.homepage = %q{http://github.com/mwylde/slinky}
|
47
|
-
s.licenses = [
|
48
|
-
s.require_paths = [
|
49
|
-
s.rubygems_version = %q{1.6
|
48
|
+
s.licenses = [%q{MIT}]
|
49
|
+
s.require_paths = [%q{lib}]
|
50
|
+
s.rubygems_version = %q{1.8.6}
|
50
51
|
s.summary = %q{Static file server for javascript apps}
|
51
52
|
s.test_files = [
|
52
53
|
"spec/slinky_spec.rb",
|
@@ -59,6 +60,7 @@ Gem::Specification.new do |s|
|
|
59
60
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
60
61
|
s.add_runtime_dependency(%q<eventmachine>, [">= 0.12.0"])
|
61
62
|
s.add_runtime_dependency(%q<eventmachine_httpserver>, [">= 0.2.0"])
|
63
|
+
s.add_runtime_dependency(%q<em-proxy>, [">= 0.1.5"])
|
62
64
|
s.add_runtime_dependency(%q<rainbow>, [">= 1.1.1"])
|
63
65
|
s.add_runtime_dependency(%q<haml>, [">= 3.0.0"])
|
64
66
|
s.add_runtime_dependency(%q<sass>, [">= 3.1.1"])
|
@@ -75,6 +77,7 @@ Gem::Specification.new do |s|
|
|
75
77
|
else
|
76
78
|
s.add_dependency(%q<eventmachine>, [">= 0.12.0"])
|
77
79
|
s.add_dependency(%q<eventmachine_httpserver>, [">= 0.2.0"])
|
80
|
+
s.add_dependency(%q<em-proxy>, [">= 0.1.5"])
|
78
81
|
s.add_dependency(%q<rainbow>, [">= 1.1.1"])
|
79
82
|
s.add_dependency(%q<haml>, [">= 3.0.0"])
|
80
83
|
s.add_dependency(%q<sass>, [">= 3.1.1"])
|
@@ -92,6 +95,7 @@ Gem::Specification.new do |s|
|
|
92
95
|
else
|
93
96
|
s.add_dependency(%q<eventmachine>, [">= 0.12.0"])
|
94
97
|
s.add_dependency(%q<eventmachine_httpserver>, [">= 0.2.0"])
|
98
|
+
s.add_dependency(%q<em-proxy>, [">= 0.1.5"])
|
95
99
|
s.add_dependency(%q<rainbow>, [">= 1.1.1"])
|
96
100
|
s.add_dependency(%q<haml>, [">= 3.0.0"])
|
97
101
|
s.add_dependency(%q<sass>, [">= 3.1.1"])
|
data/spec/slinky_spec.rb
CHANGED
@@ -18,8 +18,8 @@ describe "Slinky" do
|
|
18
18
|
|
19
19
|
context "Manifest" do
|
20
20
|
before :each do
|
21
|
-
@mprod = Slinky::Manifest.new("/src", :devel => false, :build_to => "/build")
|
22
|
-
@mdevel = Slinky::Manifest.new("/src")
|
21
|
+
@mprod = Slinky::Manifest.new("/src", @config, :devel => false, :build_to => "/build")
|
22
|
+
@mdevel = Slinky::Manifest.new("/src", @config)
|
23
23
|
@md_prod = @mprod.manifest_dir
|
24
24
|
@md_devel = @mdevel.manifest_dir
|
25
25
|
end
|
@@ -43,6 +43,8 @@ describe "Slinky" do
|
|
43
43
|
@mdevel.find_by_path("asdf.haml").should == nil
|
44
44
|
@mdevel.find_by_path("l1/l2/test.txt").source.should == "/src/l1/l2/test.txt"
|
45
45
|
@mdevel.find_by_path("l1/test.css").source.should == "/src/l1/test.sass"
|
46
|
+
l1 = @mdevel.manifest_dir.children.find{|c| c.dir == "/src/l1"}
|
47
|
+
l1.find_by_path("../test.haml").source.should == "/src/test.haml"
|
46
48
|
end
|
47
49
|
|
48
50
|
it "should produce the correct scripts string for production" do
|
@@ -61,7 +63,7 @@ describe "Slinky" do
|
|
61
63
|
File.open("/src/l1/l2/bad.sass", "w+"){|f|
|
62
64
|
f.write "require('../test.sass')\ncolor: red;"
|
63
65
|
}
|
64
|
-
manifest = Slinky::Manifest.new("/src")
|
66
|
+
manifest = Slinky::Manifest.new("/src", @config)
|
65
67
|
@mdevel.styles_string.should == '<link rel="stylesheet" href="l1/test.css" /><link rel="stylesheet" href="l1/l2/test2.css" />'
|
66
68
|
end
|
67
69
|
|
@@ -172,7 +174,7 @@ describe "Slinky" do
|
|
172
174
|
|
173
175
|
it "should fail if a required file isn't in the manifest" do
|
174
176
|
FileUtils.rm("/src/l1/test2.js")
|
175
|
-
manifest = Slinky::Manifest.new("/src", :devel => false, :build_to => "/build")
|
177
|
+
manifest = Slinky::Manifest.new("/src", @config, :devel => false, :build_to => "/build")
|
176
178
|
$stderr.should_receive(:puts).with("Could not find file test2.js required by /src/l1/test.js".foreground(:red))
|
177
179
|
proc {
|
178
180
|
manifest.build_dependency_graph
|
@@ -185,17 +187,17 @@ describe "Slinky" do
|
|
185
187
|
|
186
188
|
it "should fail if there is a cycle in the dependency graph" do
|
187
189
|
File.open("/src/l1/test5.js", "w+"){|f| f.write("slinky_require('test.js')")}
|
188
|
-
manifest = Slinky::Manifest.new("/src", :devel => false, :build_to => "/build")
|
190
|
+
manifest = Slinky::Manifest.new("/src", @config, :devel => false, :build_to => "/build")
|
189
191
|
$stderr.should_receive(:puts).with("Dependencies /src/l1/test2.js -> /src/l1/test.js, /src/l1/test5.js -> /src/l1/test2.js, /src/l1/test.js -> /src/l1/test5.js could not be satisfied".foreground(:red))
|
190
192
|
proc { manifest.dependency_list }.should raise_error Slinky::DependencyError
|
191
193
|
end
|
192
194
|
|
193
195
|
it "should ignore the build directory" do
|
194
196
|
$stdout.should_receive(:puts).with(/Compiled \/src\/.+/).exactly(6).times
|
195
|
-
Slinky::Builder.build("/src", "/src/build")
|
197
|
+
Slinky::Builder.build("/src", "/src/build", @config)
|
196
198
|
File.exists?("/src/build/build").should_not == true
|
197
199
|
File.exists?("/src/build/test.html").should == true
|
198
|
-
Slinky::Builder.build("/src", "/src/build")
|
200
|
+
Slinky::Builder.build("/src", "/src/build", @config)
|
199
201
|
File.exists?("/src/build/build").should_not == true
|
200
202
|
end
|
201
203
|
|
@@ -246,7 +248,7 @@ describe "Slinky" do
|
|
246
248
|
it "should serve 404s" do
|
247
249
|
@resp.should_receive(:status=).with(404)
|
248
250
|
Slinky::Server.serve_file @resp, "/src/asdf/faljshd"
|
249
|
-
@resp.content.should == "File not found"
|
251
|
+
@resp.content.should == "File not found\n"
|
250
252
|
end
|
251
253
|
|
252
254
|
it "should handle static files" do
|
@@ -266,7 +268,7 @@ describe "Slinky" do
|
|
266
268
|
mf = Slinky::ManifestFile.new("/src/l1/asdf.txt", nil, @mdevel)
|
267
269
|
@resp.should_receive(:status=).with(404)
|
268
270
|
Slinky::Server.handle_file @resp, mf
|
269
|
-
@resp.content.should == "File not found"
|
271
|
+
@resp.content.should == "File not found\n"
|
270
272
|
end
|
271
273
|
|
272
274
|
it "should accept a port option" do
|
@@ -306,7 +308,7 @@ describe "Slinky" do
|
|
306
308
|
end
|
307
309
|
it "should build manifest to build directory" do
|
308
310
|
$stdout.should_receive(:puts).with(/Compiled \/src\/.+/).exactly(3).times
|
309
|
-
Slinky::Builder.build("/src", "/build")
|
311
|
+
Slinky::Builder.build("/src", "/build", @config)
|
310
312
|
File.exists?("/build").should == true
|
311
313
|
File.exists?("/build/scripts.js").should == true
|
312
314
|
File.exists?("/build/l1/l2/test.txt").should == true
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,193 +1,202 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: slinky
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.4.2
|
4
5
|
prerelease:
|
5
|
-
version: 0.4.1
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- mwylde
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
dependencies:
|
16
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2011-09-15 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
17
15
|
name: eventmachine
|
18
|
-
requirement: &
|
16
|
+
requirement: &70247105720180 !ruby/object:Gem::Requirement
|
19
17
|
none: false
|
20
|
-
requirements:
|
21
|
-
- -
|
22
|
-
- !ruby/object:Gem::Version
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
23
21
|
version: 0.12.0
|
24
22
|
type: :runtime
|
25
23
|
prerelease: false
|
26
|
-
version_requirements: *
|
27
|
-
- !ruby/object:Gem::Dependency
|
24
|
+
version_requirements: *70247105720180
|
25
|
+
- !ruby/object:Gem::Dependency
|
28
26
|
name: eventmachine_httpserver
|
29
|
-
requirement: &
|
27
|
+
requirement: &70247105719700 !ruby/object:Gem::Requirement
|
30
28
|
none: false
|
31
|
-
requirements:
|
32
|
-
- -
|
33
|
-
- !ruby/object:Gem::Version
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
34
32
|
version: 0.2.0
|
35
33
|
type: :runtime
|
36
34
|
prerelease: false
|
37
|
-
version_requirements: *
|
38
|
-
- !ruby/object:Gem::Dependency
|
35
|
+
version_requirements: *70247105719700
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: em-proxy
|
38
|
+
requirement: &70247105719220 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 0.1.5
|
44
|
+
type: :runtime
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70247105719220
|
47
|
+
- !ruby/object:Gem::Dependency
|
39
48
|
name: rainbow
|
40
|
-
requirement: &
|
49
|
+
requirement: &70247105718740 !ruby/object:Gem::Requirement
|
41
50
|
none: false
|
42
|
-
requirements:
|
43
|
-
- -
|
44
|
-
- !ruby/object:Gem::Version
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
45
54
|
version: 1.1.1
|
46
55
|
type: :runtime
|
47
56
|
prerelease: false
|
48
|
-
version_requirements: *
|
49
|
-
- !ruby/object:Gem::Dependency
|
57
|
+
version_requirements: *70247105718740
|
58
|
+
- !ruby/object:Gem::Dependency
|
50
59
|
name: haml
|
51
|
-
requirement: &
|
60
|
+
requirement: &70247105718260 !ruby/object:Gem::Requirement
|
52
61
|
none: false
|
53
|
-
requirements:
|
54
|
-
- -
|
55
|
-
- !ruby/object:Gem::Version
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
56
65
|
version: 3.0.0
|
57
66
|
type: :runtime
|
58
67
|
prerelease: false
|
59
|
-
version_requirements: *
|
60
|
-
- !ruby/object:Gem::Dependency
|
68
|
+
version_requirements: *70247105718260
|
69
|
+
- !ruby/object:Gem::Dependency
|
61
70
|
name: sass
|
62
|
-
requirement: &
|
71
|
+
requirement: &70247105717780 !ruby/object:Gem::Requirement
|
63
72
|
none: false
|
64
|
-
requirements:
|
65
|
-
- -
|
66
|
-
- !ruby/object:Gem::Version
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
67
76
|
version: 3.1.1
|
68
77
|
type: :runtime
|
69
78
|
prerelease: false
|
70
|
-
version_requirements: *
|
71
|
-
- !ruby/object:Gem::Dependency
|
79
|
+
version_requirements: *70247105717780
|
80
|
+
- !ruby/object:Gem::Dependency
|
72
81
|
name: coffee-script
|
73
|
-
requirement: &
|
82
|
+
requirement: &70247105717300 !ruby/object:Gem::Requirement
|
74
83
|
none: false
|
75
|
-
requirements:
|
76
|
-
- -
|
77
|
-
- !ruby/object:Gem::Version
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
78
87
|
version: 2.2.0
|
79
88
|
type: :runtime
|
80
89
|
prerelease: false
|
81
|
-
version_requirements: *
|
82
|
-
- !ruby/object:Gem::Dependency
|
90
|
+
version_requirements: *70247105717300
|
91
|
+
- !ruby/object:Gem::Dependency
|
83
92
|
name: mime-types
|
84
|
-
requirement: &
|
93
|
+
requirement: &70247105733180 !ruby/object:Gem::Requirement
|
85
94
|
none: false
|
86
|
-
requirements:
|
87
|
-
- -
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version:
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '1.16'
|
90
99
|
type: :runtime
|
91
100
|
prerelease: false
|
92
|
-
version_requirements: *
|
93
|
-
- !ruby/object:Gem::Dependency
|
101
|
+
version_requirements: *70247105733180
|
102
|
+
- !ruby/object:Gem::Dependency
|
94
103
|
name: yui-compressor
|
95
|
-
requirement: &
|
104
|
+
requirement: &70247105732700 !ruby/object:Gem::Requirement
|
96
105
|
none: false
|
97
|
-
requirements:
|
98
|
-
- -
|
99
|
-
- !ruby/object:Gem::Version
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
100
109
|
version: 0.9.6
|
101
110
|
type: :runtime
|
102
111
|
prerelease: false
|
103
|
-
version_requirements: *
|
104
|
-
- !ruby/object:Gem::Dependency
|
112
|
+
version_requirements: *70247105732700
|
113
|
+
- !ruby/object:Gem::Dependency
|
105
114
|
name: rspec
|
106
|
-
requirement: &
|
115
|
+
requirement: &70247105732220 !ruby/object:Gem::Requirement
|
107
116
|
none: false
|
108
|
-
requirements:
|
117
|
+
requirements:
|
109
118
|
- - ~>
|
110
|
-
- !ruby/object:Gem::Version
|
119
|
+
- !ruby/object:Gem::Version
|
111
120
|
version: 2.3.0
|
112
121
|
type: :development
|
113
122
|
prerelease: false
|
114
|
-
version_requirements: *
|
115
|
-
- !ruby/object:Gem::Dependency
|
123
|
+
version_requirements: *70247105732220
|
124
|
+
- !ruby/object:Gem::Dependency
|
116
125
|
name: yard
|
117
|
-
requirement: &
|
126
|
+
requirement: &70247105731740 !ruby/object:Gem::Requirement
|
118
127
|
none: false
|
119
|
-
requirements:
|
128
|
+
requirements:
|
120
129
|
- - ~>
|
121
|
-
- !ruby/object:Gem::Version
|
130
|
+
- !ruby/object:Gem::Version
|
122
131
|
version: 0.6.0
|
123
132
|
type: :development
|
124
133
|
prerelease: false
|
125
|
-
version_requirements: *
|
126
|
-
- !ruby/object:Gem::Dependency
|
134
|
+
version_requirements: *70247105731740
|
135
|
+
- !ruby/object:Gem::Dependency
|
127
136
|
name: bundler
|
128
|
-
requirement: &
|
137
|
+
requirement: &70247105731260 !ruby/object:Gem::Requirement
|
129
138
|
none: false
|
130
|
-
requirements:
|
139
|
+
requirements:
|
131
140
|
- - ~>
|
132
|
-
- !ruby/object:Gem::Version
|
141
|
+
- !ruby/object:Gem::Version
|
133
142
|
version: 1.0.0
|
134
143
|
type: :development
|
135
144
|
prerelease: false
|
136
|
-
version_requirements: *
|
137
|
-
- !ruby/object:Gem::Dependency
|
145
|
+
version_requirements: *70247105731260
|
146
|
+
- !ruby/object:Gem::Dependency
|
138
147
|
name: jeweler
|
139
|
-
requirement: &
|
148
|
+
requirement: &70247105730780 !ruby/object:Gem::Requirement
|
140
149
|
none: false
|
141
|
-
requirements:
|
150
|
+
requirements:
|
142
151
|
- - ~>
|
143
|
-
- !ruby/object:Gem::Version
|
152
|
+
- !ruby/object:Gem::Version
|
144
153
|
version: 1.5.2
|
145
154
|
type: :development
|
146
155
|
prerelease: false
|
147
|
-
version_requirements: *
|
148
|
-
- !ruby/object:Gem::Dependency
|
156
|
+
version_requirements: *70247105730780
|
157
|
+
- !ruby/object:Gem::Dependency
|
149
158
|
name: cover_me
|
150
|
-
requirement: &
|
159
|
+
requirement: &70247105730300 !ruby/object:Gem::Requirement
|
151
160
|
none: false
|
152
|
-
requirements:
|
153
|
-
- -
|
154
|
-
- !ruby/object:Gem::Version
|
161
|
+
requirements:
|
162
|
+
- - ! '>='
|
163
|
+
- !ruby/object:Gem::Version
|
155
164
|
version: 1.0.0.rc6
|
156
165
|
type: :development
|
157
166
|
prerelease: false
|
158
|
-
version_requirements: *
|
159
|
-
- !ruby/object:Gem::Dependency
|
167
|
+
version_requirements: *70247105730300
|
168
|
+
- !ruby/object:Gem::Dependency
|
160
169
|
name: fakefs
|
161
|
-
requirement: &
|
170
|
+
requirement: &70247105729820 !ruby/object:Gem::Requirement
|
162
171
|
none: false
|
163
|
-
requirements:
|
164
|
-
- -
|
165
|
-
- !ruby/object:Gem::Version
|
166
|
-
version:
|
172
|
+
requirements:
|
173
|
+
- - ! '>='
|
174
|
+
- !ruby/object:Gem::Version
|
175
|
+
version: '0'
|
167
176
|
type: :development
|
168
177
|
prerelease: false
|
169
|
-
version_requirements: *
|
170
|
-
- !ruby/object:Gem::Dependency
|
178
|
+
version_requirements: *70247105729820
|
179
|
+
- !ruby/object:Gem::Dependency
|
171
180
|
name: em-http-request
|
172
|
-
requirement: &
|
181
|
+
requirement: &70247105729340 !ruby/object:Gem::Requirement
|
173
182
|
none: false
|
174
|
-
requirements:
|
175
|
-
- -
|
176
|
-
- !ruby/object:Gem::Version
|
177
|
-
version:
|
183
|
+
requirements:
|
184
|
+
- - ! '>='
|
185
|
+
- !ruby/object:Gem::Version
|
186
|
+
version: '0'
|
178
187
|
type: :development
|
179
188
|
prerelease: false
|
180
|
-
version_requirements: *
|
181
|
-
description: A static file server for rich javascript apps that automatically compiles
|
189
|
+
version_requirements: *70247105729340
|
190
|
+
description: A static file server for rich javascript apps that automatically compiles
|
191
|
+
SASS, HAML, CoffeeScript and more
|
182
192
|
email: mwylde@wesleyan.edu
|
183
|
-
executables:
|
193
|
+
executables:
|
184
194
|
- slinky
|
185
195
|
extensions: []
|
186
|
-
|
187
|
-
extra_rdoc_files:
|
196
|
+
extra_rdoc_files:
|
188
197
|
- LICENSE.txt
|
189
198
|
- README.md
|
190
|
-
files:
|
199
|
+
files:
|
191
200
|
- .document
|
192
201
|
- .rspec
|
193
202
|
- Gemfile
|
@@ -204,44 +213,43 @@ files:
|
|
204
213
|
- lib/slinky/compilers/coffee-helper
|
205
214
|
- lib/slinky/compilers/haml-compiler.rb
|
206
215
|
- lib/slinky/compilers/sass-compiler.rb
|
216
|
+
- lib/slinky/config_reader.rb
|
207
217
|
- lib/slinky/em-popen3.rb
|
208
218
|
- lib/slinky/manifest.rb
|
219
|
+
- lib/slinky/proxy_server.rb
|
209
220
|
- lib/slinky/runner.rb
|
210
221
|
- lib/slinky/server.rb
|
211
222
|
- slinky.gemspec
|
212
223
|
- spec/slinky_spec.rb
|
213
224
|
- spec/spec_helper.rb
|
214
|
-
has_rdoc: true
|
215
225
|
homepage: http://github.com/mwylde/slinky
|
216
|
-
licenses:
|
226
|
+
licenses:
|
217
227
|
- MIT
|
218
228
|
post_install_message:
|
219
229
|
rdoc_options: []
|
220
|
-
|
221
|
-
require_paths:
|
230
|
+
require_paths:
|
222
231
|
- lib
|
223
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
232
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
224
233
|
none: false
|
225
|
-
requirements:
|
226
|
-
- -
|
227
|
-
- !ruby/object:Gem::Version
|
228
|
-
|
229
|
-
segments:
|
234
|
+
requirements:
|
235
|
+
- - ! '>='
|
236
|
+
- !ruby/object:Gem::Version
|
237
|
+
version: '0'
|
238
|
+
segments:
|
230
239
|
- 0
|
231
|
-
|
232
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
240
|
+
hash: -2066251034160361517
|
241
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
233
242
|
none: false
|
234
|
-
requirements:
|
235
|
-
- -
|
236
|
-
- !ruby/object:Gem::Version
|
237
|
-
version:
|
243
|
+
requirements:
|
244
|
+
- - ! '>='
|
245
|
+
- !ruby/object:Gem::Version
|
246
|
+
version: '0'
|
238
247
|
requirements: []
|
239
|
-
|
240
248
|
rubyforge_project:
|
241
|
-
rubygems_version: 1.6
|
249
|
+
rubygems_version: 1.8.6
|
242
250
|
signing_key:
|
243
251
|
specification_version: 3
|
244
252
|
summary: Static file server for javascript apps
|
245
|
-
test_files:
|
253
|
+
test_files:
|
246
254
|
- spec/slinky_spec.rb
|
247
255
|
- spec/spec_helper.rb
|