From: Jiri Tomasek <jtomasek(a)redhat.com>
---
.../suggested_deployables_controller.rb | 1 +
src/app/models/deployment.rb | 13 +------------
src/app/models/suggested_deployable.rb | 12 ++++++++++++
src/app/util/deployable_xml.rb | 11 +++++++++++
src/features/step_definitions/deployment_steps.rb | 2 +-
src/features/step_definitions/pool_steps.rb | 2 +-
src/spec/factories/deployment.rb | 2 +-
src/spec/vcr_setup.rb | 6 +++---
8 files changed, 31 insertions(+), 18 deletions(-)
diff --git a/src/app/controllers/suggested_deployables_controller.rb
b/src/app/controllers/suggested_deployables_controller.rb
index 0404fbc..3ca1f9c 100644
--- a/src/app/controllers/suggested_deployables_controller.rb
+++ b/src/app/controllers/suggested_deployables_controller.rb
@@ -34,6 +34,7 @@ class SuggestedDeployablesController < ApplicationController
@suggested_deployable.owner = current_user
if @suggested_deployable.save
flash[:notice] = 'Deployable added'
+ flash[:warning] = "Deployable url doesn't resolve valid XML file"
unless
@suggested_deployable.accessible_and_valid_deployable_xml?((a)suggested_deployable.url)
redirect_to suggested_deployables_path
else
render :new
diff --git a/src/app/models/deployment.rb b/src/app/models/deployment.rb
index 7a87ae1..d3f95e7 100644
--- a/src/app/models/deployment.rb
+++ b/src/app/models/deployment.rb
@@ -171,7 +171,7 @@ class Deployment < ActiveRecord::Base
def accessible_and_valid_deployable_xml?(url)
begin
- import_xml_from_url(url)
+ self.deployable_xml = DeployableXML.import_xml_from_url(url)
deployable_xml.validate!
true
rescue
@@ -184,17 +184,6 @@ class Deployment < ActiveRecord::Base
@deployable_xml ||= DeployableXML.new(self[:deployable_xml].to_s)
end
- def import_xml_from_url(url)
- # Right now we allow this to raise exceptions on timeout / errors
- resource = RestClient::Resource.new(url, :open_timeout => 10, :timeout => 45)
- response = resource.get
- if response.code == 200
- self.deployable_xml = response
- else
- false
- end
- end
-
def properties
{:name => name, :owner => "#{owner.first_name} #{owner.last_name}",
:created => created_at, :pool => pool.name}
end
diff --git a/src/app/models/suggested_deployable.rb
b/src/app/models/suggested_deployable.rb
index c368d36..133824f 100644
--- a/src/app/models/suggested_deployable.rb
+++ b/src/app/models/suggested_deployable.rb
@@ -17,10 +17,22 @@ class SuggestedDeployable < ActiveRecord::Base
validates_uniqueness_of :name
validates_length_of :name, :maximum => 1024
validates_presence_of :url
+ validates_format_of :url, :with => URI::regexp
has_many :permissions, :as => :permission_object, :dependent => :destroy,
:include => [:role],
:order => "permissions.id ASC"
belongs_to :owner, :class_name => "User", :foreign_key =>
"owner_id"
after_create "assign_owner_roles(owner)"
+
+ def accessible_and_valid_deployable_xml?(url)
+ begin
+ deployable_xml = DeployableXML.new(DeployableXML.import_xml_from_url(url))
+ deployable_xml.validate!
+ true
+ rescue
+ false
+ end
+ end
+
end
diff --git a/src/app/util/deployable_xml.rb b/src/app/util/deployable_xml.rb
index 14d9f5c..c4d2a80 100644
--- a/src/app/util/deployable_xml.rb
+++ b/src/app/util/deployable_xml.rb
@@ -61,4 +61,15 @@ class DeployableXML
AssemblyXML.new(assembly_node.to_s)
end
end
+
+ def self.import_xml_from_url(url)
+ # Right now we allow this to raise exceptions on timeout / errors
+ resource = RestClient::Resource.new(url, :open_timeout => 10, :timeout => 45)
+ response = resource.get
+ if response.code == 200
+ response
+ else
+ false
+ end
+ end
end
diff --git a/src/features/step_definitions/deployment_steps.rb
b/src/features/step_definitions/deployment_steps.rb
index 6383196..a505e53 100644
--- a/src/features/step_definitions/deployment_steps.rb
+++ b/src/features/step_definitions/deployment_steps.rb
@@ -1,7 +1,7 @@
Given /^there is a deployment named "([^"]*)" belonging to
"([^"]*)" owned by "([^"]*)"$/ do |deployment_name,
deployable_name, owner_name|
user = Factory(:user, :login => owner_name, :last_name => owner_name)
@deployment = Deployment.new({:name => deployment_name, :pool => Pool.first,
:owner => user})
-
@deployment.import_xml_from_url("http://localhost/deployables/deployable1.xml")
+ @deployment.deployable_xml =
DeployableXML.import_xml_from_url("http://localhost/deployables/deployable1.xml")
@deployment.save
end
diff --git a/src/features/step_definitions/pool_steps.rb
b/src/features/step_definitions/pool_steps.rb
index f3aa02c..d1bb0cb 100644
--- a/src/features/step_definitions/pool_steps.rb
+++ b/src/features/step_definitions/pool_steps.rb
@@ -27,7 +27,7 @@ Given /^a pool "([^"]*)" exists with deployment
"([^"]*)"$/ do |pool_name, deplo
quota = Factory(:quota)
pool = Pool.find_by_name(pool_name) || Pool.create!(:name => pool_name, :pool_family
=> pool_family, :quota => quota)
deployment = Deployment.new(:name => deployment_name, :pool => pool, :owner =>
User.first)
-
deployment.import_xml_from_url("http://localhost/deployables/deployable1.xml")
+ deployment.deployable_xml =
DeployableXML.import_xml_from_url("http://localhost/deployables/deployable1.xml")
deployment.save!
end
diff --git a/src/spec/factories/deployment.rb b/src/spec/factories/deployment.rb
index 9420a16..59843e0 100644
--- a/src/spec/factories/deployment.rb
+++ b/src/spec/factories/deployment.rb
@@ -3,6 +3,6 @@ Factory.define :deployment do |d|
d.association :pool, :factory => :pool
d.association :owner, :factory => :user
d.after_build do |deployment|
-
deployment.import_xml_from_url("http://localhost/deployables/deployable1.xml")
+ deployment.deployable_xml =
DeployableXML.import_xml_from_url("http://localhost/deployables/deployable1.xml")
end
end
diff --git a/src/spec/vcr_setup.rb b/src/spec/vcr_setup.rb
index c422fb3..0405a8b 100644
--- a/src/spec/vcr_setup.rb
+++ b/src/spec/vcr_setup.rb
@@ -27,8 +27,8 @@ Warehouse::Connection.class_eval do
end
# Mock request for deployable xml
-Deployment.class_eval do
- def import_xml_from_url(url)
+DeployableXML.class_eval do
+ def self.import_xml_from_url(url)
# Right now we allow this to raise exceptions on timeout / errors
result = nil
response = nil
@@ -37,7 +37,7 @@ Deployment.class_eval do
response = resource.get
end
if response.code == 200
- self.deployable_xml = response
+ response
else
false
end
--
1.7.4.2