<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Ruby on Peczenyj's Blog</title><link>http://pacman.blog.br/categories/ruby/</link><description>Recent content in Ruby on Peczenyj's Blog</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Fri, 07 Feb 2014 20:13:00 +0000</lastBuildDate><atom:link href="http://pacman.blog.br/categories/ruby/atom.xml" rel="self" type="application/rss+xml"/><item><title>MooseX - a new Ruby DSL for Object Oriented Programming (and much more)</title><link>http://pacman.blog.br/blog/2014/02/07/moosex-a-new-ruby-dsl-for-object-oriented-programming-and-much-more/</link><pubDate>Fri, 07 Feb 2014 20:13:00 +0000</pubDate><guid>http://pacman.blog.br/blog/2014/02/07/moosex-a-new-ruby-dsl-for-object-oriented-programming-and-much-more/</guid><description>&lt;p>MooseX is a postmodern object DSL for Ruby &lt;a href="https://travis-ci.org/peczenyj/MooseX">&lt;img src="https://travis-ci.org/peczenyj/MooseX.png" alt="Build Status">&lt;/a> &lt;a href="http://badge.fury.io/rb/moosex">&lt;img src="https://badge.fury.io/rb/moosex.png" alt="Gem Version">&lt;/a>&lt;/p>
&lt;p>This is a DSL for object creation, aspects, method delegation and much more. It is based on Perl Moose and Moo, two important modules who add a better way of Object Orientation development (and I enjoy A LOT). Using a declarative stype, using Moose/Moo you can create attributes, methods, the entire constructor and much more. But I can&amp;rsquo;t find something similar in Ruby world, so I decide port a small subset of Moose to create a powerfull DSL for object construction.&lt;/p></description></item><item><title>Schwartzian transform</title><link>http://pacman.blog.br/blog/2013/01/22/schwartzian-transform/</link><pubDate>Tue, 22 Jan 2013 16:00:00 +0000</pubDate><guid>http://pacman.blog.br/blog/2013/01/22/schwartzian-transform/</guid><description>&lt;p>I will show in this post one of the most useful things that I learn in Perl: the famous Schwartzian transform. With examples in Ruby&lt;/p>
&lt;blockquote>
&lt;p>In computer science, the Schwartzian transform is a Perl programming idiom used to improve the efficiency of sorting a list of items. This idiom is appropriate for comparison-based sorting when the ordering is actually based on the ordering of a certain property (the key) of the elements, where computing that property is an intensive operation that should be performed a minimal number of times. The Schwartzian Transform is notable in that it does not use named temporary arrays.&lt;/p></description></item><item><title>Melhorando o “try()” do Ruby, a maneira “Groovy” [parte final]</title><link>http://pacman.blog.br/blog/2008/03/05/melhorando-o-try-do-ruby-maneira-groovy_05/</link><pubDate>Wed, 05 Mar 2008 18:21:00 -0300</pubDate><guid>http://pacman.blog.br/blog/2008/03/05/melhorando-o-try-do-ruby-maneira-groovy_05/</guid><description>&lt;div class='post'>
&lt;pre>&lt;code>class Omega&lt;br /> def a&lt;br /> self&lt;br /> end&lt;br /> def b&lt;br /> self&lt;br /> end&lt;br /> def c&lt;br /> self&lt;br /> end&lt;br /> def to_s&lt;br /> "Omega"&lt;br /> end&lt;br />end&lt;br />&lt;br />def da? &lt;br /> begin&lt;br /> yield() if block_given?&lt;br /> rescue => exc&lt;br /> nil&lt;br /> end&lt;br />end&lt;br />&lt;br />xyz = nil&lt;br />a = da? { xyz.a.b.c } &lt;br />&lt;br />xyz = Omega.new&lt;br />b = da? { xyz.a.b.c } &lt;br />&lt;br />puts "da? com nil -> '#{a}'"&lt;br />puts "da? com Omega -> '#{b}'"&lt;/code>&lt;/pre>&lt;br />&lt;br />Executando:&lt;br />&lt;pre>da? com nil -> ''&lt;br />da? com Omega -> 'Omega'&lt;/pre>&lt;br />&lt;br />O que eu fiz? como a expressão xyz.a.b.c poderia retornar algum erro pois um dos métodos poderia returnar nil, bastaria executar em um bloco de código com a ajuda do método da? (péssimo nome, uma corruptela de "da para executar sem erro? se não, me retorna nil e era wilson...), que captura qualquer erro e some com ele.&lt;br />&lt;br />Ruby é divertido. :)&lt;br />&lt;br />ps: teste com&lt;br />&lt;br />&lt;code>a = da? { xyz.a.b.c } || "nao deu..."&lt;/code>&lt;/div></description></item><item><title>Melhorando o “try()” do Ruby, a maneira “Groovy” [parte 2]</title><link>http://pacman.blog.br/blog/2008/03/05/melhorando-o-try-do-ruby-maneira-groovy/</link><pubDate>Wed, 05 Mar 2008 15:32:00 -0300</pubDate><guid>http://pacman.blog.br/blog/2008/03/05/melhorando-o-try-do-ruby-maneira-groovy/</guid><description>&lt;div class='post'>
Vou pedir perdão ao meu amigo Urubatan, que publicou um &lt;a href="http://www.urubatan.info/2008/03/a-better-try-for-ruby-why-not-do-the-groovy-way/">artigo&lt;/a> de mesmo nome.&lt;br />&lt;br />&lt;pre>&lt;code>class Omega&lt;br /> def doIt&lt;br /> puts "ola"&lt;br /> self&lt;br /> end&lt;br />end&lt;br />&lt;br />class NullableClass&lt;br /> def method_missing(*x)&lt;br /> self&lt;br /> end&lt;br />end&lt;br />&lt;br />class Object&lt;br /> def existe?&lt;br /> self&lt;br /> end&lt;br />end&lt;br />&lt;br />class NilClass&lt;br /> def existe? &lt;br /> NullableClass.new &lt;br /> end&lt;br />end&lt;br />&lt;br />xyz = Omega.new &lt;br />xyz . existe? . doIt . doIt&lt;br />&lt;br />abc = nil&lt;br />abc . existe? . doIt . doIt&lt;/code>&lt;/pre>&lt;br />&lt;br />Estou em duvida sobre o nome do metodo, por enquando fica &lt;span style="font-weight:bold;">existe?&lt;/span> mesmo.&lt;br />&lt;br />O que isso faz? Imagine que vc tem uma variavel ou atributo de classe que &lt;span style="font-style:italic;">pode&lt;/span> ser nil. Se for nil ela vai lançar um um erro em tempo de execução quando vc for tentar chamar algum método que a NilClass não possua (o que geralmente acontece, é semelhante ao NullPointerException do java).&lt;br />&lt;br />Eu poderia resolver isso alterando o method_missing da NilClass, porém alguns scripts podem estar esperando erros desse tipo. Decidi então criar um método que, para qualquer objeto, retorna ele mesmo (self). Caso seja nil, ele vai retornar um NullableClass (outro nome infeliz, não tenho nenhuma ideia melhor) que simplesmente retorna ele para qq método requisitado.&lt;br />&lt;br />IMHO pode ser o suficiente quando queremos fazer um teste simples: o objeto é nil? então não faz nada.&lt;br />&lt;br />Se alguem achar isso util por favor me avise :)&lt;br />&lt;br />Ah sim, a execução do script acima resulta em:&lt;br />&lt;pre>ola&lt;br />ola&lt;/pre>&lt;/div>
&lt;h2>Comments&lt;/h2>
&lt;div class='comments'>
&lt;div class='comment'>
&lt;div class='author'>Urubatan&lt;/div>
&lt;div class='content'>
como eu disse quando tu postou este comentário no meu blog, este teu esquema não resolve o problema de aninhamento de objetos, por exemplo&lt;BR/>&lt;BR/>@person.company.manager.name&lt;BR/>se eu digitar&lt;BR/>@person.existe?.company.manager.name &lt;BR/>e company for nil vai explodir tudo&lt;BR/>e um .existe?. depois de cada objeto vai ficar gigante e pior do que o try na minha opinião :D&lt;/div>
&lt;/div>
&lt;/div></description></item><item><title>Ruby e o method_missing</title><link>http://pacman.blog.br/blog/2007/09/28/ruby-e-o-methodmissing/</link><pubDate>Fri, 28 Sep 2007 11:43:00 -0300</pubDate><guid>http://pacman.blog.br/blog/2007/09/28/ruby-e-o-methodmissing/</guid><description>&lt;div class='post'>
Os objetos em Ruby possuem um método chamado 'respond_to?' para verificar se o objeto possui (ou melhor, se ele responde a) um determinado método. Em uma linguagem dinâmica como o ruby, onde podemos incluir um método numa classe em &lt;span style="font-style:italic;">runtime&lt;/span>, é um recurso muito necessário, ainda mais se pensarmos em termos de &lt;span style="font-style:italic;">Duck Typing&lt;/span>.&lt;br />&lt;br />Em caso de dúvida, basta fazer um &lt;span style="font-weight:bold;">if&lt;/span>, afinal chamar um método que não existe causa um &lt;span style="font-weight:bold;">NoMethodError&lt;/span>, certo?&lt;br />&lt;br />Depende. Observe:&lt;br />&lt;br />&lt;pre>&lt;code>class A&lt;br /> def xxx()&lt;br /> puts "xxx"&lt;br /> end&lt;br /> def method_missing(m, *args)&lt;br /> puts "nao tenho esse metodo: #{m}"&lt;br /> end&lt;br />end&lt;br />&lt;br />a = A.new&lt;br />a.xxx&lt;br /># aqui normalmente daria erro e o script seria abortado &lt;br /># sem o rescue adequado&lt;br />a.yyy &lt;/code>&lt;/pre>&lt;br />&lt;br />Resultado:&lt;br />&lt;pre>~> ruby A.rb&lt;br />xxx&lt;br />nao tenho esse metodo: yyy&lt;/pre>&lt;br />&lt;br />Eu sobreescrevi o método 'method_missing', que como o próprio nome indica, intercepta uma chamada a um método inexistente. Divertido, não?&lt;/div></description></item><item><title>Ruby e suas travessuras</title><link>http://pacman.blog.br/blog/2007/09/24/ruby-e-suas-travessuras/</link><pubDate>Mon, 24 Sep 2007 23:33:00 -0300</pubDate><guid>http://pacman.blog.br/blog/2007/09/24/ruby-e-suas-travessuras/</guid><description>&lt;div class='post'>
&lt;pre>&lt;code>irb(main):001:0> def some(thing)&lt;br />irb(main):002:1> puts "some#{thing}"&lt;br />irb(main):003:1> end&lt;br />=> nil&lt;br />irb(main):004:0> some "thing"&lt;br />something&lt;br />=> nil&lt;br />irb(main):005:0> some = "thing"&lt;br />=> "thing"&lt;br />irb(main):006:0> some(some)&lt;br />something&lt;br />=> nil&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Curso de Ruby on Rails em Porto Alegre</title><link>http://pacman.blog.br/blog/2007/09/18/curso-de-ruby-on-rails-em-porto-alegre/</link><pubDate>Tue, 18 Sep 2007 10:11:00 -0300</pubDate><guid>http://pacman.blog.br/blog/2007/09/18/curso-de-ruby-on-rails-em-porto-alegre/</guid><description>&lt;div class='post'>
Uma oportunidade imperdível!&lt;br />&lt;br />A &lt;a href="http://www.techoffice.com.br/">Tech Office IT&lt;/a> realiza no período de 24 a 28 de setembro de 2007 em Porto Alegre, o curso presencial &lt;a href="http://pt.wikipedia.org/wiki/Ruby_on_Rails">Ruby on Rails&lt;/a>, voltado a desenvolvedores Ruby que desejam conhecer mais sobre Rails e desenvolvedores de outras linguagens que tenham interesse em ingressar no RoR. O curso objetiva auxiliar o aluno a entender o Ruby on Rails e possibilitar a criação de aplicações o utilizando, além de expor suas vantagens e limitações.&lt;br />&lt;br />Após o curso o aluno estará apto a desenvolver aplicações WEB utilizando o Ruby On Rails, saberá onde procurar mais recursos para acelerar o desenvolvimento e adicionar recursos na aplicação desenvolvida.&lt;br />&lt;br />Com carga horária de 20 horas/aula, o treinamento será 100% prático e ministrado em laboratório. Durante o curso, os participantes desenvolverão uma loja de DVDs completa que poderá ser utilizada como exemplo ou como base para o desenvolvimento de uma aplicação mais complexa pós-curso. Mais informações poderão ser obtidas através do site www.techoffice.com.br ou e-mail contato (at) techoffice (.) com (.) br, além do telefone 51.3012.8241.&lt;br />&lt;br />&lt;a href="http://www.techoffice.com.br/ruby/flyer_ruby.htm">Mais detalhes sobre o curso de Ruby on Rails&lt;/a>&lt;br />&lt;br />&lt;a href="http://www.techoffice.com.br/ruby/insc_ruby.htm">Clique aqui para se inscrever no curso de Ruby On Rails&lt;/a>&lt;br />&lt;br />Se alguem não sabe o poder do Ruby on Rails, veja esse &lt;a href="http://www.youtube.com/v/Gzj723LkRJY">video&lt;/a>:&lt;br />&lt;br />&lt;object width="425" height="350">&lt;param name="movie" value="http://www.youtube.com/v/Gzj723LkRJY">&lt;/param>&lt;param name="wmode" value="transparent">&lt;/param>&lt;embed src="http://www.youtube.com/v/Gzj723LkRJY" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350">&lt;/embed>&lt;/object>&lt;/div></description></item><item><title>Conheça o Incrível Ruby on Rails</title><link>http://pacman.blog.br/blog/2007/07/02/conhea-o-incrvel-ruby-on-rails/</link><pubDate>Mon, 02 Jul 2007 17:39:00 -0300</pubDate><guid>http://pacman.blog.br/blog/2007/07/02/conhea-o-incrvel-ruby-on-rails/</guid><description>&lt;div class='post'>
&lt;object width="425" height="350">&lt;param name="movie" value="http://www.youtube.com/v/Gzj723LkRJY">&lt;/param>&lt;param name="wmode" value="transparent">&lt;/param>&lt;embed src="http://www.youtube.com/v/Gzj723LkRJY" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350">&lt;/embed>&lt;/object>&lt;br />&lt;br />&lt;a href="http://pt.wikipedia.org/wiki/Ruby_(linguagem_de_programa%C3%A7%C3%A3o)">Ruby&lt;/a> é uma linguagem interpretada orientada à objetos que vem aparecendo no mercado faz tempo. Sua popularidade vem subindo graças ao framework &lt;a href="http://pt.wikipedia.org/wiki/Ruby_on_Rails">on Rails&lt;/a>, que pode acelerar, e muito, o desenvolvimento de aplicações para a web. &lt;br />&lt;br />Gostou da demonstração? O ponto de partida para um entusiasta pode ser o &lt;a href="http://rubyonbr.org/">Ruby on Br&lt;/a>, com alguns bons artigos e um forum que une os melhores profissionais no ramo. &lt;br />&lt;br />Dê uma olhada nos &lt;a href="http://eustaquiorangel.com/files">tutoriais&lt;/a> do Taq e, se gostar, compre o livro (é muito bom, recomendo). Outro livro muito bom é o do &lt;a href="http://www.akitaonrails.com/">Akita&lt;/a> (responsável pela &lt;a href="http://gettingreal.37signals.com/GR_por.php">tradução&lt;/a> do livro Getting Real by 37 Signals para pt_BR).&lt;br />&lt;br />Embarque nessa vc também!&lt;/div></description></item><item><title>Closures em Shell</title><link>http://pacman.blog.br/blog/2007/06/15/closures-em-shell/</link><pubDate>Fri, 15 Jun 2007 17:27:00 -0300</pubDate><guid>http://pacman.blog.br/blog/2007/06/15/closures-em-shell/</guid><description>&lt;div class='post'>
Uma das coisas mais impressionantes (pelo menos para mim) da linguagem Ruby são os Closures:&lt;br />&lt;br />&lt;pre>&lt;code>$ ruby -e 'r=0...3 ; r.each { puts "oi"}&lt;br />oi&lt;br />oi&lt;br />oi&lt;/code>&lt;/pre>&lt;br />&lt;br />em um objeto do tipo Range eu tenho um método chamado each que recebe um bloco de código como argumento. Este bloco pode até ser parametrizado, por exemplo:&lt;br />&lt;br />&lt;pre>&lt;code>$ ruby -e 'r=0...3 ; r.each { |i| puts 2*i}'&lt;br />0&lt;br />2&lt;br />4&lt;/code>&lt;/pre>&lt;br />&lt;br />O que o metodo each faz é passar este bloco de código para 'dentro de si' e aplica-o em cada elemento do objeto 'range'. Pode ser para imprimir o resultado ou efetuar uma operação matemática, até mesmo substituindo um laço for simples. A verdade é que os Closures são bem mais do que isso e permitem fazer scripts bem interessantes.&lt;br />&lt;br />Sera que poderiamos ter o mesmo em BashScript ? Bem... vou simular aqui &lt;br />&lt;br />&lt;pre>&lt;code>$ each(){ &lt;br /> local F="${@}" &lt;br /> while read i ; do &lt;br /> set - $i &lt;br /> eval "${F}" &lt;br /> done &lt;br />}&lt;br />&lt;br />$ seq 3 | each '{ echo "encontrei $1" ; }'&lt;br />encontrei 1&lt;br />encontrei 2&lt;br />encontrei 3&lt;/code>&lt;/pre>&lt;br />&lt;br />Simples heim? Eu crio uma variavel local dentro de uma função e 'executo-a' para cada resultado via comando eval. Se este tipo de construção for util para alguem, fica aí a dica!&lt;/div></description></item></channel></rss>