<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -25,9 +25,16 @@ module Merb
     COOKIE_SPLIT             = /[;,] */n.freeze
     COOKIE_REGEXP            = /\s*(.+)=(.*)\s*/.freeze
     COOKIE_EXPIRED_TIME      = Time.at(0).freeze
+    XML_HTTP_REQUEST_REGEXP  = /XMLHttpRequest/i.freeze
+    TRUSTED_IP_REGEXP        = /^unknown$|^(127|10|172\.16|192\.168)\./i.freeze
     HOUR                     = 60 * 60
     DAY                      = HOUR * 24
     WEEK                     = DAY * 7
+    ON                       = &quot;on&quot;.freeze
+    COMMA                    = ','.freeze
+    DOT                      = '.'.freeze
+    QUESTION_MARK            = '?'.freeze
+    AMPERSAND                = '&amp;'.freeze    
     MULTIPART_REGEXP         = /\Amultipart\/form-data.*boundary=\&quot;?([^\&quot;;,]+)/n.freeze
     HTTP_COOKIE              = 'HTTP_COOKIE'.freeze
     QUERY_STRING             = 'QUERY_STRING'.freeze
@@ -44,24 +51,47 @@ module Merb
     GET                      = &quot;GET&quot;.freeze
     POST                     = &quot;POST&quot;.freeze
     HEAD                     = &quot;HEAD&quot;.freeze
+    HTTP                     = &quot;http&quot;.freeze
+    HTTPS                    = &quot;https&quot;.freeze
+    UPCASE_HTTPS             = &quot;HTTPS&quot;.freeze
     CONTENT_LENGTH           = &quot;CONTENT_LENGTH&quot;.freeze
+    HTTP_ACCEPT_ENCODING     = &quot;HTTP_ACCEPT_ENCODING&quot;.freeze
+    HTTP_ACCEPT_LANGUAGE     = &quot;HTTP_ACCEPT_LANGUAGE&quot;.freeze
+    HTTP_ACCEPT_CHARSET      = &quot;HTTP_ACCEPT_CHARSET&quot;.freeze
+    HTTP_CACHE_CONTROL       = &quot;HTTP_CACHE_CONTROL&quot;.freeze    
     HTTP_X_FORWARDED_FOR     = &quot;HTTP_X_FORWARDED_FOR&quot;.freeze
     HTTP_IF_MODIFIED_SINCE   = &quot;HTTP_IF_MODIFIED_SINCE&quot;.freeze
+    HTTP_X_FORWARDED_HOST    = &quot;HTTP_X_FORWARDED_HOST&quot;.freeze
+    HTTP_X_FORWARDED_PROTO   = &quot;HTTP_X_FORWARDED_PROTO&quot;.freeze
+    HTTP_X_REQUESTED_WITH    = &quot;HTTP_X_REQUESTED_WITH&quot;.freeze
     HTTP_IF_NONE_MATCH       = &quot;HTTP_IF_NONE_MATCH&quot;.freeze
     HTTP_CONTENT_TYPE        = &quot;HTTP_CONTENT_TYPE&quot;.freeze
     HTTP_CONTENT_LENGTH      = &quot;HTTP_CONTENT_LENGTH&quot;.freeze
+    HTTP_REFERER             = &quot;HTTP_REFERER&quot;.freeze
+    HTTP_USER_AGENT          = &quot;HTTP_USER_AGENT&quot;.freeze
+    HTTP_CLIENT_IP           = &quot;HTTP_CLIENT_IP&quot;.freeze
+    HTTP_CONNECTION          = &quot;HTTP_CONNECTION&quot;.freeze
+    HTTP_VERSION             = &quot;HTTP_VERSION&quot;.freeze
+    GATEWAY_INTERFACE        = &quot;GATEWAY_INTERFACE&quot;.freeze
     UPLOAD_ID                = &quot;upload_id&quot;.freeze
     PATH_INFO                = &quot;PATH_INFO&quot;.freeze
     SCRIPT_NAME              = &quot;SCRIPT_NAME&quot;.freeze
+    SERVER_NAME              = &quot;SERVER_NAME&quot;.freeze
+    SERVER_PORT              = &quot;SERVER_PORT&quot;.freeze
+    SERVER_SOFTWARE          = &quot;SERVER_SOFTWARE&quot;.freeze
     REQUEST_URI              = &quot;REQUEST_URI&quot;.freeze
     REQUEST_PATH             = &quot;REQUEST_PATH&quot;.freeze
     REQUEST_METHOD           = &quot;REQUEST_METHOD&quot;.freeze
     REMOTE_ADDR              = &quot;REMOTE_ADDR&quot;.freeze
+    HTTP_HOST                = &quot;HTTP_HOST&quot;.freeze
+    HTTP_ACCEPT              = &quot;HTTP_ACCEPT&quot;.freeze
+    HTTP_KEEP_ALIVE          = &quot;HTTP_KEEP_ALIVE&quot;.freeze
     BREAK_TAG                = &quot;&lt;br/&gt;&quot;.freeze
     EMPTY_STRING             = &quot;&quot;.freeze
     NEWLINE                  = &quot;\n&quot;.freeze
     DOUBLE_NEWLINE           = &quot;\n\n&quot;.freeze
     LOCATION                 = &quot;Location&quot;.freeze
     TEXT_SLASH_HTML          = &quot;text/html&quot;.freeze
+    RACK_INPUT               = 'rack.input'.freeze
   end
 end</diff>
      <filename>lib/merb-core/constants.rb</filename>
    </modified>
    <modified>
      <diff>@@ -33,7 +33,8 @@ module Merb
     # @api private
     def initialize(rack_env)
       @env  = rack_env
-      @body = rack_env['rack.input']
+      # Merb::Const::RACK_INPUT = 'rack.input'.freeze
+      @body = rack_env[Merb::Const::RACK_INPUT]
       @route_params = {}
     end
     
@@ -53,7 +54,7 @@ module Merb
           &quot;segment to route definition?\nHere is what's specified:\n&quot; + 
           route.inspect
       end
-      path = [params[:namespace], params[:controller]].compact.join(&quot;/&quot;)
+      path = [params[:namespace], params[:controller]].compact.join(Merb::Const::SLASH)
       controller = path.snake_case.to_const_string
       
       begin
@@ -79,7 +80,8 @@ module Merb
     # @api public
     def method
       @method ||= begin
-        request_method = @env['REQUEST_METHOD'].downcase.to_sym
+        # Merb::Const::REQUEST_METHOD = &quot;REQUEST_METHOD&quot;.freeze
+        request_method = @env[Merb::Const::REQUEST_METHOD].downcase.to_sym
         case request_method
         when :get, :head, :put, :delete, :options
           request_method
@@ -91,7 +93,7 @@ module Merb
           m.downcase! if m
           METHODS.include?(m) ? m.to_sym : :post
         else
-          raise &quot;Unknown REQUEST_METHOD: #{@env['REQUEST_METHOD']}&quot;
+          raise &quot;Unknown REQUEST_METHOD: #{@env[Merb::Const::REQUEST_METHOD]}&quot;
         end
       end
     end
@@ -179,7 +181,7 @@ module Merb
     # 
     # @api private
     def query_params
-      @query_params ||= self.class.query_parse(query_string || '')
+      @query_params ||= self.class.query_parse(query_string || Merb::Const::EMPTY_STRING)
     end
     
     # Parameters passed in the body of the request. Ajax calls from
@@ -322,7 +324,9 @@ module Merb
     # 
     # @api public
     def xml_http_request?
-      not /XMLHttpRequest/i.match(@env['HTTP_X_REQUESTED_WITH']).nil?
+      # Merb::Const::XML_HTTP_REQUEST_REGEXP = /XMLHttpRequest/i.freeze
+      # Merb::Const::HTTP_X_REQUESTED_WITH   = &quot;HTTP_X_REQUESTED_WITH&quot;.freeze
+      !Merb::Const::XML_HTTP_REQUEST_REGEXP.match(@env[Merb::Const::HTTP_X_REQUESTED_WITH]).nil?
     end
     alias xhr? :xml_http_request?
     alias ajax? :xml_http_request?
@@ -332,16 +336,21 @@ module Merb
     # 
     # @api public
     def remote_ip
-      return @env['HTTP_CLIENT_IP'] if @env.include?('HTTP_CLIENT_IP')
+      # Merb::Const::HTTP_CLIENT_IP = &quot;HTTP_CLIENT_IP&quot;.freeze
+      return @env[Merb::Const::HTTP_CLIENT_IP] if @env.include?(Merb::Const::HTTP_CLIENT_IP)
       
+      # Merb::Const::HTTP_X_FORWARDED_FOR = &quot;HTTP_X_FORWARDED_FOR&quot;.freeze
       if @env.include?(Merb::Const::HTTP_X_FORWARDED_FOR) then
-        remote_ips = @env[Merb::Const::HTTP_X_FORWARDED_FOR].split(',').reject do |ip|
-          ip =~ /^unknown$|^(127|10|172\.16|192\.168)\./i
+        # Merb::Const::COMMA = &quot;,&quot;.freeze
+        remote_ips = @env[Merb::Const::HTTP_X_FORWARDED_FOR].split(Merb::Const::COMMA).reject do |ip|
+          # Merb::Const::TRUSTED_IP_REGEXP = /^unknown$|^(127|10|172\.16|192\.168)\./i.freeze
+          ip =~ Merb::Const::TRUSTED_IP_REGEXP
         end
         
         return remote_ips.first.strip unless remote_ips.empty?
       end
       
+      # Merb::Const::REMOTE_ADDR = &quot;REMOTE_ADDR&quot;.freeze
       return @env[Merb::Const::REMOTE_ADDR]
     end
     
@@ -352,7 +361,9 @@ module Merb
     # 
     # @api public
     def protocol
-      ssl? ? 'https' : 'http'
+      # Merb::Const::HTTP         = 'http'.freeze
+      # Merb::Const::HTTPS        = 'https'.freeze
+      ssl? ? Merb::Const::HTTPS : Merb::Const::HTTP
     end
     
     # ==== Returns
@@ -360,7 +371,11 @@ module Merb
     # 
     # @api public
     def ssl?
-      @env['HTTPS'] == 'on' || @env['HTTP_X_FORWARDED_PROTO'] == 'https'
+      # Merb::Const::ON                     = 'on'.freeze
+      # Merb::Const::HTTPS                  = 'https'.freeze
+      # Merb::Const::UPCASE_HTTPS           = 'HTTPS'.freeze
+      # Merb::Const::HTTP_X_FORWARDED_PROTO = 'HTTP_X_FORWARDED_PROTO'.freeze
+      @env[Merb::Const::UPCASE_HTTPS] == Merb::Const::ON || @env[Merb::Const::HTTP_X_FORWARDED_PROTO] == Merb::Const::HTTPS
     end
     
     # ==== Returns
@@ -368,7 +383,7 @@ module Merb
     # 
     # @api public
     def referer
-      @env['HTTP_REFERER']
+      @env[Merb::Const::HTTP_REFERER]
     end
     
     # ==== Returns
@@ -384,7 +399,7 @@ module Merb
     # 
     # @api public
     def uri
-      @env['REQUEST_PATH'] || @env['REQUEST_URI'] || path_info
+      @env[Merb::Const::REQUEST_PATH] || @env[Merb::Const::REQUEST_URI] || path_info
     end
     
     # ==== Returns
@@ -392,7 +407,8 @@ module Merb
     # 
     # @api public
     def user_agent
-      @env['HTTP_USER_AGENT']
+      # Merb::Const::HTTP_USER_AGENT = &quot;HTTP_USER_AGENT&quot;.freeze
+      @env[Merb::Const::HTTP_USER_AGENT]
     end
     
     # ==== Returns
@@ -400,7 +416,8 @@ module Merb
     # 
     # @api public
     def server_name
-      @env['SERVER_NAME']
+      # Merb::Const::SERVER_NAME = &quot;SERVER_NAME&quot;.freeze
+      @env[Merb::Const::SERVER_NAME]
     end
     
     # ==== Returns
@@ -408,7 +425,8 @@ module Merb
     # 
     # @api private
     def accept_encoding
-      @env['HTTP_ACCEPT_ENCODING']
+      # Merb::Const::HTTP_ACCEPT_ENCODING = &quot;HTTP_ACCEPT_ENCODING&quot;.freeze
+      @env[Merb::Const::HTTP_ACCEPT_ENCODING]
     end
     
     # ==== Returns
@@ -416,7 +434,8 @@ module Merb
     # 
     # @api public
     def script_name
-      @env['SCRIPT_NAME']
+      # Merb::Const::SCRIPT_NAME = &quot;SCRIPT_NAME&quot;.freeze
+      @env[Merb::Const::SCRIPT_NAME]
     end
     
     # ==== Returns
@@ -424,7 +443,8 @@ module Merb
     # 
     # @api public
     def cache_control
-      @env['HTTP_CACHE_CONTROL']
+      # Merb::Const::HTTP_CACHE_CONTROL = &quot;HTTP_CACHE_CONTROL&quot;.freeze
+      @env[Merb::Const::HTTP_CACHE_CONTROL]
     end
     
     # ==== Returns
@@ -432,7 +452,8 @@ module Merb
     # 
     # @api public
     def accept_language
-      @env['HTTP_ACCEPT_LANGUAGE']
+      # Merb::Const::HTTP_ACCEPT_LANGUAGE = &quot;HTTP_ACCEPT_LANGUAGE&quot;.freeze
+      @env[Merb::Const::HTTP_ACCEPT_LANGUAGE]
     end
     
     # ==== Returns
@@ -440,7 +461,8 @@ module Merb
     # 
     # @api public
     def server_software
-      @env['SERVER_SOFTWARE']
+      # Merb::Const::SERVER_SOFTWARE = &quot;SERVER_SOFTWARE&quot;.freeze
+      @env[Merb::Const::SERVER_SOFTWARE]
     end
     
     # ==== Returns
@@ -448,7 +470,7 @@ module Merb
     # 
     # @api public
     def keep_alive
-      @env['HTTP_KEEP_ALIVE']
+      @env[Merb::Const::HTTP_KEEP_ALIVE]
     end
     
     # ==== Returns
@@ -456,7 +478,7 @@ module Merb
     # 
     # @api public
     def accept_charset
-      @env['HTTP_ACCEPT_CHARSET']
+      @env[Merb::Const::HTTP_ACCEPT_CHARSET]
     end
     
     # ==== Returns
@@ -464,7 +486,7 @@ module Merb
     # 
     # @api private
     def version
-      @env['HTTP_VERSION']
+      @env[Merb::Const::HTTP_VERSION]
     end
     
     # ==== Returns
@@ -472,7 +494,7 @@ module Merb
     # 
     # @api public
     def gateway
-      @env['GATEWAY_INTERFACE']
+      @env[Merb::Const::GATEWAY_INTERFACE]
     end
     
     # ==== Returns
@@ -480,7 +502,7 @@ module Merb
     # 
     # @api private
     def accept
-      @env['HTTP_ACCEPT'].blank? ? &quot;*/*&quot; : @env['HTTP_ACCEPT']
+      @env[Merb::Const::HTTP_ACCEPT].blank? ? &quot;*/*&quot; : @env[Merb::Const::HTTP_ACCEPT]
     end
     
     # ==== Returns
@@ -488,7 +510,7 @@ module Merb
     # 
     # @api private
     def connection
-      @env['HTTP_CONNECTION']
+      @env[Merb::Const::HTTP_CONNECTION]
     end
     
     # ==== Returns
@@ -496,7 +518,7 @@ module Merb
     # 
     # @api private
     def query_string
-      @env['QUERY_STRING']  
+      @env[Merb::Const::QUERY_STRING]  
     end
     
     # ==== Returns
@@ -504,7 +526,7 @@ module Merb
     # 
     # @api private
     def content_type
-      @env['CONTENT_TYPE']
+      @env[Merb::Const::UPCASE_CONTENT_TYPE]
     end
     
     # ==== Returns
@@ -522,7 +544,7 @@ module Merb
     # 
     # @api public
     def path
-      path = (uri.empty? ? '/' : uri.split('?').first).squeeze(&quot;/&quot;)
+      path = (uri.empty? ? Merb::Const::SLASH : uri.split(Merb::Const::QUESTION_MARK).first).squeeze(Merb::Const::SLASH)
       path = path[0..-2] if (path[-1] == ?/) &amp;&amp; path.size &gt; 1
       path
     end
@@ -532,7 +554,7 @@ module Merb
     # 
     # @api public
     def path_info
-      @path_info ||= self.class.unescape(@env['PATH_INFO'])
+      @path_info ||= self.class.unescape(@env[Merb::Const::PATH_INFO])
     end
     
     # ==== Returns
@@ -540,7 +562,7 @@ module Merb
     # 
     # @api public
     def port
-      @env['SERVER_PORT'].to_i
+      @env[Merb::Const::SERVER_PORT].to_i
     end
     
     # ==== Returns
@@ -548,7 +570,7 @@ module Merb
     # 
     # @api public
     def host
-      @env['HTTP_X_FORWARDED_HOST'] || @env['HTTP_HOST'] 
+      @env[Merb::Const::HTTP_X_FORWARDED_HOST] || @env[Merb::Const::HTTP_HOST] 
     end
     
     # ==== Parameters
@@ -561,7 +583,7 @@ module Merb
     # 
     # @api public
     def subdomains(tld_length = 1)
-      parts = host.split('.')
+      parts = host.split(Merb::Const::DOT)
       parts[0..-(tld_length+2)]
     end
     
@@ -575,7 +597,7 @@ module Merb
     # 
     # @api public
     def domain(tld_length = 1)
-      host.split('.').last(1 + tld_length).join('.').sub(/:\d+$/,'')
+      host.split(Merb::Const::DOT).last(1 + tld_length).join(Merb::Const::DOT).sub(/:\d+$/, Merb::Const::EMPTY_STRING)
     end
     
     # ==== Returns</diff>
      <filename>lib/merb-core/dispatch/request.rb</filename>
    </modified>
    <modified>
      <diff>@@ -34,7 +34,7 @@ module Merb
         def self.run(app, options={})
           @server = ::Mongrel::HttpServer.new(options[:Host] || '0.0.0.0',
                                              options[:Port] || 8080)
-          @server.register('/', ::Merb::Rack::Handler::Mongrel.new(app))
+          @server.register(Merb::Const::SLASH, ::Merb::Rack::Handler::Mongrel.new(app))
           yield @server  if block_given?
           @server.run.join
         end
@@ -60,16 +60,17 @@ module Merb
           env[Merb::Const::SCRIPT_NAME] = Merb::Const::EMPTY_STRING if env[Merb::Const::SCRIPT_NAME] == Merb::Const::SLASH
   
           env.update({&quot;rack.version&quot; =&gt; [0,1],
-                       &quot;rack.input&quot; =&gt; request.body || StringIO.new(&quot;&quot;),
+                       Merb::Const::RACK_INPUT =&gt; request.body || StringIO.new(&quot;&quot;),
                        &quot;rack.errors&quot; =&gt; STDERR,
   
                        &quot;rack.multithread&quot; =&gt; true,
                        &quot;rack.multiprocess&quot; =&gt; false, # ???
                        &quot;rack.run_once&quot; =&gt; false,
-  
-                       &quot;rack.url_scheme&quot; =&gt; &quot;http&quot;
+                        
+                       # Merb::Const::HTTP = &quot;http&quot;.freeze
+                       &quot;rack.url_scheme&quot; =&gt; Merb::Const::HTTP
                      })
-          env[Merb::Const::QUERY_STRING] ||= &quot;&quot;
+          env[Merb::Const::QUERY_STRING] ||= Merb::Const::EMPTY_STRING
           env.delete Merb::Const::PATH_INFO  if env[Merb::Const::PATH_INFO] == Merb::Const::EMPTY_STRING
   
           status, headers, body = @app.call(env)</diff>
      <filename>lib/merb-core/rack/handler/mongrel.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>72f7c7ef3a2ce6a0a0f409b2092e64da7d0795cf</id>
    </parent>
  </parents>
  <author>
    <name>Michael S. Klishin</name>
    <email>michael@novemberain.com</email>
  </author>
  <url>http://github.com/wycats/merb-core/commit/c122ec92e2defdddb6ed1fc6b317990696f74b45</url>
  <id>c122ec92e2defdddb6ed1fc6b317990696f74b45</id>
  <committed-date>2008-10-12T18:10:06-07:00</committed-date>
  <authored-date>2008-10-12T18:09:12-07:00</authored-date>
  <message>Use pointers to frozen strings instead of creating new objects on every request (does not make sense everywhere though).</message>
  <tree>785e0333d66f4201240933cb9d14f06efd68e9a9</tree>
  <committer>
    <name>Michael S. Klishin</name>
    <email>michael@novemberain.com</email>
  </committer>
</commit>
