Initial commit
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
require_relative '../../../helpers/carto/html_safe'
|
||||
require_dependency 'carto/api/vizjson_presenter'
|
||||
|
||||
module Carto
|
||||
module Admin
|
||||
class VisualizationPublicMapAdapter
|
||||
extend Forwardable
|
||||
include Carto::HtmlSafe
|
||||
GEOMETRY_MAPPING = {
|
||||
'st_multipolygon' => 'polygon',
|
||||
'st_polygon' => 'polygon',
|
||||
'st_multilinestring' => 'line',
|
||||
'st_linestring' => 'line',
|
||||
'st_multipoint' => 'point',
|
||||
'st_point' => 'point'
|
||||
}
|
||||
|
||||
delegate [
|
||||
:type_slide?, :derived?, :organization, :organization?, :id,
|
||||
:password_protected?, :varnish_key, :related_tables, :password_valid?, :get_auth_tokens, :table, :name,
|
||||
:overlays, :created_at, :updated_at, :description, :mapviews, :geometry_types, :privacy, :tags,
|
||||
:surrogate_key, :has_password?, :total_mapviews, :is_viewable_by_user?, :is_accesible_by_user?,
|
||||
:can_be_cached?, :is_privacy_private?, :source, :kind_raster?, :has_read_permission?, :has_write_permission?,
|
||||
:open_in_editor?, :version, :kind, :public?, :public_with_link?, :user_table, :liked_by?
|
||||
] => :visualization
|
||||
|
||||
attr_reader :visualization
|
||||
|
||||
def initialize(visualization, current_viewer, context)
|
||||
@visualization = visualization
|
||||
@current_viewer = current_viewer
|
||||
@context = context
|
||||
end
|
||||
|
||||
def to_vizjson(options = {})
|
||||
Carto::Api::VizJSONPresenter.new(@visualization, $tables_metadata).to_vizjson(options)
|
||||
end
|
||||
|
||||
def is_owner?(user)
|
||||
@visualization.owner?(user)
|
||||
end
|
||||
|
||||
def to_hash(options={})
|
||||
# TODO: using an Api presenter here smells, refactor
|
||||
presenter = Carto::Api::VisualizationPresenter.new(@visualization, @current_viewer, @context, options.merge(show_stats: false))
|
||||
options.delete(:public_fields_only) === true ? presenter.to_public_poro : presenter.to_poro
|
||||
end
|
||||
|
||||
def map
|
||||
Carto::Admin::MapPublicMapAdapter.new(@visualization.map)
|
||||
end
|
||||
|
||||
def user
|
||||
Carto::Admin::UserPublicMapAdapter.new(@visualization.user)
|
||||
end
|
||||
|
||||
# TODO: remove is_ prefixed methods from visualization
|
||||
def private?
|
||||
@visualization.private?
|
||||
end
|
||||
|
||||
def related_canonical_visualizations
|
||||
@visualization.related_canonical_visualizations.map { |rv|
|
||||
Carto::Admin::VisualizationPublicMapAdapter.new(rv, @current_viewer, @context) if rv.public?
|
||||
}.compact
|
||||
end
|
||||
|
||||
def related_visualizations_geometry_types
|
||||
related_canonical_visualizations.collect(&:geometry_types).flatten.uniq
|
||||
end
|
||||
|
||||
def related_tables_geometry_types
|
||||
related_tables.collect(&:geometry_types).flatten.uniq
|
||||
end
|
||||
|
||||
def related_visualizations_simple_geometry_types
|
||||
simplify_geometry_types(related_visualizations_geometry_types)
|
||||
end
|
||||
|
||||
def related_tables_simple_geometry_types
|
||||
simplify_geometry_types(related_tables_geometry_types)
|
||||
end
|
||||
|
||||
def map_zoom
|
||||
map.nil? ? nil : map.zoom
|
||||
end
|
||||
|
||||
def display_name_or_name
|
||||
@visualization.display_name.nil? ? @visualization.name : @visualization.display_name
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def simplify_geometry_types(geometry_types)
|
||||
geometry_types.map { |gt| GEOMETRY_MAPPING.fetch(gt.downcase, "unknown: #{gt}") }
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user