<p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Helvetica" size="4" style="font: 13.0px Helvetica">No SABER? (piada interna…)</font></p>
 <div id="bloop_sign_"><span style="font-family:helvetica,arial;font-size:13px"></span>--<br>Fernando Correa<br><span>Sent with <a href="http://airmailapp.info/tracking">Airmail</a></span></div> <br /><p style="color:#A0A0A8;">On 5 de setembro de 2013 at 16:34:13, Fernando Correa (fernandocorrea@gmail.com) wrote:</p> <blockquote type="cite" style="border-left-style:solid;border-width:1px;margin-left:0px;padding-left:10px;"><span><div  ><div dir="ltr">Opa,<div><br></div><div style>Tá no radar :)</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/9/5 Lucas Oliveira <span dir="ltr"><<a href="mailto:lucasmateus.oliveira@gmail.com" target="_blank">lucasmateus.oliveira@gmail.com</a>></span><br>



<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div><br></div><div><span style="white-space:pre-wrap">       </span>Solli e a quem interessar, fiz um cadastro e login completo para exemplificar o uso do Data::Manager + I18N que quiser dar uma olhada ta ai.</div>



<div><br></div><div><span style="white-space:pre-wrap"> </span><a href="https://github.com/luma777/catalyst-data-manager-i18n" target="_blank">https://github.com/luma777/catalyst-data-manager-i18n</a></div><div><br></div>



<div><span style="white-space:pre-wrap">  </span>Não fiz o README ainda mas os agradecimentos vai para o Eden que me ensinou boa parte do que está ai :D</div><div><br></div><br><div><div>Em 04/09/2013, às 01:15, Hernan Lopes <<a href="mailto:hernanlopes@gmail.com" target="_blank">hernanlopes@gmail.com</a>> escreveu:</div>



<div><div class="h5"><br><blockquote type="cite"><div dir="ltr">Eu prefiro deixar minhas validacoes juntos com as definicoes dos atributos dos meus objetos, pois provavelmente eu vou validar um objeto antes de fazer algo com ele.<br>



Então eu faco o seguinte (o exemplo abaixo é para exemplificar atraves da analise do mesmo, ele não irá compilar):<br>

<br>Em resumo:<br>1. defino os campos dentro de um hash, juntos com as validacoes<br>2. faco um loop para adicionar (com moose) cada campo na classe<br>3. defino um metodo salvar e esse metodo salvar vai verificar se o atributo tem alguma validacao que deve ser executada<br>





<br>Entao eu termino com algo assim:<br><br>package My::Class;<br>use Moose;<br><br>#meta definicao dos meus atributos.. fica dentro de um hash... os atributos ainda nao foram declarados<br>#nelas residem as validacoes, coerce, sql etc tudo que é simples e relacionado a esse campo<br>





#consigo incluir por exemplo um array com items para eu validar antes de salvar, etc<br>#ex<br>my $attrs = {<br>    'preco' => {<br>        # isa => 'Int', #opcional<br>        req => 1,<br>        validation_regex => '(\d+)', # vou usar isso antes do metodo save<br>





        coerce => sub { #   Vai executar tambem isso antes do save<br>            my ( $self, $value ) = @_;<br>            $value =~ s|^ +| +\$|g;<br>            $value =~ s|(.+)(,\|\.)00\$|$1|gi;<br>            $value =~ s|\D||gi;<br>





            return $value;<br>        },<br>        sql =><br>          {<br>            "type"       => "integer",<br>            "null_value" => 0<br>          },<br>        validacao_extra => [<br>





          {<br>            rotulo => 'Verifica se contem numeros na mensagem',<br>            validacao => sub {<br>              my ( $campo ) = @_;<br>              return 1 if "valido" eq "valido";<br>





              return 0;<br>            },<br>            msg_erro => "Tem erro nesse campo"<br>          }<br>          ,<br>          .... e depois adicionar o "validacao_extra" la ao final no before_save<br>





          ... e pronto... <br><br>        ]<br>    },<br>    'url' => {<br>        req              => 1,<br>        validation_regex => '^http',<br>        sql          => {<br>            type    => 'string',<br>





            "index" => 'not_analyzed',<br>        }<br>    },<br><br>    'idade' => {<br>        req              => 1,<br>        validation_regex => '(\d+)',<br>        sql          => {<br>





            "type"       => "integer",<br>            "null_value" => 0<br>        },<br>    },<br>};<br><br># declara cada atributo para esta classe<br>foreach my $attr ( keys $attrs ) {<br>





    #Mete o has dentro do foreach pra declarar cada chave dos meus $attrs<br>    has $attr => (<br>        is => 'rw', #podia vir do meu config la de cima ne...<br>        ( exists $attrs->{$attr}->{default} )<br>





        ? (<br>            default => $attrs->{$attr}->{default}<br>          )<br>        : (),<br>    );<br>}<br><br>#coerce nos valores, é usado antes do metodo save... mas pode muito bem usar o coerce do moo(u|se)<br>





sub coerce {<br>    my ($self) = @_;<br>    foreach my $attr ( keys %$attrs ) {<br>        if ( exists $attrs->{$attr}->{coerce} && defined $self->$attr ) {<br>            $self->$attr(<br>                $attrs->{$attr}->{coerce}->( $self, $self->$attr ) );<br>





        }<br>    }<br>}<br><br>#valida antes de salvar<br>#pode por exemplo verificar se foi setado e executar o $attrs->{ $attr }->{ validation_regex }, etc<br>sub validate {<br>    my ($self) = @_;<br>    foreach my $attr ( keys $attrs ) {<br>





        return 0<br>          if exists $attrs->{$attr}->{req}<br>              and $attrs->{$attr}->{req} == 1<br>              and !defined $self->$attr;<br>         if ( exists $attrs->{ $attr }->{ validation_regex } ) {<br>





            //valida a bagaca<br>            //pode ler de $self, ou receber o valor como parametro da sub validate, etc<br>         }<br>    }<br>    return 1;<br>}<br><br>#before save...<br>before 'save' => sub {<br>





    my ($self) = @_;<br>    $self->coerce();<br>};<br><br>#save somente se validate<br>sub save {<br>    my ($self) = @_;<br>    next unless $self->validate();<br>}<br><br><br><br>abs,<br><br>Hernan<br><br><br><br>



<br>

<br><br><br><br></div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/9/3 Blabos de Blebe <span dir="ltr"><<a href="mailto:blabos@gmail.com" target="_blank">blabos@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div dir="ltr">Na verdade foi até coincidência o Solli tocar no assunto, pq assim como mapas, eu ia perguntar isso pra vcs em breve.</div><div class="gmail_extra"><br><br><div class="gmail_quote"><div>2013/9/3 Blabos de Blebe <span dir="ltr"><<a href="mailto:blabos@gmail.com" target="_blank">blabos@gmail.com</a>></span><br>









</div><div><div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>> Blabos, e se você tiver 2 formulários na mesma página, por exemplo, um de login e um de cadastro ? Vai ter que melhorar na gambi né ? heheheheheh<div>









<br></div></div><div>Correto.</div><div><div><br></div><div>> Se mudar o nome do campo entao… chora hehehe</div>

<div><br></div></div><div>Correto denovo.</div><div><div><br></div><div>> Marcar o campo errado em vermelho vai precisar de mais gambi :D</div><div><br></div></div><div>Mais ou menos. Eu uso uma alternativa, no exemplo. Mas sim, é melhor marcar o campo com vermelho.</div>









<div>

<div><br></div><div>> Tem muitas vantagens usar o Data::Manager </div><div><br></div></div><div>Correto denovo.</div><div><br></div><div>O porém é que o meu exemplo é exatamente específico. Um form, quatro campos.</div>









<div>

<br></div><div>Não to dizendo que nao vou usar o Data::Manager, ou alguma solução parecida. Só nao vou usar nessa semana :)</div><div><br></div><div>As soluções apresentadas são apenas o mais pá-pow que dá pra fazer com *a* hard-restriction desse sprint: tempo; e uma soft-restriction: Data::Manager é novo pra mim.</div>











<div><br></div><div>Depois eu refatoro. Tá previsto isso.</div><div><br></div><div>Tá pronto x Tá bom.</div><div><br></div><div>No meu caso nesse momento, tá pronto é mandatório. Quem me conhece sabe o quanto eu gosto de gambiarra e o quanto tá custando esse tá pronto.</div>











<div><br></div><div>:)</div><div><br></div><div>[]'s<div><br><div><br></div><div><br></div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/9/3 Lucas Oliveira <span dir="ltr"><<a href="mailto:lucasmateus.oliveira@gmail.com" target="_blank">lucasmateus.oliveira@gmail.com</a>></span><br>











<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div style="word-wrap:break-word"><div><br></div><div><span style="white-space:pre-wrap">  </span>Blabos, e se você tiver 2 formulários na mesma página, por exemplo, um de login e um de cadastro ? Vai ter que melhorar na gambi né ? heheheheheh</div>











<div><br></div><div><span style="white-space:pre-wrap"> </span>Se mudar o nome do campo entao… chora hehehe</div><div><br></div><div><span style="white-space:pre-wrap">  </span>Se precisar fazer um "pirulito" para importar para a base a validação não é aproveitável… esqueçe</div>











<div><br></div><div><span style="white-space:pre-wrap"> </span>Marcar o campo errado em vermelho vai precisar de mais gambi :D</div><div><br></div><div><span style="white-space:pre-wrap"> </span>Tem muitas vantagens usar o Data::Manager </div>











<div><br></div><br><div><div>Em 03/09/2013, às 18:30, Blabos de Blebe <<a href="mailto:blabos@gmail.com" target="_blank">blabos@gmail.com</a>> escreveu:</div><div><br><blockquote type="cite"><div dir="ltr">

Opa,<div><br></div><div>O meu caso é muito simples (pequeno) e o meu tempo é curto. O que foi mais rápido pra mim foi essa tosqueria aqui:</div><div><br></div><div>No controller:</div><div><br></div><div><div style="margin:0px;font-size:11px;font-family:Monaco;color:rgb(178,55,243)">











<span style="color:rgb(178,69,243)">...</span></div><div style="margin:0px;font-size:11px;font-family:Monaco;color:rgb(178,55,243)"><span style="color:rgb(178,69,243)">my </span><span>$</span>errors<span> </span> <span style="color:rgb(193,53,0)">= [];</span></div>











<div style="margin:0px;font-size:11px;font-family:Monaco;min-height:15px"><br></div><div style="margin:0px;font-size:11px;font-family:Monaco;color:rgb(194,27,45)">## not null</div><div style="margin:0px;font-size:11px;font-family:Monaco;color:rgb(178,55,243)">











<span style="color:rgb(178,69,243)">foreach my </span><span>$</span>field<span> </span><span style="color:rgb(193,53,0)">( </span>keys <span>%</span>{$fields}<span> </span><span style="color:rgb(193,53,0)">) {</span></div>











<div style="margin:0px;font-size:11px;font-family:Monaco;color:rgb(178,55,243)"><span style="color:rgb(193,53,0)">    </span>push <span>@</span>{$errors}<span style="color:rgb(193,53,0)">, </span><span style="color:rgb(4,51,255)">'empty_' </span><span style="color:rgb(193,53,0)">. </span><span>$</span>field</div>











<div style="margin:0px;font-size:11px;font-family:Monaco;color:rgb(178,55,243)">      <span style="color:rgb(178,69,243)">unless </span><span>$</span>fields<span style="color:rgb(193,53,0)">->{</span><span>$</span>field<span style="color:rgb(193,53,0)">};</span></div>











<div style="margin:0px;font-size:11px;font-family:Monaco;color:rgb(193,53,0)">}</div><div style="margin:0px;font-size:11px;font-family:Monaco;min-height:15px"><br></div><div style="margin:0px;font-size:11px;font-family:Monaco;color:rgb(194,27,45)">











## unique</div><div style="margin:0px;font-size:11px;font-family:Monaco;color:rgb(178,69,243)">foreach my <span>$</span><span style="color:rgb(178,55,243)">field</span><span> </span><span style="color:rgb(193,53,0)">(</span>qw{ username email }<span style="color:rgb(193,53,0)">) {</span></div>











<div style="margin:0px;font-size:11px;font-family:Monaco;color:rgb(178,55,243)"><span style="color:rgb(193,53,0)">    </span>push <span>@</span>{$errors}<span style="color:rgb(193,53,0)">, </span><span style="color:rgb(4,51,255)">'already_' </span><span style="color:rgb(193,53,0)">. </span><span>$</span>field</div>











<div style="margin:0px;font-size:11px;font-family:Monaco;color:rgb(178,55,243)">      <span style="color:rgb(178,69,243)">if </span><span>$</span>rs_user<span style="color:rgb(193,53,0)">-></span><span>find</span><span style="color:rgb(193,53,0)">( { </span><span>$</span>field<span> </span><span style="color:rgb(193,53,0)">=> </span><span>$</span>fields<span style="color:rgb(193,53,0)">->{</span><span>$</span>field<span style="color:rgb(193,53,0)">} } );</span></div>











<div style="margin:0px;font-size:11px;font-family:Monaco;color:rgb(193,53,0)">}</div><div style="margin:0px;font-size:11px;font-family:Monaco;min-height:15px"><br></div><div style="margin:0px;font-size:11px;font-family:Monaco;color:rgb(194,27,45)">











## invalid email</div><div style="margin:0px;font-size:11px;font-family:Monaco;color:rgb(4,51,255)"><span style="color:rgb(178,55,243)">push </span><span>@</span><span style="color:rgb(178,55,243)">{$errors}</span><span style="color:rgb(193,53,0)">, </span>'invalid_email'</div>











<div style="margin:0px;font-size:11px;font-family:Monaco"><span style="color:rgb(4,51,255)">  </span><span style="color:rgb(178,69,243)">unless </span>Email::Valid<span style="color:rgb(193,53,0)">-></span>address<span style="color:rgb(193,53,0)">( </span>$<span style="color:rgb(178,55,243)">fields</span><span style="color:rgb(193,53,0)">->{</span>email<span style="color:rgb(193,53,0)">} );</span></div>











<div style="margin:0px;font-size:11px;font-family:Monaco;min-height:15px"><br></div><div style="margin:0px;font-size:11px;font-family:Monaco;color:rgb(178,55,243)"><span style="color:rgb(178,69,243)">if </span><span style="color:rgb(193,53,0)">( </span><span>@</span>{$errors}<span> </span><span style="color:rgb(193,53,0)">> </span><span style="color:rgb(178,49,0)">0 </span><span style="color:rgb(193,53,0)">) {</span></div>











<div style="margin:0px;font-size:11px;font-family:Monaco;color:rgb(193,53,0)">    <span>$</span><span style="color:rgb(178,55,243)">c</span>-><span>stash</span>->{<span>user</span>}   = <span>$</span><span style="color:rgb(178,55,243)">fields</span>;</div>











<div style="margin:0px;font-size:11px;font-family:Monaco;color:rgb(193,53,0)">    <span>$</span><span style="color:rgb(178,55,243)">c</span>-><span>stash</span>->{<span>errors</span>} = <span>$</span><span style="color:rgb(178,55,243)">errors</span>;</div>











<div style="margin:0px;font-size:11px;font-family:Monaco;color:rgb(178,69,243)"><span style="color:rgb(193,53,0)">    </span>return<span style="color:rgb(193,53,0)">;</span></div><div style="margin:0px;font-size:11px;font-family:Monaco;color:rgb(193,53,0)">











}</div><div style="margin:0px;font-size:11px;font-family:Monaco;color:rgb(193,53,0)">...</div></div><div class="gmail_extra"><div class="gmail_quote">





<br></div><div class="gmail_quote">No template:</div><div class="gmail_quote">

<br></div><div class="gmail_quote"><div style="margin:0px;font-size:11px;font-family:Monaco">    [% IF errors.size <span style="text-decoration:underline">></span> 0 %]</div><div style="margin:0px;font-size:11px;font-family:Monaco;color:rgb(57,51,255)">











<span>        </span><span style="color:rgb(0,145,147)"><</span><span style="color:rgb(78,145,146)">div</span><span> </span><span style="color:rgb(147,33,146)">data-alert</span><span> </span><span style="color:rgb(147,33,146)">class</span><span>=</span>"alert-box alert"<span style="color:rgb(0,145,147)">></span></div>











<div style="margin:0px;font-size:11px;font-family:Monaco">            [% FOREACH error IN errors %]</div><div style="margin:0px;font-size:11px;font-family:Monaco">                [% msg_block = 'msg_' _ error %]</div>











<div style="margin:0px;font-size:11px;font-family:Monaco">                [% PROCESS $msg_block %]<span style="color:rgb(0,145,147)"><</span><span style="color:rgb(78,145,146)">br</span><span style="color:rgb(0,145,147)">></span></div>











<div style="margin:0px;font-size:11px;font-family:Monaco">            [% END %]</div><div style="margin:0px;font-size:11px;font-family:Monaco;color:rgb(57,51,255)"><span>            </span><span style="color:rgb(0,145,147)"><</span><span style="color:rgb(78,145,146)">a</span><span> </span><span style="color:rgb(147,33,146)">href</span><span>=</span>"#"<span> </span><span style="color:rgb(147,33,146)">class</span><span>=</span>"close"<span style="color:rgb(0,145,147)">></span>&times;<span style="color:rgb(0,145,147)"></</span><span style="color:rgb(78,145,146)">a</span><span style="color:rgb(0,145,147)">></span></div>











<div style="margin:0px;font-size:11px;font-family:Monaco">        <span style="color:rgb(0,145,147)"></</span><span style="color:rgb(78,145,146)">div</span><span style="color:rgb(0,145,147)">></span></div><div style="margin:0px;font-size:11px;font-family:Monaco">











    [% END %]</div><div style="margin:0px;font-size:11px;font-family:Monaco">...</div><div style="margin:0px;font-size:11px;font-family:Monaco"><br></div><p style="margin:0px;font-size:11px;font-family:Monaco">







</p><div style="margin:0px">[% BLOCK msg_empty_full_name %]</div><div style="margin:0px">    Você precisa preencher o seu nome completo.</div><div style="margin:0px">[% END %]</div><div style="margin:0px;min-height:15px">











<br></div><div style="margin:0px">[% BLOCK msg_empty_username %]</div><div style="margin:0px">    Você precisa preencher o seu username.</div><div style="margin:0px">[% END %]</div><div style="margin:0px">...</div><div style="margin:0px">











<br></div><div><br></div></div><div class="gmail_quote"><br></div><div class="gmail_quote">Deve ter formas mais inteligentes de fazer isso, mas no momento, a mais inteligente pra mim, é a que eu consigo fazer mais rápido. Esse é meu "único" form.</div>



















<div class="gmail_quote"><br></div><div class="gmail_quote">[]'s</div><div class="gmail_quote"><br></div><div class="gmail_quote"><br></div><div class="gmail_quote">2013/9/3 Solli Honorio <span dir="ltr"><<a href="mailto:shonorio@gmail.com" target="_blank">shonorio@gmail.com</a>></span><br>



















<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr">Blabos, o que você está imaginando para validar ? Estilo old-school com um encadeamento de if ? Dispatch table ? NDA ?<div>



















<br></div><div>Abraços,</div><div><br></div><div>Solli Honorio</div></div><div class="gmail_extra">



<br><br><div class="gmail_quote">Em 3 de setembro de 2013 16:35, Blabos de Blebe <span dir="ltr"><<a href="mailto:blabos@gmail.com" target="_blank">blabos@gmail.com</a>></span> escreveu:<div><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">























<div dir="ltr">Em alguns casos, complexidade é um pouco ponto de vista.<div><br></div><div>Acho que entendi a abordagem do mantovani, mas pro meu caso específico, acho que é também o overhead, já que eu só valido 4 campos em uma situação eventual. Estou cogitando nem usar o Data::Manager.</div>



























<div><br></div><div>Se fosse um cazilhao de campos sendo validados constantemente, acho que valeira a pena.</div><div><br></div><div>Mantovani, cuidado pra não ficar aparafusando pregos, certo!?</div>



<div><br></div><div>[]'s</div></div><div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/9/3 Solli Honorio <span dir="ltr"><<a href="mailto:shonorio@gmail.com" target="_blank">shonorio@gmail.com</a>></span><br>



























<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr">Sério mesmo Mantovani que vc acha que um sistema de fila é a solução para eu validar se todos os campos de um formulário estão dentro do aguardado para trabalhar no  banco de dados ?<div>



























<br></div><div>Mantovani, só posso dizer que estou orgulhoso de você... vejo que você terá um excelente futuro na industria de tecnologia (coisa que eu não tive), pois este é bem o comportamento dos vendedores de TI. Você está agregando complexidade numa lugar que estou tentando agregar simplicidade :D !!!</div>































<div><br></div><div>Abraços,</div><div><br></div><div>Solli Honorio</div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">Em 3 de setembro de 2013 14:58, Daniel de Oliveira Mantovani <span dir="ltr"><<a href="mailto:daniel.oliveira.mantovani@gmail.com" target="_blank">daniel.oliveira.mantovani@gmail.com</a>></span> escreveu:<div>



























<div><br>



<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">2013/9/3 Solli Honorio <<a href="mailto:shonorio@gmail.com" target="_blank">shonorio@gmail.com</a>>:<br>





















<div>> Lucas,<br>

><br>

> Obrigado pelo retorno. Ontem a noite estudei o código do Data::Manager e ví<br>

> que realmente não rola fazer o que eu estava querendo fazer (passar uma<br>

> pilha de mensagem e receber de acordo com o contexto) e ai estou<br>

> encaminhando para a mesma solução que você.<br>

<br>

" o que eu estava querendo fazer (passar uma pilha de mensagem e<br>

receber de acordo com o contexto)"<br>

<br>

</div>Shonorio, repetindo o AMQP se encaixa perfeitamente. Eu sugiro que<br>

você leia o link que eu te enviei. Se um serviço na sua máquina vai te<br>

poupar centenas de linhas de código, talvez nessa situação, nesse<br>

contexto obscuro no qual não foi definido pelo interlocutor seja uma<br>

boa.<br>

<br>

Se você acha que isso é demais para você, eu sinto muito que alguém<br>

com pelo menos 15/20 anos de experiência ainda não saiba formular uma<br>

pergunta. Perguntas genéricas, respostas genéricas. E ainda acho<br>

extremamente desnecessário o seu ataque gratuito, mas se você ainda<br>

não percebeu isso afasta as pessoas da lista.<br>

<div><br>

><br>

> Como vc faz com o I18N ?<br>

><br>

> O Renato Cron publicou um 'template'  ( <a href="https://github.com/AwareTI/MyApp" target="_blank">https://github.com/AwareTI/MyApp</a> )<br>

> de como eles estão utilizando o Data::Manager. Estudei o código e achei<br>

> engenhoso, mas ainda quero manter um melhor controle do ResultSet porquê<br>

> quero devolver uma estrutura mais complexa de informação.<br>

><br>

> Abraços,<br>

><br>

> Solli Honorio<br>

><br>

><br>

><br>

> 2013/9/3 Lucas Oliveira <<a href="mailto:lucasmateus.oliveira@gmail.com" target="_blank">lucasmateus.oliveira@gmail.com</a>><br>

>><br>

>><br>

>> Normalmente eu uso sempre com I18N mas da pra quebrar o galho assim<br>

>><br>

>> <code><br>

>> #!/usr/bin/env perl<br>

>><br>

>> use common::sense;<br>

>> use Data::Manager;<br>

>> use Data::Verifier;<br>

>><br>

>> my %msg_data = (<br>

>>    missing_name_last => 'Nao foi informado o campo name_last, seu idiota<br>

>> !',<br>

>> );<br>

>><br>

>> sub messages { $msg_data{$_[0]} || $_[0] }<br>

>><br>

>> my $dm = Data::Manager->new;<br>

>> my $dv = Data::Verifier->new(<br>

>>     filters => [ qw(trim) ],<br>

>>         profile => {<br>

>>             name_first => {<br>

>>                 required => 1,<br>

>>                 type     => 'Str',<br>

>>                 filters  => [ qw(collapse) ]<br>

>>             },<br>

>>             name_last => {<br>

>>                 required => 1,<br>

>>                 type     => 'Str',<br>

>>                 filters  => [ qw(collapse) ]<br>

>>             },<br>

>>             age  => {<br>

>>                 type        => 'Int'<br>

>>             },<br>

>>             sign => {<br>

>>                 required    => 1,<br>

>>                 type        => 'Str'<br>

>>             }<br>

>>         }<br>

>>     );<br>

>><br>

>> $dm->set_verifier( name => $dv );<br>

>> $dm->verify( name => { name_first => 'Solli' });<br>

>><br>

>> if (!$dm->success) {<br>

>>    print &messages( $_->msgid ).$/<br>

>>       foreach (@{ $dm->messages->messages });<br>

>> }<br>

>> </code><br>

>><br>

>><br>

>> Em 02/09/2013, às 11:10, Solli Honorio <<a href="mailto:shonorio@gmail.com" target="_blank">shonorio@gmail.com</a>> escreveu:<br>

>><br>

>> Pessoal,<br>

>><br>

>> Estou tentando configurar uma mensagem padronização no Data::Manager, mas<br>

>> não está funcionando. Alguém aqui já utilizou o Data::Manager para saber se<br>

>> é possível fazer isto que eu quero ?<br>

>><br>

>> O código abaixo, estou criando uma mensagem e adicionando no Data::Manger,<br>

>> porquê eu imaginei que quando ocorrer o problema dentro do escopo e msgid,<br>

>> eu teria o texto padronizado, mas o que estou recebendo é mais uma pilha de<br>

>> mensagem, mesmo quando não existe o erro.<br>

>><br>

>> <code><br>

>> #!/usr/bin/env perl<br>

>> use common::sense;<br>

>> use Data::Manager;<br>

>> use Data::Verifier;<br>

>> use Data::Printer;<br>

>><br>

>> my $msg = Message::Stack->new;<br>

>> $msg->add({<br>

>>     msgid   => 'missing_name_last',<br>

>>     level   => 'error',<br>

>>     scope   => 'name1',<br>

>>     subject => 'name_last',<br>

>>     text    => 'Não foi informado o campo name_last, seu idiota !'} );<br>

>><br>

>> my $dm = Data::Manager->new( { messages => $msg } );<br>

>> my $dv = Data::Verifier->new(<br>

>>     filters => [ qw(trim) ],<br>

>>         profile => {<br>

>>             name => {<br>

>>                 required => 1,<br>

>>                 type     => 'Str',<br>

>>                 filters  => [ qw(collapse) ]<br>

>>             },<br>

>>             age  => {<br>

>>                 type        => 'Int'<br>

>>             },<br>

>>             sign => {<br>

>>                 required    => 1,<br>

>>                 type        => 'Str'<br>

>>             }<br>

>>         }<br>

>>     );<br>

>><br>

>><br>

>> };<br>

>><br>

>><br>

>> $dm->set_verifier('name1', $verifier);<br>

>> $dm->verify('name1', { name_last => 'Honorio', name_first => 'Solli' });<br>

>><br>

>> my $results = $dm->get_results('name1');<br>

>> my $stack   = $dm->messages_for_scope('name1');<br>

>><br>

>> say $results->success;<br>

>><br>

>> say "Is invalid name_first ", $results->is_invalid('name_first');<br>

>> say "Is invalid name_last ",  $results->is_invalid('name_last');  # yes<br>

>><br>

>> say "Is missing name_first ", $results->is_missing('name_first'); # no<br>

>> say "Is missing is_missing ", $results->is_missing('name_last'); # yes<br>

>><br>

>> say "Missing count ", $results->missing_count;<br>

>><br>

>> say "Count : ",  $stack->count ;<br>

>> p $stack->get_message( 0 );<br>

>> p $stack->get_message( 1 );<br>

>><br>

>> </code><br>

>><br>

>><br>

>> --<br>

>> "o animal satisfeito dorme". - Guimarães Rosa<br>

>> =begin disclaimer<br>

>>   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>

>> SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>

>> L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>

>> =end disclaimer<br>

>><br>

>><br>

>><br>

>> =begin disclaimer<br>

>>    Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>

>>  SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>

>>  L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>

>> =end disclaimer<br>

>><br>

><br>

><br>

><br>

> --<br>

> "o animal satisfeito dorme". - Guimarães Rosa<br>

><br>

> =begin disclaimer<br>

>    Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>

>  SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>

>  L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>

> =end disclaimer<br>

><br>

<br>

<br>

<br>

--<br>

<br>

</div><div>-dom<br>

<br>

--<br>

<br>

Daniel de Oliveira Mantovani<br>

Business Analytic Specialist<br>

Perl Evangelist /Astrophysics hobbyist.<br>

<a href="tel:%2B55%2011%209%208538-9897" value="+5511985389897" target="_blank">+55 11 9 8538-9897</a><br>

XOXO<br>

</div><div>=begin disclaimer<br>

   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>

 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>

 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>

=end disclaimer<br>

</div></blockquote></div></div></div><div><br><br clear="all"><div><br></div>-- <br>"o animal satisfeito dorme". - Guimarães Rosa

</div></div>

<br>=begin disclaimer<br>

   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>

 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>

 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>

=end disclaimer<br>

<br></blockquote></div><br></div>

</div><br>=begin disclaimer<br>

   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>

 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>

 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>

=end disclaimer<br>

<br></blockquote></div></div><div><br><br clear="all"><div><br></div>-- <br>"o animal satisfeito dorme". - Guimarães Rosa

</div></div>

<br>=begin disclaimer<br>

   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>

 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>

 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>

=end disclaimer<br>

<br></blockquote></div><br></div></div>

=begin disclaimer<br>   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br> SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>











 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>=end disclaimer<br></blockquote></div></div><br></div><br>=begin disclaimer<br>









   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>

 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>

 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>

=end disclaimer<br>

<br></blockquote></div><br></div></div></div></div>

</blockquote></div></div></div><br></div>

<br>=begin disclaimer<br>

   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>

 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>

 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>

=end disclaimer<br>

<br></blockquote></div><br></div>

=begin disclaimer<br>   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br> SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>



 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>=end disclaimer<br></blockquote></div></div></div><br></div><br>=begin disclaimer<br>





   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>

 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>

 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>

=end disclaimer<br>

<br></blockquote></div><br></div>

</div></span></blockquote>