Changeset 11
- Timestamp:
- 10/15/06 15:10:20 (2 years ago)
- Files:
-
- (root) (modified) (1 prop)
- LICENSE (moved) (moved from LICENSE.txt)
- README (moved) (moved from README.txt)
- Rakefile (modified) (3 diffs)
- app/views/upload/upload.rhtml (modified) (1 diff)
- bin (added)
- bin/merb (added)
- lib/merb (added)
- lib/merb.rb (modified) (1 diff)
- lib/merb/merb_router.rb (moved) (moved from lib/merb_router.rb) (4 diffs)
- lib/merb_handler.rb (added)
- merb_config.rb (modified) (1 diff)
- server.rb (modified) (1 diff)
- test/unit/route_matcher_test.rb (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
- Property svn:ignore set to
pkg
- Property svn:ignore set to
Rakefile
r10 r11 1 1 require 'rake' 2 require 'rake/clean' 3 require 'rake/gempackagetask' 4 require 'rake/rdoctask' 5 require 'rake/testtask' 6 require 'fileutils' 7 include FileUtils 2 8 3 desc "Add new files to subversion" 4 task :svn_add do 5 system "svn status | grep '^\?' | sed -e 's/? *//' | sed -e 's/ /\ /g' | xargs svn add" 9 NAME = "merb" 10 VERS = "0.0.1" 11 CLEAN.include ['**/.*.sw?', '*.gem', '.config'] 12 RDOC_OPTS = ['--quiet', '--title', "Merb Documentation", 13 "--opname", "index.html", 14 "--line-numbers", 15 "--main", "README", 16 "--inline-source"] 17 18 desc "Packages up Merb." 19 task :default => [:package] 20 task :package => [:clean] 21 22 task :doc => [:rdoc] 23 24 Rake::RDocTask.new do |rdoc| 25 rdoc.rdoc_dir = 'doc/rdoc' 26 rdoc.options += RDOC_OPTS 27 rdoc.main = "README" 28 rdoc.title = "Merb Documentation" 29 rdoc.rdoc_files.add ['README', 'LICENSE', 'lib/*.rb', 'server.rb'] 6 30 end 7 31 32 spec = Gem::Specification.new do |s| 33 s.name = NAME 34 s.version = VERS 35 s.platform = Gem::Platform::RUBY 36 s.has_rdoc = true 37 s.extra_rdoc_files = ["README", "LICENSE"] 38 s.rdoc_options += RDOC_OPTS + 39 ['--exclude', '^(app|uploads)'] 40 s.summary = "Merb == Mongrel + Erb. Pocket rocket web framework." 41 s.description = s.summary 42 s.author = "Ezra Zygmuntowicz" 43 s.email = 'ez@engineyard.com' 44 s.homepage = 'http://merb.devjavu.com' 45 s.executables = ['merb'] 46 47 s.add_dependency('mongrel') 48 s.required_ruby_version = '>= 1.8.4' 49 50 s.files = %w(LICENSE README Rakefile server.rb) + Dir.glob("{app,bin,doc,test,lib}/**/*") 51 52 s.require_path = "lib" 53 s.bindir = "bin" 54 end 55 56 Rake::GemPackageTask.new(spec) do |p| 57 p.need_tar = true 58 p.gem_spec = spec 59 end 60 61 task :install do 62 sh %{rake package} 63 sh %{sudo gem install pkg/#{NAME}-#{VERS}} 64 end 65 66 task :uninstall => [:clean] do 67 sh %{sudo gem uninstall #{NAME}} 68 end 69 70 task :doc_rforge do 71 sh %{rake doc} 72 sh %{scp -r doc/rdoc/* ezmobius@rubyforge.org:/var/www/gforge-projects/merb} 73 end 8 74 9 75 desc 'Run unit tests' … … 21 87 end 22 88 23 desc 'Run specification tests'24 task :spec do25 sh %{spec test/spec/*_spec.rb}26 end27 28 desc 'Run rcov'29 task :rcov do30 sh %{rcov test/unit/*_test.rb test/functional/*_test.rb}31 end32 33 89 desc 'Run all tests' 34 90 Rake::TestTask.new('test') do |t| … … 43 99 sh %{rake spec} 44 100 end 101 102 ############################################################################## 103 # Statistics 104 ############################################################################## 105 106 STATS_DIRECTORIES = [ 107 %w(Code lib/), 108 %w(Unit\ tests test/unit), 109 %w(Functional\ tests test/functional) 110 ].collect { |name, dir| [ name, "./#{dir}" ] }.select { |name, dir| File.directory?(dir) } 111 112 desc "Report code statistics (KLOCs, etc) from the application" 113 task :stats do 114 require 'extra/stats' 115 verbose = true 116 CodeStatistics.new(*STATS_DIRECTORIES).to_s 117 end 118 119 ############################################################################## 120 # SVN 121 ############################################################################## 122 123 desc "Add new files to subversion" 124 task :svn_add do 125 system "svn status | grep '^\?' | sed -e 's/? *//' | sed -e 's/ /\ /g' | xargs svn add" 126 end app/views/upload/upload.rhtml
r7 r11 1 <h2>File uploaded successfully</h2> 2 3 <p>params for @params[:file].inspect</p> 1 4 <%=@params[:file].inspect %> lib/merb.rb
r8 r11 1 1 require 'erb' 2 3 module Merb 4 VERSION='0.0.1' 5 end 6 2 7 3 8 module Merb lib/merb/merb_router.rb
r10 r11 10 10 @@compiled_statement = String.new 11 11 yield self 12 compile_router 12 13 end 13 14 … … 30 31 def self.compile_router 31 32 indx = 0 32 lam= @@routes.inject('lambda{|path| ') { |m,r|33 router_lambda = @@routes.inject('lambda{|path| ') { |m,r| 33 34 m << compile(r,indx) 34 35 indx += 1 35 36 m 36 } << "\n return default_route\n}"37 @@compiled_statement = lam38 define_method(:route_request, &eval( lam))37 } << "\n return nil\n}" 38 @@compiled_statement = router_lambda 39 define_method(:route_request, &eval(router_lambda)) 39 40 end 40 41 41 42 def self.compile(route,indx) 43 raise ArgumentError unless String === route[0] 42 44 code, count = '', 0 43 raise ArgumentError unless String === route[0]44 45 45 while route[0] =~ SECTION_REGEX 46 46 route[0] = route[0].dup 47 47 name = $1 48 48 count += 1 49 route[0].sub! SECTION_REGEX, '(.+)'49 route[0].sub!(SECTION_REGEX, '(.+)') 50 50 code << " @sections[:#{name}] = $#{count}\n" 51 51 end … … 55 55 statement 56 56 end 57 58 def self.default_route(&block) 59 define_method(:default_route, &block) 60 end 61 57 62 58 end 63 59 … … 73 69 end 74 70 75 Merb::RouteMatcher.compile_router76 77 71 routes = Merb::RouteMatcher.new 78 72 puts routes.compiled_statement merb_config.rb
r8 r11 13 13 end 14 14 15 Merb::RouteMatcher.compile_routerserver.rb
r8 r11 4 4 require 'active_support' 5 5 require 'fileutils' 6 require 'pp'7 6 $LOAD_PATH.unshift( File.join( File.dirname( __FILE__ ) , 'lib' ) ) 8 7 $LOAD_PATH.unshift( File.join( File.dirname( __FILE__ ) , 'app/controllers' ) ) 8 require 'merb' 9 9 require 'merb_utils' 10 require 'merb '10 require 'merb_handler' 11 11 require 'merb_router' 12 12 require 'merb_config' 13 13 14 15 16 class MerbHandler < Mongrel::HttpHandler17 18 def process(request, response)19 if response.socket.closed?20 return21 end22 controller, method, args = handle(request)23 begin24 output = if (controller && controller.kind_of?(Merb::Controller))25 if method26 ( args ? controller.send( method, args ) : controller.send(method) )27 else28 controller.to_s29 end30 else31 "<html><body>Error: no merb controller found for this url.</body></html>"32 end33 rescue Exception => e34 response_code = 50035 output = "<html>Error! #{ e.message } - (#{ e.class })" <<36 "\n" << "#{(e.backtrace or []).join('\n')}</html>"37 end38 response.start(response_code||200) do |head,out|39 head["Content-Type"] = "text/html"40 out << output41 end42 end43 44 def handle(request)45 path = request.params["PATH_INFO"]46 #return [nil, nil, nil ] if path =~ /^\/$/47 path = path[0..-2] if (path[-1] == ?/)48 path.sub!(/\/+/, '/')49 50 routes = Merb::RouteMatcher.new51 route = routes.route_request(path)52 if route53 [ instantiate_controller(route.delete(:class), request.body, request.params),54 route.delete(:method), route ]55 else56 ["<html><body>Error: no route matches!</body></html>", nil, nil]57 end58 end59 60 def instantiate_controller(controller_name, req, env)61 if !File.exist?(MERB_ROOT+"/app/controllers/#{controller_name}.rb")62 return Object.const_get(:Noroutefound).new(req, env)63 end64 controller_name.import65 begin66 return Object.const_get( controller_name.controller_class_name ).new(req, env)67 rescue Exception68 warn "Error getting instance of '#{controller_name.controller_class_name}': #{$!}"69 raise $!70 end71 end72 73 end74 14 75 15 h = Mongrel::HttpServer.new("0.0.0.0", PORT, 40) test/unit/route_matcher_test.rb
r10 r11 12 12 r.add '.*', {:class => 'NoRouteFound', :method => 'noroute'} 13 13 end 14 Merb::RouteMatcher.compile_router15 14 end 16 15
