Merge branch '1608-api-documentation'
[arvados.git] / apps / workbench / app / controllers / application_controller.rb
index 9812ba0906abe4aac8e2359f49d0120d58b0a6c3..57ba0cf7a1879413cab628d6e5206fc14d6268c5 100644 (file)
@@ -4,7 +4,7 @@ class ApplicationController < ActionController::Base
   around_filter :thread_with_api_token, :except => [:render_exception, :render_not_found]
   before_filter :find_object_by_uuid, :except => [:index, :render_exception, :render_not_found]
 
-  unless Rails.application.config.consider_all_requests_local
+  begin
     rescue_from Exception,
     :with => :render_exception
     rescue_from ActiveRecord::RecordNotFound,
@@ -13,7 +13,7 @@ class ApplicationController < ActionController::Base
     :with => :render_not_found
     rescue_from ActionController::UnknownController,
     :with => :render_not_found
-    rescue_from ActionController::UnknownAction,
+    rescue_from ::AbstractController::ActionNotFound,
     :with => :render_not_found
   end
 
@@ -33,7 +33,7 @@ class ApplicationController < ActionController::Base
   def render_exception(e)
     logger.error e.inspect
     logger.error e.backtrace.collect { |x| x + "\n" }.join('') if e.backtrace
-    if @object and @object.errors and @object.errors.full_messages
+    if @object.andand.errors.andand.full_messages.andand.any?
       @errors = @object.errors.full_messages
     else
       @errors = [e.inspect]
@@ -62,7 +62,19 @@ class ApplicationController < ActionController::Base
     end
     respond_to do |f|
       f.json { render json: @object }
-      f.html { render }
+      f.html {
+        if request.method == 'GET'
+          render
+        else
+          redirect_to params[:return_to] || @object
+        end
+      }
+    end
+  end
+
+  def render_content
+    if !@object
+      return render_not_found("object not found")
     end
   end
 
@@ -71,7 +83,13 @@ class ApplicationController < ActionController::Base
   end
 
   def update
-    if @object.update_attributes params[@object.class.to_s.underscore.singularize.to_sym]
+    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]
+      end
+    end
+    if @object.update_attributes updates
       show
     else
       self.render_error status: 422
@@ -81,7 +99,7 @@ class ApplicationController < ActionController::Base
   def create
     @object ||= model_class.new params[model_class.to_s.singularize.to_sym]
     @object.save!
-    redirect_to @object
+    redirect_to(params[:return_to] || @object)
   end
 
   def destroy
@@ -111,7 +129,11 @@ class ApplicationController < ActionController::Base
     if params[:id] and params[:id].match /\D/
       params[:uuid] = params.delete :id
     end
-    @object = model_class.where(uuid: params[:uuid]).first
+    if params[:uuid].is_a? String
+      @object = model_class.find(params[:uuid])
+    else
+      @object = model_class.where(uuid: params[:uuid]).first
+    end
   end
 
   def thread_clear