Guest User

Untitled

a guest
Feb 21st, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.56 KB | None | 0 0
  1. require 'cgi'
  2.  
  3. =begin
  4. module CGI
  5. def CGI.escape(string)
  6. string.gsub(/([^ a-zA-Z0-9_.-]+)/n) do
  7. '%' + $1.unpack('H2' * $1.size).join('%').upcase
  8. end
  9. end
  10. end
  11. =end
  12.  
  13. class Hash
  14. def query_string options = {}
  15. escape = options.getopt(:escape, true)
  16. pairs = []
  17. esc = escape ? lambda{|v| CGI.escape v.to_s} : lambda{|v| v.to_s}
  18. each do |key, values|
  19. key = key.to_s
  20. values = [values].flatten
  21. values.each do |value|
  22. value = value.to_s
  23. if value.empty?
  24. pairs << [ esc[key] ]
  25. else
  26. pairs << [ esc[key], esc[value] ].join('=')
  27. end
  28. end
  29. end
  30. pairs.replace pairs.sort_by{|pair| pair.size}
  31. pairs.join('&')
  32. end
  33.  
  34. def to_options!
  35. replace to_options
  36. end
  37.  
  38. def to_options
  39. keys.inject(Hash.new){|h,k| h.update k.to_s.to_sym => fetch(k)}
  40. end
  41.  
  42. def html_attributes
  43. map{|k,v| [k, v.to_s.inspect].join('=')}.join(' ')
  44. end
  45.  
  46. def getopt key, default = nil
  47. [ key ].flatten.each do |key|
  48. return fetch(key) if has_key?(key)
  49. key = key.to_s
  50. return fetch(key) if has_key?(key)
  51. key = key.to_sym
  52. return fetch(key) if has_key?(key)
  53. end
  54. default
  55. end
  56.  
  57. def getopts *args
  58. args.flatten.map{|arg| getopt arg}
  59. end
  60.  
  61. def hasopt key, default = nil
  62. [ key ].flatten.each do |key|
  63. return true if has_key?(key)
  64. key = key.to_s
  65. return true if has_key?(key)
  66. key = key.to_sym
  67. return true if has_key?(key)
  68. end
  69. default
  70. end
  71.  
  72. def hasopts *args
  73. args.flatten.map{|arg| hasopt arg}
  74. end
  75.  
  76. def delopt key, default = nil
  77. [ key ].flatten.each do |key|
  78. return delete(key) if has_key?(key)
  79. key = key.to_s
  80. return delete(key) if has_key?(key)
  81. key = key.to_sym
  82. return delete(key) if has_key?(key)
  83. end
  84. default
  85. end
  86.  
  87. def delopts *args
  88. args.flatten.map{|arg| delopt arg}
  89. end
  90. end
  91.  
  92. class String
  93. def String.unindented! s
  94. margin = nil
  95. s.each do |line|
  96. next if line =~ %r/^\s*$/
  97. margin = line[%r/^\s*/] and break
  98. end
  99. s.gsub! %r/^#{ margin }/, "" if margin
  100. margin ? s : nil
  101. end
  102.  
  103. def String.unindented s
  104. s = "#{ s }"
  105. unindented! s
  106. s
  107. end
  108.  
  109. def unindented!
  110. String.unindented! self
  111. end
  112.  
  113. def unindented
  114. String.unindented self
  115. end
  116.  
  117. def String.indented! s, n = 2
  118. margin = ' ' * Integer(n)
  119. unindented!(s).gsub!(%r/^/, margin)
  120. s
  121. end
  122.  
  123. def String.indented s, n = 2
  124. s = "#{ s }"
  125. indented! s, n
  126. s
  127. end
  128.  
  129. def indented! n = 2
  130. String.indented! self, n
  131. end
  132.  
  133. def indented n = 2
  134. String.indented self, n
  135. end
  136.  
  137. def String.inlined! s
  138. #s.gsub! %r/([^\n]|\A)\n(?!\n)/, '\1 '
  139. s.strip!
  140. s.gsub! %r/([^\n])\n(?!\n)/, '\1 '
  141. end
  142.  
  143. def String.inlined s
  144. s = "#{ s }"
  145. inlined! s
  146. s
  147. end
  148.  
  149. def inlined!
  150. String.inlined! self
  151. end
  152.  
  153. def inlined
  154. String.inlined self
  155. end
  156.  
  157. def solid
  158. gsub %r/[ ]/, '&nbsp;'
  159. end
  160.  
  161.  
  162. class Slug < ::String
  163. def Slug.for *args
  164. string = args.flatten.compact.join('-')
  165. words = string.to_s.scan(%r/\w+/)
  166. words.map!{|word| word.gsub %r/[^0-9a-zA-Z_-]/, ''}
  167. words.delete_if{|word| word.nil? or word.strip.empty?}
  168. new words.join('-').downcase
  169. end
  170. end
  171.  
  172.  
  173. def slug
  174. Slug.for self
  175. end
  176.  
  177. def / other
  178. File.join self, other.to_s
  179. end
  180. end
  181.  
  182. class Array
  183. def options
  184. Hash === last ? pop : {}
  185. end
  186. end
  187.  
  188. class Object
  189. def singleton_class &block
  190. sc =
  191. class << self
  192. self
  193. end
  194. block ? sc.module_eval(&block) : sc
  195. end
  196. end
  197.  
  198. class Numeric
  199. def parity
  200. (self.to_i % 2) == 0 ? 'even' : 'odd'
  201. end
  202. end
Add Comment
Please, Sign In to add comment