50 lines
1.5 KiB
Ruby
50 lines
1.5 KiB
Ruby
module CartoDB
|
|
class TableRegistrar
|
|
def initialize(user, table_klass=nil)
|
|
@user = user
|
|
@table_klass = table_klass
|
|
end
|
|
|
|
def register(table_name, data_import_id, user_table = nil)
|
|
self.table = table_klass.new(user_table: user_table)
|
|
table.user_id = user.id unless user_table.present?
|
|
# INFO: we're not creating but registering an existent table, so we want fixed, known name
|
|
table.instance_eval { self[:name] = table_name }
|
|
table.migrate_existing_table = table_name
|
|
table.data_import_id = data_import_id
|
|
set_metadata_from_data_import_id(table, data_import_id)
|
|
table.save
|
|
table.optimize
|
|
table.map.recalculate_bounds!
|
|
end
|
|
|
|
def exists?(user, table_name)
|
|
!table_klass.where(user_id: user.id, name: table_name).empty?
|
|
end
|
|
|
|
attr_reader :user, :table
|
|
|
|
private
|
|
|
|
attr_reader :table_klass
|
|
attr_writer :table
|
|
|
|
def set_metadata_from_data_import_id(table, data_import_id)
|
|
external_data_import = ExternalDataImport.where(data_import_id: data_import_id).first
|
|
if external_data_import
|
|
external_source = Carto::ExternalSource.where(id: external_data_import.external_source_id).first
|
|
if external_source
|
|
visualization = external_source.visualization
|
|
if visualization
|
|
table.description = visualization.description
|
|
table.set_tag_array(visualization.tags)
|
|
end
|
|
end
|
|
end
|
|
rescue => e
|
|
CartoDB.notify_exception(e)
|
|
raise e
|
|
end
|
|
end # TableRegistrar
|
|
end # CartoDB
|