module Openapi::Mongoid::CrudActions

Public Instance Methods

apply_scopes_to_chain!() click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 151
def apply_scopes_to_chain!
  @chain = apply_scopes(@chain)
end
build_object() click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 135
def build_object
  resource_class.new(resource_params)
end
create() click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 45
def create
  @object = build_object

  if @object.save
    render json: @object.as_json(json_config), status: :created

  else
    log_errors @object.errors
    render json: @object.errors, status: :unprocessable_entity

  end
end
csv_config()
Alias for: response_config
default_scope() click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 127
def default_scope
  resource_class
end
destroy() click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 70
def destroy
  @object = find_object

  if @object.destroy
    render nothing: true, status: :no_content

  else
    log_errors @object.errors
    render json: @object.errors, status: :unprocessable_entity

  end
end
find_object() click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 131
def find_object
  resource_class.find(params[:id])
end
index() click to toggle source

Actions

# File lib/openapi/mongoid/crud_actions.rb, line 25
def index
  @chain = default_scope

  apply_scopes_to_chain!
  search_filter_chain!
  paginate_chain!
  set_index_headers!

  respond_to do |format|
    format.json { render json: @chain.as_json(json_config) }
    format.csv  { render csv: @chain }
  end
end
json_config()
Alias for: response_config
last_page?(total_number) click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 189
def last_page?(total_number)
  total_number <= (page - 1) * per_page + per_page
end
log_errors(errors) click to toggle source

Helpers

# File lib/openapi/mongoid/crud_actions.rb, line 110
def log_errors(errors)
  if Rails.env.development?
    logger.info "Errors:\n  #{errors.to_h}"
  end
end
page() click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 167
def page
  @page ||= (params[:page] || 1).to_i
end
paginate_chain!() click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 184
def paginate_chain!
  @unpaginated_chain = @chain
  @chain = @chain.skip((page - 1) * per_page).limit(per_page)
end
paginates_per(number) click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 11
def paginates_per(number)
  self.crud_per_page = number
end
per_page() click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 171
def per_page
  @per_page ||= begin
    value = params[:perPage].try(:to_i)
    if value.nil?
      self.class.crud_per_page || 25
    elsif value == 0
      25
    else
      value
    end
  end
end
permitted_params() click to toggle source

NOTE: here we permit all parameters for ease of development,

before release this method should be overriden to allow only
permitted parameters.
# File lib/openapi/mongoid/crud_actions.rb, line 212
def permitted_params
  logger.warn "#{self}: please override `permitted_params` method."
  params.require(resource_request_name).permit!
end
resource_class(klass) click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 7
def resource_class(klass)
  self.crud_resource_class = klass
end
resource_params() click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 205
def resource_params
  permitted_params
end
resource_request_name() click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 217
def resource_request_name
  resource_class.
    to_s.
    underscore.
    gsub('/', '_').
    gsub('::', '_')
end
response_config() click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 83
def response_config
  config  = {}
  fields  = params[:fields]
  methods = params[:methods]

  if fields
    only_fields = fields.split(',').select do |field_name|
      resource_class.fields.has_key?(field_name)
    end
    config[:only] = only_fields unless only_fields.empty?
  end

  if methods
    include_methods = methods.split(',').select do |method_name|
      method = method_name.to_sym
      resource_class.instance_methods(false).include?(method)
    end
    config[:methods] = include_methods unless include_methods.empty?
  end

  config
end
Also aliased as: csv_config, json_config
search_filter_chain!() click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 159
def search_filter_chain!
  query = params[:search] || ''
  if !query.empty? && support_search?
    normalized_query = query.to_s.downcase
    @chain = @chain.search(normalized_query, match: :all)
  end
end
set_index_headers!() click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 193
def set_index_headers!
  unpaginated_chain_size = @chain.count
  response.headers['X-Page'] = page
  response.headers['X-Total-Count'] = unpaginated_chain_size
  response.headers['X-Pages-Count'] = (unpaginated_chain_size.to_f / per_page).ceil
  response.headers['X-Per-Page']    = per_page

  unless last_page?(unpaginated_chain_size)
    response.headers['X-Next-Page'] = page + 1
  end
end
set_object_version!() click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 143
def set_object_version!
  version = params[:version]
  if version && support_version? && version.to_i != @object.version
    @object.undo(nil, from: version.to_i + 1, to: @object.version)
    @object.version = version
  end
end
show() click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 39
def show
  @object = find_object
  set_object_version!
  render json: @object.as_json(json_config)
end
support_search?() click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 155
def support_search?
  @chain.respond_to?(:search, true)
end
support_version?() click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 139
def support_version?
  @object.respond_to?(:undo, true)
end
update() click to toggle source
# File lib/openapi/mongoid/crud_actions.rb, line 58
def update
  @object = find_object
  if @object.update_attributes(resource_params)
    render json: @object.as_json(json_config)

  else
    log_errors @object.errors
    render json: @object.errors, status: :unprocessable_entity

  end
end