quick_serve 0.3.4 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +6 -1
- data/VERSION +1 -1
- data/lib/quick_serve/handlers/request.rb +51 -0
- data/lib/quick_serve/server.rb +9 -3
- data/responses.qs.sample +30 -0
- metadata +4 -2
data/Rakefile
CHANGED
@@ -43,7 +43,12 @@ end
|
|
43
43
|
|
44
44
|
task :test => :check_dependencies
|
45
45
|
|
46
|
-
|
46
|
+
desc 'Run the gem locally'
|
47
|
+
task :run do
|
48
|
+
system('ruby -I lib bin/quick_serve')
|
49
|
+
end
|
50
|
+
|
51
|
+
task :default => :run
|
47
52
|
|
48
53
|
require 'rake/rdoctask'
|
49
54
|
Rake::RDocTask.new do |rdoc|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module QuickServe
|
2
|
+
module Handlers
|
3
|
+
class Request < Directory
|
4
|
+
|
5
|
+
def initialize(dir)
|
6
|
+
@responses = {}
|
7
|
+
responses = File.read(File.join("#{Dir.pwd}", 'responses.qs')).gsub(/#.*/, '').split('==')[1..-1]
|
8
|
+
responses.each do |response|
|
9
|
+
parts = response.split("\n")
|
10
|
+
method, url, content_type = parts.shift.gsub(/(^\s)(.*)(\s$)/, '\\2').gsub(/(\s+)/, ' ').split(' ')
|
11
|
+
body = parts.join("\n")
|
12
|
+
@responses["#{method} #{url}"] = {
|
13
|
+
:body => body,
|
14
|
+
:content_type => (content_type || "text/html")
|
15
|
+
}
|
16
|
+
end
|
17
|
+
super
|
18
|
+
end
|
19
|
+
|
20
|
+
alias :original_process :process
|
21
|
+
|
22
|
+
def process(request, response)
|
23
|
+
method = request.params['REQUEST_METHOD'].downcase
|
24
|
+
if method == 'post'
|
25
|
+
params = {}
|
26
|
+
raw = request.body.read
|
27
|
+
raw.split('&').each { |param| parts = param.split('='); params[parts.first] = parts.last }
|
28
|
+
method = params['_method'] if params['_method'] and ['put', 'delete'].include?(params['_method'])
|
29
|
+
end
|
30
|
+
url = request.params['REQUEST_PATH']
|
31
|
+
qs_response = @responses["#{method} #{url}"]
|
32
|
+
# if not found, try a more generic approach
|
33
|
+
if !qs_response
|
34
|
+
url.gsub!(/(\d+)/, '*')
|
35
|
+
qs_response = @responses["#{method} #{url}"]
|
36
|
+
end
|
37
|
+
if qs_response
|
38
|
+
response.start do |head,out|
|
39
|
+
puts "quick_serve: served #{qs_response[:content_type]} response for of #{url}"
|
40
|
+
head["Content-Type"] = qs_response[:content_type]
|
41
|
+
out << qs_response[:body]
|
42
|
+
end
|
43
|
+
else
|
44
|
+
original_process(request, response)
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/lib/quick_serve/server.rb
CHANGED
@@ -2,7 +2,7 @@ module QuickServe
|
|
2
2
|
class Server
|
3
3
|
|
4
4
|
def initialize
|
5
|
-
@options = { :dir =>
|
5
|
+
@options = { :dir => Dir.pwd, :port => 5000, :host => '0.0.0.0', :deamon => false, :url => nil }
|
6
6
|
parse
|
7
7
|
end
|
8
8
|
|
@@ -10,7 +10,7 @@ module QuickServe
|
|
10
10
|
if @options[:url]
|
11
11
|
puts "quick_serve: running in snapshot mode using #{@options[:url]} as source"
|
12
12
|
else
|
13
|
-
puts "quick_serve: mongrel running on port #{@options[:port]} with
|
13
|
+
puts "quick_serve: mongrel running on port #{@options[:port]} with docroot in #{@options[:dir]}"
|
14
14
|
end
|
15
15
|
begin
|
16
16
|
if @options[:deamon]
|
@@ -38,7 +38,13 @@ module QuickServe
|
|
38
38
|
uri "/", :handler => QuickServe::Handlers::Snapshot.new(options[:url])
|
39
39
|
else
|
40
40
|
require 'quick_serve/handlers/directory'
|
41
|
-
|
41
|
+
if File.exists?(File.join(Dir.pwd, 'responses.qs'))
|
42
|
+
puts "quick_serve: responses.qs found, installing predefined responses"
|
43
|
+
require 'quick_serve/handlers/request'
|
44
|
+
uri "/", :handler => QuickServe::Handlers::Request.new(options[:dir])
|
45
|
+
else
|
46
|
+
uri "/", :handler => QuickServe::Handlers::Directory.new(options[:dir])
|
47
|
+
end
|
42
48
|
end
|
43
49
|
end
|
44
50
|
trap("INT") { stop }
|
data/responses.qs.sample
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# look ma, comments!!
|
2
|
+
== get /form
|
3
|
+
<form action="/foo" method="post">
|
4
|
+
<input type="hidden" name="_method" value="delete" />
|
5
|
+
<input type="text" name="bla" />
|
6
|
+
<input type="submit" value="Send" />
|
7
|
+
</form>
|
8
|
+
== post /foo
|
9
|
+
This only gets sent if you send a post request
|
10
|
+
# Rails based REST is supported
|
11
|
+
== put /foo
|
12
|
+
This only gets sent if you send a put request
|
13
|
+
== delete /foo
|
14
|
+
This only gets sent if you send a delete request
|
15
|
+
# specific urls are evaluated before generic ones
|
16
|
+
== get /users/3
|
17
|
+
User 3!!
|
18
|
+
== get /users/*
|
19
|
+
Some User!!
|
20
|
+
# you can specify content-type as the third parameter, default is text/html
|
21
|
+
== get /foo
|
22
|
+
normal html
|
23
|
+
# is the same as
|
24
|
+
== get /foo text/html
|
25
|
+
normal html
|
26
|
+
# if you use more spaces, it won't matter
|
27
|
+
== get /boo text/javascript
|
28
|
+
javascript
|
29
|
+
== get /somecss/foo text/css
|
30
|
+
css
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: quick_serve
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marcin Bunsch
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-11-02 00:00:00 +01:00
|
13
13
|
default_executable: qs
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -32,6 +32,7 @@ files:
|
|
32
32
|
- bin/quick_serve
|
33
33
|
- lib/quick_serve.rb
|
34
34
|
- lib/quick_serve/handlers/directory.rb
|
35
|
+
- lib/quick_serve/handlers/request.rb
|
35
36
|
- lib/quick_serve/handlers/snapshot.rb
|
36
37
|
- lib/quick_serve/rails.rb
|
37
38
|
- lib/quick_serve/rails/ext/mongrel.rb
|
@@ -40,6 +41,7 @@ files:
|
|
40
41
|
- lib/quick_serve/rails/snapshot.rb
|
41
42
|
- lib/quick_serve/server.rb
|
42
43
|
- quick_serve.gemspec
|
44
|
+
- responses.qs.sample
|
43
45
|
has_rdoc: true
|
44
46
|
homepage: http://github.com/marcinbunsch/quick_serve
|
45
47
|
licenses: []
|