<?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"
	>

<channel>
	<title>MouseOver Studio &#187; cucumber</title>
	<atom:link href="http://www.mouseoverstudio.com/blog/category/cucumber/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.mouseoverstudio.com/blog</link>
	<description></description>
	<pubDate>Wed, 25 Aug 2010 02:03:38 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5</generator>
	<language>en</language>
			<item>
		<title>Anotações em Ruby</title>
		<link>http://www.mouseoverstudio.com/blog/2010/05/01/anotacoes-em-ruby/</link>
		<comments>http://www.mouseoverstudio.com/blog/2010/05/01/anotacoes-em-ruby/#comments</comments>
		<pubDate>Sat, 01 May 2010 23:03:37 +0000</pubDate>
		<dc:creator>Diego Carrion</dc:creator>
		
		<category><![CDATA[Annotations]]></category>

		<category><![CDATA[Meta Programming]]></category>

		<category><![CDATA[cucumber]]></category>

		<category><![CDATA[ruby]]></category>

		<category><![CDATA[vraptor]]></category>

		<guid isPermaLink="false">http://www.mouseoverstudio.com/blog/?p=194</guid>
		<description><![CDATA[Na mundo da programação, uma anotação é um jeito de marcar o código que esta embaixo dele para diversos fins. No Cucumber, as tags que ele utiliza são uma espécie de anotação para poder aplicar callbacks e classificar algumas funcionalidades e cenários:

@billing
Feature: Verify billing

  @important
  Scenario: Missing product description

  Scenario: Several products

No [...]]]></description>
			<content:encoded><![CDATA[<p>Na mundo da programação, uma anotação é um jeito de marcar o código que esta embaixo dele para diversos fins. No <a href="http://cukes.info/">Cucumber</a>, as tags que ele utiliza são uma espécie de anotação para poder aplicar callbacks e classificar algumas funcionalidades e cenários:</p>
<p><code>
<pre class="prettyprint">@billing
Feature: Verify billing

  @important
  Scenario: Missing product description

  Scenario: Several products</pre>
<p></code></p>
<p>No caso do <a href="http://vraptor.caelum.com.br">VRaptor</a> temos anotações para poder classificar um controller como recurso <a href="http://pt.wikipedia.org/wiki/REST">REST</a> ou especificar o acesso a uma action:</p>
<p><code>
<pre class="prettyprint">@Resource
public class ShoppingCartController {
    ...
}

public class ProductsController {
    @Post
    @Path("/products")
    public void add(Product product) {...}
    ...
}</pre>
<p></code></p>
<p>Em <a href="http://www.ruby-lang.org">Ruby</a>, duas anotações que utilizamos bastante são os métodos <a href="http://ruby-doc.org/core/classes/Module.html#M001641">private</a> e <a href="http://ruby-doc.org/core/classes/Module.html#M001640">protected</a>, que sem argumentos restringem a visibilidade dos métodos definidos embaixo deles:</p>
<p><code>
<pre class="prettyprint">class User
  def jump; end;

  protected
  def eat; end;
  def flirt; end;

  private
  def sleep; end;
  def dream; end;
end</pre>
<p></code></p>
<p>Dependendo do caso, podemos querer anotar nosso código nesse estilo, como por exemplo para especificar que um método esta depreciado, funcionalidade que podemos obter com a gem <a href="http://github.com/qmx/canivete">Canivete</a> do <a href="http://twitter.com/qmx">Douglas Campos</a>:</p>
<p><code>
<pre class="prettyprint">class Bomb
  deprecate
  def explode; end
end</pre>
<p></code></p>
<p>No código acima, quando alguém chamar o método Bomb#explode, o interpretador ira efetivamente executar o método, mas além disso ira imprimir: <em>Warning: calling deprecated method Bomb.explode</em>.</p>
<p>Esse comportamento pode ser obtido por causa do método <a href="http://ruby-doc.org/core/classes/Module.html#M001662">method_added</a>, presente em todos os módulos do Ruby, que é chamado toda vez que um método e definido, recebendo o nome do mesmo como parâmetro.</p>
<p>Podemos utilizar esse método então por exemplo para criar uma anotação que serva para especificar que os métodos declarados após ela somente podem ser chamados por um admin, algo assim:</p>
<p><code>
<pre class="prettyprint">class Module
  def method_added(name)
    unless @_admin_only.nil? or @_proxy_method
      @_proxy_method = true
      alias_method "_admin_#{name}", name
      module_eval <<-STRING
        def #{name}(*args, &amp;block)
          _admin_#{name}(*args, &amp;block) if admin?
        end
      STRING
      @_proxy_method = false
    end
  end

  def admin_only
    @_admin_only = true
  end
end

class User
  def admin?
    [true, false][rand(2)]
  end

  admin_only

  def update_password
    puts "password updated"
  end

  def restart_server
    puts "server restarted"
  end
end</pre>
<p></code></p>
<p>Nó código acima, #admin? ira devolver verdadeiro ou falso aleatoriamente e dependendo do resultado, o método chamado ira ser executado ou não.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mouseoverstudio.com/blog/2010/05/01/anotacoes-em-ruby/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Controlando o servidor de Rails dentro dos testes do Selenium</title>
		<link>http://www.mouseoverstudio.com/blog/2009/05/20/controlando-o-servidor-de-rails-dentro-dos-testes-do-selenium/</link>
		<comments>http://www.mouseoverstudio.com/blog/2009/05/20/controlando-o-servidor-de-rails-dentro-dos-testes-do-selenium/#comments</comments>
		<pubDate>Wed, 20 May 2009 22:42:09 +0000</pubDate>
		<dc:creator>Diego Carrion</dc:creator>
		
		<category><![CDATA[bdd]]></category>

		<category><![CDATA[cucumber]]></category>

		<category><![CDATA[mongrel]]></category>

		<category><![CDATA[rails]]></category>

		<category><![CDATA[selenium]]></category>

		<guid isPermaLink="false">http://www.mouseoverstudio.com/blog/?p=169</guid>
		<description><![CDATA[Para não esquecer disso uma segunda vez aqui vá:
Se estiverem trabalhando com Rails e Selenium e desejam subir e derrubar o servidor automaticamente antes e despois dos testes então podem utilizar o Mongrel:
mongrel_rails start -e test -d
mongrel_rails stop
Por exemplo, eu que estou utilizando Selenium com Cucumber, tenho meu env.rb assim:
require 'spec/expectations'
require 'selenium'

# "before all"
`mongrel_rails start [...]]]></description>
			<content:encoded><![CDATA[<p>Para não esquecer disso uma segunda vez aqui vá:</p>
<p>Se estiverem trabalhando com Rails e Selenium e desejam subir e derrubar o servidor automaticamente antes e despois dos testes então podem utilizar o <a href="http://mongrel.rubyforge.org/">Mongrel</a>:</p>
<pre class="prettyprint">mongrel_rails start -e test -d
mongrel_rails stop</pre>
<p>Por exemplo, eu que estou utilizando Selenium com Cucumber, tenho meu env.rb assim:</p>
<pre class="prettyprint">require 'spec/expectations'
require 'selenium'

# "before all"
`mongrel_rails start -e test -d`
`rake db:populate RAILS_ENV=test`
browser = Selenium::SeleniumDriver.new("localhost", 4444, "*chrome", "http://localhost", 15000)

Before do
  @browser = browser
  @browser.start
end

After do
  @browser.stop
end

# "after all"
at_exit do
  browser.close rescue nil
  `mongrel_rails stop`
end</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.mouseoverstudio.com/blog/2009/05/20/controlando-o-servidor-de-rails-dentro-dos-testes-do-selenium/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
