TAP::Parser::IteratorFactory - 找出可供特定來源使用的 SourceHandler 物件
版本 3.44
use TAP::Parser::IteratorFactory;
my $factory = TAP::Parser::IteratorFactory->new({ %config });
my $iterator = $factory->make_iterator( $filename );
這是一個工廠類別,它會取得 TAP::Parser::Source 並透過所有已註冊的 TAP::Parser::SourceHandler 執行它,以查看哪一個應該處理來源。
如果您是外掛程式作者,您會感興趣的是如何 "register_handler",如何 "detect_source" 運作。
new
建立新的工廠類別
my $sf = TAP::Parser::IteratorFactory->new( $config );
$config
是選配。如果提供,則設定 "config" 並呼叫 "load_handlers"。
register_handler
使用此工廠註冊新的 TAP::Parser::SourceHandler。
__PACKAGE__->register_handler( $handler_class );
handlers
已註冊的處理常式清單。
config
my $cfg = $sf->config;
$sf->config({ Perl => { %config } });
可用來源處理常式的組態的串接 getter/setter。這是一個雜湊,其鍵為處理常式類別,其值包含偵測和建立期間要傳遞給處理常式的組態。類別名稱可以是完全限定的或簡寫的,例如
# these are equivalent
$sf->config({ 'TAP::Parser::SourceHandler::Perl' => { %config } });
$sf->config({ 'Perl' => { %config } });
load_handlers
$sf->load_handlers;
載入 "config" 中定義的處理常式類別。例如,給定組態
$sf->config({
MySourceHandler => { some => 'config' },
});
load_handlers
將嘗試載入 MySourceHandler
類別,方法是按此順序在 @INC
中尋找它
TAP::Parser::SourceHandler::MySourceHandler
MySourceHandler
發生錯誤時會 croak
。
make_iterator
my $iterator = $src_factory->make_iterator( $source );
給定 TAP::Parser::Source,找出最適合用來建立 TAP::Parser::Iterator 的 TAP::Parser::SourceHandler(請參閱 "detect_source")。發生錯誤時會結束執行。
detect_source
給定 TAP::Parser::Source,偵測它是哪種類型的來源並傳回 一個 TAP::Parser::SourceHandler(最確定的那個)。發生錯誤時會結束執行。
偵測演算法的工作原理類似於下列
for (@registered_handlers) {
# ask them how confident they are about handling this source
$confidence{$handler} = $handler->can_handle( $source )
}
# choose the most confident handler
處理平手的方式是選擇第一個處理常式。
請參閱 "TAP::Parser 中的「子類別」 以取得子類別概觀。
如果我們做對了,您可能希望撰寫新的來源,而不是對此進行子類別化(請參閱 TAP::Parser::SourceHandler)。
但是,如果您發現有需要...
package MyIteratorFactory;
use strict;
use base 'TAP::Parser::IteratorFactory';
# override source detection algorithm
sub detect_source {
my ($self, $raw_source_ref, $meta) = @_;
# do detective work, using $meta and whatever else...
}
1;
Steve Purkis
最初從 Test::Harness 剽竊。
由 Steve Purkis 移出 TAP::Parser,並轉換為工廠類別,以支援可擴充的 TAP 來源偵測工作。
TAP::Object、TAP::Parser、TAP::Parser::SourceHandler、TAP::Parser::SourceHandler::File、TAP::Parser::SourceHandler::Perl、TAP::Parser::SourceHandler::RawTAP、TAP::Parser::SourceHandler::Handle、TAP::Parser::SourceHandler::Executable