Skip to content

Commit

Permalink
[webui] more RESTfull approach when adding and removing relationships
Browse files Browse the repository at this point in the history
  • Loading branch information
ancorgs committed Aug 7, 2013
1 parent 18b0689 commit 1d41553
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 58 deletions.
14 changes: 7 additions & 7 deletions src/webui/app/controllers/package_controller.rb
Expand Up @@ -655,7 +655,7 @@ def remove_file
end

def change_role_options(params)
ret = { package: params[:package] }
ret = Hash.new
ret[:role] = params[:role] if params.has_key? :role
if params.has_key? :userid
return ret.merge( { user: params[:userid] })
Expand All @@ -666,9 +666,9 @@ def change_role_options(params)

def save_person
begin
ApiDetails.create_role @project.name, change_role_options(params)
ApiDetails.create :project_package_relationships, @project.name, @package.name, change_role_options(params)
@package.free_cache
rescue ApiDetails::CommandFailed => e
rescue ApiDetails::TransportError, ApiDetails::NotFoundError => e
flash[:error] = e.to_s
redirect_to action: :add_person, project: @project, package: @package, role: params[:role], userid: params[:userid]
return
Expand All @@ -684,9 +684,9 @@ def save_person

def save_group
begin
ApiDetails.create_role @project.name, change_role_options(params)
ApiDetails.create :project_package_relationships, @project.name, @package.name, change_role_options(params)
@package.free_cache
rescue ApiDetails::CommandFailed => e
rescue ApiDetails::TransportError, ApiDetails::NotFoundError => e
flash[:error] = e.to_s
redirect_to action: :add_group, project: @project, package: @package, role: params[:role], groupid: params[:groupid]
return
Expand All @@ -702,9 +702,9 @@ def save_group

def remove_role
begin
ApiDetails.remove_role @project.name, change_role_options(params)
ApiDetails.destroy :for_user_project_package_relationships, @project.name, @package.name, change_role_options(params)
@package.free_cache
rescue ActiveXML::Transport::Error => e
rescue ApiDetails::TransportError, ApiDetails::NotFoundError => e
flash[:error] = e.summary
end
respond_to do |format|
Expand Down
14 changes: 7 additions & 7 deletions src/webui/app/controllers/project_controller.rb
Expand Up @@ -242,7 +242,7 @@ def load_project_info
return unless check_valid_project_name
begin
@project_info = ApiDetails.read(:infos_project, params[:project])
rescue ActiveXML::Transport::NotFoundError
rescue ApiDetails::NotFoundError
return render_project_missing
end
@project = Project.new(@project_info["xml"])
Expand Down Expand Up @@ -808,9 +808,9 @@ def change_role_options(params)

def save_person
begin
ApiDetails.create_role @project.name, change_role_options(params)
ApiDetails.create(:project_relationships, @project.name, change_role_options(params))
@project.free_cache
rescue ApiDetails::CommandFailed => e
rescue ApiDetails::TransportError, ApiDetails::NotFoundError => e
flash[:error] = e.to_s
redirect_to action: :add_person, project: @project, role: params[:role], userid: params[:userid]
return
Expand All @@ -826,9 +826,9 @@ def save_person

def save_group
begin
ApiDetails.create_role @project.name, change_role_options(params)
ApiDetails.create :project_relationships, @project.name, change_role_options(params)
@project.free_cache
rescue ApiDetails::CommandFailed => e
rescue ApiDetails::TransportError, ApiDetails::NotFoundError => e
flash[:error] = e.to_s
redirect_to action: :add_group, project: @project, role: params[:role], groupid: params[:groupid]
return
Expand All @@ -844,9 +844,9 @@ def save_group

def remove_role
begin
ApiDetails.remove_role @project.name, change_role_options(params)
ApiDetails.destroy :for_user_project_relationships, @project.name, change_role_options(params)
@project.free_cache
rescue ActiveXML::Transport::Error => e
rescue ApiDetails::TransportError, ApiDetails::NotFoundError => e
flash[:error] = e.summary
end
respond_to do |format|
Expand Down
2 changes: 1 addition & 1 deletion src/webui/app/controllers/request_controller.rb
Expand Up @@ -56,7 +56,7 @@ def show
redirect_back_or_to :controller => 'home', :action => 'requests' and return if !params[:id]
begin
@req = ApiDetails.read(:request, params[:id])
rescue ActiveXML::Transport::Error
rescue ApiDetails::NotFoundError
flash[:error] = "Can't find request #{params[:id]}"
redirect_back_or_to :controller => "home", :action => "requests" and return
end
Expand Down
81 changes: 38 additions & 43 deletions src/webui/app/models/api_details.rb
@@ -1,50 +1,33 @@
class ApiDetails

class CommandFailed < Exception ; end
class TransportError < Exception ; end
class NotFoundError < Exception ; end

def self.logger
Rails.logger
end

# FIXME: legacy
def self.create_role(project_name, opts)
opts.delete :todo
if opts[:package].blank?
uri = URI("/webui/projects/#{project_name}/relationships")
else
uri = URI("/webui/projects/#{project_name}/packages/#{opts[:package]}/relationships")
opts.delete :package
end
uri = self.url_for(uri, opts)
begin
ActiveXML::transport.http_json :post, uri
rescue ActiveXML::Transport::Error => e
raise CommandFailed, e.summary
end
def self.prepare_search
transport = ActiveXML::transport
transport.http_do 'post', "/test/prepare_search"
end

# FIXME: legacy
def self.remove_role(project_name, opts)
opts.delete :todo
if opts[:package].blank?
uri = URI("/webui/projects/#{project_name}/relationships/remove_user")
else
uri = URI("/webui/projects/#{project_name}/packages/#{opts[:package]}/relationships/remove_user")
opts.delete :package
end
uri = self.url_for(uri, opts)
begin
ActiveXML::transport.http_json :delete, uri
rescue ActiveXML::Transport::Error => e
raise CommandFailed, e.summary
end
def self.read(route_name, *args)
http_do :get, route_name, *args
end

def self.create(route_name, *args)
http_do :post, route_name, *args
end

def self.destroy(route_name, *args)
http_do :delete, route_name, *args
end

# Trying to mimic the names and params of Rails' url helpers
def self.read(route_name, *args)
def self.http_do(verb, route_name, *args)
# FIXME: we need a better (real) implementation of nested routes
# using rails facilities

ids = []
opts = {}
args.each do |i|
Expand All @@ -67,28 +50,40 @@ def self.read(route_name, *args)
when :projects then "projects"
when :infos_project then "projects/#{ids.first}/infos"
when :status_project then "projects/#{ids.first}/status"
when :project_relationships then "projects/#{ids.first}/relationships"
when :project_package_relationships then "projects/#{ids.first}/packages/#{ids.last}/relationships"
when :for_user_project_relationships then "projects/#{ids.first}/relationships/for_user"
when :for_user_project_package_relationships then "projects/#{ids.first}/packages/#{ids.last}/relationships/for_user"

when :requests then "requests"
when :request then "requests/#{ids.first}"
when :ids_requests then "requests/ids"
when :by_class_requests then "requests/by_class"


when :attrib_types then "attrib_types"

when :searches then "searches"

else raise "no valid route #{route_name}"
end
uri = url_for(uri, opts)

transport = ActiveXML::transport
data = transport.http_do 'get', uri
begin
if [:get, :delete].include? verb.to_sym
uri = "#{uri}?#{opts.to_query}" unless opts.empty?
data = transport.http_do verb, uri
else
data = transport.http_json verb, URI(uri), opts
end
rescue ActiveXML::Transport::NotFoundError => e
raise NotFoundError, e.summary
rescue ActiveXML::Transport::Error => e
raise TransportError, e.summary
end
data = JSON.parse(data)
logger.debug "data #{JSON.pretty_generate(data)}"
data
end

def self.url_for(uri, opts = {})
if opts.empty?
uri
else
"#{uri}?#{opts.to_query}"
end
end
end

0 comments on commit 1d41553

Please sign in to comment.