[PATCH conductor 20/20] Adds XML format for update of Provider
pblaho at redhat.com
pblaho at redhat.com
Fri Jun 8 00:38:13 UTC 2012
From: Petr Blaho <pblaho at redhat.com>
https://www.aeolusproject.org/redmine/issues/3249
Adds route to PUT api/providers => ProvidersController#update
Refactors ProvidersController#parse_provider_type into before_filter
Changes Provider.find_by_id to Provider.find in edit and update actions.
This caused ugly errors in UI when url chenged to non existing Provider
---
src/app/controllers/providers_controller.rb | 50 +++++++++++++++++----------
src/config/routes.rb | 2 +-
2 files changed, 33 insertions(+), 19 deletions(-)
diff --git a/src/app/controllers/providers_controller.rb b/src/app/controllers/providers_controller.rb
index cfadb5a..9767244 100644
--- a/src/app/controllers/providers_controller.rb
+++ b/src/app/controllers/providers_controller.rb
@@ -18,6 +18,7 @@ class ProvidersController < ApplicationController
before_filter :require_user
before_filter :load_providers, :only => [:index, :show, :new, :edit, :create, :update]
before_filter :load_providers_types, :only => [:new, :edit, :update, :create]
+ before_filter :parse_provider_type, :only => [:create, :update]
def index
@params = params
@@ -52,7 +53,7 @@ class ProvidersController < ApplicationController
end
def edit
- @provider = Provider.find_by_id(params[:id])
+ @provider = Provider.find(params[:id])
@title = t 'cloud_providers'
session[:current_provider_id] = @provider.id
# requiring VIEW rather than MODIFY since edit doubles as the 'show' page
@@ -109,13 +110,6 @@ class ProvidersController < ApplicationController
params[:provider][:provider_type_id] = provider_type.id
end
- # looking for ProviderType based on content of provider_type tag in xml
- if params[:provider].has_key?(:provider_type) && params[:provider][:provider_type].has_key?(:id)
- provider_type_hash = params[:provider].delete(:provider_type)
- provider_type_id = provider_type_hash[:id]
- provider_type = ProviderType.find_by_id(provider_type_id)
- params[:provider][:provider_type_id] = provider_type.id
- end
@provider = Provider.new(params[:provider])
@@ -140,7 +134,7 @@ class ProvidersController < ApplicationController
end
def update
- @provider = Provider.find_by_id(params[:id])
+ @provider = Provider.find(params[:id])
require_privilege(Privilege::MODIFY, @provider)
@provider.attributes = params[:provider]
provider_disabled = @provider.enabled_changed? && !@provider.enabled
@@ -152,20 +146,30 @@ class ProvidersController < ApplicationController
if @provider.save
@provider.update_availability
- flash[:notice] = t"providers.flash.notice.updated"
- redirect_to edit_provider_path(@provider)
+ respond_to do |format|
+ format.html do
+ flash[:notice] = t"providers.flash.notice.updated"
+ redirect_to edit_provider_path(@provider)
+ end
+ format.xml { render :partial => 'detail', :locals => { :provider => @provider } }
+ end
else
# we reset 'enabled' attribute to real state
# if save failed
@provider.reset_enabled!
- unless @provider.connect
- flash.now[:warning] = t"providers.flash.warning.connect_failed"
- else
- flash[:error] = t"providers.flash.error.not_updated"
+ respond_to do |format|
+ format.html do
+ unless @provider.connect
+ flash.now[:warning] = t"providers.flash.warning.connect_failed"
+ else
+ flash[:error] = t"providers.flash.error.not_updated"
+ end
+ load_provider_tabs
+ @alerts = provider_alerts(@provider)
+ render :action => "edit"
+ end
+ format.xml { render :template => 'api/validation_error', :locals => { :errors => @provider.errors }, :status => :bad_request }
end
- load_provider_tabs
- @alerts = provider_alerts(@provider)
- render :action => "edit"
end
end
@@ -191,6 +195,16 @@ class ProvidersController < ApplicationController
protected
+ # looking for ProviderType based on content of provider_type tag in xml
+ def parse_provider_type
+ if params.has_key?(:provider) && params[:provider].has_key?(:provider_type) && params[:provider][:provider_type].has_key?(:id)
+ provider_type_hash = params[:provider].delete(:provider_type)
+ provider_type_id = provider_type_hash[:id]
+ provider_type = ProviderType.find_by_id(provider_type_id)
+ params[:provider][:provider_type_id] = provider_type.id
+ end
+ end
+
def test_connection(provider)
@provider.errors.clear
if @provider.update_availability
diff --git a/src/config/routes.rb b/src/config/routes.rb
index 0a8ff00..da762a7 100644
--- a/src/config/routes.rb
+++ b/src/config/routes.rb
@@ -265,7 +265,7 @@ Conductor::Application.routes.draw do
end
scope "/api" do
- resources :providers, :as => 'api_providers', :only => [:index, :show, :create, :destroy]
+ resources :providers, :as => 'api_providers', :only => [:index, :show, :create, :update, :destroy]
resources :provider_accounts, :as => 'api_provider_accounts', :only => [:index, :show]
resources :provider_types, :as => 'api_provider_types', :only => [:index, :show]
end
--
1.7.7.6
More information about the aeolus-devel
mailing list