Revision dd941089
Added by Dmitri Dolguikh almost 10 years ago
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
fixes #5753: Engines can now override autocomplete path used in FiltersHelper