2010-01-20 11 views
7

Actualmente estamos introduciendo DBIx::Class en nuestro equipo y nos gustaría comenzar con DBIx::Class::Schema::Loader. Sin embargo, tenemos requisitos estrictos sobre el estilo del código, es decir, tenemos Perl::Tidy como parte de nuestro script pre-commit, ya que no hemos tenido ningún código generado anteriormente. Ahora, debemos asegurarnos de que el código que genera Schema::Loader esté limpio y ordenado. No podemos ejecutar perltidy sobre el código antes de la confirmación, ya que daña el hash MD5 de DBIC. Entonces, un post-procesador integrado en Schema::Loader sería mi solución preferida y probablemente la única viable. Pero aún así: ¿cómo manejarías este problema?¿Cómo puedo ordenar la salida de DBIx :: Class :: Schema :: Loader?

EDITAR que también podría parchear DBIx::Class::Schema::Loader::Base utilizar un parámetro perltidypreprocess si se pone uno.

Respuesta

3

0.05000 ha sido lanzado (anteriormente la versión de desarrollo) tiene la opción overwrite_modifications rbuels added.

Trataré de agregar una opción post_process también pronto.

3

La versión de desarrollo de DBICSL ahora tiene una opción overwrite_modifications que puede usar para ignorar los cambios en las partes md5summed del código. Esto debería permitirle ejecutar perltidy en la salida antes de comprometerlo, y aún así poder volver a volcar más tarde.

1

Esta pregunta se hizo hace un tiempo, pero tuve que lidiar con esto hoy, así que pensé en compartir mi solución, en función de los cambios realizados en este módulo por el momento. Si escanea los documentos PerlTidy para --format-skipping, verá que puede dar instrucciones a PerlTidy sobre qué código no se debe arreglar. Los marcadores de inicio y final son # < < < y # >>> respectivamente. Por lo tanto, la configuración predeterminada sería algo como esto:

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

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

# start to tidy again 
#>>> 

$foo .= 'stuff'; 

Eso es bastante fácil. Ahora solo necesita que el cargador ajuste el código generado con estos marcadores. Eso podría ser algo como esto:

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]); 

La parte importante es filter_generated_code, que le permite ajustar el código generado. Ahora puede generar sus archivos de esquema y aún así PerlTidy. Esto le permitirá ordenar el código personalizado que agrega en la parte inferior de los archivos generados sin tener que ejecutar los errores que ocurren cuando el código generado se altera por algo que no sea make_schema_at().

En mi caso, decidí desactivar generate_pod, porque PerlTidy todavía estaba (por alguna razón) insertando nuevas líneas en el Pod generado. Todavía no sé por qué, pero apagar el Pod lo soluciona y puedo vivir sin él.

Cuestiones relacionadas