Posts Tagged ‘nil’

Ruby on Rails exemplo de helper para detectar o navegador

Postado em 30 jul 2009
Categoria(s) Ruby on Rails

Esse é um exemplo simples e sucinto de um helper para detectar o navegador do usuário.

Segue abaixo o código:

module BrowserDetectHelper
  def browser_is? name
    browser_name == name
  end
 
  def browser_name
    ua = request.user_agent.downcase
 
    if ua =~ /firefox\//
      :firefox
    elsif ua =~ /opera\//
      :opera
    elsif ua =~ /chrome\//
      :chrome
    elsif ua =~ /safari\//
      :safari
    elsif ua =~ /msie/
      :ie
    else
      nil
    end
  end
end

Se você gostou desse texto e acha que ajudou você, me recomende: Recommend Me.

  • Share/Bookmark

Ruby on Rails diferença entre os métodos nil?, empty? e blank?

Postado em 07 jul 2009
Categoria(s) Ruby on Rails

nil?
O método nil? testa se o objeto é uma instância da class NilClass, usado geralmente para indicar um valor inválido.

empty?
O método empty? testa se o objeto é vazio, depende da classe do objeto, por exemplo String#empty? retorna true se a string não conter caracteres, Array#empty? e Hash#empty? retorna true se o array ou hash não tiver entradas, para outras classes você deve consultar o seu comportamento.

nil.nil?
=> true
 
false.nil?
=> false
 
1.nil?
=> false
 
0.nil?
=> false
 
"".nil?
=> false
 
[].nil?
=> false
 
"".empty?
=> true
 
"abc".empty?
=> false
 
[].empty?
=> true
 
[1, 2, 3].empty?
=> false
 
1.empty?
=> NoMethodError

No último exemplo o método empty? não é definido na classe Fixnum.

blank?
O método blank? é implementado no Rails, ele testa se um objeto é false, empty, uma string com espaços, por exemplo: “”, ” “, nil, [], e {} são blank.

Esse método simplifica:

Ao invés de fazer:

if !address.nil? && !address.empty?

Você pode fazer:

if !address.blank?

Se você gostou desse texto e acha que ajudou você, me recomende: Recommend Me.

  • Share/Bookmark

Ruby usando DRb (Distributed Ruby)

Postado em 18 jun 2009
Categoria(s) Ruby

DRb permite programas em Ruby se comunicar uns com os outros na mesma máquina ou através de uma rede, aplicação cliente/servidor. DRb utiliza o método de invocação remota (RMI) para transmitir comandos e dados entre os processos.

Nesse post vamos criar dois programas, o servidor e o cliente usando DRb.

Construíndo o servidor (server.rb):

1
2
3
4
5
6
7
8
9
10
11
require 'drb'
 
class Server
  def hello
    "Hello, This is a Distributed Ruby (DRb) Example"
  end
end
 
server_object = Server.new
DRb.start_service('druby://localhost:9000', server_object)
DRb.thread.join

Entendendo o código do servidor:

require 'drb'

A linha acima apenas requere a biblioteca DRb, essa biblioteca que a responsável por fazer a comunicação remota. Você pode encontrar mais informações a seu respeito em: http://www.ruby-doc.org/stdlib/libdoc/drb/rdoc/index.html.

class Server
  def hello
    "Hello, This is a Distributed Ruby (DRb) Example"
  end
end

O código acima apena cria uma classe e o método hello, que imprime uma mensagem.

server_object = Server.new
DRb.start_service('druby://localhost:9000', server_object)
DRb.thread.join

Essas três linhas acima que fazem o servidor funcionar, a primeira linha apenas faz a instância da classe Server, a segunda linha inicia o serviço remoto no endereço druby://localhost:9000 disponibilizando o objeto server_object, a terceira linha inicia uma thread no servidor para aceitar requisições remotas.

Construíndo o cliente (client.rb):

1
2
3
4
5
6
require 'drb'
 
DRb.start_service
obj = DRbObject.new(nil, 'druby://localhost:9000')
 
puts obj.hello

Entendendo o código do cliente:

require 'drb'

A linha acima apenas requere a biblioteca DRb, essa biblioteca que a responsável por fazer a comunicação remota. Você pode encontrar mais informações a seu respeito em: http://www.ruby-doc.org/stdlib/libdoc/drb/rdoc/index.html.

DRb.start_service
obj = DRbObject.new(nil, 'druby://localhost:9000')

As suas linhas acima inicia o serviço remoto com o servidor, a primeira inicializa o serviço e a segunda estabelece conexão com o servidor no endereço druby://localhost:9000 obtendo o objeto Server.

puts obj.hello

Essa linha acima invoca o método hello do objeto remoto Server.

Rodando o servidor:

Para inicializar o servidor digite na linha de comando:

ruby server.rb

Não será exibida nenhuma mensagem, o servidor apenas ficará esperando novas requisições remotas.

Rodando o cliente:

ruby client.rb

Quando você rodar o cliente terá como retorno a mensagem:

Hello, This is a Distributed Ruby (DRb) Example

Pronto! Esse recurso é muito interessante. ;-)

Se você gostou desse texto e acha que ajudou você, me recomende: Recommend Me.

  • Share/Bookmark

Ruby como verificar se uma variável existe similar ao isset do PHP

Postado em 17 jun 2009
Categoria(s) Ruby

No PHP existe a função isset ela é muito interessante para testar se uma variável existe, ela retorna true caso exista e false caso contrário.

Por exemplo:

1
2
3
4
5
6
7
8
public function cleanAttributes($params)
{
  if (isset($params['title'])) {
    $params['title'] = strip_tags($params['title']);
  }
 
  return $params;
}

No Ruby você pode fazer o mesmo usando o operador defined?.

Por exemplo:

1
2
3
4
5
6
7
8
9
def clean_attributes(params)
  if defined?(params['title'])
    if !params['title'].nil?
      params['title'] = params['title'].strip_tags
    end
  end
 
  return params
end

Se você gostou desse texto e acha que ajudou você, me recomende: Recommend Me.

  • Share/Bookmark