merb-core 0.9.8 → 0.9.9
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/CONTRIBUTORS +33 -0
 - data/README +7 -3
 - data/Rakefile +3 -3
 - data/lib/merb-core.rb +165 -94
 - data/lib/merb-core/bootloader.rb +469 -100
 - data/lib/merb-core/config.rb +79 -3
 - data/lib/merb-core/constants.rb +24 -2
 - data/lib/merb-core/controller/abstract_controller.rb +172 -67
 - data/lib/merb-core/controller/exceptions.rb +50 -6
 - data/lib/merb-core/controller/merb_controller.rb +215 -108
 - data/lib/merb-core/controller/mime.rb +36 -12
 - data/lib/merb-core/controller/mixins/authentication.rb +52 -7
 - data/lib/merb-core/controller/mixins/conditional_get.rb +14 -0
 - data/lib/merb-core/controller/mixins/controller.rb +90 -58
 - data/lib/merb-core/controller/mixins/render.rb +34 -10
 - data/lib/merb-core/controller/mixins/responder.rb +40 -16
 - data/lib/merb-core/controller/template.rb +37 -16
 - data/lib/merb-core/core_ext/hash.rb +9 -0
 - data/lib/merb-core/core_ext/kernel.rb +92 -41
 - data/lib/merb-core/dispatch/dispatcher.rb +29 -45
 - data/lib/merb-core/dispatch/request.rb +186 -82
 - data/lib/merb-core/dispatch/router.rb +141 -53
 - data/lib/merb-core/dispatch/router/behavior.rb +296 -139
 - data/lib/merb-core/dispatch/router/resources.rb +51 -19
 - data/lib/merb-core/dispatch/router/route.rb +76 -23
 - data/lib/merb-core/dispatch/session.rb +80 -36
 - data/lib/merb-core/dispatch/session/container.rb +31 -15
 - data/lib/merb-core/dispatch/session/cookie.rb +51 -22
 - data/lib/merb-core/dispatch/session/memcached.rb +10 -6
 - data/lib/merb-core/dispatch/session/memory.rb +17 -5
 - data/lib/merb-core/dispatch/session/store_container.rb +21 -9
 - data/lib/merb-core/dispatch/worker.rb +16 -2
 - data/lib/merb-core/gem_ext/erubis.rb +4 -0
 - data/lib/merb-core/plugins.rb +13 -0
 - data/lib/merb-core/rack.rb +1 -0
 - data/lib/merb-core/rack/adapter.rb +1 -0
 - data/lib/merb-core/rack/adapter/abstract.rb +95 -17
 - data/lib/merb-core/rack/adapter/irb.rb +50 -5
 - data/lib/merb-core/rack/application.rb +27 -5
 - data/lib/merb-core/rack/handler/mongrel.rb +6 -6
 - data/lib/merb-core/rack/helpers.rb +33 -0
 - data/lib/merb-core/rack/middleware/conditional_get.rb +1 -1
 - data/lib/merb-core/rack/middleware/path_prefix.rb +3 -3
 - data/lib/merb-core/rack/middleware/static.rb +11 -7
 - data/lib/merb-core/server.rb +134 -69
 - data/lib/merb-core/tasks/gem_management.rb +153 -80
 - data/lib/merb-core/tasks/merb_rake_helper.rb +12 -4
 - data/lib/merb-core/tasks/stats.rake +1 -1
 - data/lib/merb-core/test/helpers/mock_request_helper.rb +29 -22
 - data/lib/merb-core/test/helpers/request_helper.rb +1 -1
 - data/lib/merb-core/test/helpers/route_helper.rb +50 -4
 - data/lib/merb-core/test/matchers/request_matchers.rb +2 -36
 - data/lib/merb-core/test/matchers/view_matchers.rb +32 -22
 - data/lib/merb-core/test/run_specs.rb +6 -5
 - data/lib/merb-core/test/test_ext/rspec.rb +6 -19
 - data/lib/merb-core/version.rb +1 -1
 - metadata +5 -4
 
| 
         @@ -1,7 +1,4 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require 'rubygems'
         
     | 
| 
       2 
     | 
    
         
            -
            require 'rubygems/dependency_installer'
         
     | 
| 
       3 
     | 
    
         
            -
            require 'rubygems/uninstaller'
         
     | 
| 
       4 
     | 
    
         
            -
            require 'rubygems/dependency'
         
     | 
| 
       5 
2 
     | 
    
         | 
| 
       6 
3 
     | 
    
         
             
            module ColorfulMessages
         
     | 
| 
       7 
4 
     | 
    
         | 
| 
         @@ -22,12 +19,28 @@ module ColorfulMessages 
     | 
|
| 
       22 
19 
     | 
    
         | 
| 
       23 
20 
     | 
    
         
             
              alias_method :message, :success
         
     | 
| 
       24 
21 
     | 
    
         | 
| 
      
 22 
     | 
    
         
            +
              # magenta
         
     | 
| 
      
 23 
     | 
    
         
            +
              def note(*messages)
         
     | 
| 
      
 24 
     | 
    
         
            +
                puts messages.map { |msg| "\033[1;35m#{msg}\033[0m" }
         
     | 
| 
      
 25 
     | 
    
         
            +
              end
         
     | 
| 
      
 26 
     | 
    
         
            +
              
         
     | 
| 
      
 27 
     | 
    
         
            +
              # blue
         
     | 
| 
      
 28 
     | 
    
         
            +
              def info(*messages)
         
     | 
| 
      
 29 
     | 
    
         
            +
                puts messages.map { |msg| "\033[1;34m#{msg}\033[0m" }
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
              
         
     | 
| 
       25 
32 
     | 
    
         
             
            end
         
     | 
| 
       26 
33 
     | 
    
         | 
| 
      
 34 
     | 
    
         
            +
            ##############################################################################
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
            require 'rubygems/dependency_installer'
         
     | 
| 
      
 37 
     | 
    
         
            +
            require 'rubygems/uninstaller'
         
     | 
| 
      
 38 
     | 
    
         
            +
            require 'rubygems/dependency'
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
       27 
40 
     | 
    
         
             
            module GemManagement
         
     | 
| 
       28 
41 
     | 
    
         | 
| 
       29 
42 
     | 
    
         
             
              include ColorfulMessages
         
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
      
 43 
     | 
    
         
            +
                
         
     | 
| 
       31 
44 
     | 
    
         
             
              # Install a gem - looks remotely and local gem cache;
         
     | 
| 
       32 
45 
     | 
    
         
             
              # won't process rdoc or ri options.
         
     | 
| 
       33 
46 
     | 
    
         
             
              def install_gem(gem, options = {})
         
     | 
| 
         @@ -39,13 +52,13 @@ module GemManagement 
     | 
|
| 
       39 
52 
     | 
    
         
             
                  version = options.delete(:version)
         
     | 
| 
       40 
53 
     | 
    
         
             
                  Gem.configuration.update_sources = false
         
     | 
| 
       41 
54 
     | 
    
         | 
| 
      
 55 
     | 
    
         
            +
                  # Limit source index to install dir
         
     | 
| 
       42 
56 
     | 
    
         
             
                  update_source_index(options[:install_dir]) if options[:install_dir]
         
     | 
| 
       43 
57 
     | 
    
         | 
| 
       44 
58 
     | 
    
         
             
                  installer = Gem::DependencyInstaller.new(options.merge(:user_install => false))
         
     | 
| 
       45 
59 
     | 
    
         | 
| 
       46 
     | 
    
         
            -
                  #  
     | 
| 
       47 
     | 
    
         
            -
                   
     | 
| 
       48 
     | 
    
         
            -
                  unless refresh.empty?
         
     | 
| 
      
 60 
     | 
    
         
            +
                  # Force-refresh certain gems by excluding them from the current index
         
     | 
| 
      
 61 
     | 
    
         
            +
                  if !options[:ignore_dependencies] && refresh.respond_to?(:include?) && !refresh.empty?
         
     | 
| 
       49 
62 
     | 
    
         
             
                    source_index = installer.instance_variable_get(:@source_index)
         
     | 
| 
       50 
63 
     | 
    
         
             
                    source_index.gems.each do |name, spec| 
         
     | 
| 
       51 
64 
     | 
    
         
             
                      source_index.gems.delete(name) if refresh.include?(spec.name)
         
     | 
| 
         @@ -68,7 +81,7 @@ module GemManagement 
     | 
|
| 
       68 
81 
     | 
    
         
             
                    exception = e
         
     | 
| 
       69 
82 
     | 
    
         
             
                  end
         
     | 
| 
       70 
83 
     | 
    
         
             
                  if installer.installed_gems.empty? && exception
         
     | 
| 
       71 
     | 
    
         
            -
                    error "Failed to install gem '#{gem} (#{version})' (#{exception.message})"
         
     | 
| 
      
 84 
     | 
    
         
            +
                    error "Failed to install gem '#{gem} (#{version || 'any version'})' (#{exception.message})"
         
     | 
| 
       72 
85 
     | 
    
         
             
                  end
         
     | 
| 
       73 
86 
     | 
    
         
             
                  installer.installed_gems.each do |spec|
         
     | 
| 
       74 
87 
     | 
    
         
             
                    success "Successfully installed #{spec.full_name}"
         
     | 
| 
         @@ -103,81 +116,73 @@ module GemManagement 
     | 
|
| 
       103 
116 
     | 
    
         
             
              end
         
     | 
| 
       104 
117 
     | 
    
         | 
| 
       105 
118 
     | 
    
         
             
              # Install a gem from source - builds and packages it first then installs.
         
     | 
| 
       106 
     | 
    
         
            -
               
     | 
| 
       107 
     | 
    
         
            -
             
     | 
| 
       108 
     | 
    
         
            -
             
     | 
| 
       109 
     | 
    
         
            -
             
     | 
| 
       110 
     | 
    
         
            -
             
     | 
| 
       111 
     | 
    
         
            -
             
     | 
| 
       112 
     | 
    
         
            -
                 
     | 
| 
      
 119 
     | 
    
         
            +
              # 
         
     | 
| 
      
 120 
     | 
    
         
            +
              # Examples:
         
     | 
| 
      
 121 
     | 
    
         
            +
              # install_gem_from_source(source_dir, :install_dir => ...)
         
     | 
| 
      
 122 
     | 
    
         
            +
              # install_gem_from_source(source_dir, gem_name)
         
     | 
| 
      
 123 
     | 
    
         
            +
              # install_gem_from_source(source_dir, :skip => [...])
         
     | 
| 
      
 124 
     | 
    
         
            +
              def install_gem_from_source(source_dir, *args)
         
     | 
| 
      
 125 
     | 
    
         
            +
                installed_gems = []
         
     | 
| 
      
 126 
     | 
    
         
            +
                Dir.chdir(source_dir) do
         
     | 
| 
      
 127 
     | 
    
         
            +
                  opts = args.last.is_a?(Hash) ? args.pop : {}
         
     | 
| 
      
 128 
     | 
    
         
            +
                  gem_name     = args[0] || File.basename(source_dir)
         
     | 
| 
      
 129 
     | 
    
         
            +
                  gem_pkg_dir  = File.join(source_dir, 'pkg')
         
     | 
| 
      
 130 
     | 
    
         
            +
                  gem_pkg_glob = File.join(gem_pkg_dir, "#{gem_name}-*.gem")
         
     | 
| 
      
 131 
     | 
    
         
            +
                  skip_gems    = opts.delete(:skip) || []
         
     | 
| 
       113 
132 
     | 
    
         | 
| 
       114 
     | 
    
         
            -
             
     | 
| 
       115 
     | 
    
         
            -
             
     | 
| 
      
 133 
     | 
    
         
            +
                  # Cleanup what's already there
         
     | 
| 
      
 134 
     | 
    
         
            +
                  clobber(source_dir)
         
     | 
| 
      
 135 
     | 
    
         
            +
                  FileUtils.mkdir_p(gem_pkg_dir) unless File.directory?(gem_pkg_dir)
         
     | 
| 
       116 
136 
     | 
    
         | 
| 
       117 
     | 
    
         
            -
             
     | 
| 
       118 
     | 
    
         
            -
             
     | 
| 
       119 
     | 
    
         
            -
             
     | 
| 
       120 
     | 
    
         
            -
             
     | 
| 
       121 
     | 
    
         
            -
             
     | 
| 
       122 
     | 
    
         
            -
             
     | 
| 
       123 
     | 
    
         
            -
             
     | 
| 
       124 
     | 
    
         
            -
                  FileUtils.rm_rf(gem_pkg_dir) if File.directory?(gem_pkg_dir)
         
     | 
| 
       125 
     | 
    
         
            -
                  # Create the package.
         
     | 
| 
       126 
     | 
    
         
            -
                  FileUtils.cd(gem_src_dir) { system("#{thor} :package") }
         
     | 
| 
       127 
     | 
    
         
            -
                  # Install the package using rubygems.
         
     | 
| 
       128 
     | 
    
         
            -
                  if package = Dir[File.join(gem_pkg_dir, "#{gem_name}-*.gem")].last
         
     | 
| 
       129 
     | 
    
         
            -
                    FileUtils.cd(File.dirname(package)) do
         
     | 
| 
       130 
     | 
    
         
            -
                      install_gem(File.basename(package), options.dup)
         
     | 
| 
       131 
     | 
    
         
            -
                      return true
         
     | 
| 
       132 
     | 
    
         
            -
                    end
         
     | 
| 
      
 137 
     | 
    
         
            +
                  # Recursively process all gem packages within the source dir
         
     | 
| 
      
 138 
     | 
    
         
            +
                  skip_gems << gem_name
         
     | 
| 
      
 139 
     | 
    
         
            +
                  packages = package_all(source_dir, skip_gems)
         
     | 
| 
      
 140 
     | 
    
         
            +
                  
         
     | 
| 
      
 141 
     | 
    
         
            +
                  if packages.length == 1
         
     | 
| 
      
 142 
     | 
    
         
            +
                    # The are no subpackages for the main package
         
     | 
| 
      
 143 
     | 
    
         
            +
                    refresh = [gem_name]
         
     | 
| 
       133 
144 
     | 
    
         
             
                  else
         
     | 
| 
       134 
     | 
    
         
            -
                     
     | 
| 
       135 
     | 
    
         
            -
             
     | 
| 
       136 
     | 
    
         
            -
             
     | 
| 
       137 
     | 
    
         
            -
                else
         
     | 
| 
       138 
     | 
    
         
            -
                  # Clean and regenerate any subgems for meta gems.
         
     | 
| 
       139 
     | 
    
         
            -
                  Dir[File.join(gem_src_dir, '*', 'Rakefile')].each do |rakefile|
         
     | 
| 
       140 
     | 
    
         
            -
                    FileUtils.cd(File.dirname(rakefile)) do 
         
     | 
| 
       141 
     | 
    
         
            -
                      system("#{rake} clobber_package; #{rake} package")
         
     | 
| 
       142 
     | 
    
         
            -
                    end
         
     | 
| 
       143 
     | 
    
         
            -
                  end
         
     | 
| 
       144 
     | 
    
         
            -
             
     | 
| 
       145 
     | 
    
         
            -
                  # Handle the main gem install.
         
     | 
| 
       146 
     | 
    
         
            -
                  if File.exists?(File.join(gem_src_dir, 'Rakefile'))
         
     | 
| 
       147 
     | 
    
         
            -
                    subgems = []
         
     | 
| 
       148 
     | 
    
         
            -
                    # Remove any existing packages.
         
     | 
| 
       149 
     | 
    
         
            -
                    FileUtils.cd(gem_src_dir) { system("#{rake} clobber_package") }
         
     | 
| 
       150 
     | 
    
         
            -
                    # Create the main gem pkg dir if it doesn't exist.
         
     | 
| 
       151 
     | 
    
         
            -
                    FileUtils.mkdir_p(gem_pkg_dir) unless File.directory?(gem_pkg_dir)
         
     | 
| 
       152 
     | 
    
         
            -
                    # Copy any subgems to the main gem pkg dir.
         
     | 
| 
       153 
     | 
    
         
            -
                    Dir[File.join(gem_src_dir, '*', 'pkg', '*.gem')].each do |subgem_pkg|
         
     | 
| 
       154 
     | 
    
         
            -
                      if name = File.basename(subgem_pkg, '.gem')[/^(.*?)-([\d\.]+)$/, 1]
         
     | 
| 
       155 
     | 
    
         
            -
                        subgems << name
         
     | 
| 
       156 
     | 
    
         
            -
                      end
         
     | 
| 
       157 
     | 
    
         
            -
                      dest = File.join(gem_pkg_dir, File.basename(subgem_pkg))
         
     | 
| 
       158 
     | 
    
         
            -
                      FileUtils.copy_entry(subgem_pkg, dest, true, false, true)          
         
     | 
| 
      
 145 
     | 
    
         
            +
                    # Gather all packages into the top-level pkg directory
         
     | 
| 
      
 146 
     | 
    
         
            +
                    packages.each do |pkg|
         
     | 
| 
      
 147 
     | 
    
         
            +
                      FileUtils.copy_entry(pkg, File.join(gem_pkg_dir, File.basename(pkg)))
         
     | 
| 
       159 
148 
     | 
    
         
             
                    end
         
     | 
| 
       160 
     | 
    
         
            -
             
     | 
| 
       161 
     | 
    
         
            -
                    # Finally  
     | 
| 
       162 
     | 
    
         
            -
                     
     | 
| 
       163 
     | 
    
         
            -
                     
     | 
| 
       164 
     | 
    
         
            -
             
     | 
| 
       165 
     | 
    
         
            -
             
     | 
| 
       166 
     | 
    
         
            -
             
     | 
| 
       167 
     | 
    
         
            -
             
     | 
| 
       168 
     | 
    
         
            -
             
     | 
| 
       169 
     | 
    
         
            -
             
     | 
| 
       170 
     | 
    
         
            -
             
     | 
| 
       171 
     | 
    
         
            -
             
     | 
| 
       172 
     | 
    
         
            -
                         
     | 
| 
      
 149 
     | 
    
         
            +
                    
         
     | 
| 
      
 150 
     | 
    
         
            +
                    # Finally package the main gem - without clobbering the already copied pkgs
         
     | 
| 
      
 151 
     | 
    
         
            +
                    package(source_dir, false)
         
     | 
| 
      
 152 
     | 
    
         
            +
                    
         
     | 
| 
      
 153 
     | 
    
         
            +
                    # Gather subgems to refresh during installation of the main gem
         
     | 
| 
      
 154 
     | 
    
         
            +
                    refresh = packages.map do |pkg|
         
     | 
| 
      
 155 
     | 
    
         
            +
                      File.basename(pkg, '.gem')[/^(.*?)-([\d\.]+)$/, 1] rescue nil
         
     | 
| 
      
 156 
     | 
    
         
            +
                    end.compact
         
     | 
| 
      
 157 
     | 
    
         
            +
                    
         
     | 
| 
      
 158 
     | 
    
         
            +
                    # Install subgems explicitly even if ignore_dependencies is set
         
     | 
| 
      
 159 
     | 
    
         
            +
                    if opts[:ignore_dependencies]
         
     | 
| 
      
 160 
     | 
    
         
            +
                      refresh.each do |name| 
         
     | 
| 
      
 161 
     | 
    
         
            +
                        gem_pkg = Dir[File.join(gem_pkg_dir, "#{name}-*.gem")][0]
         
     | 
| 
      
 162 
     | 
    
         
            +
                        install_pkg(gem_pkg, opts)
         
     | 
| 
       173 
163 
     | 
    
         
             
                      end
         
     | 
| 
       174 
     | 
    
         
            -
                      return true
         
     | 
| 
       175 
164 
     | 
    
         
             
                    end
         
     | 
| 
       176 
165 
     | 
    
         
             
                  end
         
     | 
| 
      
 166 
     | 
    
         
            +
                  
         
     | 
| 
      
 167 
     | 
    
         
            +
                  # Finally install the main gem
         
     | 
| 
      
 168 
     | 
    
         
            +
                  if install_pkg(Dir[gem_pkg_glob][0], opts.merge(:refresh => refresh))
         
     | 
| 
      
 169 
     | 
    
         
            +
                    installed_gems = refresh
         
     | 
| 
      
 170 
     | 
    
         
            +
                  else
         
     | 
| 
      
 171 
     | 
    
         
            +
                    installed_gems = []
         
     | 
| 
      
 172 
     | 
    
         
            +
                  end
         
     | 
| 
       177 
173 
     | 
    
         
             
                end
         
     | 
| 
       178 
     | 
    
         
            -
                 
     | 
| 
      
 174 
     | 
    
         
            +
                installed_gems
         
     | 
| 
       179 
175 
     | 
    
         
             
              end
         
     | 
| 
       180 
     | 
    
         
            -
             
     | 
| 
      
 176 
     | 
    
         
            +
              
         
     | 
| 
      
 177 
     | 
    
         
            +
              def install_pkg(gem_pkg, opts = {})
         
     | 
| 
      
 178 
     | 
    
         
            +
                if (gem_pkg && File.exists?(gem_pkg))
         
     | 
| 
      
 179 
     | 
    
         
            +
                  # Needs to be executed from the directory that contains all packages
         
     | 
| 
      
 180 
     | 
    
         
            +
                  Dir.chdir(File.dirname(gem_pkg)) { install_gem(gem_pkg, opts) }
         
     | 
| 
      
 181 
     | 
    
         
            +
                else
         
     | 
| 
      
 182 
     | 
    
         
            +
                  false
         
     | 
| 
      
 183 
     | 
    
         
            +
                end
         
     | 
| 
      
 184 
     | 
    
         
            +
              end
         
     | 
| 
      
 185 
     | 
    
         
            +
              
         
     | 
| 
       181 
186 
     | 
    
         
             
              # Uninstall a gem.
         
     | 
| 
       182 
187 
     | 
    
         
             
              def uninstall_gem(gem, options = {})
         
     | 
| 
       183 
188 
     | 
    
         
             
                if options[:version] && !options[:version].is_a?(Gem::Requirement)
         
     | 
| 
         @@ -187,6 +192,45 @@ module GemManagement 
     | 
|
| 
       187 
192 
     | 
    
         
             
                Gem::Uninstaller.new(gem, options).uninstall
         
     | 
| 
       188 
193 
     | 
    
         
             
              end
         
     | 
| 
       189 
194 
     | 
    
         | 
| 
      
 195 
     | 
    
         
            +
              def clobber(source_dir)
         
     | 
| 
      
 196 
     | 
    
         
            +
                Dir.chdir(source_dir) do 
         
     | 
| 
      
 197 
     | 
    
         
            +
                  system "#{Gem.ruby} -S rake -s clobber" unless File.exists?('Thorfile')
         
     | 
| 
      
 198 
     | 
    
         
            +
                end
         
     | 
| 
      
 199 
     | 
    
         
            +
              end
         
     | 
| 
      
 200 
     | 
    
         
            +
             
     | 
| 
      
 201 
     | 
    
         
            +
              def package(source_dir, clobber = true)
         
     | 
| 
      
 202 
     | 
    
         
            +
                Dir.chdir(source_dir) do 
         
     | 
| 
      
 203 
     | 
    
         
            +
                  if File.exists?('Thorfile')
         
     | 
| 
      
 204 
     | 
    
         
            +
                    thor ":package"
         
     | 
| 
      
 205 
     | 
    
         
            +
                  elsif File.exists?('Rakefile')
         
     | 
| 
      
 206 
     | 
    
         
            +
                    rake "clobber" if clobber
         
     | 
| 
      
 207 
     | 
    
         
            +
                    rake "package"
         
     | 
| 
      
 208 
     | 
    
         
            +
                  end
         
     | 
| 
      
 209 
     | 
    
         
            +
                end
         
     | 
| 
      
 210 
     | 
    
         
            +
                Dir[File.join(source_dir, 'pkg/*.gem')]
         
     | 
| 
      
 211 
     | 
    
         
            +
              end
         
     | 
| 
      
 212 
     | 
    
         
            +
             
     | 
| 
      
 213 
     | 
    
         
            +
              def package_all(source_dir, skip = [], packages = [])
         
     | 
| 
      
 214 
     | 
    
         
            +
                if Dir[File.join(source_dir, '{Rakefile,Thorfile}')][0]
         
     | 
| 
      
 215 
     | 
    
         
            +
                  name = File.basename(source_dir)
         
     | 
| 
      
 216 
     | 
    
         
            +
                  Dir[File.join(source_dir, '*', '{Rakefile,Thorfile}')].each do |taskfile|
         
     | 
| 
      
 217 
     | 
    
         
            +
                    package_all(File.dirname(taskfile), skip, packages)
         
     | 
| 
      
 218 
     | 
    
         
            +
                  end
         
     | 
| 
      
 219 
     | 
    
         
            +
                  packages.push(*package(source_dir)) unless skip.include?(name)
         
     | 
| 
      
 220 
     | 
    
         
            +
                end
         
     | 
| 
      
 221 
     | 
    
         
            +
                packages.uniq
         
     | 
| 
      
 222 
     | 
    
         
            +
              end
         
     | 
| 
      
 223 
     | 
    
         
            +
              
         
     | 
| 
      
 224 
     | 
    
         
            +
              def rake(cmd)
         
     | 
| 
      
 225 
     | 
    
         
            +
                cmd << " >/dev/null" if $SILENT && !Gem.win_platform?
         
     | 
| 
      
 226 
     | 
    
         
            +
                system "#{Gem.ruby} -S #{which('rake')} -s #{cmd} >/dev/null"
         
     | 
| 
      
 227 
     | 
    
         
            +
              end
         
     | 
| 
      
 228 
     | 
    
         
            +
              
         
     | 
| 
      
 229 
     | 
    
         
            +
              def thor(cmd)
         
     | 
| 
      
 230 
     | 
    
         
            +
                cmd << " >/dev/null" if $SILENT && !Gem.win_platform?
         
     | 
| 
      
 231 
     | 
    
         
            +
                system "#{Gem.ruby} -S #{which('thor')} #{cmd}"
         
     | 
| 
      
 232 
     | 
    
         
            +
              end
         
     | 
| 
      
 233 
     | 
    
         
            +
             
     | 
| 
       190 
234 
     | 
    
         
             
              # Use the local bin/* executables if available.
         
     | 
| 
       191 
235 
     | 
    
         
             
              def which(executable)
         
     | 
| 
       192 
236 
     | 
    
         
             
                if File.executable?(exec = File.join(Dir.pwd, 'bin', executable))
         
     | 
| 
         @@ -196,17 +240,43 @@ module GemManagement 
     | 
|
| 
       196 
240 
     | 
    
         
             
                end
         
     | 
| 
       197 
241 
     | 
    
         
             
              end
         
     | 
| 
       198 
242 
     | 
    
         | 
| 
      
 243 
     | 
    
         
            +
              # Partition gems into system, local and missing gems
         
     | 
| 
      
 244 
     | 
    
         
            +
              def partition_dependencies(dependencies, gem_dir)
         
     | 
| 
      
 245 
     | 
    
         
            +
                system_specs, local_specs, missing_deps = [], [], []
         
     | 
| 
      
 246 
     | 
    
         
            +
                if gem_dir && File.directory?(gem_dir)
         
     | 
| 
      
 247 
     | 
    
         
            +
                  gem_dir = File.expand_path(gem_dir)
         
     | 
| 
      
 248 
     | 
    
         
            +
                  ::Gem.clear_paths; ::Gem.path.unshift(gem_dir)
         
     | 
| 
      
 249 
     | 
    
         
            +
                  ::Gem.source_index.refresh!
         
     | 
| 
      
 250 
     | 
    
         
            +
                  dependencies.each do |dep|
         
     | 
| 
      
 251 
     | 
    
         
            +
                    gemspecs = ::Gem.source_index.search(dep)
         
     | 
| 
      
 252 
     | 
    
         
            +
                    local = gemspecs.reverse.find { |s| s.loaded_from.index(gem_dir) == 0 }
         
     | 
| 
      
 253 
     | 
    
         
            +
                    if local
         
     | 
| 
      
 254 
     | 
    
         
            +
                      local_specs  << local
         
     | 
| 
      
 255 
     | 
    
         
            +
                    elsif gemspecs.last
         
     | 
| 
      
 256 
     | 
    
         
            +
                      system_specs << gemspecs.last
         
     | 
| 
      
 257 
     | 
    
         
            +
                    else
         
     | 
| 
      
 258 
     | 
    
         
            +
                      missing_deps << dep
         
     | 
| 
      
 259 
     | 
    
         
            +
                    end
         
     | 
| 
      
 260 
     | 
    
         
            +
                  end
         
     | 
| 
      
 261 
     | 
    
         
            +
                  ::Gem.clear_paths
         
     | 
| 
      
 262 
     | 
    
         
            +
                end
         
     | 
| 
      
 263 
     | 
    
         
            +
                [system_specs, local_specs, missing_deps]
         
     | 
| 
      
 264 
     | 
    
         
            +
              end
         
     | 
| 
      
 265 
     | 
    
         
            +
              
         
     | 
| 
       199 
266 
     | 
    
         
             
              # Create a modified executable wrapper in the specified bin directory.
         
     | 
| 
       200 
267 
     | 
    
         
             
              def ensure_bin_wrapper_for(gem_dir, bin_dir, *gems)
         
     | 
| 
      
 268 
     | 
    
         
            +
                options = gems.last.is_a?(Hash) ? gems.last : {}
         
     | 
| 
      
 269 
     | 
    
         
            +
                options[:no_minigems] ||= []
         
     | 
| 
       201 
270 
     | 
    
         
             
                if bin_dir && File.directory?(bin_dir)
         
     | 
| 
       202 
271 
     | 
    
         
             
                  gems.each do |gem|
         
     | 
| 
       203 
272 
     | 
    
         
             
                    if gemspec_path = Dir[File.join(gem_dir, 'specifications', "#{gem}-*.gemspec")].last
         
     | 
| 
       204 
273 
     | 
    
         
             
                      spec = Gem::Specification.load(gemspec_path)
         
     | 
| 
      
 274 
     | 
    
         
            +
                      enable_minigems = !options[:no_minigems].include?(spec.name)
         
     | 
| 
       205 
275 
     | 
    
         
             
                      spec.executables.each do |exec|
         
     | 
| 
       206 
276 
     | 
    
         
             
                        executable = File.join(bin_dir, exec)
         
     | 
| 
       207 
277 
     | 
    
         
             
                        message "Writing executable wrapper #{executable}"
         
     | 
| 
       208 
278 
     | 
    
         
             
                        File.open(executable, 'w', 0755) do |f|
         
     | 
| 
       209 
     | 
    
         
            -
                          f.write(executable_wrapper(spec, exec))
         
     | 
| 
      
 279 
     | 
    
         
            +
                          f.write(executable_wrapper(spec, exec, enable_minigems))
         
     | 
| 
       210 
280 
     | 
    
         
             
                        end
         
     | 
| 
       211 
281 
     | 
    
         
             
                      end
         
     | 
| 
       212 
282 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -216,7 +286,10 @@ module GemManagement 
     | 
|
| 
       216 
286 
     | 
    
         | 
| 
       217 
287 
     | 
    
         
             
              private
         
     | 
| 
       218 
288 
     | 
    
         | 
| 
       219 
     | 
    
         
            -
              def executable_wrapper(spec, bin_file_name)
         
     | 
| 
      
 289 
     | 
    
         
            +
              def executable_wrapper(spec, bin_file_name, minigems = true)
         
     | 
| 
      
 290 
     | 
    
         
            +
                requirements = ['minigems', 'rubygems']
         
     | 
| 
      
 291 
     | 
    
         
            +
                requirements.reverse! unless minigems
         
     | 
| 
      
 292 
     | 
    
         
            +
                try_req, then_req = requirements
         
     | 
| 
       220 
293 
     | 
    
         
             
                <<-TEXT
         
     | 
| 
       221 
294 
     | 
    
         
             
            #!/usr/bin/env ruby
         
     | 
| 
       222 
295 
     | 
    
         
             
            #
         
     | 
| 
         @@ -226,9 +299,9 @@ module GemManagement 
     | 
|
| 
       226 
299 
     | 
    
         
             
            # this file is here to facilitate running it.
         
     | 
| 
       227 
300 
     | 
    
         | 
| 
       228 
301 
     | 
    
         
             
            begin 
         
     | 
| 
       229 
     | 
    
         
            -
              require ' 
     | 
| 
      
 302 
     | 
    
         
            +
              require '#{try_req}'
         
     | 
| 
       230 
303 
     | 
    
         
             
            rescue LoadError 
         
     | 
| 
       231 
     | 
    
         
            -
              require ' 
     | 
| 
      
 304 
     | 
    
         
            +
              require '#{then_req}'
         
     | 
| 
       232 
305 
     | 
    
         
             
            end
         
     | 
| 
       233 
306 
     | 
    
         | 
| 
       234 
307 
     | 
    
         
             
            if File.directory?(gems_dir = File.join(Dir.pwd, 'gems')) ||
         
     | 
| 
         @@ -263,5 +336,5 @@ TEXT 
     | 
|
| 
       263 
336 
     | 
    
         
             
              def update_source_index(dir)
         
     | 
| 
       264 
337 
     | 
    
         
             
                Gem.source_index.load_gems_in(File.join(dir, 'specifications'))
         
     | 
| 
       265 
338 
     | 
    
         
             
              end
         
     | 
| 
       266 
     | 
    
         
            -
             
     | 
| 
       267 
     | 
    
         
            -
            end
         
     | 
| 
      
 339 
     | 
    
         
            +
                
         
     | 
| 
      
 340 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -9,7 +9,12 @@ module Merb 
     | 
|
| 
       9 
9 
     | 
    
         
             
                  defaults = { :cache => false }
         
     | 
| 
       10 
10 
     | 
    
         
             
                  defaults[:install_dir] = ENV['GEM_DIR'] if ENV['GEM_DIR']
         
     | 
| 
       11 
11 
     | 
    
         
             
                  opts = defaults.merge(options)
         
     | 
| 
       12 
     | 
    
         
            -
                   
     | 
| 
      
 12 
     | 
    
         
            +
                  dir = if File.directory?(subdir = File.join(Dir.pwd, name))
         
     | 
| 
      
 13 
     | 
    
         
            +
                    subdir
         
     | 
| 
      
 14 
     | 
    
         
            +
                  else
         
     | 
| 
      
 15 
     | 
    
         
            +
                    Dir.pwd
         
     | 
| 
      
 16 
     | 
    
         
            +
                  end
         
     | 
| 
      
 17 
     | 
    
         
            +
                  install_gem_from_source(dir, name, opts)
         
     | 
| 
       13 
18 
     | 
    
         
             
                  ensure_wrapper(opts[:install_dir] || Gem.default_dir, name)
         
     | 
| 
       14 
19 
     | 
    
         
             
                end
         
     | 
| 
       15 
20 
     | 
    
         | 
| 
         @@ -17,7 +22,10 @@ module Merb 
     | 
|
| 
       17 
22 
     | 
    
         
             
                  defaults = { :cache => false }
         
     | 
| 
       18 
23 
     | 
    
         
             
                  defaults[:install_dir] = ENV['GEM_DIR'] if ENV['GEM_DIR']
         
     | 
| 
       19 
24 
     | 
    
         
             
                  opts = defaults.merge(options)
         
     | 
| 
       20 
     | 
    
         
            -
                   
     | 
| 
      
 25 
     | 
    
         
            +
                  # Needs to be executed from the directory that contains all packages
         
     | 
| 
      
 26 
     | 
    
         
            +
                  Dir.chdir(File.dirname(pkg_file = File.expand_path(pkg))) do 
         
     | 
| 
      
 27 
     | 
    
         
            +
                    install_gem(pkg_file, opts)
         
     | 
| 
      
 28 
     | 
    
         
            +
                  end
         
     | 
| 
       21 
29 
     | 
    
         
             
                  name = File.basename(pkg, '.gem')[/^(.*?)-([\d\.]+)$/, 1]
         
     | 
| 
       22 
30 
     | 
    
         
             
                  ensure_wrapper(opts[:install_dir] || Gem.default_dir, name)
         
     | 
| 
       23 
31 
     | 
    
         
             
                end
         
     | 
| 
         @@ -26,7 +34,7 @@ module Merb 
     | 
|
| 
       26 
34 
     | 
    
         
             
                  defaults = { :ignore => true, :executables => true }
         
     | 
| 
       27 
35 
     | 
    
         
             
                  defaults[:install_dir] = ENV['GEM_DIR'] if ENV['GEM_DIR']
         
     | 
| 
       28 
36 
     | 
    
         
             
                  uninstall_gem(name, defaults.merge(options))
         
     | 
| 
       29 
     | 
    
         
            -
                end
         
     | 
| 
      
 37 
     | 
    
         
            +
                end  
         
     | 
| 
       30 
38 
     | 
    
         | 
| 
       31 
39 
     | 
    
         
             
                def self.sudo
         
     | 
| 
       32 
40 
     | 
    
         
             
                  ENV['MERB_SUDO'] ||= "sudo"
         
     | 
| 
         @@ -44,7 +52,7 @@ module Merb 
     | 
|
| 
       44 
52 
     | 
    
         
             
                  bindir = File.expand_path(File.join(gemdir, '..', 'bin'))
         
     | 
| 
       45 
53 
     | 
    
         
             
                  # Fall back to system wide bindir - usually needs sudo permissions
         
     | 
| 
       46 
54 
     | 
    
         
             
                  bindir = Gem.bindir unless File.directory?(bindir)
         
     | 
| 
       47 
     | 
    
         
            -
                  ensure_bin_wrapper_for(gemdir, bindir, name)
         
     | 
| 
      
 55 
     | 
    
         
            +
                  ensure_bin_wrapper_for(gemdir, bindir, name, :no_minigems => ['merb-gen'])
         
     | 
| 
       48 
56 
     | 
    
         
             
                end
         
     | 
| 
       49 
57 
     | 
    
         | 
| 
       50 
58 
     | 
    
         
             
              end
         
     | 
| 
         @@ -66,6 +66,6 @@ task :stats do 
     | 
|
| 
       66 
66 
     | 
    
         
             
              code_loc = [:controllers, :helpers, :models].inject(0) { |sum, e| sum += @all[e][:loc] }
         
     | 
| 
       67 
67 
     | 
    
         
             
              test_loc = @all[:spec][:loc]
         
     | 
| 
       68 
68 
     | 
    
         | 
| 
       69 
     | 
    
         
            -
              puts "   Code LOC: #{cb}#{code_loc}#{ce}     Test LOC: #{cb}#{test_loc}#{ce}      
     | 
| 
      
 69 
     | 
    
         
            +
              puts "   Code LOC: #{cb}#{code_loc}#{ce}     Test LOC: #{cb}#{test_loc}#{ce}     Code to test radio:  #{cb}1:%0.2f#{ce}" % (test_loc.to_f / code_loc.to_f)
         
     | 
| 
       70 
70 
     | 
    
         
             
              puts
         
     | 
| 
       71 
71 
     | 
    
         
             
            end
         
     | 
| 
         @@ -74,8 +74,8 @@ module Merb 
     | 
|
| 
       74 
74 
     | 
    
         
             
                  # ==== Notes
         
     | 
| 
       75 
75 
     | 
    
         
             
                  # If you pass a post body, the content-type will be set to URL-encoded.
         
     | 
| 
       76 
76 
     | 
    
         
             
                  #
         
     | 
| 
       77 
     | 
    
         
            -
                   
     | 
| 
       78 
     | 
    
         
            -
                  # @ 
     | 
| 
      
 77 
     | 
    
         
            +
                  # @api public
         
     | 
| 
      
 78 
     | 
    
         
            +
                  # @deprecated
         
     | 
| 
       79 
79 
     | 
    
         
             
                  def fake_request(env = {}, opt = {})
         
     | 
| 
       80 
80 
     | 
    
         
             
                    if opt[:post_body]
         
     | 
| 
       81 
81 
     | 
    
         
             
                      req = opt[:post_body]
         
     | 
| 
         @@ -111,8 +111,8 @@ module Merb 
     | 
|
| 
       111 
111 
     | 
    
         
             
                  # ==== Notes
         
     | 
| 
       112 
112 
     | 
    
         
             
                  # Does not use routes.
         
     | 
| 
       113 
113 
     | 
    
         
             
                  #
         
     | 
| 
       114 
     | 
    
         
            -
                   
     | 
| 
       115 
     | 
    
         
            -
                  # @ 
     | 
| 
      
 114 
     | 
    
         
            +
                  # @api public
         
     | 
| 
      
 115 
     | 
    
         
            +
                  # @deprecated
         
     | 
| 
       116 
116 
     | 
    
         
             
                  def dispatch_to(controller_klass, action, params = {}, env = {}, &blk)
         
     | 
| 
       117 
117 
     | 
    
         
             
                    params = merge_controller_and_action(controller_klass, action, params)
         
     | 
| 
       118 
118 
     | 
    
         
             
                    dispatch_request(build_request(params, env), controller_klass, action.to_s, &blk)
         
     | 
| 
         @@ -124,6 +124,9 @@ module Merb 
     | 
|
| 
       124 
124 
     | 
    
         
             
                  # ==== Parameters
         
     | 
| 
       125 
125 
     | 
    
         
             
                  # *controller_classes:: Controller classes to operate on in the context of the block.
         
     | 
| 
       126 
126 
     | 
    
         
             
                  # &blk:: The context to operate on; optionally accepts the cookie jar as an argument.
         
     | 
| 
      
 127 
     | 
    
         
            +
                  #
         
     | 
| 
      
 128 
     | 
    
         
            +
                  # @api public
         
     | 
| 
      
 129 
     | 
    
         
            +
                  # @deprecated
         
     | 
| 
       127 
130 
     | 
    
         
             
                  def with_cookies(*controller_classes, &blk)
         
     | 
| 
       128 
131 
     | 
    
         
             
                    cookie_jar = CookieJar.new
         
     | 
| 
       129 
132 
     | 
    
         
             
                    before_cb = lambda { |c| c.cookies.update(cookie_jar) }
         
     | 
| 
         @@ -166,8 +169,8 @@ module Merb 
     | 
|
| 
       166 
169 
     | 
    
         
             
                  # ==== Notes
         
     | 
| 
       167 
170 
     | 
    
         
             
                  # Does not use routes.
         
     | 
| 
       168 
171 
     | 
    
         
             
                  #
         
     | 
| 
       169 
     | 
    
         
            -
                   
     | 
| 
       170 
     | 
    
         
            -
                  # @ 
     | 
| 
      
 172 
     | 
    
         
            +
                  # @api public
         
     | 
| 
      
 173 
     | 
    
         
            +
                  # @deprecated
         
     | 
| 
       171 
174 
     | 
    
         
             
                  def dispatch_with_basic_authentication_to(controller_klass, action, username, password, params = {}, env = {}, &blk)
         
     | 
| 
       172 
175 
     | 
    
         
             
                    env["X_HTTP_AUTHORIZATION"] = "Basic #{Base64.encode64("#{username}:#{password}")}"
         
     | 
| 
       173 
176 
     | 
    
         | 
| 
         @@ -175,6 +178,7 @@ module Merb 
     | 
|
| 
       175 
178 
     | 
    
         
             
                    dispatch_request(build_request(params, env), controller_klass, action.to_s, &blk)
         
     | 
| 
       176 
179 
     | 
    
         
             
                  end
         
     | 
| 
       177 
180 
     | 
    
         | 
| 
      
 181 
     | 
    
         
            +
                  # @api private
         
     | 
| 
       178 
182 
     | 
    
         
             
                  def merge_controller_and_action(controller_klass, action, params)
         
     | 
| 
       179 
183 
     | 
    
         
             
                    params[:controller] = controller_klass.name.to_const_path
         
     | 
| 
       180 
184 
     | 
    
         
             
                    params[:action]     = action.to_s
         
     | 
| 
         @@ -203,8 +207,8 @@ module Merb 
     | 
|
| 
       203 
207 
     | 
    
         
             
                  # ==== Notes
         
     | 
| 
       204 
208 
     | 
    
         
             
                  # Does not use routes.
         
     | 
| 
       205 
209 
     | 
    
         
             
                  #
         
     | 
| 
       206 
     | 
    
         
            -
                   
     | 
| 
       207 
     | 
    
         
            -
                  # @ 
     | 
| 
      
 210 
     | 
    
         
            +
                  # @api public    
         
     | 
| 
      
 211 
     | 
    
         
            +
                  # @deprecated  
         
     | 
| 
       208 
212 
     | 
    
         
             
                  def build_request(params = {}, env = {})
         
     | 
| 
       209 
213 
     | 
    
         
             
                    params             = Merb::Request.params_to_query_string(params)
         
     | 
| 
       210 
214 
     | 
    
         | 
| 
         @@ -227,8 +231,9 @@ module Merb 
     | 
|
| 
       227 
231 
     | 
    
         
             
                  # &blk::
         
     | 
| 
       228 
232 
     | 
    
         
             
                  #   The controller is yielded to the block provided for actions *prior* to
         
     | 
| 
       229 
233 
     | 
    
         
             
                  #   the action being dispatched.
         
     | 
| 
       230 
     | 
    
         
            -
                   
     | 
| 
       231 
     | 
    
         
            -
                  # @public 
     | 
| 
      
 234 
     | 
    
         
            +
                  #
         
     | 
| 
      
 235 
     | 
    
         
            +
                  # @api public  
         
     | 
| 
      
 236 
     | 
    
         
            +
                  # @deprecated    
         
     | 
| 
       232 
237 
     | 
    
         
             
                  def get(path, params = {}, env = {}, &block)
         
     | 
| 
       233 
238 
     | 
    
         
             
                    env[:request_method] = "GET"
         
     | 
| 
       234 
239 
     | 
    
         
             
                    mock_request(path, params, env, &block)
         
     | 
| 
         @@ -246,8 +251,9 @@ module Merb 
     | 
|
| 
       246 
251 
     | 
    
         
             
                  # &blk::
         
     | 
| 
       247 
252 
     | 
    
         
             
                  #   The controller is yielded to the block provided for actions *prior* to
         
     | 
| 
       248 
253 
     | 
    
         
             
                  #   the action being dispatched.
         
     | 
| 
       249 
     | 
    
         
            -
                   
     | 
| 
       250 
     | 
    
         
            -
                  # @public 
     | 
| 
      
 254 
     | 
    
         
            +
                  #
         
     | 
| 
      
 255 
     | 
    
         
            +
                  # @api public  
         
     | 
| 
      
 256 
     | 
    
         
            +
                  # @deprecated    
         
     | 
| 
       251 
257 
     | 
    
         
             
                  def post(path, params = {}, env = {}, &block)
         
     | 
| 
       252 
258 
     | 
    
         
             
                    env[:request_method] = "POST"
         
     | 
| 
       253 
259 
     | 
    
         
             
                    mock_request(path, params, env, &block)
         
     | 
| 
         @@ -265,8 +271,8 @@ module Merb 
     | 
|
| 
       265 
271 
     | 
    
         
             
                  # &blk::
         
     | 
| 
       266 
272 
     | 
    
         
             
                  #   The controller is yielded to the block provided for actions *prior* to
         
     | 
| 
       267 
273 
     | 
    
         
             
                  #   the action being dispatched.
         
     | 
| 
       268 
     | 
    
         
            -
                   
     | 
| 
       269 
     | 
    
         
            -
                  # @public      
         
     | 
| 
      
 274 
     | 
    
         
            +
                  #
         
     | 
| 
      
 275 
     | 
    
         
            +
                  # @api public      
         
     | 
| 
       270 
276 
     | 
    
         
             
                  def put(path, params = {}, env = {}, &block)
         
     | 
| 
       271 
277 
     | 
    
         
             
                    env[:request_method] = "PUT"
         
     | 
| 
       272 
278 
     | 
    
         
             
                    mock_request(path, params, env, &block)
         
     | 
| 
         @@ -284,8 +290,9 @@ module Merb 
     | 
|
| 
       284 
290 
     | 
    
         
             
                  # &blk::
         
     | 
| 
       285 
291 
     | 
    
         
             
                  #   The controller is yielded to the block provided for actions *prior* to
         
     | 
| 
       286 
292 
     | 
    
         
             
                  #   the action being dispatched.
         
     | 
| 
       287 
     | 
    
         
            -
                   
     | 
| 
       288 
     | 
    
         
            -
                  # @public
         
     | 
| 
      
 293 
     | 
    
         
            +
                  #
         
     | 
| 
      
 294 
     | 
    
         
            +
                  # @api public
         
     | 
| 
      
 295 
     | 
    
         
            +
                  # @deprecated
         
     | 
| 
       289 
296 
     | 
    
         
             
                  def delete(path, params = {}, env = {}, &block)
         
     | 
| 
       290 
297 
     | 
    
         
             
                    env[:request_method] = "DELETE"
         
     | 
| 
       291 
298 
     | 
    
         
             
                    mock_request(path, params, env, &block)
         
     | 
| 
         @@ -313,8 +320,8 @@ module Merb 
     | 
|
| 
       313 
320 
     | 
    
         
             
                  # ==== Notes
         
     | 
| 
       314 
321 
     | 
    
         
             
                  # Uses Routes.
         
     | 
| 
       315 
322 
     | 
    
         
             
                  #
         
     | 
| 
       316 
     | 
    
         
            -
                   
     | 
| 
       317 
     | 
    
         
            -
                  # @ 
     | 
| 
      
 323 
     | 
    
         
            +
                  # @api plugin
         
     | 
| 
      
 324 
     | 
    
         
            +
                  # @deprecated
         
     | 
| 
       318 
325 
     | 
    
         
             
                  def mock_request(path, params = {}, env= {}, &block)
         
     | 
| 
       319 
326 
     | 
    
         
             
                    env[:request_method] ||= "GET"
         
     | 
| 
       320 
327 
     | 
    
         
             
                    env[:request_uri], env[:query_string] = path.split('?')
         
     | 
| 
         @@ -352,8 +359,8 @@ module Merb 
     | 
|
| 
       352 
359 
     | 
    
         
             
                  # ==== Notes
         
     | 
| 
       353 
360 
     | 
    
         
             
                  # Does not use routes.
         
     | 
| 
       354 
361 
     | 
    
         
             
                  #
         
     | 
| 
       355 
     | 
    
         
            -
                   
     | 
| 
       356 
     | 
    
         
            -
                  # @ 
     | 
| 
      
 362 
     | 
    
         
            +
                  # @api public
         
     | 
| 
      
 363 
     | 
    
         
            +
                  # @deprecated
         
     | 
| 
       357 
364 
     | 
    
         
             
                  def dispatch_request(request, controller_klass, action, &blk)
         
     | 
| 
       358 
365 
     | 
    
         
             
                    controller = controller_klass.new(request)
         
     | 
| 
       359 
366 
     | 
    
         
             
                    yield controller if block_given?
         
     | 
| 
         @@ -378,8 +385,8 @@ module Merb 
     | 
|
| 
       378 
385 
     | 
    
         
             
                  # ==== Returns
         
     | 
| 
       379 
386 
     | 
    
         
             
                  # Hash:: The parameters built based on the matching route.
         
     | 
| 
       380 
387 
     | 
    
         
             
                  #
         
     | 
| 
       381 
     | 
    
         
            -
                   
     | 
| 
       382 
     | 
    
         
            -
                  # @ 
     | 
| 
      
 388 
     | 
    
         
            +
                  # @api plugin
         
     | 
| 
      
 389 
     | 
    
         
            +
                  # @deprecated
         
     | 
| 
       383 
390 
     | 
    
         
             
                  def check_request_for_route(request)
         
     | 
| 
       384 
391 
     | 
    
         
             
                    match =  ::Merb::Router.match(request)
         
     | 
| 
       385 
392 
     | 
    
         
             
                    if match[0].nil? && match[1].empty?
         
     |