Added offset to 'list' method on resources.
authorPeter Amstutz <peter.amstutz@curoverse.com>
Thu, 13 Mar 2014 18:44:22 +0000 (14:44 -0400)
committerPeter Amstutz <peter.amstutz@curoverse.com>
Thu, 13 Mar 2014 18:44:22 +0000 (14:44 -0400)
Added "offset" and "limit" fields to the response.
Removed "next_page_token" and "next_link" fields that were not being used.

services/api/app/controllers/application_controller.rb
services/api/app/controllers/arvados/v1/schema_controller.rb

index 7c10c8425ddc51114ce81f791702c504bd48d524..7e44559e6b807e8175dff6690ed31be3b6532694 100644 (file)
@@ -172,15 +172,31 @@ class ApplicationController < ActionController::Base
           where(*conditions)
       end
     end
+
     if params[:limit]
       begin
-        @objects = @objects.limit(params[:limit].to_i)
+        @limit = params[:limit].to_i
       rescue
         raise ArgumentError.new("Invalid value for limit parameter")
       end
     else
-      @objects = @objects.limit(100)
+      @limit = 100
     end
+    @objects = @objects.limit(@limit)
+
+    orders = []
+
+    if params[:offset]
+      begin
+        @objects = @objects.offset(params[:offset].to_i)
+        @offset = params[:offset].to_i
+      rescue
+        raise ArgumentError.new("Invalid value for limit parameter")
+      end
+    else
+      @offset = 0
+    end      
+
     orders = []
     if params[:order]
       params[:order].split(',').each do |order|
@@ -363,12 +379,12 @@ class ApplicationController < ActionController::Base
       :kind  => "arvados##{(@response_resource_name || resource_name).camelize(:lower)}List",
       :etag => "",
       :self_link => "",
-      :next_page_token => "",
-      :next_link => "",
+      :offset => @offset,
+      :limit => @limit,
       :items => @objects.as_api_response(nil)
     }
     if @objects.respond_to? :except
-      @object_list[:items_available] = @objects.except(:limit).count
+      @object_list[:items_available] = @objects.except(:limit).except(:offset).count
     end
     render json: @object_list
   end
index 7df2edb49fff38213ac5eb6a8d1a3a3b36298742..75f015fd293e45520fab49eb188cae01f88ca174 100644 (file)
@@ -222,6 +222,14 @@ class Arvados::V1::SchemaController < ApplicationController
                   minimum: 0,
                   location: "query",
                 },
+                offset: {
+                  type: "integer",
+                  description: "Number of #{k.to_s.underscore.pluralize} to skip before first returned record.",
+                  default: 0,
+                  format: "int32",
+                  minimum: 0,
+                  location: "query",
+                },
                 where: {
                   type: "object",
                   description: "Conditions for filtering #{k.to_s.underscore.pluralize}.",