Inspecionando seu código

Conhecendo o “ri”

No Ruby, o comando “ri” é usado para acessar a documentação incorporada (também conhecida como “RDoc”) de uma biblioteca, classe, método ou tópico específico. “ri” é uma abreviação de “Ruby Interactive” ou “Ruby Index”.

Ao executar o comando “ri” no terminal, seguido de um nome de classe, método ou tópico, você verá a documentação relacionada a esse elemento. Por exemplo, se você executar o comando “ri Array” no terminal, você verá algo como:

(from ruby core)
------------------------------------------------------------------------
An Array is an ordered, integer-indexed collection of objects, called
elements. Any object (even another array) may be an
array element, and an array can contain objects of different types.

== Array Indexes

Array indexing starts at 0, as in C or Java.

A positive index is an offset from the first element:

* Index 0 indicates the first element.
* Index 1 indicates the second element.
* ...

A negative index is an offset, backwards, from the end of the array:

* Index -1 indicates the last element.
:

Se você executar “ri Array#each”, você verá a documentação para o método each da classe Array.

$ ri Array#each

= Array#each

(from ruby core)
------------------------------------------------------------------------
  array.each {|element| ... } -> self
  array.each -> Enumerator

------------------------------------------------------------------------

Iterates over array elements.

When a block given, passes each successive array element to the block;
returns self:

  a = [:foo, 'bar', 2]
  a.each {|element|  puts "#{element.class} #{element}" }

Output:

  Symbol foo
:

É uma maneira útil de consultar a documentação do Ruby sem precisar procurar em recursos externos ou na web. Principalmente se tiver no 3G. ;)

Encontrando a definição de um método em sua aplicação Rails

As vezes você precisa encontrar a definição de um método em sua aplicação Rails. Por exemplo, você pode querer encontrar a definição de um método de classe ou instância. Você pode usar o método source_location para isso. Por exemplo:

Para métodos de instância:

$ Movie.instance_method(:rating).source_location
# => ["/app/models/movie.rb", 210] 

Para métodos de classe:

$ Movie.singleton_method(:rating).source_location
# => ["/app/models/movie.rb", 21] 

Você também pode usar o método sorce para ver o código-fonte de um método:

$ Movie.instance_method(:rating).source
# => "def rating\n  read_attribute(:rating)\nend\n"

para ter uma melhor visualização do código, você pode usar o método display:

$ Movie.instance_method(:rating).source.display
def rating
  read_attribute(:rating)
end

Acredite, isso será muito útil, principalemente, se o seu código tá cheio de meta-programação. ;)

Encontrando a definição de um método em uma gem

Para encontrar a definição de um método em uma gem, você pode usar o comando bundle open. Por exemplo, para encontrar a definição do método save da gem activerecord:

$ bundle open activerecord

Isso abrirá o arquivo activerecord/lib/active_record/core.rb no seu editor de texto padrão. Você pode então procurar o método save direto no projeto.

Referências