Sha256: d2ffd94a3b8be7ec4049256d844a3704cd4b3c491ab539f0a7d6eca4bdc3f126

Contents?: true

Size: 1.69 KB

Versions: 1

Compression:

Stored size: 1.69 KB

Contents

# frozen_string_literal: true

module TenaDcms
  module Common
    extend ActiveSupport::Concern

    included do
      before_action :set_clazz
      before_action :set_object, only: %i[show update destroy]
    end

    def index
      data = if block_given?
               yield
             else
               @clazz.all
             end
      render json: { success: true, data: serialize(data) }
    end

    def show
      render json: { success: true, data: serialize(@obj) }
    end

    def create
      obj = if block_given?
              yield
            else
              @clazz.new(model_params)
            end
      if obj.save
        render json: { success: true, data: serialize(obj) }, status: :created
      else
        render json: { success: false, error: obj.errors.full_messages[0] }, status: :unprocessable_entity
      end
    rescue StandardError => e
      render json: { success: false, error: e.message }
    end

    def update
      if block_given?
        yield
      else
        obj = @obj
      end
      if obj.update(model_params)
        render json: { success: true, data: serialize(obj) }, status: :ok
      else
        render json: { error: obj.errors, success: false }, status: :unprocessable_entity
      end
    rescue StandardError => e
      render json: { success: false, error: e.message }
    end

    def destroy
      @obj.destroy
    end

    private

    def serialize(data)
      ActiveModelSerializers::SerializableResource.new(data)
    end

    def set_clazz
      @clazz = controller_name.classify.constantize
    end

    def set_object
      @obj = @clazz.find(params[:id])
    end

    # override by the child controllers
    def model_params
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
tena_dcms-0.1.0 app/controllers/concerns/tena_dcms/common.rb