add generatedAt field to discovery document
[arvados.git] / services / api / app / controllers / arvados / v1 / schema_controller.rb
index 94b9a3cb6506b68649368dbb9d4bd8f45e9c4b9a..897afd8da05f80aa1abfa763973b23310a8a9adc 100644 (file)
@@ -1,6 +1,6 @@
 class Arvados::V1::SchemaController < ApplicationController
   skip_before_filter :find_object_by_uuid
-  skip_before_filter :login_required
+  skip_before_filter :require_auth_scope_all
 
   def show
     classes = Rails.cache.fetch 'arvados_v1_schema' do
@@ -31,7 +31,8 @@ class Arvados::V1::SchemaController < ApplicationController
         id: "arvados:v1",
         name: "arvados",
         version: "v1",
-        revision: "20130226",
+        revision: "20131114",
+        generatedAt: Time.now.iso8601,
         title: "Arvados API",
         description: "The API to interact with Arvados.",
         documentationLink: "https://redmine.clinicalfuture.com/projects/arvados/",
@@ -87,8 +88,6 @@ class Arvados::V1::SchemaController < ApplicationController
       }
       
       ActiveRecord::Base.descendants.reject(&:abstract_class?).each do |k|
-        next if k == ApiClientAuthorization
-        next if k == ApiClient
         begin
           ctl_class = "Arvados::V1::#{k.to_s.pluralize}Controller".constantize
         rescue
@@ -208,6 +207,16 @@ class Arvados::V1::SchemaController < ApplicationController
                   type: "string",
                   description: "Query string for searching #{k.to_s.underscore.pluralize}.",
                   location: "query"
+                },
+                where: {
+                  type: "object",
+                  description: "Conditions for filtering #{k.to_s.underscore.pluralize}.",
+                  location: "query"
+                },
+                order: {
+                  type: "string",
+                  description: "Order in which to return matching #{k.to_s.underscore.pluralize}.",
+                  location: "query"
                 }
               },
               response: {
@@ -226,13 +235,18 @@ class Arvados::V1::SchemaController < ApplicationController
               parameters: {
                 k.to_s.underscore => {
                   type: "object",
-                  required: true,
+                  required: false,
                   location: "query",
                   properties: object_properties
                 }
               },
               request: {
-                "$ref" => k.to_s
+                required: false,
+                properties: {
+                  k.to_s => {
+                    "$ref" => k.to_s
+                  }
+                }
               },
               response: {
                 "$ref" => k.to_s
@@ -255,13 +269,18 @@ class Arvados::V1::SchemaController < ApplicationController
                 },
                 k.to_s.underscore => {
                   type: "object",
-                  required: true,
+                  required: false,
                   location: "query",
                   properties: object_properties
                 }
               },
               request: {
-                "$ref" => k.to_s
+                required: false,
+                properties: {
+                  k.to_s => {
+                    "$ref" => k.to_s
+                  }
+                }
               },
               response: {
                 "$ref" => k.to_s
@@ -303,12 +322,12 @@ class Arvados::V1::SchemaController < ApplicationController
               ctl_class.action_methods.include? action
             method = {
               id: "arvados.#{k.to_s.underscore.pluralize}.#{action}",
-              path: route.path.sub('/arvados/v1/','').sub('(.:format)','').sub(/:(uu?)id/,'{uuid}'),
+              path: route.path.sub('/arvados/v1/','').sub('(.:format)','').sub(/:(uu)?id/,'{uuid}'),
               httpMethod: httpMethod,
               description: "#{route.defaults[:action]} #{k.to_s.underscore.pluralize}",
               parameters: {},
               response: {
-                "$ref" => k.to_s
+                "$ref" => (action == 'index' ? "#{k.to_s}List" : k.to_s)
               },
               scopes: [
                        "https://api.clinicalfuture.com/auth/arvados"