cartodb-4.42/app/controllers/carto/api/maps_controller.rb
2024-04-06 05:25:13 +00:00

66 lines
1.9 KiB
Ruby

module Carto
module Api
class MapsController < ::Api::ApplicationController
ssl_required :show, :update
before_filter :load_map, :owners_only
rescue_from Carto::LoadError,
Carto::UnprocesableEntityError, with: :rescue_from_carto_error
def show
render_jsonp(map_presentation)
end
def update
@map.update_attributes!(update_params)
render_jsonp(map_presentation)
rescue ActiveRecord::RecordInvalid
validation_errors = @map.errors.full_messages.join(', ')
raise Carto::UnprocesableEntityError.new(validation_errors)
end
private
def load_map
@map = Carto::Map.find(params[:id])
rescue ActiveRecord::RecordNotFound
raise Carto::LoadError.new('Map not found')
end
def owners_only
unless @map.writable_by_user?(current_viewer)
raise Carto::LoadError.new('Map not found')
end
end
STRING_PARAMS = [:bounding_box_sw, :bounding_box_ne, :center, :view_bounds_sw, :view_bounds_ne].freeze
def update_params
update_params = params.slice(:bounding_box_ne,
:bounding_box_sw,
:center,
:options,
:provider,
:view_bounds_ne,
:view_bounds_sw,
:zoom,
:legends,
:scrollwheel).permit!
STRING_PARAMS.each do |param|
update_params[param] = update_params[param].to_s
end
# Remove empty values, keeping `false`s (`present?` can't be used because of this)
update_params.reject { |_k, v| v.nil? || v == '' }
end
def map_presentation
Carto::Api::MapPresenter.new(@map).to_hash
end
end
end
end