Até porque o setEnable(0) só afetaria os novos DateTimes, não é? Como funciona o "no" ?
Ficaria legal, no lugar de Enable/Disable. use Fix::DateTime; ... no Fix::DateTime; ... 2013/1/9 Tiago Peczenyj <[email protected]> > Valeu Eden > > Então, eu li sobre o "rebless" depois de ter implementado. Acho ate que é > uma solução mais elegante. > > Porém se os internals do DateTime forem alterados, os meus testes vão > quebrar. Não é muito confiavel isso mas é interessante de se pensar. > > Outra coisa que eu estava vendo é que o Enable é muito confuso. Seria mais > facil, num problema em produção, comentar a linha que adiciona o meu modulo > e mandar bala. Ou adicionar este módulo caso a configuração permita. > > > 2013/1/9 Eden Cardim <[email protected]> > >> The following message is a courtesy copy of an article >> that has been posted to gmane.comp.lang.perl.perl-mongers.saopaulo as >> well. >> >> >>>>> "Tiago" == Tiago Peczenyj < >> [email protected]> writes: >> >> Tiago> Oi Galera Me foi passado um exercicio bem interessante >> Tiago> sobre "corrigir" um comportamento da classe DateTime. >> >> Tiago> O default time zone da classe DateTime é UTC, porém alguem >> Tiago> ignorou isso e desenvolveu uma boa quantidade de coisas, >> Tiago> colocou em produção, etc, só descobriu q tinha algo errado >> Tiago> quando alguns testes falhavam em alguns horarios >> Tiago> específicos. No caso algumas coisas estavam em EST (como o >> Tiago> banco de dados) e para resolver isso "logo", no lugar de >> Tiago> alterar o sistema (por medinho, tempo, etc) resolveram >> Tiago> fazer algo mais grosseiro. >> >> Tiago> A minha solução ficou assim: >> >> Tiago> https://github.com/peczenyj/Fix-DateTime >> >> Tiago> Acho que esta menos pior do que poderia ser, mas ainda >> Tiago> fede. Não é exatamente um Fix, mas resolve algumas coisas. >> >> Algumas considerações: >> >> - Não precisa mudar todos os métodos, só um wrapper no ->new() já >> basta. Com esse tipo de alteração, quanto menos intrusivo você for, >> melhor, vai que alguém decide mudar algo nos internals e colocar o >> new numa classe base, aí o DateTime::new vai deixar de existir e vai >> quebrar o wrapper. >> >> - Apesar do Michael Schwern achar bacana o uso de "goto ⊂" porque >> faz parecer que o wrapper não está lá, eu detesto essa construção >> exatamente por esse motivo. Essa forma de invocação do goto >> sobrescreve a chamada atual da stack com a nova chamada, em algumas >> situações isso pode virar um pesadelo de depuração quando outra >> pessoa pegar o código e não entender porque raios o time_zone está >> em EST quando a doc diz que é UTC (logo em seguida ele vai começar a >> programar em Java, dizendo que Perl é uma merda). >> >> - É possível que o teu bloco BEGIN execute antes do BEGIN implícito do >> use DateTime em algum outro lugar do seu código, por isso você >> precisa carregar o DateTime explicitamente. >> >> Eu implementaria assim: >> >> use DateTime; >> our ENABLE = 1; >> our %defaults = (time_zone => 'EST'); >> >> BEGIN { >> if($ENABLE) { >> my $sub = DateTime->can('new') >> or die "AVISO: Método DateTime->new sumiu, ISSO VAI QUEBRAR O >> SISTEMA TODO"; >> *DateTime::new = sub { >> my($class, %args) = @_; >> $class->$sub(%defaults, %args); >> }; >> } >> } >> >> -- >> Eden Cardim -- Insolide Soluções de TI Ltda. >> +55 11 9644 8225 >> http://insoli.de >> =begin disclaimer >> Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ >> SaoPaulo-pm mailing list: [email protected] >> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> >> =end disclaimer >> > > > > -- > Tiago B. Peczenyj > Linux User #405772 > > http://about.me/peczenyj > > =begin disclaimer > Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ > SaoPaulo-pm mailing list: [email protected] > L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> > =end disclaimer > > -- Saravá, Renato CRON http://www.renatocron.com/blog/ @renato_cron <http://twitter.com/#!/renato_cron>
=begin disclaimer Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ SaoPaulo-pm mailing list: [email protected] L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> =end disclaimer
