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 CHANGED
@@ -1 +1 @@
1
- 0.4.0
1
+ 0.4.2
data/bin/slinky CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  root = File.expand_path(File.dirname(__FILE__))
4
4
 
5
- require "#{root}/../lib/slinky"
6
- #require 'slinky'
5
+ #require "#{root}/../lib/slinky"
6
+ require 'slinky'
7
7
 
8
8
  Slinky::Runner.new(ARGV).run
@@ -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
@@ -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
- files_rec @manifest_dir
41
- @files
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 = @files.reject{|mf| mf.directives[:slinky_require]}
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
- @files.each{|m|
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
- child = @children.find{|d|
209
- Pathname.new(d.dir).basename.to_s == components[0]
210
- }
211
- child ? child.find_by_path(components[1..-1].join(File::SEPARATOR)) : nil
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 = ConfigReader.from_file(config_path) if File.exist?(config_path)
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
@@ -1,5 +1,5 @@
1
1
  ROOT = File.expand_path(File.dirname(__FILE__))
2
-
2
+ require "bundler/setup"
3
3
  require 'uri'
4
4
  require 'yaml'
5
5
  require 'eventmachine'
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.1"
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 = ["mwylde"]
12
- s.date = %q{2011-08-19}
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 = ["slinky"]
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 = ["MIT"]
48
- s.require_paths = ["lib"]
49
- s.rubygems_version = %q{1.6.2}
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
@@ -35,6 +35,7 @@ RSpec.configure do |config|
35
35
  config.before :all do
36
36
  FakeFS.activate!
37
37
  FileUtils.mkdir("/tmp")
38
+ @config = Slinky::ConfigReader.empty
38
39
  end
39
40
  config.before :each do
40
41
  FileUtils.rm_rf("/src") rescue nil
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
- date: 2011-08-19 00:00:00 -07:00
14
- default_executable: slinky
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: &id001 !ruby/object:Gem::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: *id001
27
- - !ruby/object:Gem::Dependency
24
+ version_requirements: *70247105720180
25
+ - !ruby/object:Gem::Dependency
28
26
  name: eventmachine_httpserver
29
- requirement: &id002 !ruby/object:Gem::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: *id002
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: &id003 !ruby/object:Gem::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: *id003
49
- - !ruby/object:Gem::Dependency
57
+ version_requirements: *70247105718740
58
+ - !ruby/object:Gem::Dependency
50
59
  name: haml
51
- requirement: &id004 !ruby/object:Gem::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: *id004
60
- - !ruby/object:Gem::Dependency
68
+ version_requirements: *70247105718260
69
+ - !ruby/object:Gem::Dependency
61
70
  name: sass
62
- requirement: &id005 !ruby/object:Gem::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: *id005
71
- - !ruby/object:Gem::Dependency
79
+ version_requirements: *70247105717780
80
+ - !ruby/object:Gem::Dependency
72
81
  name: coffee-script
73
- requirement: &id006 !ruby/object:Gem::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: *id006
82
- - !ruby/object:Gem::Dependency
90
+ version_requirements: *70247105717300
91
+ - !ruby/object:Gem::Dependency
83
92
  name: mime-types
84
- requirement: &id007 !ruby/object:Gem::Requirement
93
+ requirement: &70247105733180 !ruby/object:Gem::Requirement
85
94
  none: false
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: "1.16"
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '1.16'
90
99
  type: :runtime
91
100
  prerelease: false
92
- version_requirements: *id007
93
- - !ruby/object:Gem::Dependency
101
+ version_requirements: *70247105733180
102
+ - !ruby/object:Gem::Dependency
94
103
  name: yui-compressor
95
- requirement: &id008 !ruby/object:Gem::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: *id008
104
- - !ruby/object:Gem::Dependency
112
+ version_requirements: *70247105732700
113
+ - !ruby/object:Gem::Dependency
105
114
  name: rspec
106
- requirement: &id009 !ruby/object:Gem::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: *id009
115
- - !ruby/object:Gem::Dependency
123
+ version_requirements: *70247105732220
124
+ - !ruby/object:Gem::Dependency
116
125
  name: yard
117
- requirement: &id010 !ruby/object:Gem::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: *id010
126
- - !ruby/object:Gem::Dependency
134
+ version_requirements: *70247105731740
135
+ - !ruby/object:Gem::Dependency
127
136
  name: bundler
128
- requirement: &id011 !ruby/object:Gem::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: *id011
137
- - !ruby/object:Gem::Dependency
145
+ version_requirements: *70247105731260
146
+ - !ruby/object:Gem::Dependency
138
147
  name: jeweler
139
- requirement: &id012 !ruby/object:Gem::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: *id012
148
- - !ruby/object:Gem::Dependency
156
+ version_requirements: *70247105730780
157
+ - !ruby/object:Gem::Dependency
149
158
  name: cover_me
150
- requirement: &id013 !ruby/object:Gem::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: *id013
159
- - !ruby/object:Gem::Dependency
167
+ version_requirements: *70247105730300
168
+ - !ruby/object:Gem::Dependency
160
169
  name: fakefs
161
- requirement: &id014 !ruby/object:Gem::Requirement
170
+ requirement: &70247105729820 !ruby/object:Gem::Requirement
162
171
  none: false
163
- requirements:
164
- - - ">="
165
- - !ruby/object:Gem::Version
166
- version: "0"
172
+ requirements:
173
+ - - ! '>='
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
167
176
  type: :development
168
177
  prerelease: false
169
- version_requirements: *id014
170
- - !ruby/object:Gem::Dependency
178
+ version_requirements: *70247105729820
179
+ - !ruby/object:Gem::Dependency
171
180
  name: em-http-request
172
- requirement: &id015 !ruby/object:Gem::Requirement
181
+ requirement: &70247105729340 !ruby/object:Gem::Requirement
173
182
  none: false
174
- requirements:
175
- - - ">="
176
- - !ruby/object:Gem::Version
177
- version: "0"
183
+ requirements:
184
+ - - ! '>='
185
+ - !ruby/object:Gem::Version
186
+ version: '0'
178
187
  type: :development
179
188
  prerelease: false
180
- version_requirements: *id015
181
- description: A static file server for rich javascript apps that automatically compiles SASS, HAML, CoffeeScript and more
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
- hash: 1095209777694119011
229
- segments:
234
+ requirements:
235
+ - - ! '>='
236
+ - !ruby/object:Gem::Version
237
+ version: '0'
238
+ segments:
230
239
  - 0
231
- version: "0"
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: "0"
243
+ requirements:
244
+ - - ! '>='
245
+ - !ruby/object:Gem::Version
246
+ version: '0'
238
247
  requirements: []
239
-
240
248
  rubyforge_project:
241
- rubygems_version: 1.6.2
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