[SP-pm] Fix-DateTime
Renato Santos
renato.cron at gmail.com
Wed Jan 9 03:50:55 PST 2013
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 <tiago.peczenyj at gmail.com>
> 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 <eden at insoli.de>
>
>> 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 <
>> tiago.peczenyj-Re5JQEeQqe8AvxtiuMwx3w at public.gmane.org> 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: SaoPaulo-pm at pm.org
>> 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: SaoPaulo-pm at pm.org
> 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>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20130109/f81289f9/attachment-0001.html>
More information about the SaoPaulo-pm
mailing list