PageRenderTime 54ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/config/initializers/string.rb

https://github.com/netconstructor/cartoset
Ruby | 102 lines | 92 code | 8 blank | 2 comment | 4 complexity | c40e29cd91455581451bd9661bae963a MD5 | raw file
Possible License(s): BSD-3-Clause
  1. # coding: UTF-8
  2. class String
  3. def self.random(length=10)
  4. ('a'..'z').sort_by {rand}[0,length].join
  5. end
  6. def normalize
  7. str = self.downcase
  8. return '' if str.blank?
  9. n = str
  10. n.gsub!(/[àáâãäåāă]/, 'a')
  11. n.gsub!(/æ/, 'ae')
  12. n.gsub!(/[ďđ]/, 'd')
  13. n.gsub!(/[çćčĉċ]/, 'c')
  14. n.gsub!(/[èéêëēęěĕė]/, 'e')
  15. n.gsub!(/ƒ/, 'f')
  16. n.gsub!(/[ĝğġģ]/, 'g')
  17. n.gsub!(/[ĥħ]/, 'h')
  18. n.gsub!(/[ììíîïīĩĭ]/, 'i')
  19. n.gsub!(/[įıijĵ]/, 'j')
  20. n.gsub!(/[ķĸ]/, 'k')
  21. n.gsub!(/[łľĺļŀ]/, 'l')
  22. n.gsub!(/[ñńňņʼnŋ]/, 'n')
  23. n.gsub!(/[òóôõöøōőŏŏ]/, 'o')
  24. n.gsub!(/œ/, 'oe')
  25. n.gsub!(/ą/, 'q')
  26. n.gsub!(/[ŕřŗ]/, 'r')
  27. n.gsub!(/[śšşŝș]/, 's')
  28. n.gsub!(/[ťţŧț]/, 't')
  29. n.gsub!(/[ùúûüūůűŭũų]/, 'u')
  30. n.gsub!(/ŵ/, 'w')
  31. n.gsub!(/[ýÿŷ]/, 'y')
  32. n.gsub!(/[žżź]/, 'z')
  33. n.gsub!(/[ÀÁÂÃÄÅĀĂ]/i, 'A')
  34. n.gsub!(/Æ/i, 'AE')
  35. n.gsub!(/[ĎĐ]/i, 'D')
  36. n.gsub!(/[ÇĆČĈĊ]/i, 'C')
  37. n.gsub!(/[ÈÉÊËĒĘĚĔĖ]/i, 'E')
  38. n.gsub!(/Ƒ/i, 'F')
  39. n.gsub!(/[ĜĞĠĢ]/i, 'G')
  40. n.gsub!(/[ĤĦ]/i, 'H')
  41. n.gsub!(/[ÌÌÍÎÏĪĨĬ]/i, 'I')
  42. n.gsub!(/[IJĴ]/i, 'J')
  43. n.gsub!(/[Ķĸ]/i, 'J')
  44. n.gsub!(/[ŁĽĹĻĿ]/i, 'L')
  45. n.gsub!(/[ÑŃŇŅʼnŊ]/i, 'M')
  46. n.gsub!(/[ÒÓÔÕÖØŌŐŎŎ]/i, 'N')
  47. n.gsub!(/Œ/i, 'OE')
  48. n.gsub!(/Ą/i, 'Q')
  49. n.gsub!(/[ŔŘŖ]/i, 'R')
  50. n.gsub!(/[ŚŠŞŜȘ]/i, 'S')
  51. n.gsub!(/[ŤŢŦȚ]/i, 'T')
  52. n.gsub!(/[ÙÚÛÜŪŮŰŬŨŲ]/i, 'U')
  53. n.gsub!(/Ŵ/i, 'W')
  54. n.gsub!(/[ÝŸŶ]/i, 'Y')
  55. n.gsub!(/[ŽŻŹ]/i, 'Z')
  56. n
  57. end
  58. def sanitize
  59. return if self.blank?
  60. self.gsub(/<[^>]+>/m,'').normalize.downcase.gsub(/&.+?;/,'-').
  61. gsub(/[^a-z0-9 _-]/,'-').strip.gsub(/\s+/,'-').gsub(/-+/,'-').
  62. gsub(/-/,' ').strip.gsub(/ /,'-').gsub(/-/,'_')
  63. end
  64. def strip_tags
  65. self.gsub(/<[^>]+>/m,'').strip
  66. end
  67. def convert_to_db_type
  68. if CartoDB::TYPES.keys.include?(self.downcase)
  69. CartoDB::TYPES[self.downcase].first
  70. else
  71. self.downcase
  72. end
  73. end
  74. # {"integer"=>:number, "real"=>:number, "varchar"=>:string, "text"=>:string, "timestamp"=>:date, "boolean"=>:boolean}
  75. def convert_to_cartodb_type
  76. inverse_types = CartoDB::TYPES.invert.inject({}){ |h, e| e.first.each{ |k| h[k] = e.last }; h}
  77. if inverse_types.keys.include?(self.downcase)
  78. inverse_types[self.downcase]
  79. else
  80. self.downcase
  81. end
  82. end
  83. def sanitize_sql!
  84. self.gsub(/\\/, '\&\&').gsub(/'/, "''")
  85. end
  86. def add_https_if_required!
  87. return self if self.start_with?('https://')
  88. return self.gsub(/^http:\/\//, 'https://') if self.start_with?('http://')
  89. 'https://' + self
  90. end
  91. end