quick_serve 0.3.4 → 0.4.0
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/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: []
|