[SP-pm] Fix-DateTime

Tiago Peczenyj tiago.peczenyj at gmail.com
Wed Jan 9 03:55:57 PST 2013


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 <renato.cron at gmail.com>

> 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>
>
> =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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20130109/5183c1f4/attachment.html>


More information about the SaoPaulo-pm mailing list