Initial commit
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
require_dependency 'map/copier'
|
||||
|
||||
module CartoDB
|
||||
module Visualization
|
||||
class TableBlender
|
||||
def initialize(user, tables=[])
|
||||
@user = user
|
||||
@tables = tables
|
||||
end
|
||||
|
||||
def blend
|
||||
raise "Viewer users can't blend tables" if user.viewer
|
||||
|
||||
maps = tables.map(&:map)
|
||||
copier = CartoDB::Map::Copier.new
|
||||
destination_map = copier.new_map_from(maps.first)
|
||||
destination_map.save
|
||||
|
||||
if @user.builder_enabled?
|
||||
base_layer = Carto::LayerFactory.build_default_base_layer(@user)
|
||||
destination_map.layers << base_layer
|
||||
if base_layer.supports_labels_layer?
|
||||
destination_map.layers << Carto::LayerFactory.build_default_labels_layer(base_layer)
|
||||
end
|
||||
else
|
||||
copier.copy_base_layer(maps.first, destination_map)
|
||||
end
|
||||
|
||||
maps.each { |map| copier.copy_data_layers(map, destination_map, user) }
|
||||
|
||||
destination_map.user_id = user.id
|
||||
destination_map.save
|
||||
destination_map
|
||||
end
|
||||
|
||||
def blended_privacy
|
||||
return Carto::Visualization::PRIVACY_PRIVATE if tables.any?(&:private?)
|
||||
return Carto::Visualization::PRIVACY_LINK if tables.any?(&:public_with_link_only?)
|
||||
Carto::Visualization::PRIVACY_PUBLIC
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
attr_reader :tables, :user
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user