Changeset 11

Show
Ignore:
Timestamp:
10/15/06 15:10:20 (2 years ago)
Author:
e.@brainspl.at
Message:

moving things around bear with me

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
    • Property svn:ignore set to
      pkg
  • Rakefile

    r10 r11  
    11require 'rake' 
     2require 'rake/clean' 
     3require 'rake/gempackagetask' 
     4require 'rake/rdoctask' 
     5require 'rake/testtask' 
     6require 'fileutils' 
     7include FileUtils 
    28 
    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" 
     9NAME = "merb" 
     10VERS = "0.0.1" 
     11CLEAN.include ['**/.*.sw?', '*.gem', '.config'] 
     12RDOC_OPTS = ['--quiet', '--title', "Merb Documentation", 
     13  "--opname", "index.html", 
     14  "--line-numbers",  
     15  "--main", "README", 
     16  "--inline-source"] 
     17 
     18desc "Packages up Merb." 
     19task :default => [:package] 
     20task :package => [:clean] 
     21 
     22task :doc => [:rdoc] 
     23 
     24Rake::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'] 
    630end 
    731 
     32spec = 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" 
     54end 
     55 
     56Rake::GemPackageTask.new(spec) do |p| 
     57  p.need_tar = true 
     58  p.gem_spec = spec 
     59end 
     60 
     61task :install do 
     62  sh %{rake package} 
     63  sh %{sudo gem install pkg/#{NAME}-#{VERS}} 
     64end 
     65 
     66task :uninstall => [:clean] do 
     67  sh %{sudo gem uninstall #{NAME}} 
     68end 
     69 
     70task :doc_rforge do 
     71  sh %{rake doc} 
     72  sh %{scp -r doc/rdoc/* ezmobius@rubyforge.org:/var/www/gforge-projects/merb} 
     73end 
    874 
    975desc 'Run unit tests' 
     
    2187end 
    2288 
    23 desc 'Run specification tests' 
    24 task :spec do 
    25   sh %{spec test/spec/*_spec.rb} 
    26 end 
    27  
    28 desc 'Run rcov' 
    29 task :rcov do 
    30   sh %{rcov test/unit/*_test.rb test/functional/*_test.rb} 
    31 end 
    32  
    3389desc 'Run all tests' 
    3490Rake::TestTask.new('test') do |t| 
     
    4399  sh %{rake spec} 
    44100end 
     101 
     102############################################################################## 
     103# Statistics 
     104############################################################################## 
     105 
     106STATS_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 
     112desc "Report code statistics (KLOCs, etc) from the application" 
     113task :stats do 
     114  require 'extra/stats' 
     115  verbose = true 
     116  CodeStatistics.new(*STATS_DIRECTORIES).to_s 
     117end 
     118 
     119############################################################################## 
     120# SVN 
     121############################################################################## 
     122 
     123desc "Add new files to subversion" 
     124task :svn_add do 
     125   system "svn status | grep '^\?' | sed -e 's/? *//' | sed -e 's/ /\ /g' | xargs svn add" 
     126end 
  • app/views/upload/upload.rhtml

    r7 r11  
     1<h2>File uploaded successfully</h2> 
     2 
     3<p>params for @params[:file].inspect</p> 
    14<%=@params[:file].inspect %> 
  • lib/merb.rb

    r8 r11  
    11require 'erb' 
     2 
     3module Merb 
     4  VERSION='0.0.1' 
     5end   
     6 
    27 
    38module Merb 
  • lib/merb/merb_router.rb

    r10 r11  
    1010      @@compiled_statement = String.new 
    1111      yield self 
     12      compile_router 
    1213    end   
    1314     
     
    3031    def self.compile_router 
    3132      indx = 0 
    32       lam = @@routes.inject('lambda{|path| ') { |m,r| 
     33      router_lambda = @@routes.inject('lambda{|path| ') { |m,r| 
    3334        m << compile(r,indx) 
    3435        indx += 1 
    3536        m 
    36       } << "\n  return default_route\n}" 
    37       @@compiled_statement = lam 
    38       define_method(:route_request, &eval(lam)) 
     37      } << "\n  return nil\n}" 
     38      @@compiled_statement = router_lambda 
     39      define_method(:route_request, &eval(router_lambda)) 
    3940    end   
    4041     
    4142    def self.compile(route,indx) 
     43      raise ArgumentError unless String === route[0] 
    4244      code, count = '', 0 
    43       raise ArgumentError unless String === route[0] 
    44        
    4545      while route[0] =~ SECTION_REGEX 
    4646        route[0] = route[0].dup 
    4747        name = $1 
    4848        count += 1 
    49         route[0].sub! SECTION_REGEX, '(.+)' 
     49        route[0].sub!(SECTION_REGEX, '(.+)') 
    5050        code << "    @sections[:#{name}] = $#{count}\n" 
    5151      end   
     
    5555      statement 
    5656    end 
    57       
    58     def self.default_route(&block) 
    59       define_method(:default_route, &block) 
    60     end  
    61        
     57           
    6258  end 
    6359   
     
    7369  end 
    7470   
    75   Merb::RouteMatcher.compile_router 
    76    
    7771  routes = Merb::RouteMatcher.new 
    7872  puts routes.compiled_statement 
  • merb_config.rb

    r8 r11  
    1313end 
    1414 
    15 Merb::RouteMatcher.compile_router 
  • server.rb

    r8 r11  
    44require 'active_support' 
    55require 'fileutils' 
    6 require 'pp' 
    76$LOAD_PATH.unshift( File.join( File.dirname( __FILE__ ) , 'lib' ) ) 
    87$LOAD_PATH.unshift( File.join( File.dirname( __FILE__ ) , 'app/controllers' ) ) 
     8require 'merb' 
    99require 'merb_utils' 
    10 require 'merb
     10require 'merb_handler
    1111require 'merb_router' 
    1212require 'merb_config' 
    1313 
    14  
    15  
    16 class MerbHandler < Mongrel::HttpHandler 
    17  
    18   def process(request, response) 
    19     if response.socket.closed? 
    20       return 
    21     end 
    22     controller, method, args = handle(request) 
    23     begin 
    24       output = if (controller && controller.kind_of?(Merb::Controller)) 
    25         if method 
    26           ( args ? controller.send( method, args ) : controller.send(method) ) 
    27         else 
    28           controller.to_s 
    29         end   
    30       else 
    31         "<html><body>Error: no merb controller found for this url.</body></html>" 
    32       end 
    33     rescue Exception => e 
    34       response_code = 500 
    35       output = "<html>Error! #{ e.message } - (#{ e.class })" <<  
    36         "\n" << "#{(e.backtrace or []).join('\n')}</html>" 
    37     end   
    38     response.start(response_code||200) do |head,out| 
    39       head["Content-Type"] = "text/html" 
    40       out << output 
    41     end  
    42   end 
    43    
    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.new 
    51     route = routes.route_request(path) 
    52     if route 
    53       [ instantiate_controller(route.delete(:class), request.body, request.params),  
    54                                route.delete(:method), route  ] 
    55     else   
    56       ["<html><body>Error: no route matches!</body></html>", nil, nil] 
    57     end 
    58   end 
    59    
    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     end   
    64     controller_name.import 
    65     begin 
    66       return Object.const_get( controller_name.controller_class_name ).new(req, env) 
    67     rescue Exception 
    68       warn "Error getting instance of '#{controller_name.controller_class_name}': #{$!}" 
    69       raise $! 
    70     end 
    71   end 
    72      
    73 end 
    7414 
    7515h = Mongrel::HttpServer.new("0.0.0.0", PORT, 40) 
  • test/unit/route_matcher_test.rb

    r10 r11  
    1212      r.add '.*', {:class => 'NoRouteFound', :method => 'noroute'} 
    1313    end 
    14     Merb::RouteMatcher.compile_router 
    1514  end   
    1615