55 lines
1.5 KiB
Ruby
55 lines
1.5 KiB
Ruby
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
|