Merged master
[arvados.git] / services / api / app / controllers / application_controller.rb
index 70a2a4c9c0716108a95cbb2696dc370dc53d67f9..94ef19c87948fbf4225ec065d5b4c2072ddb6e22 100644 (file)
@@ -120,7 +120,7 @@ class ApplicationController < ActionController::Base
   def load_filters_param
     if params[:filters].is_a? Array
       @filters = params[:filters]
-    elsif params[:filters].is_a? String
+    elsif params[:filters].is_a? String and !params[:filters].empty?
       begin
         @filters = Oj.load params[:filters]
         raise unless @filters.is_a? Array
@@ -140,7 +140,7 @@ class ApplicationController < ActionController::Base
       cond_out = []
       param_out = []
       @filters.each do |attr, operator, operand|
-        if !model_class.searchable_columns.index attr.to_s
+        if !model_class.searchable_columns(operator).index attr.to_s
           raise ArgumentError.new("Invalid attribute '#{attr}' in condition")
         end
         case operator.downcase
@@ -182,13 +182,12 @@ class ApplicationController < ActionController::Base
     if @where.is_a? Hash and @where.any?
       conditions = ['1=1']
       @where.each do |attr,value|
-        if attr == :any
+        if attr.to_s == 'any'
           if value.is_a?(Array) and
               value.length == 2 and
-              value[0] == 'contains' and
-              model_class.columns.collect(&:name).index('name') then
+              value[0] == 'contains' then
             ilikes = []
-            model_class.searchable_columns.each do |column|
+            model_class.searchable_columns('ilike').each do |column|
               ilikes << "#{table_name}.#{column} ilike ?"
               conditions << "%#{value[1]}%"
             end
@@ -441,7 +440,9 @@ class ApplicationController < ActionController::Base
       :items => @objects.as_api_response(nil)
     }
     if @objects.respond_to? :except
-      @object_list[:items_available] = @objects.except(:limit).except(:offset).count
+      @object_list[:items_available] = @objects.
+        except(:limit).except(:offset).
+        count(:id, distinct: true)
     end
     render json: @object_list
   end