Skip to content

Commit

Permalink
changesets - new controller for changeset content
Browse files Browse the repository at this point in the history
  • Loading branch information
Tomas Strachota committed Dec 6, 2011
1 parent ece33fe commit 41dbc3c
Show file tree
Hide file tree
Showing 4 changed files with 170 additions and 65 deletions.
102 changes: 102 additions & 0 deletions src/app/controllers/api/changesets_content_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
#
# Copyright 2011 Red Hat, Inc.
#
# This software is licensed to you under the GNU General Public
# License as published by the Free Software Foundation; either version
# 2 of the License (GPLv2) or (at your option) any later version.
# There is NO WARRANTY for this software, express or implied,
# including the implied warranties of MERCHANTABILITY,
# NON-INFRINGEMENT, or FITNESS FOR A PARTICULAR PURPOSE. You should
# have received a copy of GPLv2 along with this software; if not, see
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.

require 'rest_client'

class Api::ChangesetsContentController < Api::ApiController

before_filter :find_changeset

# TODO: define authorization rules
skip_before_filter :authorize

def add_product
@changeset.add_product_by_cpid(params[:product_id])
@changeset.save!
render :text => _("Added product '#{params[:product_id]}'"), :status => 200
end

def remove_product
product = @changeset.remove_product_by_cpid(params[:id])
@changeset.save!
render :text => _("Removed product '#{product.name}'"), :status => 200
end

def add_package
@changeset.add_package(params[:name], params[:product_id])
@changeset.save!
render :text => _("Added package '#{params[:name]}'"), :status => 200
end

def remove_package
@changeset.remove_package(params[:id], params[:product_id])
@changeset.save!
render :text => _("Removed package '#{params[:id]}'"), :status => 200
end

def add_erratum
@changeset.add_erratum(params[:name], params[:product_id])
@changeset.save!
render :text => _("Added package '#{params[:name]}'"), :status => 200
end

def remove_erratum
@changeset.remove_erratum(params[:id], params[:product_id])
@changeset.save!
render :text => _("Removed package '#{params[:id]}'"), :status => 200
end

def add_repo
repo = @changeset.add_repo(params[:repository_id], params[:product_id])
@changeset.save!
render :text => _("Added repository '#{repo.name}'"), :status => 200
end

def remove_repo
@changeset.remove_repo(params[:id], params[:product_id])
@changeset.save!
render :text => _("Removed repository '#{params[:id]}'"), :status => 200
end

def add_template
tpl = @changeset.add_template(params[:template_id])
@changeset.save!
render :text => _("Added template '#{tpl.name}'"), :status => 200
end

def remove_template
@changeset.remove_template(params[:id])
@changeset.save!
render :text => _("Removed template '#{params[:id]}'"), :status => 200
end

def add_distribution
@changeset.add_distribution(params[:distribution_id], params[:product_id])
@changeset.save!
render :text => _("Added distribution '#{params[:distribution_id]}'")
end

def remove_distribution
@changeset.remove_distribution(params[:distribution_id], params[:product_id])
@changeset.save!
render :text => _("Removed distribution '#{params[:distribution_id]}'")
end

private

def find_changeset
@changeset = Changeset.find(params[:changeset_id])
raise HttpErrors::NotFound, _("Couldn't find changeset '#{params[:id]}'") if @changeset.nil?
@changeset
end

end
36 changes: 1 addition & 35 deletions src/app/controllers/api/changesets_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
class Api::ChangesetsController < Api::ApiController

before_filter :find_environment, :only => [:index, :create]
before_filter :find_changeset, :only => [:show, :destroy, :update_content, :promote]
before_filter :find_changeset, :only => [:show, :destroy, :promote]
before_filter :authorize

def rules
Expand All @@ -26,7 +26,6 @@ def rules
:create => manage_perm,
:promote => promote_perm,
:destroy =>manage_perm,
:update_content => manage_perm,
}
end

Expand Down Expand Up @@ -62,39 +61,6 @@ def destroy
render :text => _("Deleted changeset '#{params[:id]}'"), :status => 200
end


def update_content

each_patch_item '+products' do |name| @changeset.add_product name end
each_patch_item '-products' do |name| @changeset.remove_product name end

each_patch_item '+packages' do |rec| @changeset.add_package rec[:name], rec[:product] end
each_patch_item '-packages' do |rec| @changeset.remove_package rec[:name], rec[:product] end

each_patch_item '+errata' do |rec| @changeset.add_erratum rec[:name], rec[:product] end
each_patch_item '-errata' do |rec| @changeset.remove_erratum rec[:name], rec[:product] end

each_patch_item '+repos' do |rec| @changeset.add_repo rec[:name], rec[:product] end
each_patch_item '-repos' do |rec| @changeset.remove_repo rec[:name], rec[:product] end

each_patch_item '+templates' do |name| @changeset.add_template name end
each_patch_item '-templates' do |name| @changeset.remove_template name end

each_patch_item '+distributions' do |rec| @changeset.add_distribution rec[:name], rec[:product] end
each_patch_item '-distributions' do |rec| @changeset.remove_distribution rec[:name], rec[:product] end

@changeset.save!
render :json => @changeset.to_json(:include => [:products, :packages, :errata, :repos])
end

def each_patch_item name, &block
return if params[:patch].nil? or params[:patch][name].nil?

params[:patch][name].each do |rec|
yield rec
end
end

def find_changeset
@changeset = Changeset.find(params[:id])
raise HttpErrors::NotFound, _("Couldn't find changeset '#{params[:id]}'") if @changeset.nil?
Expand Down
71 changes: 42 additions & 29 deletions src/app/models/changeset.rb
Original file line number Diff line number Diff line change
Expand Up @@ -123,20 +123,20 @@ def promote async=true
end
end

def add_product product_name
product = find_product(product_name)
def add_product cpid
product = find_product_by_cpid(cpid)
self.products << product
product
end

def add_template template_name
tpl = find_template(template_name)
def add_template template_id
tpl = find_template(template_id)
self.system_templates << tpl
tpl
end

def add_package package_name, product_name
product = find_product(product_name)
def add_package package_name, product_cpid
product = find_product_by_cpid(product_cpid)
product.repos(self.environment.prior).each do |repo|
#search for package in all repos in a product
idx = repo.packages.index do |p| p.name == package_name end
Expand All @@ -152,8 +152,8 @@ def add_package package_name, product_name
raise Errors::ChangesetContentException.new("Package not found in the source environment.")
end

def add_erratum erratum_id, product_name
product = find_product(product_name)
def add_erratum erratum_id, product_cpid
product = find_product_by_cpid(product_cpid)
product.repos(self.environment.prior).each do |repo|
#search for erratum in all repos in a product
idx = repo.errata.index do |e| e.id == erratum_id end
Expand All @@ -169,15 +169,15 @@ def add_erratum erratum_id, product_name
raise Errors::ChangesetContentException.new("Erratum not found in the source environment.")
end

def add_repo repo_name, product_name
repo = find_repo_by_name(repo_name, product_name)
def add_repo repo_id, product_cpid
repo = find_repo(repo_id, product_cpid)
raise Errors::ChangesetContentException.new("Repository not found within this environment.") unless repo
self.repos << repo
repo
end

def add_distribution distribution_id, product_name
product = find_product(product_name)
def add_distribution distribution_id, product_cpid
product = find_product_by_cpid(product_cpid)
repos = product.repos(self.environment.prior)
idx = nil
repos.each do |repo|
Expand All @@ -200,14 +200,20 @@ def remove_product product_name
self.products.delete(prod)
end

def remove_template template_name
tpl = self.system_templates.find_by_name(template_name)
raise Errors::ChangesetContentException.new("Template #{template_name} not found in the changeset.") if tpl.nil?
def remove_product_by_cpid cpid
prod = self.products.find_by_cp_id(cpid)
raise Errors::ChangesetContentException.new("Product #{cpid} not found in the changeset.") if prod.nil?
self.products.delete(prod)
end

def remove_template template_id
tpl = self.system_templates.find(template_id)
raise Errors::ChangesetContentException.new("Template #{template_id} not found in the changeset.") if tpl.nil?
self.system_templates.delete(tpl)
end

def remove_package package_name, product_name
product = find_product(product_name)
def remove_package package_name, product_cpid
product = find_product_by_cpid(product_cpid)
product.repos(self.environment.prior).each do |repo|
#search for package in all repos in a product
idx = repo.packages.index do |p| p.name == package_name end
Expand All @@ -219,8 +225,8 @@ def remove_package package_name, product_name
end
end

def remove_erratum erratum_id, product_name
product = find_product(product_name)
def remove_erratum erratum_id, product_cpid
product = find_product_by_cpid(product_cpid)
product.repos(self.environment.prior).each do |repo|
#search for erratum in all repos in a product
idx = repo.errata.index do |e| e.id == erratum_id end
Expand All @@ -232,8 +238,8 @@ def remove_erratum erratum_id, product_name
end
end

def remove_repo repo_name, product_name
repo = find_repo_by_name(repo_name, product_name)
def remove_repo repo_id, product_cpid
repo = find_repo(repo_id, product_cpid)
self.repos.delete(repo) if repo
end

Expand All @@ -243,8 +249,8 @@ def find_repos product
end


def remove_distribution distribution_id, product_name
product = find_product(product_name)
def remove_distribution distribution_id, product_cpid
product = find_product_by_cpid(product_cpid)
repos = product.repos(self.environment)
idx = nil
repos.each do |repo|
Expand All @@ -257,9 +263,9 @@ def remove_distribution distribution_id, product_name

private

def find_template template_name
def find_template template_id
from_env = self.environment.prior
tpl = from_env.system_templates.find_by_name(template_name)
tpl = from_env.system_templates.find(template_id)
raise Errors::ChangesetContentException.new("Template not found within environment you want to promote from.") if tpl.nil?
tpl
end
Expand All @@ -271,6 +277,14 @@ def find_product product_name
product
end

def find_product_by_cpid product_cpid
from_env = self.environment.prior
product = from_env.products.find_by_cp_id(product_cpid.to_s)
raise Errors::ChangesetContentException.new("Product not found within environment you want to promote from.") if product.nil?
product
end



def update_progress! percent
if self.task_status
Expand Down Expand Up @@ -517,10 +531,9 @@ def build_dependencies product, dependencies
new_dependencies
end

private
def find_repo_by_name repo_name, product_name
product = find_product(product_name)
product.repos(self.environment.prior).where("repositories.name" => repo_name).first
def find_repo repo_id, product_cpid
product = find_product_by_cpid(product_cpid)
product.repos(self.environment.prior).where("repositories.id" => repo_id).first
end

end
26 changes: 25 additions & 1 deletion src/config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -377,8 +377,32 @@ def matches?(request)
end

resources :changesets, :only => [:show, :destroy] do
put :update, :on => :member, :action => :update_content
post :promote, :on => :member, :action => :promote
resources :products, :controller => :changesets_content do
post :index, :on => :collection, :action => :add_product
delete :destroy, :on => :member, :action => :remove_product
end
resources :packages, :controller => :changesets_content do
post :index, :on => :collection, :action => :add_package
delete :destroy, :on => :member, :action => :remove_package
end
resources :errata, :controller => :changesets_content do
post :index, :on => :collection, :action => :add_erratum
delete :destroy, :on => :member, :action => :remove_erratum
end
resources :repositories , :controller => :changesets_content do
post :index, :on => :collection, :action => :add_repo
delete :destroy, :on => :member, :action => :remove_repo
end
resources :distributions, :controller => :changesets_content do
post :index, :on => :collection, :action => :add_distribution
delete :destroy, :on => :member, :action => :remove_distribution
end
resources :templates, :controller => :changesets_content do
post :index, :on => :collection, :action => :add_template
delete :destroy, :on => :member, :action => :remove_template
end

end

resources :products, :only => [:show, :destroy] do
Expand Down

0 comments on commit 41dbc3c

Please sign in to comment.