Merge branch 'master' into 2640-folder-api
[arvados.git] / apps / workbench / app / controllers / application_controller.rb
index 61351d644974a657da435b7d39e9699cabfe7706..41d5566885c59bbdfed4e70b1673e70e78035c1c 100644 (file)
@@ -30,6 +30,7 @@ class ApplicationController < ActionController::Base
   end
 
   def render_error(opts)
+    opts = {status: 500}.merge opts
     respond_to do |f|
       # json must come before html here, so it gets used as the
       # default format when js is requested by the client. This lets
@@ -58,7 +59,19 @@ class ApplicationController < ActionController::Base
   end
 
   def index
-    @objects ||= model_class.limit(200).all
+    if params[:limit]
+      limit = params[:limit].to_i
+    else
+      limit = 200
+    end
+
+    if params[:offset]
+      offset = params[:offset].to_i
+    else
+      offset = 0
+    end
+
+    @objects ||= model_class.limit(limit).offset(offset).all
     respond_to do |f|
       f.json { render json: @objects }
       f.html { render }
@@ -96,8 +109,16 @@ class ApplicationController < ActionController::Base
   def update
     updates = params[@object.class.to_s.underscore.singularize.to_sym]
     updates.keys.each do |attr|
-      if @object.send(attr).is_a? Hash and updates[attr].is_a? String
-        updates[attr] = Oj.load updates[attr]
+      if @object.send(attr).is_a? Hash
+        if updates[attr].is_a? String
+          updates[attr] = Oj.load updates[attr]
+        end
+        if params[:merge] || params["merge_#{attr}".to_sym]
+          # Merge provided Hash with current Hash, instead of
+          # replacing.
+          updates[attr] = @object.send(attr).with_indifferent_access.
+            deep_merge(updates[attr].with_indifferent_access)
+        end
       end
     end
     if @object.update_attributes updates
@@ -149,7 +170,8 @@ class ApplicationController < ActionController::Base
 
   def breadcrumb_page_name
     (@breadcrumb_page_name ||
-     (@object.friendly_link_name if @object.respond_to? :friendly_link_name))
+     (@object.friendly_link_name if @object.respond_to? :friendly_link_name) ||
+     action_name)
   end
 
   def index_pane_list