<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Valério Farias &#187; dsl</title>
	<atom:link href="http://valeriofarias.com/tag/dsl/feed/" rel="self" type="application/rss+xml" />
	<link>http://valeriofarias.com</link>
	<description>(Tecnologia + Negócios) = :)</description>
	<lastBuildDate>Tue, 29 Mar 2011 21:07:52 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Como a Linguagem Ruby pode ajudar o Capitão Morrimento</title>
		<link>http://valeriofarias.com/como-a-linguagem-ruby-pode-ajudar-o-capitao-morrimento/</link>
		<comments>http://valeriofarias.com/como-a-linguagem-ruby-pode-ajudar-o-capitao-morrimento/#comments</comments>
		<pubDate>Thu, 29 Nov 2007 06:34:09 +0000</pubDate>
		<dc:creator>Valrio Farias</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[dsl]]></category>
		<category><![CDATA[rubyonrails]]></category>

		<guid isPermaLink="false">http://valeriofarias.wordpress.com/2007/11/29/como-a-linguagem-ruby-pode-ajudar-o-capitao-morrimento/</guid>
		<description><![CDATA[Tudo bem Pessoal, já tinha feito uma comparação do ruby com o Pascal anteriormente e agora recebi um pedido para ajudar o Capitão Morrimento a selecionar seus aspirantes por meio de um software.
 
O problema é que o Capitão Morrimento precisou sair de férias do seu batalhão, mas mesmo assim quer garantir que a equipe [...]]]></description>
			<content:encoded><![CDATA[<p>Tudo bem Pessoal, já tinha feito uma <a href="http://valeriofarias.wordpress.com/2007/08/23/primeira-linguagem-de-programacao/">comparação do ruby com o Pascal</a> anteriormente e agora recebi um pedido para ajudar o Capitão Morrimento a selecionar seus aspirantes por meio de um software.</p>
<p> <a href='http://valeriofarias.files.wordpress.com/2007/11/capitaomorrimento.jpg' title='Capitão Morrimento'><img src='http://valeriofarias.files.wordpress.com/2007/11/capitaomorrimento.jpg' alt='Capitão Morrimento' /></a></p>
<p>O problema é que o Capitão Morrimento precisou sair de férias do seu batalhão, mas mesmo assim quer garantir que a equipe continue na linha e quer acompanhar os aspirantes para não ter problema com eles no futuro.</p>
<p>Para piorar a situação descobri que o Capitão Morrimento é muito extressado e não quer perder tempo com interface complexa. Ele tem conhecimento dos softwares básicos de escritório (somente o editor de texto). Então ele quer algo que se aproxime o máximo possível de copiar dos registros dos aspirantes que ele tem no seu PC e colocar em um campo que faça a verificação e diagnóstico do Aspira.</p>
<p>Sabendo da necessidade de criar algo simples, resolvi usar os conceitos de DSL (Linguagens Especificas de Domínio) do Ruby e fiz a seguinte classe para que ele pudesse entrar com dados no formato que ele usa no dia-a-dia dele:</p>
<blockquote><pre>def aspirante(nome, &amp;bloco)
		Aspirante.new(nome, &amp;bloco)
end

class Aspirante

	def initialize(nome, &amp;bloco)
		@nome = nome
		@dados = {
			:descricoes =&gt; [],
			:numero =&gt; nil
		}

		instance_eval(&amp;bloco)

	end

	def descricao(dados)
		@dados[:descricoes] &lt;&lt; dados
	end

	def numero(numero)
		@dados[:numero] = numero
	end

	def resultado()

		if @dados[:descricoes].include? "corrupto" then 5.times{ puts "PEDE PRA SAIR!"}

		elsif @dados[:numero] == 2 then 5.times{ puts "PEDE PRA SAIR! SEU 02! Tu e CORRUPTO!"}

		elsif @dados[:descricoes].include? "PM" then 2.times{ puts "NAO VAI SUBIR NINGUEM!"}

		elsif @dados[:descricoes].include? "dorminhoco" then 2.times{ puts "TRAGAM A GRANADA!..."}

		else puts "O senhor e um FANFARRAO seu #{@dados[:numero]}.\n Sera interrogado diretamente pelo CAPITAO."

		end
	end

end</pre>
</blockquote>
<p>Agora é só salvar esse código num arquivo e carregar (load class_aspirante.rb). Então O Capitão pode usar da seguinte forma:</p>
<blockquote><p>a1 = aspirante &#8220;José dos Azóis&#8221; do<br />
	numero = 04<br />
	descricao = &#8220;Disciplinado&#8221;<br />
        descricao = &#8220;Competente&#8221;<br />
        descricao = &#8220;etc&#8221;<br />
end</p></blockquote>
<p>a partir daí é só usar a1.resultado e obtém a resposta que queria.</p>
<p>Bom esse exemplo está em aberto, gostaria de dicas para melhorá-lo, porque, como falei antes, o capitão morrimento é muito esquentado e eu não quero ser chamado de Fanfarrão <img src='http://valeriofarias.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Quem puder contribuir com novas dicas de implementação para que a linguagem DSL Caveira fique mais intuitiva e eficiente fique à vontade para comentar.</p>
<p>Até logo.</p>
]]></content:encoded>
			<wfw:commentRss>http://valeriofarias.com/como-a-linguagem-ruby-pode-ajudar-o-capitao-morrimento/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

