class Gearhead::GearsController

Public Instance Methods

collection_action() click to toggle source
# File lib/gearhead/gears_controller.rb, line 52
def collection_action
  action = @gear._gear_collection_actions[params[:collection_action]]
  if action&.verbs&.include?(request.request_method.to_sym.downcase)
    render json: instance_exec(&action.block)
  end
end
create() click to toggle source
# File lib/gearhead/gears_controller.rb, line 14
def create
  @resource = Gearhead::Actions::Create.build(@gear, request)
  if @resource.save
    render json: @gear.serializer_class.new(@resource)
  else
    render json: { errors: @resource.errors }, status: :unprocessable_entity
  end
end
destroy() click to toggle source
# File lib/gearhead/gears_controller.rb, line 37
def destroy
  if @resource.destroy
    render json: @gear.serializer_class.new(resource)
  else
    render json: { errors: @resource.errors }, status: :unprocessable_entity
  end
end
index() click to toggle source
# File lib/gearhead/gears_controller.rb, line 10
def index
  render json: Gearhead::Actions::Index.build(@gear, request)
end
member_action() click to toggle source
# File lib/gearhead/gears_controller.rb, line 45
def member_action
  action = @gear._gear_member_actions[params[:member_action].to_sym]
  if action&.verbs&.include?(request.request_method.to_sym.downcase)
    render json: instance_exec(&action.block)
  end
end
show() click to toggle source
# File lib/gearhead/gears_controller.rb, line 23
def show
  @resource = Gearhead::Actions::Show.build(@gear, request, resource: @resource)
  render json: @gear.serializer_class.new(@resource)
end
update() click to toggle source
# File lib/gearhead/gears_controller.rb, line 28
def update
  @resource = Gearhead::Actions::Update.build(@gear, request, resource: @resource)
  if @resource.save
    render json: @gear.serializer_class.new(@resource)
  else
    render json: { errors: @resource.errors }, status: :unprocessable_entity
  end
end

Private Instance Methods

check_collection_actions!() click to toggle source

remember that request method is from rack so GET/POST/etc.

# File lib/gearhead/gears_controller.rb, line 70
def check_collection_actions!
  action = @gear._gear_collection_actions[request.request_method][params[:resource_id].to_sym]
  return render json: instance_exec(&action) if action
end
ensure_action_enabled!() click to toggle source
# File lib/gearhead/gears_controller.rb, line 82
def ensure_action_enabled!
  unless @gear.action_enabled?(action_name.to_sym)
    error!("Action not allowed for #{@gear.resource.name}##{action_name}", :method_not_allowed)
  end
end
error!(msg, code = 400) click to toggle source
# File lib/gearhead/gears_controller.rb, line 88
def error!(msg, code = 400)
  render json: Serializers::Lookup.for(:invalid_request).new(request, msg, code)
end
find_gear!() click to toggle source
# File lib/gearhead/gears_controller.rb, line 61
def find_gear!
  @gear = Gearhead.gear_for(request)
  return @gear if @gear

  error!("Can't find or infer gear.", 404) if @gear.nil?
  error!('Gear already mounted somewhere else.', 500) if @gear == false
end
find_resource!() click to toggle source
# File lib/gearhead/gears_controller.rb, line 75
def find_resource!
  @resource = ::Gearhead::ResourceFinder.for(@gear, params)
  if @resource.nil?
    error!("#{@gear.resource.name} not found for #{@gear._gear_param_key} #{params[:resource_id]}")
  end
end