Sha256: 0b288fcdde969317d01421ddc83ab4744aa84649ba3abe39da25cfc78d5191bf

Contents?: true

Size: 1.81 KB

Versions: 2

Compression:

Stored size: 1.81 KB

Contents

module HyperAdmin
  class ResourceController < ApplicationController
    before_action :set_resource_class
    before_action :permit_params, only: [ :create, :update ]

    before_action :set_layout, only: [ :index, :show, :new, :edit ]

    def index
      @resources = resource_class.all
      render 'admin/resources/index'
    end

    def show
      @resource = resource
      render 'admin/resources/show'
    end

    def new
      @resource = resource_class.new
      @attributes = @resource.attributes.delete_if do |k, v|
        k.to_sym.in? [ :id, :created_at, :updated_at ]
      end
      render 'admin/resources/new'
    end

    def edit
      @resource = resource
      @attributes = @resource.attributes.delete_if do |k, v|
        k.to_sym.in? [ :id, :created_at, :updated_at ]
      end
      render 'admin/resources/edit'
    end

    def create
      @resource = @resource_class.new params[@resource_class.model_name.param_key]

      if @resource.save
        render json: @resource
      else
        render json: @resource.errors, status: 422
      end
    end

    def update
      @resource = @resource_class.find params[:id]

      if @resource.update params[@resource_class.model_name.param_key]
        render json: @resource
      else
        render json: @resource.errors, status: 422
      end
    end

    def destroy
      @resource = @resource_class.find params[:id]

      @resource.destroy

      head 200
    end

    def resource
      resource_class.find params[:id]
    end

    def resource_class
      raise "This method must be overridden"
    end

    protected

    def set_layout
      self.class.layout ->{ request.xhr? ? false : 'hyper_admin/application' }
    end

    def set_resource_class
      @resource_class = resource_class
    end

    def permit_params
      params.permit!
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
hyper_admin-0.4.0 app/controllers/hyper_admin/resource_controller.rb
hyper_admin-0.3.0 app/controllers/hyper_admin/resource_controller.rb