Initial commit
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
module Carto
|
||||
module Api
|
||||
class LegendsController < ::Api::ApplicationController
|
||||
include Carto::ControllerHelper
|
||||
|
||||
ssl_required :index, :show, :create, :update, :destroy
|
||||
|
||||
before_filter :load_layer,
|
||||
:owners_only
|
||||
before_filter :load_legend, only: [:show, :update, :destroy]
|
||||
|
||||
rescue_from Carto::LoadError,
|
||||
Carto::UnauthorizedError,
|
||||
Carto::UnprocesableEntityError, with: :rescue_from_carto_error
|
||||
|
||||
def index
|
||||
legend_presentations = @layer.legends.map do |legend|
|
||||
LegendPresenter.new(legend).to_hash
|
||||
end
|
||||
|
||||
render_jsonp(legend_presentations, :ok)
|
||||
end
|
||||
|
||||
def show
|
||||
legend_presentation = LegendPresenter.new(@legend).to_hash
|
||||
render_jsonp(legend_presentation, :ok)
|
||||
end
|
||||
|
||||
def create
|
||||
legend_params_with_layer_id = legend_params.merge(layer_id: @layer.id)
|
||||
legend = Legend.create(legend_params_with_layer_id)
|
||||
|
||||
if legend.valid?
|
||||
legend_presentation = LegendPresenter.new(legend).to_hash
|
||||
render_jsonp(legend_presentation, :created)
|
||||
else
|
||||
error = legend.errors.full_messages.join(', ')
|
||||
raise Carto::UnprocesableEntityError.new(error)
|
||||
end
|
||||
end
|
||||
|
||||
def update
|
||||
@legend.update_attributes!(legend_params)
|
||||
|
||||
legend_presentation = LegendPresenter.new(@legend).to_hash
|
||||
render_jsonp(legend_presentation, :ok)
|
||||
rescue ActiveRecord::RecordInvalid
|
||||
error = @legend.errors.full_messages.join(', ')
|
||||
raise Carto::UnprocesableEntityError.new(error)
|
||||
end
|
||||
|
||||
def destroy
|
||||
@legend.destroy
|
||||
|
||||
render_jsonp({}, :no_content)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def load_layer
|
||||
@layer = Carto::Layer.find(params[:layer_id])
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
raise Carto::LoadError.new('Layer not found')
|
||||
end
|
||||
|
||||
def owners_only
|
||||
visualization = Carto::Visualization.find(params[:visualization_id])
|
||||
|
||||
unless visualization.layers.include?(@layer) &&
|
||||
visualization.writable_by?(current_viewer)
|
||||
raise Carto::UnauthorizedError.new
|
||||
end
|
||||
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
raise Carto::LoadError.new('Visualization not found')
|
||||
end
|
||||
|
||||
def load_legend
|
||||
@legend = @layer.legends.find(params[:id])
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
raise Carto::LoadError.new('Legend not found')
|
||||
end
|
||||
|
||||
def legend_params
|
||||
params.slice(:title, :pre_html, :post_html, :type, :definition, :conf).permit!
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user