module Crudmonster

Constants

VERSION

Public Instance Methods

crud_api() click to toggle source
# File lib/crudmonster.rb, line 9
def crud_api

  define_method 'index' do
    render json: { resource_name.pluralize.downcase => collection }
  end

  define_method 'show' do
    render json: { resource_name.downcase => resource }
  end

  define_method 'create' do
    created_resource = resource_class.create!(permitted_params)

    render json: { resource_name.downcase => created_resource }
  end

  define_method 'update' do
    resource.update(permitted_params)

    render json: { resource_name.downcase => resource }
  end

  define_method 'destroy' do
    if resource.delete
      head :ok
    else
      head 400
    end
  end


  define_method 'permitted_params' do
    if self.private_methods.include? "#{resource_name.downcase}_params".to_sym
      send "#{resource_name.downcase}_params".to_sym
    else
      resource_params
    end
  end

  define_method 'resource_params' do
    params.require(resource_name.downcase.to_sym).permit!
  end

  define_method 'collection' do
    resource_class.all
  end

  define_method 'resource' do
    @resource ||= resource_class.find(params[:id])
  end

  define_method 'resource_name' do
    self.class.name
        .gsub(/Controller/, '')
        .singularize
  end

  define_method 'resource_class' do
    resource_name
      .constantize
  end

  private :permitted_params, :resource_params, :collection, :resource,
          :resource_name, :resource_class
end