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 CHANGED
@@ -43,7 +43,12 @@ end
43
43
 
44
44
  task :test => :check_dependencies
45
45
 
46
- task :default => :test
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.3.4
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
@@ -2,7 +2,7 @@ module QuickServe
2
2
  class Server
3
3
 
4
4
  def initialize
5
- @options = { :dir => '.', :port => 5000, :host => '0.0.0.0', :deamon => false, :url => nil }
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 current directory as docroot"
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
- uri "/", :handler => QuickServe::Handlers::Directory.new(options[:dir])
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 }
@@ -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.3.4
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-10-25 00:00:00 +02:00
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: []