Changeset 34
- Timestamp:
- 01/23/2006 16:51:15 (3 years ago)
- Location:
- trunk
- Files:
-
- 3 modified
-
camping.gemspec (modified) (1 diff)
-
examples/serve (modified) (4 diffs)
-
lib/camping.rb (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/camping.gemspec
r33 r34 2 2 spec = Gem::Specification.new do |s| 3 3 s.name = 'camping' 4 s.version = "1. 1"4 s.version = "1.2" 5 5 s.platform = Gem::Platform::RUBY 6 6 s.summary = "miniature rails for stay-at-home moms" -
trunk/examples/serve
r28 r34 1 #!/ bin/env ruby1 #!/usr/bin/env ruby 2 2 # 3 3 # Serves all examples, mounted into Webrick. … … 5 5 require 'stringio' 6 6 require 'webrick/httpserver' 7 8 dir = Dir.pwd 7 9 apps = 8 10 Dir['*'].select do |d| 11 Dir.chdir(dir) 9 12 if File.exists? "#{d}/#{d}.rb" 10 load "#{d}/#{d}.rb" 13 begin 14 Dir.chdir("#{dir}/#{d}") 15 load "#{d}.rb" 16 true 17 rescue Exception => e 18 puts "Camping app `#{d}' will not load: #{e.class} #{e.message}" 19 end 11 20 end 12 21 end … … 31 40 header.delete('status') 32 41 end 33 if header.has_key?('set-cookie')34 header['set-cookie'].each{|k|35 self.cookies << WEBrick::Cookie.parse_set_cookie(k)36 }37 header.delete('set-cookie')38 end39 42 header.each{|key, val| self[key] = val.join(", ") } 40 43 rescue => ex … … 43 46 self.body = body 44 47 end 48 Dir.chdir("#{dir}/#{app}") 45 49 klass.run((req.body and StringIO.new(req.body)), resp) 50 Dir.chdir(dir) 51 nil 46 52 end 47 53 end -
trunk/lib/camping.rb
r32 r34 3 3 module Helpers;def R c,*args;p=/\(.+?\)/;args.inject(c.urls.detect{|x|x.scan(p 4 4 ).size==args.size}.dup){|str,a|str.sub(p,(a.method(a.class.primary_key)[]rescue 5 a).to_s)};end;def / p;p[/^\//]?@root+p:p end; def errors_for(o); ul.errors {6 o.errors.each_full { |er| li er } } unless o.errors.empty?; end; end; module Controllers; 7 module Base; include Helpers;attr_accessor :input,:cookies,:headers,:body, :status,:root;def8 method_missing(m,*args,&blk);str=m==:render ? markaview(*args,&blk):eval( 9 "markaby.#{m}(*args,&blk)");str=markaview(:layout){str}rescue nil;r(200,str. 10 to_s);end;def r(s,b,h={});@status=s;@headers.merge!(h);@body=b;end;def11 redirect(c,*args);c=R(c,*args)if c.respond_to?:urls;r(302,'','Location'=>self/c) ;end;def service(r,12 e ,m,a)@status,@headers,@root=200,{},e['SCRIPT_NAME'];cook=C.cookie_parse(e[13 'HTTP_COOKIE']||e['COOKIE']);qs=C.qs_parse(e['QUERY_STRING']);if "POST"==m;inp=r.read(e[5 a).to_s)};end;def / p;p[/^\//]?@root+p:p end;def errors_for(o);ul.errors{o. 6 errors.each_full{|er|li er}}unless o.errors.empty?;end;end;module Controllers 7 module Base; include Helpers;attr_accessor :input,:cookies,:headers,:body, 8 :status,:root;def method_missing(m,*args,&blk);str=m==:render ? markaview(*args, 9 &blk):eval("markaby.#{m}(*args,&blk)");str=markaview(:layout){str}rescue nil;r( 10 200,str.to_s);end;def r(s,b,h={});@status=s;@headers.merge!(h);@body=b;end;def 11 redirect(c,*args);c=R(c,*args)if c.respond_to?:urls;r(302,'','Location'=>self/c) 12 end;def service(r,e,m,a)@status,@headers,@root=200,{},e['SCRIPT_NAME'];cook=C.kp( 13 e['HTTP_COOKIE']);qs=C.qs_parse(e['QUERY_STRING']);if "POST"==m;inp=r.read(e[ 14 14 'CONTENT_LENGTH'].to_i);if %r|\Amultipart/form-data.*boundary=\"?([^\";,]+)|n. 15 15 match(e['CONTENT_TYPE']);b="--#$1";inp.split(/(?:\r?\n|\A)#{Regexp::quote( … … 39 39 A-F]{2})+)/n){[$1.delete('%')].pack('H*')} end;def qs_parse(qs,d ='&;');(qs||'' 40 40 ).split(/[#{d}] */n).inject({}){|hsh, p|k,v=p.split('=',2).map{|v|unescape(v)} 41 hsh[k]=v unless v.blank?;hsh} end; def cookie_parse(s);c=qs_parse(s,';,') end41 hsh[k]=v unless v.blank?;hsh} end; def kp(s);c=qs_parse(s,';,') end 42 42 def run(r=$stdin,w=$stdout);w<<begin;k,a=Controllers.D "/#{ENV['PATH_INFO']}". 43 43 gsub(%r!/+!,'/');m=ENV['REQUEST_METHOD']||"GET";k.class_eval{include C
