You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

55 lines
1.5 KiB

6 months ago
class String
def self.random(length=10)
('a'..'z').sort_by {rand}[0,length].join
end
def strip_tags
self.gsub(/<[^>]+>/m,'').strip
end
def get_cartodb_types
{
"number" => ["smallint", /numeric\(\d+,\d+\)/, "integer", "bigint", "decimal", "numeric", "double precision", "serial", "big serial", "real"],
"string" => ["varchar", "character varying", "text", /character\svarying\(\d+\)/, /char\s*\(\d+\)/, /character\s*\(\d+\)/],
"boolean" => ["boolean"],
"date" => [
"timestamptz",
"timestamp with time zone",
"timestamp without time zone"
]
}
end
def convert_to_db_type
cartodb_types = get_cartodb_types
if cartodb_types.keys.include?(downcase)
case downcase
when "number"
"double precision"
when "string"
"text"
else
cartodb_types[downcase].first
end
else
downcase
end
end
# {"integer"=>:number, "real"=>:number, "varchar"=>:string, "text"=>:string, "timestamp"=>:date, "boolean"=>:boolean}
def convert_to_cartodb_type
inverse_types = get_cartodb_types.invert.inject({}){ |h, e| e.first.each{ |k| h[k] = e.last }; h}
if inverse_types.keys.include?(self.downcase)
inverse_types[self.downcase]
else
inverse_types.keys.select{ |t| !t.is_a?(String) }.each do |re|
if self.downcase.match(re)
return inverse_types[re]
end
end
self.downcase
end
end
end