Pelo contrario, afetaria todos. O problema do no Fix::DateTime é que eu não quero controlar o default time zone no escopo lexico. Tipo no escopo X o default é EST e fora é UTC. Isso seria um samba do crioulo doido
O que acontece é que o monkey patch verifica se o modulo esta ativado para adicionar o parametro extra e eu estou sempre usando os metodos monkeypatcheados. na verdade eu pensei em algo como use Fix::DateTime default => 'EST', enable => 1; mas a minha implementação ficou um lixo. 2013/1/9 Renato Santos <[email protected]> > 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 > > -- 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
