Skip to content

Commit

Permalink
Count with Network Manager in decoding object from belongsto filter i…
Browse files Browse the repository at this point in the history
…n MiqFillter

methods handling with this special case behaviour has added also
  • Loading branch information
lpichler committed Mar 6, 2019
1 parent 8759c9d commit 7b9790e
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 1 deletion.
5 changes: 5 additions & 0 deletions app/models/manageiq/providers/network_manager.rb
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,11 @@ def self.supported_types_and_descriptions_hash
def name
"#{parent_manager.try(:name)} #{PROVIDER_NAME}"
end

def self.find_object_for_belongs_to_filter(name)
name.gsub!(" #{self::PROVIDER_NAME}", "")
includes(:parent_manager).find_by(:parent_managers_ext_management_systems => {:name => name})
end
end

def self.display_name(number = 1)
Expand Down
29 changes: 28 additions & 1 deletion app/models/miq_filter.rb
Original file line number Diff line number Diff line change
@@ -1,11 +1,38 @@
module MiqFilter
ALLOWED_DESCENDANT_CLASSES_FROM_MODEL = %w(ExtManagementSystem).freeze

def self.belongsto2object(tag)
belongsto2object_list(tag).last
end

def self.find_descendant_class_by(klass, name)
if ALLOWED_DESCENDANT_CLASSES_FROM_MODEL.include?(klass.to_s) && name.end_with?(ManageIQ::Providers::NetworkManager::PROVIDER_NAME)
return ManageIQ::Providers::NetworkManager
else
_log.warn("Unable to find descendant class for belongsto filter: #{klass}/#{name}")
end

nil
end

def self.find_object_by_special_class(klass, name)
if (descendant_class = find_descendant_class_by(klass, name)) && descendant_class.respond_to?(:find_object_for_belongs_to_filter)
return descendant_class.find_object_for_belongs_to_filter(name)
else
_log.warn("#{klass} is not supported for loading objects of descendants classes.(belongsto filter: #{klass}/#{name}, descendant class: #{descendant_class}")
end

nil
end

def self.find_object_by_name(klass, name)
klass = klass.constantize
klass.find_by(:name => name)
object = klass.find_by(:name => name)
if object.nil?
find_object_by_special_class(klass, name)
else
object
end
end

def self.belongsto2object_list(tag)
Expand Down
10 changes: 10 additions & 0 deletions spec/models/miq_filter_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -48,5 +48,15 @@ def belongsto2object_list(*args)
host_object_path = [ems, datacenter, mtc, host_folder, host_1]
expect(belongsto2object_list(mtc_folder_path_with_host_1)).to match_array(host_object_path)
end

context "with network manager" do
let(:ems_openstack) { FactoryBot.create(:ems_openstack) }
let(:network_manager_folder_path) { "/belongsto/ExtManagementSystem|#{ems_openstack.name} Network Manager" }

it "converts path with network manager" do
ems_openstack.update_attributes(:name => "XXX")
expect(belongsto2object_list(network_manager_folder_path)).to match_array([ems_openstack.network_manager])
end
end
end
end

0 comments on commit 7b9790e

Please sign in to comment.