module RestingPug::Params

Describes transformations with params @used_in {Base.included}

Protected Instance Methods

default_sort_params() click to toggle source

Returns a hash with default sorting params @note Override {#permitted_fields_for_sort permitted_fields_for_sort} to set allowed fields to sort. @see guides.rubyonrails.org/active_record_querying.html#ordering @used_in {#sort_params} @example

class BooksController < ApplicationController
  include RestingPug::Base

  private
  # Override a default_sort_params to set default sorting to sorted descending by title
  def default_sort_params
    { title: :desc }
  end
end
# File lib/resting_pug/params.rb, line 229
def default_sort_params
  {id: :desc}
end
filter_params() click to toggle source

Returns strong parameters which are used for filtering subjects @note Override {#permitted_fields_for_filter permitted_fields_for_filter} and {#permitted_fields_for_filter_arrays permitted_fields_for_filter_arrays} to set allowed fields. @see guides.rubyonrails.org/action_controller_overview.html#strong-parameters @used_in {Modificators#filter_subjects} @use {#permitted_fields_for_filter_with_arrays}

# File lib/resting_pug/params.rb, line 183
def filter_params
  params[:filter] ? params.require(:filter).permit(permitted_fields_for_filter_with_arrays) : nil
end
pagination_params() click to toggle source

Handles pagination params and return a hash like { page: 1, per_page: 10 } @note Override {#per_page_range per_page_range} to set minimum and maximum per_page param.

Override {#per_page_default per_page_default} to set default per_page param.

@used_in {Modificators#paginate_subjects} @use {#per_page_range} @use {#per_page_default}

# File lib/resting_pug/params.rb, line 241
def pagination_params
  page = params[:page].try(:to_i) || 1
  per_page = [per_page_range[:min], params[:per_page].try(:to_i) || per_page_default, per_page_range[:max]].sort[1]
  return { page: page, per_page: per_page }
end
params_for_create() click to toggle source

Returns strong parameters which are used in creating action @note Override {#permitted_fields_for_create permitted_fields_for_create} to set allowed fields.

Override {Subject#subject_model_sym subject_model_sym} to change the root attrubute of params.

@see guides.rubyonrails.org/action_controller_overview.html#strong-parameters @used_in {Subject#create_subject} @use {Subject#subject_model_sym} @use {#permitted_fields_for_create}

# File lib/resting_pug/params.rb, line 161
def params_for_create
  params.require(subject_model_sym).permit(permitted_fields_for_create)
end
params_for_update() click to toggle source

Returns strong parameters which are used in updating action @note Override {#permitted_fields_for_update permitted_fields_for_update} to set allowed fields.

Override {Subject#subject_model_sym subject_model_sym} to change the root attrubute of params.

@see guides.rubyonrails.org/action_controller_overview.html#strong-parameters @used_in {Subject#update_subject} @use {Subject#subject_model_sym} @use {#permitted_fields_for_update}

# File lib/resting_pug/params.rb, line 172
def params_for_update
  params.require(subject_model_sym).permit(permitted_fields_for_update)
end
per_page_default() click to toggle source

Returns a default per_page param @note Override {#per_page_range per_page_range} to set minimum and maximum per_page param @used_in {#pagination_params} @example

class BooksController < ApplicationController
  include RestingPug::Base

  private
  # Override a per_page_default to set default page size to 15
  def per_page_default
    15
  end
end
# File lib/resting_pug/params.rb, line 277
def per_page_default
  10
end
per_page_range() click to toggle source

Returns a hash with minimum and maximum per_page param like { page: 1, per_page: 10 } @note Override {#per_page_default per_page_default} to set default per_page param. @used_in {#pagination_params} @example

class BooksController < ApplicationController
  include RestingPug::Base

  private
  # Override a per_page_range to set minimum possible value for per_page 10 and maximum 20
  def per_page_range
    { min: 10, max: 20 }
  end
end
# File lib/resting_pug/params.rb, line 260
def per_page_range
  { min: 5, max: 100 }
end
permitted_fields() click to toggle source

Returns an array with all fields that API can use @note Override this method to add or remove fields that you don't want API to use. @used_in {#permitted_fields_for_show} @used_in {#permitted_fields_for_create} @used_in {#permitted_fields_for_update} @used_in {#permitted_fields_for_sort} @used_in {#permitted_fields_for_filter} @use {Subject#subject_model} @example

class BooksController < ApplicationController
  include RestingPug::Base

  private
  # Override a permitted_fields method to use only :id and :title
  def permitted_fields
    [:id, :title]
  end
end
# File lib/resting_pug/params.rb, line 27
def permitted_fields
  subject_model.column_names.map(&:to_sym)
end
permitted_fields_for_create() click to toggle source

Returns an array with all fields that API will allow to use while creating a subject @note Override this method to add or remove fields that you don't want API to use for creating. @used_in {#params_for_create} @use {#permitted_fields} @example

class BooksController < ApplicationController
  include RestingPug::Base

  private
  # Override a permitted_fields_for_create method to use every permitted attribute except :title
  def permitted_fields_for_create
    permitted_fields - [:title]
  end
end
# File lib/resting_pug/params.rb, line 64
def permitted_fields_for_create
  permitted_fields - [:id, :created_at, :updated_at]
end
permitted_fields_for_filter() click to toggle source

Returns an array with all fields that API will allow to use while filtering subjects by single value @note Override this method to add or remove fields that you don't want API to use for filtering by single value.

If you want to change attributes that can be filtered by arrays of values check {#permitted_fields_for_filter_arrays}

@used_in {#permitted_fields_for_filter_arrays} @used_in {#permitted_fields_for_filter_with_arrays} @use {#permitted_fields} @example

class BooksController < ApplicationController
  include RestingPug::Base

  private
  # Override a permitted_fields_for_sort method to use every permitted attribute except :title
  def permitted_fields_for_sort
    permitted_fields - [:title]
  end
end
# File lib/resting_pug/params.rb, line 120
def permitted_fields_for_filter
  permitted_fields - [:created_at, :updated_at]
end
permitted_fields_for_filter_arrays() click to toggle source

Returns an array with all fields that API will allow to use while filtering subjects by array of values @note Override this method to add or remove fields that you don't want API to use for filtering by array of values.

If you want to change attributes that can be filtered by single value check {#permitted_fields_for_filter}

@used_in {#permitted_fields_for_filter_with_arrays} @use {#permitted_fields_for_filter} @example

class BooksController < ApplicationController
  include RestingPug::Base

  private
  # Override a permitted_fields_for_filter_arrays method to use only :id and :title
  def permitted_fields_for_filter_arrays
    { id: [], title: []}
  end
end
# File lib/resting_pug/params.rb, line 139
def permitted_fields_for_filter_arrays
  permitted_fields_for_filter.map { |field| { field => [] } }
end
permitted_fields_for_filter_with_arrays() click to toggle source

Returns an array with all fields that API will allow to use while filtering subjects both by single values and by array of values @note To set fields that can be used check {#permitted_fields_for_filter} and {#permitted_fields_for_filter_arrays} @used_in {#filter_params} @use {#permitted_fields_for_filter} @use {#permitted_fields_for_filter_arrays}

# File lib/resting_pug/params.rb, line 148
def permitted_fields_for_filter_with_arrays
  permitted_fields_for_filter + permitted_fields_for_filter_arrays
end
permitted_fields_for_show() click to toggle source

Returns an array with all fields that API will show @note Override this method to add or remove fields that you don't want API to show. @used_in {Render#render_subject} @used_in {Render#render_subjects} @use {#permitted_fields} @example

class BooksController < ApplicationController
  include RestingPug::Base

  private
  # Override a permitted_fields_for_show method to show every permitted attribute except :title
  def permitted_fields_for_show
    permitted_fields - [:title]
  end
end
# File lib/resting_pug/params.rb, line 46
def permitted_fields_for_show
  permitted_fields
end
permitted_fields_for_sort() click to toggle source

Returns an array with all fields that API will allow to use while sorting subjects @note Override this method to add or remove fields that you don't want API to use for sorting. @used_in {#sort_params} @use {#permitted_fields} @example

class BooksController < ApplicationController
  include RestingPug::Base

  private
  # Override a permitted_fields_for_sort method to use every permitted attribute except :title
  def permitted_fields_for_sort
    permitted_fields - [:title]
  end
end
# File lib/resting_pug/params.rb, line 100
def permitted_fields_for_sort
  permitted_fields
end
permitted_fields_for_update() click to toggle source

Returns an array with all fields that API will allow to use while updating a subject @note Override this method to add or remove fields that you don't want API to use for updating. @used_in {#params_for_update} @use {#permitted_fields} @example

class BooksController < ApplicationController
  include RestingPug::Base

  private
  # Override a permitted_fields_for_update method to use every permitted attribute except :title
  def permitted_fields_for_update
    permitted_fields - [:title]
  end
end
# File lib/resting_pug/params.rb, line 82
def permitted_fields_for_update
  permitted_fields - [:id, :created_at, :updated_at]
end
sort_params() click to toggle source

Transforms a string like “-id,name” to a hash { id: :desc, name: :asc } @note Override {#permitted_fields_for_sort permitted_fields_for_sort} to set allowed fields to sort.

Override {#default_sort_params default_sort_params} to set default sort params.

@used_in {Modificators#sort_subjects} @use {#permitted_fields_for_sort} @use {#default_sort_params}

# File lib/resting_pug/params.rb, line 195
def sort_params
  sort_hash = nil
  if params[:sort]
    sort_array = params[:sort].split(',')
    sort_array = sort_array.map do |field|
      is_desc = field.split('-').count > 1
      name = field.split('-').last
      { name: name.to_sym, is_desc: is_desc }
    end
    sort_array.select! do |field|
      permitted_fields_for_sort.include? field[:name]
    end
    sort_array.each do |field|
      sort_hash ||= {}
      sort_hash[field[:name]] = field[:is_desc] ? :desc : :asc
    end
  end
  sort_hash || default_sort_params
end