Как мне привести в порядок вывод DBIx :: Class :: Schema :: Loader? - PullRequest
8 голосов
/ 20 января 2010

В настоящее время мы вводим DBIx::Class в нашей команде, и мы хотели бы начать с DBIx::Class::Schema::Loader. Тем не менее, у нас есть жесткие требования к стилю кода, то есть у нас есть Perl::Tidy как часть нашего pre-commit скрипта, так как у нас не было никакого сгенерированного кода раньше. Теперь нам нужно убедиться, что код, который генерирует Schema::Loader, чистый и аккуратный. Мы не можем запустить perltidy над кодом перед коммитом, так как это испортило хеширование MD5 в DBIC. Поэтому постпроцессор, интегрированный в Schema::Loader, был бы моим предпочтением и, вероятно, единственным выполнимым решением. Но все же: как бы вы справились с этой проблемой?

РЕДАКТИРОВАТЬ Я мог бы также пропатчить DBIx::Class::Schema::Loader::Base, чтобы использовать параметр perltidy preprocess, если он получит один.

Ответы [ 3 ]

3 голосов
/ 01 февраля 2010

0.05000 был выпущен (ранее версия для разработки), к нему добавлена ​​опция overwrite_modification rbuels.

Я тоже постараюсь добавить опцию post_process.

3 голосов
/ 20 января 2010

Разработанная версия DBICSL теперь имеет опцию overwrite_modification, которую вы можете использовать, чтобы игнорировать изменения в md5summed частях кода. Это должно позволить вам запустить perltidy на выходе перед его фиксацией и, тем не менее, иметь возможность повторно выполнить дамп позже.

1 голос
/ 13 декабря 2012

Этот вопрос был задан некоторое время назад, но мне пришлось иметь дело с этим сегодня, поэтому я решил поделиться своим решением, основываясь на изменениях, внесенных в этот модуль в настоящее время. Если вы отсканируете документы PerlTidy на предмет --format-skipping, вы увидите, что вы можете дать PerlTidy инструкции о том, какой код не нужно убирать. Начальные и конечные маркеры # <<< и # >>> соответственно. Итак, настройки по умолчанию будут выглядеть примерно так:

# tidy my code
my $foo = 'bar';

#<<<
# don't tidy the code below
my $baz   =     'foo';

# start to tidy again
#>>>

$foo .= 'stuff';

Это достаточно просто. Теперь вам просто нужно, чтобы Loader обернул сгенерированный код этими маркерами. Это может выглядеть примерно так:

my %args = (                                                                                     
    components            => [ 'InflateColumn::DateTime', 'TimeStamp' ],                                                 
    debug                 => 1,                                                                  
    dump_directory        => './lib',                                                            
    filter_generated_code => sub {                                                               
        my ( $type, $class, $text ) = @_;                                                        
        return "#<<<\n$text#>>>";                                                                
    },                                                                                           
    generate_pod            => 0,                                                                
    naming                  => 'current',                                                        
    overwrite_modifications => 0,                                                                
    skip_load_external      => 1,                                                                
    use_moose               => 1,                                                                
    use_namespaces          => 1,                                                                
);                                                                                               

make_schema_at( 'My::Schema', \%args, [$dsn, $user, $pass] ); 

Важной частью является filter_generated_code, которая позволяет обернуть сгенерированный код. Теперь вы можете сгенерировать ваши файлы схемы и все равно PerlTidy их. Это позволит вам привести в порядок пользовательский код, который вы добавляете внизу сгенерированных файлов, не сталкиваясь с ошибками, которые происходят, когда сгенерированный код изменяется чем-то другим, кроме make_schema_at ().

В моем случае я решил отключить generate_pod, потому что PerlTidy все еще (по некоторым причинам) вставлял некоторые новые строки в сгенерированный Pod. Я не совсем понял, почему это так, но отключение Pod исправляет его, и я могу жить без него.

...