class GenericController

Constants

VALID_SORT
VERSION

Public Instance Methods

create() click to toggle source
# File lib/generic_controller.rb, line 7
def create
  @resource = cscope.new(model_params)
  @resource.save!
  respond_to do |f|
    f.any do
      response.headers['location'] = send("v#{api_version}_#{model_name.underscore}_url", @resource)
      render({ json: @resource,
               serializer: each_sez,
               status: :created }.merge!(render_options))
    end
  end
end
destroy() click to toggle source
# File lib/generic_controller.rb, line 20
def destroy
  model.destroy(params[:id])
  respond_to do |f|
    f.any do
      head :no_content
    end
  end
end
index() click to toggle source
# File lib/generic_controller.rb, line 55
def index
  query = cscope
  l = limit.to_i
  p = page.to_i
  off = offset.to_i
  o = order_by.to_sym
  s = sort.to_sym
  respond_to do |f|
    f.any do
      render({
               json: query.order(o => s)
                 .page(p)
                 .per(l)
                 .padding(off),
               meta: {
                 total: query.count(:all),
                 page: p,
                 limit: l,
                 order_by: o,
                 sort: s,
                 offset: off
               },
               each_serializer: each_sez,
               status: :ok
             }.merge!(render_options))
    end
  end
end
show() click to toggle source
# File lib/generic_controller.rb, line 29
def show
  respond_to do |f|
    f.any do
      render({
               json: @resource,
               serializer: each_sez,
               status: :ok
             }.merge!(render_options))
    end
  end
end
update() click to toggle source
# File lib/generic_controller.rb, line 41
def update
  @resource.attributes = model_params
  @resource.save!
  respond_to do |f|
    f.any do
      render({
               json: @resource,
               serializer: each_sez,
               status: :ok
             }.merge!(render_options))
    end
  end
end

Private Instance Methods

api_version() click to toggle source
# File lib/generic_controller.rb, line 143
def api_version
  self.class.to_s.split('::').first.delete!('V')
end
attach_resource() click to toggle source
# File lib/generic_controller.rb, line 139
def attach_resource
  @resource ||= cscope.find(params[:id])
end
cscope() click to toggle source
# File lib/generic_controller.rb, line 128
def cscope
  cs = model
  cs = cs.where(['updated_at >= ?', parse_time(params[:updated_since])]) if params[:updated_since]
  cs = cs.where(['created_at >= ?', parse_time(params[:created_since])]) if params[:created_since]
  cs
end
each_sez() click to toggle source
# File lib/generic_controller.rb, line 90
def each_sez
  "#{norm_controller_name}Serializer".constantize
end
limit() click to toggle source
# File lib/generic_controller.rb, line 94
def limit
  params[:limit] ||= 20
end
model() click to toggle source
# File lib/generic_controller.rb, line 124
def model
  model_name.constantize
end
model_name() click to toggle source
# File lib/generic_controller.rb, line 120
def model_name
  controller_name.classify
end
norm_controller_name() click to toggle source
# File lib/generic_controller.rb, line 116
def norm_controller_name
  controller_path.classify
end
offset() click to toggle source
# File lib/generic_controller.rb, line 98
def offset
  params[:offset] ||= 0
end
order_by() click to toggle source
# File lib/generic_controller.rb, line 102
def order_by
  return params[:order_by] if model.column_names.include?(params[:order_by])

  'id'
end
page() click to toggle source
# File lib/generic_controller.rb, line 108
def page
  params[:page] ||= 1
end
parse_time(s) click to toggle source
# File lib/generic_controller.rb, line 135
def parse_time(s)
  Time.zone.parse(s)
end
render_options() click to toggle source
# File lib/generic_controller.rb, line 86
def render_options
  {}
end
sort() click to toggle source
# File lib/generic_controller.rb, line 112
def sort
  params[:sort].in?(VALID_SORT) ? params[:sort] : VALID_SORT[0]
end