2010-01-20 18 views
7

Chúng tôi hiện đang giới thiệu DBIx::Class trong nhóm của chúng tôi và chúng tôi muốn bắt đầu với DBIx::Class::Schema::Loader. Tuy nhiên, chúng tôi có các yêu cầu khó về kiểu mã, nghĩa là chúng tôi có Perl::Tidy như một phần của tập lệnh pre-commit vì chúng tôi chưa có bất kỳ mã nào được tạo trước đây. Bây giờ, chúng ta phải chắc chắn rằng mã mà Schema::Loader tạo ra là sạch sẽ và ngăn nắp. Chúng tôi không thể chạy perltidy qua mã trước khi cam kết, vì nó vít băm MD5 của MDIC. Vì vậy, một bộ xử lý sau tích hợp vào Schema::Loader sẽ là ưu tiên của tôi và có lẽ là giải pháp khả thi duy nhất. Nhưng vẫn còn: làm thế nào bạn sẽ xử lý vấn đề này?Làm thế nào tôi có thể gọn gàng DBIx :: Class :: Schema :: Loader's output?

EDIT tôi cũng có thể vá DBIx::Class::Schema::Loader::Base sử dụng một tham số perltidypreprocess nếu nó được một.

Trả lời

3

0.05000 đã được phát hành (trước đây là phiên bản phát triển), nó có thêm rwel tùy chọn ghi đè lên.

Tôi cũng sẽ sớm thêm tùy chọn post_process.

3

Phiên bản phát triển của DBICSL hiện có tùy chọn overwrite_modifications mà bạn có thể sử dụng để bỏ qua các thay đổi trong phần md5summed của mã. Điều này sẽ cho phép bạn chạy perltidy trên đầu ra trước khi cam kết nó, và vẫn có thể tái đổ sau này.

1

Câu hỏi này được hỏi một lúc trước, nhưng tôi phải giải quyết vấn đề này hôm nay, vì vậy tôi nghĩ tôi sẽ chia sẻ giải pháp của mình, dựa trên những thay đổi được thực hiện cho mô-đun này trong thời gian này. Nếu bạn quét tài liệu PerlTidy cho --format-skipping, bạn sẽ thấy rằng bạn có thể cung cấp cho PerlTidy hướng dẫn về mã nào không nên được dọn dẹp. Điểm đánh dấu bắt đầu và kết thúc là # < < < và # >>> tương ứng. Vì vậy, cài đặt mặc định sẽ trông giống như sau:

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

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

# start to tidy again 
#>>> 

$foo .= 'stuff'; 

Thật dễ dàng. Bây giờ bạn chỉ cần có Loader bọc mã được tạo ra với các dấu này. Điều đó có thể trông giống như sau:

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

Phần quan trọng là filter_generated_code, cho phép bạn bao bọc mã được tạo. Bây giờ bạn có thể tạo các tệp lược đồ của mình và vẫn PerlTidy chúng. Điều này sẽ cho phép bạn gọn gàng mã tùy chỉnh mà bạn thêm ở dưới cùng của các tệp được tạo mà không chạy vào các lỗi xảy ra khi mã được tạo bị thay đổi bởi một cái gì đó khác với make_schema_at().

Trong trường hợp của tôi, tôi quyết định tắt generate_pod, vì PerlTidy vẫn còn (vì một lý do nào đó) chèn một số dòng mới vào Pod được tạo. Tôi đã không hoàn toàn tìm ra lý do tại sao đó là, nhưng tắt Pod sửa chữa nó và tôi có thể sống mà không có nó.

Các vấn đề liên quan