cartodb/app/model_factories/layer_factory.rb
2020-06-15 10:58:47 +08:00

75 lines
2.3 KiB
Ruby

require_relative '../../lib/carto/styles/style'
require_relative '../../lib/carto/styles/point'
require_relative '../../lib/carto/styles/line'
require_relative '../../lib/carto/styles/polygon'
require_relative '../../lib/carto/styles/geometry'
require_relative '../../lib/carto/form'
module ModelFactories
class LayerFactory
def self.get_new(options)
::Layer.new(options)
end
def self.get_default_base_layer(user)
basemap = user.default_basemap.except('default')
options = if basemap['className'] === 'googlemaps'
{ kind: 'gmapsbase', options: basemap }
else
{ kind: 'tiled', options: basemap }
end
::Layer.new(options)
end
def self.get_default_data_layer(table_name, user, geometry_type)
data_layer = ::Layer.new(Cartodb.config[:layer_opts]['data'].deep_dup)
data_layer.options['table_name'] = table_name
data_layer.options['user_name'] = user.username
data_layer.options['tile_style'] = tile_style(user, geometry_type)
data_layer.infowindow ||= {}
data_layer.infowindow['fields'] = []
data_layer.tooltip ||= {}
data_layer.tooltip['fields'] = []
if user.builder_enabled?
data_layer.options['style_properties'] = style_properties(geometry_type)
end
data_layer
end
# Info: does not perform validity checks
def self.get_default_labels_layer(base_layer)
::Layer.new(
kind: 'tiled',
options: base_layer.options.except('className', 'labels').merge(
'type' => 'Tiled',
'name' => "#{base_layer.options['name']} Labels"
).merge(base_layer.options['labels'])
)
end
def self.style_properties(geometry_type)
{
type: 'simple',
properties: Carto::Form.new(geometry_type).to_hash
}
end
def self.tile_style(user, geometry_type)
user.builder_enabled? ? builder_tile_style(geometry_type) : legacy_tile_style(geometry_type)
end
def self.builder_tile_style(geometry_type)
style_class = Carto::Styles::Style.style_for_geometry_type(geometry_type)
style_class ? style_class.new.to_cartocss : legacy_tile_style(geometry_type)
end
def self.legacy_tile_style(geometry_type)
"#layer #{Cartodb.config[:layer_opts]['default_tile_styles'][geometry_type]}"
end
end
end