module Gamification module Concerns::Controllers::RewardsController extend ActiveSupport::Concern included do before_action :verify_checksum def create if rewarding.is_a? ::Gamification::Goal rewarding.complete_for rewardable else rewarding.goals.each do |goal| goal.complete_for rewardable end end respond_to do |format| format.json { render json: {}, status: :created } format.html { redirect_to redirect_url } end end private def verify_checksum render text: "Invalid checksum", status: :forbidden unless Checksum.verify(params[:checksum], [rewarding.class.name, rewarding.id, rewardable.class.name, rewardable.id]) end def redirect_url params[:redirect_url] || request.env['HTTP_REFERER'] end def rewarding rewarding_model.find reward_params[:rewarding_id] end def rewardable rewardable_model.find reward_params[:rewardable_id] end def rewarding_model reward_params[:rewarding_type].constantize end def rewardable_model reward_params[:rewardable_type].constantize end def reward_params params.require(:reward).permit(:rewarding_type, :rewarding_id, :rewardable_type, :rewardable_id) end end end end