breaking out into separate files
[sinatra.git] / lib / sinatra / core_ext.rb
blob48ad46396347bfcbfeea4b4f9a2650f76d72cced
1 def silence_warnings
2   old_verbose, $VERBOSE = $VERBOSE, nil
3   yield
4 ensure
5   $VERBOSE = old_verbose
6 end
8 class String
9   def to_param
10     URI.escape(self)
11   end
12   
13   def from_param
14     URI.unescape(self)
15   end
16 end
18 class Hash
19   def to_params
20     map { |k,v| "#{k}=#{URI.escape(v)}" }.join('&')
21   end
22   
23   def symbolize_keys
24     self.inject({}) { |h,(k,v)| h[k.to_sym] = v; h }
25   end
26   
27   def pass(*keys)
28     reject { |k,v| !keys.include?(k) }
29   end
30 end
32 class Symbol
33   def to_proc 
34     Proc.new { |*args| args.shift.__send__(self, *args) }
35   end
36 end
38 class Array
39   def to_hash
40     self.inject({}) { |h, (k, v)|  h[k] = v; h }
41   end
42   
43   def to_proc
44     Proc.new { |*args| args.shift.__send__(self[0], args + self[1..-1]) }
45   end
46 end
48 class Proc
49   def block
50     self
51   end
52 end
54 module Enumerable
55   def eject(&block)
56     find { |e| result = block[e] and break result }
57   end
58 end