2010-01-20 5 views
7

हम वर्तमान में हमारी टीम में DBIx::Class शुरू कर रहे हैं और हम DBIx::Class::Schema::Loader के साथ शुरू करना चाहते हैं। हालांकि, हमारे पास कोड शैली पर कठिन आवश्यकताएं हैं, यानी हमें Perl::Tidy हमारे pre-commit स्क्रिप्ट के हिस्से के रूप में मिला है, क्योंकि हमारे पास पहले कोई भी जेनरेट कोड नहीं था। अब, हमें यह सुनिश्चित करना होगा कि Schema::Loader उत्पन्न कोड स्वच्छ और साफ है। हम प्रतिबद्ध होने से पहले कोड पर perltidy नहीं चला सकते हैं, क्योंकि यह डीबीआईसी के एमडी 5 हैशिंग को खराब करता है। तो Schema::Loader में एकीकृत एक पोस्ट प्रोसेसर मेरा पसंदीदा और शायद एकमात्र व्यवहार्य समाधान होगा। लेकिन फिर भी: आप इस समस्या को कैसे संभालेंगे?मैं डीबीआईएक्स :: कक्षा :: स्कीमा :: लोडर का आउटपुट कैसे साफ कर सकता हूं?

संपादित मैं भी DBIx::Class::Schema::Loader::Base पैच हो सकता है एक perltidypreprocess पैरामीटर का उपयोग करने अगर यह एक हो जाता है।

उत्तर

3

0,05000 जारी की गई है (पहले विकास संस्करण) यह overwrite_modifications विकल्प rbuels जोड़ा।

मैं भी जल्द ही एक post_process विकल्प जोड़ने की कोशिश करेंगे।

3

DBICSL के विकास संस्करण अब एक overwrite_modifications विकल्प आपको कोड की md5summed भागों में परिवर्तन की अनदेखी करने के लिए उपयोग कर सकते है। यह आपको इसे करने से पहले उत्पादन पर perltidy चलाने देना चाहिए, और फिर भी बाद में फिर से डंप करने में सक्षम हो।

1

यह सवाल कुछ समय पहले कहा गया था, लेकिन मैं यह आज का सामना करना पड़ा, तो मैं कुछ समय के में इस मॉड्यूल में किए गए परिवर्तनों के आधार पर सोचा कि मैं मेरी समाधान का हिस्सा हैं,। यदि आप --format-skipping के लिए PerlTidy दस्तावेज़ स्कैन करते हैं, तो आप देखेंगे कि आप PerlTidy निर्देश दे सकते हैं कि किस कोड को नहीं बताया जाना चाहिए। स्टार्ट एंड एंड मार्कर # < < < और # >>> क्रमशः हैं। इसलिए, डिफ़ॉल्ट सेटिंग्स इस तरह कुछ दिखाई देगी:

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

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

# start to tidy again 
#>>> 

$foo .= 'stuff'; 

यह इतना आसान है। अब आपको लोडर को इन मार्करों के साथ जेनरेट कोड को लपेटने की आवश्यकता है।

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 को बंद करने का निर्णय लिया, क्योंकि पर्लटीडी अभी भी (किसी कारण से) उत्पन्न पॉड में कुछ नई पंक्तियां डालने का फैसला कर रहा था। मुझे पता नहीं चला कि यह क्यों है, लेकिन पॉड को बंद करना इसे ठीक करता है और मैं इसके बिना रह सकता हूं।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^