cartodb/app/controllers/carto/api/metrics_controller.rb
2020-06-15 10:58:47 +08:00

39 lines
1.1 KiB
Ruby

module Carto
module Api
class MetricsController < ::Api::ApplicationController
include Carto::ControllerHelper
ssl_required :create
skip_before_filter :api_authorization_required
before_filter :load_event, only: :create
rescue_from Carto::LoadError,
Carto::UnauthorizedError,
Carto::UnprocesableEntityError, with: :rescue_from_carto_error
def create
@event.report!
render json: Hash.new, status: :created
end
private
def load_event
event_name = params[:name]
raise Carto::UnprocesableEntityError.new('name not provided') unless event_name
modulized_name = "Carto::Tracking::Events::#{event_name.parameterize('_').camelize}"
@event = Carto::Tracking::Events::SegmentEvent.build(params[:name], current_viewer.try(:id), params[:properties])
@event ||= modulized_name.constantize.new(current_viewer.try(:id), params[:properties])
rescue NameError
raise Carto::LoadError.new("Event not found: #{event_name}")
end
end
end
end