Project

General

Profile

« Previous | Next » 

Revision dd941089

Added by Dmitri Dolguikh almost 10 years ago

fixes #5753: Engines can now override autocomplete path used in FiltersHelper

View differences:

app/helpers/filters_helper.rb
when 'Parameter'
'' # parameter is only used in API
else
return FiltersHelperOverrides.search_path(type) if FiltersHelperOverrides.can_override?(type)
resource_path = resource_path(type)
resource_path.nil? ? "" : resource_path + auto_complete_search_path
end
app/helpers/filters_helper_overrides.rb
class FiltersHelperOverrides
@@overrides = {}
def self.override_search_path(module_or_engine_name, blk)
@@overrides[module_or_engine_name] = blk
end
def self.can_override?(class_or_engine_name)
@@overrides.include?(class_or_engine_name.deconstantize)
end
def self.search_path(class_or_engine_name)
@@overrides[class_or_engine_name.deconstantize].call(class_or_engine_name)
end
private
def initialize; end
end
app/services/foreman/plugin.rb
Dashboard::Manager.map.widget(id, options)
end
# To add FiltersHelper#search_path override,
# in lib/engine.rb, in plugin initialization block:
# search_path_override("EngineModuleName") { |resource| ... }
def search_path_override(engine_name, &blk)
if block_given?
FiltersHelperOverrides.override_search_path(engine_name, blk)
else
Rails.logger.warn "Ignoring override of FiltersHelper#search_path_override for '#{engine_name}': no override block is present"
end
end
end
end
config/initializers/foreman.rb
require 'net'
require 'foreman/provision' if SETTINGS[:unattended]
require 'foreman'
require 'filters_helper_overrides'
# We may be executing something like rake db:migrate:reset, which destroys this table
# only continue if the table exists
test/unit/helpers/filters_helper_test.rb
def test_should_return_empty_search_path_if_resource_is_not_recognized
assert_equal '', search_path('UnknownResource')
end
def test_engine_search_path_is_used_when_engine_override_available
FiltersHelperOverrides.override_search_path("TestOverride", lambda { |resource| "test_override/auto_complete_search" })
assert_equal "test_override/auto_complete_search" , search_path('TestOverride::Resource')
end
end
test/unit/plugin_test.rb
assert ComputeResource.supported_providers.values.must_include 'Awesome::Provider::MyAwesome'
assert SETTINGS[:myawesome]
end
def test_add_search_path_override
Foreman::Plugin.register :filter_helpers do
search_path_override("TestEngine") { |resource| "test_engine/another_search_path" }
end
assert FiltersHelperOverrides.can_override?("TestEngine::TestResource")
end
end

Also available in: Unified diff