<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Latest posts for the topic "Programando em Ruby com o Mentawai (integração total com JRuby)"]]></title>
		<link>http://recipes.mentaframework.org/posts/list/4.page</link>
		<description><![CDATA[Latest messages posted in the topic "Programando em Ruby com o Mentawai (integração total com JRuby)"]]></description>
		<generator>JForum - http://www.jforum.net</generator>
			<item>
				<title>Programando em Ruby com o Mentawai (integração total com JRuby)</title>
				<description><![CDATA[ A partir da versão 1.13 o Mentawai possui suporte total ao JRuby. Você pode escrever suas actions (e sua aplicação) inteiramente em Ruby ou você pode chamar qualquer código Ruby de dentro de suas actions em Java (ou de qualquer ponto da sua aplicação em Java).<br /> <br /> Para suportar código Ruby, tudo que você necessita é copiar o arquivo jruby.jar para dentro do /WEB-INF/lib da sua aplicação. Entretanto, se você pretende usar RubyGems ou as bibliotecas nativas do Ruby (como 'date' por exemplo) você precisará ter o JRuby instalado na máquina que está rodando o seu Tomcat. Para instalar o JRuby é muito fácil:<br /> <br /> :arrow: Baixe o arquivo zip com a instalação da última versão do JRuby aqui: http://dist.codehaus.org/jruby/ (Ex: jruby-bin-1.1.1.zip)<br /> <br /> :arrow: Extraia tudo no seu diretório raiz (ou em qualquer outro)<br /> <br /> :arrow: Sete a variável de ambiente JRUBY_HOME. (Ex: JRUBY_HOME=c:\jruby-1.1.1)<br /> <br /> :arrow: Sete a variável de ambiente JRUBY_OPTS para -rubygems. (Assim você não precisa requerer 'rubygems' nos seus códigos)<br /> <br /> :arrow: Coloque o diretório %JRUBY_HOME%\bin no seu PATH de forma que você possa executar o comando jruby de qualquer lugar.<br /> <br /> Se você fizer os passos acima você terá o jruby disponível no seu shell. Veja os exemplos abaixo:<br /> [code]<br /> c:\&gt;jruby -v<br /> ruby 1.8.6 (2008-04-22 rev 6555) [x86-jruby1.1.1]<br /> <br /> c:\&gt;jruby -S gem -v<br /> 1.1.0<br /> <br /> c:\&gt;jruby -S gem list --local<br /> <br /> *** LOCAL GEMS ***<br /> <br /> hoe (1.5.1)<br /> hpricot (0.6)<br /> jruby-openssl (0.2.3)<br /> mechanize (0.7.6)<br /> rake (0.8.1)<br /> rspec (1.1.3)<br /> rubyforge (0.4.5)<br /> sources (0.0.1)<br /> [/code]<br /> <br /> Agora vamos ao exemplo de código Ruby rodando dentro do Mentawai (baixe a versão beta do Mentawai 1.13 [url=http://www.mentaframework.org/beta/mentawai.jar]aqui[/url])<br /> <br /> Todo e qualquer código Ruby deve ficar dentro do diretório /WEB-INF/ruby da sua aplicação web. O Mentawai carrega qualquer arquivo Ruby dentro desse diretório e tb faz o reload automático em caso de modificação (como uma página JSP).<br /> <br /> Action inteiramente em Ruby: /WEB-INF/ruby/action_test.rb<br /> [code]<br /> include_class 'org.mentawai.core.BaseAction'<br /> <br /> class MyFirstRubyAction &lt; BaseAction<br />   <br />   def execute<br />     output["msg"] = "Hello from JRuby !!!!"<br />     :success<br />   end<br />   <br /> end<br /> [/code]<br /> <br /> Action em Java chamando código Ruby: /WEB-INF/src/org/hello/action/Hello.java<br /> [code]<br /> package org.hello.action;<br /> <br /> import java.util.Iterator;<br /> import java.util.Map;<br /> <br /> import org.mentawai.core.BaseAction;<br /> import org.mentawai.jruby.JRubyInterpreter;<br /> <br /> public class Hello extends BaseAction {<br /> 	<br /> 	JRubyInterpreter ruby = JRubyInterpreter.getInstance();<br /> 	<br /> 	public String execute() {<br /> 		<br /> 		Object users = ruby.eval("u = Users.new");<br /> 		<br /> 		Map map = (Map) ruby.eval("u.get_users");<br /> 		<br /> 		Iterator iter = map.keySet().iterator();<br /> 		<br /> 		StringBuilder sb = new StringBuilder();<br /> 		<br /> 		while(iter.hasNext()) {<br /> 			sb.append(iter.next()).append(" ");<br /> 		}<br /> 		<br /> 		output.setValue("msg", "Hello my friends: " + sb.toString());<br /> 		<br /> 		return SUCCESS;<br /> 	}<br /> }<br /> [/code]<br /> <br /> Código Ruby acessado pela action acima: /WEB-INF/ruby/users_test.rb<br /> [code]<br /> <br /> class Users<br />   <br />   def get_users<br />     a = {}<br />     a['Sergio'] = 1<br />     a['Robert'] = 2<br />     a<br />   end<br />   <br /> end<br /> [/code]<br /> <br /> ApplicationManager:<br /> [code]<br /> package org.hello;<br /> <br /> import org.hello.action.Hello;<br /> <br /> public class ApplicationManager extends org.mentawai.core.ApplicationManager {<br /> 	<br /> 	@Override<br /> 	public void loadActions() {<br /> 		<br /> 		action("/HelloRuby1", Hello.class).on(SUCCESS, "/hello.jsp");<br /> 		<br /> 		ruby("/HelloRuby2", "MyFirstRubyAction").on(SUCCESS, "/hello.jsp");<br /> 		<br /> 	}<br /> 	<br /> }<br /> [/code]<br /> <br /> ]]></description>
				<guid isPermaLink="true">http://recipes.mentaframework.org/posts/preList/56/59.page</guid>
				<link>http://recipes.mentaframework.org/posts/preList/56/59.page</link>
				<pubDate><![CDATA[Thu, 15 May 2008 16:08:25]]> GMT</pubDate>
				<author><![CDATA[ saoj]]></author>
			</item>
	</channel>
</rss>