module RestingPug::Actions

Describes basic CRUD actions. Each action is represented by a chain of methods definied in {Chains} module. @see en.wikipedia.org/wiki/Create,_read,_update_and_delete @used_in {Base.included}

Public Instance Methods

create() click to toggle source

Creates a subject with attributes from params and returns it. @example

Request:
POST http://your.awesome/api/books
{
  "name": "11/22/63",
  "author": "Stephen King"
}

Response:
200 OK
{
  "book": {
    "id": 1,
    "name": "11/22/63",
    "author": "Stephen King"
  }
}

@note You can sustomize creating action:

- override {Params#permitted_fields_for_create permitted_fields_for_create} to set which params can be set in a new subject
- override {Params#permitted_fields_for_show permitted_fields_for_show} to set which params will be shown in response
- override {Render#render_subject render_subject} to set how subject will be rendered
- override {Render#render_errors render_errors} to set how errors will be rendered
- override {Subject#subject_model subject_model} to set what model will be created
- override {Chains#create_chain create_chain} to add or remove methods which will be called while creating a subject
- override {Render#decide_what_to_render decide_what_to_render} to set how it will be decided what to render in response

@use {#run_chain} @use {Chains#create_chain}

# File lib/resting_pug/actions.rb, line 35
def create
  run_chain(create_chain)
end
destroy() click to toggle source

Destroys a subject by id @example

Request:
DELETE http://your.awesome/api/books/1

Response:
204 No Content

@note You can sustomize creating action:

- override {Subject#destroy_subject destroy_subject} to set how it will be destroyed
- override {Render#render_nothing render_nothing} to set what to render when subject is destroyed
- override {Render#render_errors render_errors} to set how errors will be rendered
- override {Render#render_not_found render_not_found} to set what to render when subject with ID from params is not found
- override {Subject#subject_model subject_model} to set what model will be deleted
- override {Chains#destroy_chain destroy_chain} to add or remove methods which will be called while deleting a subject

@use {#run_chain} @use {Chains#destroy_chain}

# File lib/resting_pug/actions.rb, line 87
def destroy
  run_chain(destroy_chain)
end
index() click to toggle source

Shows a list of subjects. You can filter subjects by attributes using filter param. You can sort subjects using sort param. It is a string of comma-separated attributes with minus before attributes you wants to sort descending. You can paginate subjcts with page and per_page params. @example

Request:
GET http://your.awesome/api/books
GET http://your.awesome/api/books?filter[author]="King"
GET http://your.awesome/api/books?filter[author][]="King"&filter[author][]="Kesey"
GET http://your.awesome/api/books?sort=-id,name,-author
GET http://your.awesome/api/books?page=3&per_page=10
GET http://your.awesome/api/books?filter[author]="King"&sort=-id?page=3&per_page=10

Response:
200 OK
{
  "books": [{
    "id": 2,
    "name": "The Green Mile",
    "author": "Stephen King"
  }, {
    "id": 1,
    "name": "11/22/63",
    "author": "Stephen King"
  }]
}

@note You can sustomize creating action:

- override {Params#permitted_fields_for_show permitted_fields_for_show} to set which params will be shown in response
- override {Params#permitted_fields_for_filter permitted_fields_for_filter} to set which params can be used for filtering
- override {Params#permitted_fields_for_sort permitted_fields_for_sort} to set which params can be used for sorting
- override {Params#default_sort_params default_sort_params} to set default sort params
- override {Params#per_page_default per_page_default} to set default per_page param
- override {Params#per_page_range per_page_range} to set minimum and maximum possible per_page value
- override {Render#render_subjects render_subjects} to set how subjects will be rendered
- override {Subject#subject_model subject_model} to set what model will be shown
- override {Chains#index_chain index_chain} to add or remove methods which will be called while updating a subject

@use {#run_chain} @use {Chains#index_chain}

# File lib/resting_pug/actions.rb, line 155
def index
  run_chain(index_chain)
end
show() click to toggle source

Shows a subject by id @example

Request:
GET http://your.awesome/api/books/1

Response:
200 OK
{
  "book": {
    "id": 1,
    "name": "The Green Mile",
    "author": "Stephen King"
  }
}

@note You can sustomize creating action:

- override {Params#permitted_fields_for_show permitted_fields_for_show} to set which params will be shown in response
- override {Render#render_subject render_subject} to set how subject will be rendered
- override {Render#render_not_found render_not_found} to set what to render when subject with ID from params is not found
- override {Subject#subject_model subject_model} to set what model will be shown
- override {Chains#show_chain show_chain} to add or remove methods which will be called while updating a subject

@use {#run_chain} @use {Chains#show_chain}

# File lib/resting_pug/actions.rb, line 113
def show
  run_chain(show_chain)
end
update() click to toggle source

Updates a subject by id with attributes from params and returns it. @example

Request:
PATCH http://your.awesome/api/books/1
{
  "name": "The Green Mile",
}

Response:
200 OK
{
  "book": {
    "id": 1,
    "name": "The Green Mile",
    "author": "Stephen King"
  }
}

@note You can sustomize creating action:

- override {Params#permitted_fields_for_update permitted_fields_for_update} to set which params can be updated
- override {Params#permitted_fields_for_show permitted_fields_for_show} to set which params will be shown in response
- override {Render#render_subject render_subject} to set how subject will be rendered
- override {Render#render_errors render_errors} to set how errors will be rendered
- override {Render#render_not_found render_not_found} to set what to render when subject with ID from params is not found
- override {Subject#subject_model subject_model} to set what model will be updated
- override {Chains#update_chain update_chain} to add or remove methods which will be called while updating a subject
- override {Render#decide_what_to_render decide_what_to_render} to set how it will be decided what to render in response

@use {#run_chain} @use {Chains#update_chain}

# File lib/resting_pug/actions.rb, line 67
def update
  run_chain(update_chain)
end

Protected Instance Methods

run_chain(chain) click to toggle source

Executes each method in a chain one by one @param chain [Array] array of methods to execute @used_in {#create} @used_in {#update} @used_in {#destroy} @used_in {#show} @used_in {#index}

# File lib/resting_pug/actions.rb, line 168
def run_chain(chain)
  chain.each do |action|
    self.send(action)
  end
end