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 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: []