PageRenderTime 50ms CodeModel.GetById 21ms RepoModel.GetById 1ms app.codeStats 0ms

/lib/cartodb-rb-client/cartodb/libs/string.rb

https://github.com/Vizzuality/cartodb-rb-client
Ruby | 116 lines | 107 code | 7 blank | 2 comment | 7 complexity | 9561d40f0c553dc5eb2410369ca20f87 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.force_encoding("UTF-8")
  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. if self.downcase == "number"
  70. "double precision"
  71. else
  72. CartoDB::TYPES[self.downcase].first
  73. end
  74. else
  75. self.downcase
  76. end
  77. end
  78. # {"integer"=>:number, "real"=>:number, "varchar"=>:string, "text"=>:string, "timestamp"=>:date, "boolean"=>:boolean}
  79. def convert_to_cartodb_type
  80. inverse_types = CartoDB::TYPES.invert.inject({}){ |h, e| e.first.each{ |k| h[k] = e.last }; h}
  81. if inverse_types.keys.include?(self.downcase)
  82. inverse_types[self.downcase]
  83. else
  84. inverse_types.keys.select{ |t| !t.is_a?(String) }.each do |re|
  85. if self.downcase.match(re)
  86. return inverse_types[re]
  87. end
  88. end
  89. self.downcase
  90. end
  91. end
  92. def sanitize_sql
  93. self.gsub(/\\/, '\&\&').gsub(/'/, "''")
  94. end
  95. def host
  96. self.split('/')[2]
  97. end
  98. def sanitize_column_name
  99. temporal_name = self.sanitize
  100. if temporal_name !~ /^[a-zA-Z_]/ || CartoDB::POSTGRESQL_RESERVED_WORDS.include?(self.upcase)
  101. return '_' + temporal_name
  102. else
  103. temporal_name
  104. end
  105. end
  106. end