On Thu, 2012-08-02 at 14:24 +0200, [email protected] wrote: > From: Imre Farkas <[email protected]> > > --- > src/app/models/pool.rb | 2 + > src/app/models/provider.rb | 2 + > src/app/models/provider_account.rb | 2 + > src/app/models/provider_priority_group.rb | 50 > +++++++++++++++++++++++ > src/app/models/provider_priority_group_element.rb | 22 ++++++++++ > 5 files changed, 78 insertions(+) > create mode 100644 src/app/models/provider_priority_group.rb > create mode 100644 src/app/models/provider_priority_group_element.rb > > diff --git a/src/app/models/pool.rb b/src/app/models/pool.rb > index 13baebc..23d31c6 100644 > --- a/src/app/models/pool.rb > +++ b/src/app/models/pool.rb > @@ -66,6 +66,8 @@ class Pool < ActiveRecord::Base > > has_many :deployments, :dependent => :destroy > > + has_many :provider_priority_groups, :dependent => :destroy
^^ this could be :dependent => :delete_all as no callbacks need to be called for deleting priority groups associated with pool ?? > + > before_destroy :destroyable? > > def cloud_accounts > diff --git a/src/app/models/provider.rb b/src/app/models/provider.rb > index cf2a7e7..64ddb33 100644 > --- a/src/app/models/provider.rb > +++ b/src/app/models/provider.rb > @@ -59,6 +59,8 @@ class Provider < ActiveRecord::Base > has_many :derived_permissions, :as => :permission_object, :dependent => > :destroy, > :include => [:role], > :order => "derived_permissions.id ASC" > + has_many :provider_priority_group_elements, :as => :value, :dependent => > :destroy > + has_many :provider_priority_groups, :through => > :provider_priority_group_elements > > before_destroy :destroyable? > > diff --git a/src/app/models/provider_account.rb > b/src/app/models/provider_account.rb > index 067f5cf..1e8d41c 100644 > --- a/src/app/models/provider_account.rb > +++ b/src/app/models/provider_account.rb > @@ -58,6 +58,8 @@ class ProviderAccount < ActiveRecord::Base > # eventually, this might be "has_many", but first pass is one-to-one > has_one :config_server, :dependent => :destroy > > + has_many :provider_priority_group_elements, :as => :value, :dependent => > :destroy > + > # Helpers > attr_accessor :x509_cert_priv_file, :x509_cert_pub_file > > diff --git a/src/app/models/provider_priority_group.rb > b/src/app/models/provider_priority_group.rb > new file mode 100644 > index 0000000..1e1a594 > --- /dev/null > +++ b/src/app/models/provider_priority_group.rb > @@ -0,0 +1,50 @@ > +# > +# Copyright 2012 Red Hat, Inc. > +# > +# Licensed under the Apache License, Version 2.0 (the "License"); > +# you may not use this file except in compliance with the License. > +# You may obtain a copy of the License at > +# > +# http://www.apache.org/licenses/LICENSE-2.0 > +# > +# Unless required by applicable law or agreed to in writing, software > +# distributed under the License is distributed on an "AS IS" BASIS, > +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. > +# See the License for the specific language governing permissions and > +# limitations under the License. > +# > + > +class ProviderPriorityGroup < ActiveRecord::Base > + > + belongs_to :pool > + has_many :provider_priority_group_elements, :dependent => :destroy > + has_many :providers, :through => :provider_priority_group_elements, > :source => :value, :source_type => 'Provider' > + has_many :provider_accounts, :through => > :provider_priority_group_elements, :source => :value, :source_type => > 'ProviderAccount' > + > + validates_numericality_of :score, :only_integer => true, > :greater_than_or_equal_to => -100, :less_than_or_equal_to => 100 > + > + def include?(element) > + if element.is_a?(Provider) > + providers.include?(element) > + elsif element.is_a?(ProviderAccount) > + providers.include?(element.provider) || > provider_accounts.include?(element) > + end > + end > + > + def add_provider_accounts(selected_provider_accounts) > + selected_provider_accounts.each do |provider_account| > + unless providers.include?(provider_account.provider) > + provider_accounts << provider_account > + end > + end > + end > + > + def all_provider_accounts > + result = providers.inject([]) do |result, provider| > + result += provider.provider_accounts > + end > + > + result += provider_accounts > + end > + > +end > \ No newline at end of file > diff --git a/src/app/models/provider_priority_group_element.rb > b/src/app/models/provider_priority_group_element.rb > new file mode 100644 > index 0000000..65d1c7b > --- /dev/null > +++ b/src/app/models/provider_priority_group_element.rb > @@ -0,0 +1,22 @@ > +# > +# Copyright 2012 Red Hat, Inc. > +# > +# Licensed under the Apache License, Version 2.0 (the "License"); > +# you may not use this file except in compliance with the License. > +# You may obtain a copy of the License at > +# > +# http://www.apache.org/licenses/LICENSE-2.0 > +# > +# Unless required by applicable law or agreed to in writing, software > +# distributed under the License is distributed on an "AS IS" BASIS, > +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. > +# See the License for the specific language governing permissions and > +# limitations under the License. > +# > + > +class ProviderPriorityGroupElement < ActiveRecord::Base > + > + belongs_to :provider_priority_group > + belongs_to :value, :polymorphic => true > + > +end > \ No newline at end of file
