public
Rubygem
Description: Merb Core: All you need. None you don't.
Homepage: http://www.merbivore.com
Clone URL: git://github.com/wycats/merb-core.git
Use pointers to frozen strings instead of creating new objects on every request 
(does not make sense everywhere though).
Sun Oct 12 18:09:12 -0700 2008
commit  c122ec92e2defdddb6ed1fc6b317990696f74b45
tree    785e0333d66f4201240933cb9d14f06efd68e9a9
parent  72f7c7ef3a2ce6a0a0f409b2092e64da7d0795cf
...
25
26
27
 
 
28
29
30
 
 
 
 
 
31
32
33
...
44
45
46
 
 
 
47
 
 
 
 
48
49
 
 
 
50
51
52
 
 
 
 
 
 
53
54
55
 
 
 
56
57
58
59
 
 
 
60
61
62
63
64
65
 
66
67
...
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
...
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
0
@@ -25,9 +25,16 @@ module Merb
0
     COOKIE_SPLIT             = /[;,] */n.freeze
0
     COOKIE_REGEXP            = /\s*(.+)=(.*)\s*/.freeze
0
     COOKIE_EXPIRED_TIME      = Time.at(0).freeze
0
+    XML_HTTP_REQUEST_REGEXP  = /XMLHttpRequest/i.freeze
0
+    TRUSTED_IP_REGEXP        = /^unknown$|^(127|10|172\.16|192\.168)\./i.freeze
0
     HOUR                     = 60 * 60
0
     DAY                      = HOUR * 24
0
     WEEK                     = DAY * 7
0
+    ON                       = "on".freeze
0
+    COMMA                    = ','.freeze
0
+    DOT                      = '.'.freeze
0
+    QUESTION_MARK            = '?'.freeze
0
+    AMPERSAND                = '&'.freeze    
0
     MULTIPART_REGEXP         = /\Amultipart\/form-data.*boundary=\"?([^\";,]+)/n.freeze
0
     HTTP_COOKIE              = 'HTTP_COOKIE'.freeze
0
     QUERY_STRING             = 'QUERY_STRING'.freeze
0
@@ -44,24 +51,47 @@ module Merb
0
     GET                      = "GET".freeze
0
     POST                     = "POST".freeze
0
     HEAD                     = "HEAD".freeze
0
+    HTTP                     = "http".freeze
0
+    HTTPS                    = "https".freeze
0
+    UPCASE_HTTPS             = "HTTPS".freeze
0
     CONTENT_LENGTH           = "CONTENT_LENGTH".freeze
0
+    HTTP_ACCEPT_ENCODING     = "HTTP_ACCEPT_ENCODING".freeze
0
+    HTTP_ACCEPT_LANGUAGE     = "HTTP_ACCEPT_LANGUAGE".freeze
0
+    HTTP_ACCEPT_CHARSET      = "HTTP_ACCEPT_CHARSET".freeze
0
+    HTTP_CACHE_CONTROL       = "HTTP_CACHE_CONTROL".freeze    
0
     HTTP_X_FORWARDED_FOR     = "HTTP_X_FORWARDED_FOR".freeze
0
     HTTP_IF_MODIFIED_SINCE   = "HTTP_IF_MODIFIED_SINCE".freeze
0
+    HTTP_X_FORWARDED_HOST    = "HTTP_X_FORWARDED_HOST".freeze
0
+    HTTP_X_FORWARDED_PROTO   = "HTTP_X_FORWARDED_PROTO".freeze
0
+    HTTP_X_REQUESTED_WITH    = "HTTP_X_REQUESTED_WITH".freeze
0
     HTTP_IF_NONE_MATCH       = "HTTP_IF_NONE_MATCH".freeze
0
     HTTP_CONTENT_TYPE        = "HTTP_CONTENT_TYPE".freeze
0
     HTTP_CONTENT_LENGTH      = "HTTP_CONTENT_LENGTH".freeze
0
+    HTTP_REFERER             = "HTTP_REFERER".freeze
0
+    HTTP_USER_AGENT          = "HTTP_USER_AGENT".freeze
0
+    HTTP_CLIENT_IP           = "HTTP_CLIENT_IP".freeze
0
+    HTTP_CONNECTION          = "HTTP_CONNECTION".freeze
0
+    HTTP_VERSION             = "HTTP_VERSION".freeze
0
+    GATEWAY_INTERFACE        = "GATEWAY_INTERFACE".freeze
0
     UPLOAD_ID                = "upload_id".freeze
0
     PATH_INFO                = "PATH_INFO".freeze
0
     SCRIPT_NAME              = "SCRIPT_NAME".freeze
0
+    SERVER_NAME              = "SERVER_NAME".freeze
0
+    SERVER_PORT              = "SERVER_PORT".freeze
0
+    SERVER_SOFTWARE          = "SERVER_SOFTWARE".freeze
0
     REQUEST_URI              = "REQUEST_URI".freeze
0
     REQUEST_PATH             = "REQUEST_PATH".freeze
0
     REQUEST_METHOD           = "REQUEST_METHOD".freeze
0
     REMOTE_ADDR              = "REMOTE_ADDR".freeze
0
+    HTTP_HOST                = "HTTP_HOST".freeze
0
+    HTTP_ACCEPT              = "HTTP_ACCEPT".freeze
0
+    HTTP_KEEP_ALIVE          = "HTTP_KEEP_ALIVE".freeze
0
     BREAK_TAG                = "<br/>".freeze
0
     EMPTY_STRING             = "".freeze
0
     NEWLINE                  = "\n".freeze
0
     DOUBLE_NEWLINE           = "\n\n".freeze
0
     LOCATION                 = "Location".freeze
0
     TEXT_SLASH_HTML          = "text/html".freeze
0
+    RACK_INPUT               = 'rack.input'.freeze
0
   end
0
 end
...
33
34
35
36
 
 
37
38
39
...
53
54
55
56
 
57
58
59
...
79
80
81
82
 
 
83
84
85
...
91
92
93
94
 
95
96
97
...
179
180
181
182
 
183
184
185
...
322
323
324
325
 
 
 
326
327
328
...
332
333
334
335
 
 
336
 
337
338
339
 
 
 
 
340
341
342
343
344
 
345
346
347
...
352
353
354
355
 
 
 
356
357
358
...
360
361
362
363
 
 
 
 
 
364
365
366
...
368
369
370
371
 
372
373
374
...
384
385
386
387
 
388
389
390
...
392
393
394
395
 
 
396
397
398
...
400
401
402
403
 
 
404
405
406
...
408
409
410
411
 
 
412
413
414
...
416
417
418
419
 
 
420
421
422
...
424
425
426
427
 
 
428
429
430
...
432
433
434
435
 
 
436
437
438
...
440
441
442
443
 
 
444
445
446
...
448
449
450
451
 
452
453
454
...
456
457
458
459
 
460
461
462
...
464
465
466
467
 
468
469
470
...
472
473
474
475
 
476
477
478
...
480
481
482
483
 
484
485
486
...
488
489
490
491
 
492
493
494
...
496
497
498
499
 
500
501
502
...
504
505
506
507
 
508
509
510
...
522
523
524
525
 
526
527
528
...
532
533
534
535
 
536
537
538
...
540
541
542
543
 
544
545
546
...
548
549
550
551
 
552
553
554
...
561
562
563
564
 
565
566
567
...
575
576
577
578
 
579
580
581
...
33
34
35
 
36
37
38
39
40
...
54
55
56
 
57
58
59
60
...
80
81
82
 
83
84
85
86
87
...
93
94
95
 
96
97
98
99
...
181
182
183
 
184
185
186
187
...
324
325
326
 
327
328
329
330
331
332
...
336
337
338
 
339
340
341
342
343
 
 
344
345
346
347
348
349
350
351
352
353
354
355
356
...
361
362
363
 
364
365
366
367
368
369
...
371
372
373
 
374
375
376
377
378
379
380
381
...
383
384
385
 
386
387
388
389
...
399
400
401
 
402
403
404
405
...
407
408
409
 
410
411
412
413
414
...
416
417
418
 
419
420
421
422
423
...
425
426
427
 
428
429
430
431
432
...
434
435
436
 
437
438
439
440
441
...
443
444
445
 
446
447
448
449
450
...
452
453
454
 
455
456
457
458
459
...
461
462
463
 
464
465
466
467
468
...
470
471
472
 
473
474
475
476
...
478
479
480
 
481
482
483
484
...
486
487
488
 
489
490
491
492
...
494
495
496
 
497
498
499
500
...
502
503
504
 
505
506
507
508
...
510
511
512
 
513
514
515
516
...
518
519
520
 
521
522
523
524
...
526
527
528
 
529
530
531
532
...
544
545
546
 
547
548
549
550
...
554
555
556
 
557
558
559
560
...
562
563
564
 
565
566
567
568
...
570
571
572
 
573
574
575
576
...
583
584
585
 
586
587
588
589
...
597
598
599
 
600
601
602
603
0
@@ -33,7 +33,8 @@ module Merb
0
     # @api private
0
     def initialize(rack_env)
0
       @env  = rack_env
0
-      @body = rack_env['rack.input']
0
+      # Merb::Const::RACK_INPUT = 'rack.input'.freeze
0
+      @body = rack_env[Merb::Const::RACK_INPUT]
0
       @route_params = {}
0
     end
0
     
0
@@ -53,7 +54,7 @@ module Merb
0
           "segment to route definition?\nHere is what's specified:\n" + 
0
           route.inspect
0
       end
0
-      path = [params[:namespace], params[:controller]].compact.join("/")
0
+      path = [params[:namespace], params[:controller]].compact.join(Merb::Const::SLASH)
0
       controller = path.snake_case.to_const_string
0
       
0
       begin
0
@@ -79,7 +80,8 @@ module Merb
0
     # @api public
0
     def method
0
       @method ||= begin
0
-        request_method = @env['REQUEST_METHOD'].downcase.to_sym
0
+        # Merb::Const::REQUEST_METHOD = "REQUEST_METHOD".freeze
0
+        request_method = @env[Merb::Const::REQUEST_METHOD].downcase.to_sym
0
         case request_method
0
         when :get, :head, :put, :delete, :options
0
           request_method
0
@@ -91,7 +93,7 @@ module Merb
0
           m.downcase! if m
0
           METHODS.include?(m) ? m.to_sym : :post
0
         else
0
-          raise "Unknown REQUEST_METHOD: #{@env['REQUEST_METHOD']}"
0
+          raise "Unknown REQUEST_METHOD: #{@env[Merb::Const::REQUEST_METHOD]}"
0
         end
0
       end
0
     end
0
@@ -179,7 +181,7 @@ module Merb
0
     # 
0
     # @api private
0
     def query_params
0
-      @query_params ||= self.class.query_parse(query_string || '')
0
+      @query_params ||= self.class.query_parse(query_string || Merb::Const::EMPTY_STRING)
0
     end
0
     
0
     # Parameters passed in the body of the request. Ajax calls from
0
@@ -322,7 +324,9 @@ module Merb
0
     # 
0
     # @api public
0
     def xml_http_request?
0
-      not /XMLHttpRequest/i.match(@env['HTTP_X_REQUESTED_WITH']).nil?
0
+      # Merb::Const::XML_HTTP_REQUEST_REGEXP = /XMLHttpRequest/i.freeze
0
+      # Merb::Const::HTTP_X_REQUESTED_WITH   = "HTTP_X_REQUESTED_WITH".freeze
0
+      !Merb::Const::XML_HTTP_REQUEST_REGEXP.match(@env[Merb::Const::HTTP_X_REQUESTED_WITH]).nil?
0
     end
0
     alias xhr? :xml_http_request?
0
     alias ajax? :xml_http_request?
0
@@ -332,16 +336,21 @@ module Merb
0
     # 
0
     # @api public
0
     def remote_ip
0
-      return @env['HTTP_CLIENT_IP'] if @env.include?('HTTP_CLIENT_IP')
0
+      # Merb::Const::HTTP_CLIENT_IP = "HTTP_CLIENT_IP".freeze
0
+      return @env[Merb::Const::HTTP_CLIENT_IP] if @env.include?(Merb::Const::HTTP_CLIENT_IP)
0
       
0
+      # Merb::Const::HTTP_X_FORWARDED_FOR = "HTTP_X_FORWARDED_FOR".freeze
0
       if @env.include?(Merb::Const::HTTP_X_FORWARDED_FOR) then
0
-        remote_ips = @env[Merb::Const::HTTP_X_FORWARDED_FOR].split(',').reject do |ip|
0
-          ip =~ /^unknown$|^(127|10|172\.16|192\.168)\./i
0
+        # Merb::Const::COMMA = ",".freeze
0
+        remote_ips = @env[Merb::Const::HTTP_X_FORWARDED_FOR].split(Merb::Const::COMMA).reject do |ip|
0
+          # Merb::Const::TRUSTED_IP_REGEXP = /^unknown$|^(127|10|172\.16|192\.168)\./i.freeze
0
+          ip =~ Merb::Const::TRUSTED_IP_REGEXP
0
         end
0
         
0
         return remote_ips.first.strip unless remote_ips.empty?
0
       end
0
       
0
+      # Merb::Const::REMOTE_ADDR = "REMOTE_ADDR".freeze
0
       return @env[Merb::Const::REMOTE_ADDR]
0
     end
0
     
0
@@ -352,7 +361,9 @@ module Merb
0
     # 
0
     # @api public
0
     def protocol
0
-      ssl? ? 'https' : 'http'
0
+      # Merb::Const::HTTP         = 'http'.freeze
0
+      # Merb::Const::HTTPS        = 'https'.freeze
0
+      ssl? ? Merb::Const::HTTPS : Merb::Const::HTTP
0
     end
0
     
0
     # ==== Returns
0
@@ -360,7 +371,11 @@ module Merb
0
     # 
0
     # @api public
0
     def ssl?
0
-      @env['HTTPS'] == 'on' || @env['HTTP_X_FORWARDED_PROTO'] == 'https'
0
+      # Merb::Const::ON                     = 'on'.freeze
0
+      # Merb::Const::HTTPS                  = 'https'.freeze
0
+      # Merb::Const::UPCASE_HTTPS           = 'HTTPS'.freeze
0
+      # Merb::Const::HTTP_X_FORWARDED_PROTO = 'HTTP_X_FORWARDED_PROTO'.freeze
0
+      @env[Merb::Const::UPCASE_HTTPS] == Merb::Const::ON || @env[Merb::Const::HTTP_X_FORWARDED_PROTO] == Merb::Const::HTTPS
0
     end
0
     
0
     # ==== Returns
0
@@ -368,7 +383,7 @@ module Merb
0
     # 
0
     # @api public
0
     def referer
0
-      @env['HTTP_REFERER']
0
+      @env[Merb::Const::HTTP_REFERER]
0
     end
0
     
0
     # ==== Returns
0
@@ -384,7 +399,7 @@ module Merb
0
     # 
0
     # @api public
0
     def uri
0
-      @env['REQUEST_PATH'] || @env['REQUEST_URI'] || path_info
0
+      @env[Merb::Const::REQUEST_PATH] || @env[Merb::Const::REQUEST_URI] || path_info
0
     end
0
     
0
     # ==== Returns
0
@@ -392,7 +407,8 @@ module Merb
0
     # 
0
     # @api public
0
     def user_agent
0
-      @env['HTTP_USER_AGENT']
0
+      # Merb::Const::HTTP_USER_AGENT = "HTTP_USER_AGENT".freeze
0
+      @env[Merb::Const::HTTP_USER_AGENT]
0
     end
0
     
0
     # ==== Returns
0
@@ -400,7 +416,8 @@ module Merb
0
     # 
0
     # @api public
0
     def server_name
0
-      @env['SERVER_NAME']
0
+      # Merb::Const::SERVER_NAME = "SERVER_NAME".freeze
0
+      @env[Merb::Const::SERVER_NAME]
0
     end
0
     
0
     # ==== Returns
0
@@ -408,7 +425,8 @@ module Merb
0
     # 
0
     # @api private
0
     def accept_encoding
0
-      @env['HTTP_ACCEPT_ENCODING']
0
+      # Merb::Const::HTTP_ACCEPT_ENCODING = "HTTP_ACCEPT_ENCODING".freeze
0
+      @env[Merb::Const::HTTP_ACCEPT_ENCODING]
0
     end
0
     
0
     # ==== Returns
0
@@ -416,7 +434,8 @@ module Merb
0
     # 
0
     # @api public
0
     def script_name
0
-      @env['SCRIPT_NAME']
0
+      # Merb::Const::SCRIPT_NAME = "SCRIPT_NAME".freeze
0
+      @env[Merb::Const::SCRIPT_NAME]
0
     end
0
     
0
     # ==== Returns
0
@@ -424,7 +443,8 @@ module Merb
0
     # 
0
     # @api public
0
     def cache_control
0
-      @env['HTTP_CACHE_CONTROL']
0
+      # Merb::Const::HTTP_CACHE_CONTROL = "HTTP_CACHE_CONTROL".freeze
0
+      @env[Merb::Const::HTTP_CACHE_CONTROL]
0
     end
0
     
0
     # ==== Returns
0
@@ -432,7 +452,8 @@ module Merb
0
     # 
0
     # @api public
0
     def accept_language
0
-      @env['HTTP_ACCEPT_LANGUAGE']
0
+      # Merb::Const::HTTP_ACCEPT_LANGUAGE = "HTTP_ACCEPT_LANGUAGE".freeze
0
+      @env[Merb::Const::HTTP_ACCEPT_LANGUAGE]
0
     end
0
     
0
     # ==== Returns
0
@@ -440,7 +461,8 @@ module Merb
0
     # 
0
     # @api public
0
     def server_software
0
-      @env['SERVER_SOFTWARE']
0
+      # Merb::Const::SERVER_SOFTWARE = "SERVER_SOFTWARE".freeze
0
+      @env[Merb::Const::SERVER_SOFTWARE]
0
     end
0
     
0
     # ==== Returns
0
@@ -448,7 +470,7 @@ module Merb
0
     # 
0
     # @api public
0
     def keep_alive
0
-      @env['HTTP_KEEP_ALIVE']
0
+      @env[Merb::Const::HTTP_KEEP_ALIVE]
0
     end
0
     
0
     # ==== Returns
0
@@ -456,7 +478,7 @@ module Merb
0
     # 
0
     # @api public
0
     def accept_charset
0
-      @env['HTTP_ACCEPT_CHARSET']
0
+      @env[Merb::Const::HTTP_ACCEPT_CHARSET]
0
     end
0
     
0
     # ==== Returns
0
@@ -464,7 +486,7 @@ module Merb
0
     # 
0
     # @api private
0
     def version
0
-      @env['HTTP_VERSION']
0
+      @env[Merb::Const::HTTP_VERSION]
0
     end
0
     
0
     # ==== Returns
0
@@ -472,7 +494,7 @@ module Merb
0
     # 
0
     # @api public
0
     def gateway
0
-      @env['GATEWAY_INTERFACE']
0
+      @env[Merb::Const::GATEWAY_INTERFACE]
0
     end
0
     
0
     # ==== Returns
0
@@ -480,7 +502,7 @@ module Merb
0
     # 
0
     # @api private
0
     def accept
0
-      @env['HTTP_ACCEPT'].blank? ? "*/*" : @env['HTTP_ACCEPT']
0
+      @env[Merb::Const::HTTP_ACCEPT].blank? ? "*/*" : @env[Merb::Const::HTTP_ACCEPT]
0
     end
0
     
0
     # ==== Returns
0
@@ -488,7 +510,7 @@ module Merb
0
     # 
0
     # @api private
0
     def connection
0
-      @env['HTTP_CONNECTION']
0
+      @env[Merb::Const::HTTP_CONNECTION]
0
     end
0
     
0
     # ==== Returns
0
@@ -496,7 +518,7 @@ module Merb
0
     # 
0
     # @api private
0
     def query_string
0
-      @env['QUERY_STRING']  
0
+      @env[Merb::Const::QUERY_STRING]  
0
     end
0
     
0
     # ==== Returns
0
@@ -504,7 +526,7 @@ module Merb
0
     # 
0
     # @api private
0
     def content_type
0
-      @env['CONTENT_TYPE']
0
+      @env[Merb::Const::UPCASE_CONTENT_TYPE]
0
     end
0
     
0
     # ==== Returns
0
@@ -522,7 +544,7 @@ module Merb
0
     # 
0
     # @api public
0
     def path
0
-      path = (uri.empty? ? '/' : uri.split('?').first).squeeze("/")
0
+      path = (uri.empty? ? Merb::Const::SLASH : uri.split(Merb::Const::QUESTION_MARK).first).squeeze(Merb::Const::SLASH)
0
       path = path[0..-2] if (path[-1] == ?/) && path.size > 1
0
       path
0
     end
0
@@ -532,7 +554,7 @@ module Merb
0
     # 
0
     # @api public
0
     def path_info
0
-      @path_info ||= self.class.unescape(@env['PATH_INFO'])
0
+      @path_info ||= self.class.unescape(@env[Merb::Const::PATH_INFO])
0
     end
0
     
0
     # ==== Returns
0
@@ -540,7 +562,7 @@ module Merb
0
     # 
0
     # @api public
0
     def port
0
-      @env['SERVER_PORT'].to_i
0
+      @env[Merb::Const::SERVER_PORT].to_i
0
     end
0
     
0
     # ==== Returns
0
@@ -548,7 +570,7 @@ module Merb
0
     # 
0
     # @api public
0
     def host
0
-      @env['HTTP_X_FORWARDED_HOST'] || @env['HTTP_HOST'
0
+      @env[Merb::Const::HTTP_X_FORWARDED_HOST] || @env[Merb::Const::HTTP_HOST
0
     end
0
     
0
     # ==== Parameters
0
@@ -561,7 +583,7 @@ module Merb
0
     # 
0
     # @api public
0
     def subdomains(tld_length = 1)
0
-      parts = host.split('.')
0
+      parts = host.split(Merb::Const::DOT)
0
       parts[0..-(tld_length+2)]
0
     end
0
     
0
@@ -575,7 +597,7 @@ module Merb
0
     # 
0
     # @api public
0
     def domain(tld_length = 1)
0
-      host.split('.').last(1 + tld_length).join('.').sub(/:\d+$/,'')
0
+      host.split(Merb::Const::DOT).last(1 + tld_length).join(Merb::Const::DOT).sub(/:\d+$/, Merb::Const::EMPTY_STRING)
0
     end
0
     
0
     # ==== Returns
...
34
35
36
37
 
38
39
40
...
60
61
62
63
 
64
65
66
67
68
69
70
 
 
 
71
72
 
73
74
75
...
34
35
36
 
37
38
39
40
...
60
61
62
 
63
64
65
66
67
68
 
 
69
70
71
72
 
73
74
75
76
0
@@ -34,7 +34,7 @@ module Merb
0
         def self.run(app, options={})
0
           @server = ::Mongrel::HttpServer.new(options[:Host] || '0.0.0.0',
0
                                              options[:Port] || 8080)
0
-          @server.register('/', ::Merb::Rack::Handler::Mongrel.new(app))
0
+          @server.register(Merb::Const::SLASH, ::Merb::Rack::Handler::Mongrel.new(app))
0
           yield @server  if block_given?
0
           @server.run.join
0
         end
0
@@ -60,16 +60,17 @@ module Merb
0
           env[Merb::Const::SCRIPT_NAME] = Merb::Const::EMPTY_STRING if env[Merb::Const::SCRIPT_NAME] == Merb::Const::SLASH
0
   
0
           env.update({"rack.version" => [0,1],
0
-                       "rack.input" => request.body || StringIO.new(""),
0
+                       Merb::Const::RACK_INPUT => request.body || StringIO.new(""),
0
                        "rack.errors" => STDERR,
0
   
0
                        "rack.multithread" => true,
0
                        "rack.multiprocess" => false, # ???
0
                        "rack.run_once" => false,
0
-  
0
-                       "rack.url_scheme" => "http"
0
+                        
0
+                       # Merb::Const::HTTP = "http".freeze
0
+                       "rack.url_scheme" => Merb::Const::HTTP
0
                      })
0
-          env[Merb::Const::QUERY_STRING] ||= ""
0
+          env[Merb::Const::QUERY_STRING] ||= Merb::Const::EMPTY_STRING
0
           env.delete Merb::Const::PATH_INFO  if env[Merb::Const::PATH_INFO] == Merb::Const::EMPTY_STRING
0
   
0
           status, headers, body = @app.call(env)

Comments