[PATCH conductor 07/22] ProviderPriorityGroup related model changes
Imre Farkas
ifarkas at redhat.com
Tue Aug 14 07:13:42 UTC 2012
On 08/13/2012 08:26 PM, Jozef Zigmund wrote:
> On Thu, 2012-08-02 at 14:24 +0200, ifarkas at redhat.com wrote:
>> From: Imre Farkas <ifarkas at redhat.com>
>>
>> ---
>> 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 ??
Yeah, there is no callback *for now*. But in the future if some will be
added, there will be a high chance that this would be forgotten and will
resurrect in some form of BZ. :-) Also, the performance gain you can
except from delete_all is just a few ms and I'm pretty sure that the
user will never notice it.
So, I think tolerance against future changes has much more benefit over
gaining few ms in server response.
>> +
>> 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
>
>
More information about the aeolus-devel
mailing list