Skip to content

leonhooijer/zadok

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Zadok

Gem Version Maintainability Test Coverage

Why Zadok?

Zadok was apoointed by king David to manage his treasuries while he was on the run. This gem is made to manage your application resources. Also the name sounds catchy.

Some background information:

"Zadok (Hebrew: צדוק‎ Tsadoq, meaning "Righteous") or Zadoq is a legendary priest, said to be descended from Eleazar the son of Aaron (1 Chron 6:4-8).[1] He aided King David during the revolt of his son Absalom and was subsequently instrumental in bringing King Solomon to the throne. After Solomon's building of The First Temple in Jerusalem, Zadok was the first High Priest to serve there."

Source: Wikipedia.

Nehemiah 13:13: "And I made treasurers over the treasuries, Shelemiah the priest, and Zadok the scribe, and of the Levites, Pedaiah: and next to them was Hanan the son of Zaccur, the son of Mattaniah: for they were counted faithful, and their office was to distribute unto their brethren."

Source: Bilbe.com

About this gem

I created this gem while working for De Praktijk Index. After having written several applications through the years I noticed that much of the functionallity is always the same (just simple CRUD). I wrote this gem to standardize this so I have to write less code when setting up a new application. Also this gem should help me in maintaining applications since a simple bunle update zadok would now be enough to update an application.

Setup

Just run gem install zadok or add gem "zadok" to your Gemfile.

To use Zadok in a controller just inherit it:

class SampleController < ZadokController
  load_and_authorize_resource!
  
  protected
  
  def sample_params
    params.require(:sample).permit!
  end
  alias resource_params sample_params

  def resource_name
    "sample"
  end

  def resources
    @samples
  end
  alias search_model resources

  def resource
    @sample
  end

  def filter_and_paginate_resources!
    @samples = filtered_resources.paginate(page: page, per_page: per_page)
  end

  def filtered_resources
    current_search.result
  end

  def filters_namespace
    "Filters::Samples".constantize
  end

  def index_attributes
    %i[id name]
  end

  def new_attributes
    {
      name: { type: :text_field }
    }
  end

  def edit_attributes
    {
      name: { type: :text_field }
    }
  end
end

Then you should have full CRUD-functionallity for the Sample class.