Posts Tagged ‘método’

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 on Rails usando strip_tags nos controllers, models e libs

Postado em 15 jun 2009
Categoria(s) Ruby on Rails

O Ruby on Rails possui o métogo strip_tags para remover tags html. Esse método está apenas disponível na camada de view, uma vez que faz parte ActionView::Helpers::SanitizeHelper.

Eu não concordo com essa implementação do Rails, acho que deveria ser disponível também na camada de controller e model, onde são os lugares que esse método é mais útil.

Para implementar o strip_tags nos controllers, models e libs, nós podemos adicionar esse método na classe String, desta forma estará disponível em qualquer lugar.

Abra o arquivo config/initializers/new_rails_defaults.rb:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# Be sure to restart your server when you modify this file.
 
# These settings change the behavior of Rails 2 apps and will be defaults
# for Rails 3. You can remove this initializer when Rails 3 is released.
 
if defined?(ActiveRecord)
  # Include Active Record class name as root for JSON serialized output.
  ActiveRecord::Base.include_root_in_json = true
 
  # Store the full class name (including module namespace) in STI type column.
  ActiveRecord::Base.store_full_sti_class = true
end
 
# Use ISO 8601 format for JSON serialized times and dates.
ActiveSupport.use_standard_json_time_format = true
 
# Don't escape HTML entities in JSON, leave that for the #json_escape helper.
# if you're including raw json in an HTML page.
ActiveSupport.escape_html_entities_in_json = false

Adicione no final do arquivo as linhas:

1
2
3
4
5
class String
  def strip_tags
    ActionController::Base.helpers.strip_tags(self)
  end
end

As linhas acima criam o método strip_tags na classe String.

Ficando o arquivo completo assim:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# Be sure to restart your server when you modify this file.
 
# These settings change the behavior of Rails 2 apps and will be defaults
# for Rails 3. You can remove this initializer when Rails 3 is released.
 
if defined?(ActiveRecord)
  # Include Active Record class name as root for JSON serialized output.
  ActiveRecord::Base.include_root_in_json = true
 
  # Store the full class name (including module namespace) in STI type column.
  ActiveRecord::Base.store_full_sti_class = true
end
 
# Use ISO 8601 format for JSON serialized times and dates.
ActiveSupport.use_standard_json_time_format = true
 
# Don't escape HTML entities in JSON, leave that for the #json_escape helper.
# if you're including raw json in an HTML page.
ActiveSupport.escape_html_entities_in_json = false
 
class String
  def strip_tags
    ActionController::Base.helpers.strip_tags(self)
  end
end

Agora reinicie o seu servidor web para pegar essas novas configurações na inicialização da aplicação.

Agora quando você precisar do strip_tags pode usar assim, exemplos:

params['title'] = params['title'].strip_tags
 
ou
 
>> '<b>meu texto</b>'.strip_tags
=> "meu texto"

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

  • Share/Bookmark

Ruby on Rails debugando variáveis

Postado em 10 jun 2009
Categoria(s) Ruby on Rails

No Ruby existe o método debug, com ele você pode debugar uma variável e visualizar todos os parâmetros.

Exemplo:

1
2
3
4
5
...
<% if @drafts.size > 0 %>
  <% @drafts.each do |draft| %>
    <%= debug(draft) %>
...

Esse exemplo irá gerar a seguinte saída:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
--- !ruby/object:Message 
attributes: 
  step: "1"
  created_at: 2009-06-04 20:11:21
  title: Legal
  updated_at: 2009-06-10 18:25:51
  id: "1"
  user_id: "1"
  content: |-
    <p>Vamos testar</p>
    <p>Legal para carambaaa</p>
    <p>Vamos atualizar as informa&ccedil;&otilde;es.....</p>
  send_date: 
attributes_cache: {}

Essa é uma dica simples, mas que pode ajudar bastante.

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

  • Share/Bookmark

Em Ruby on Rails o método inspect equivale ao print_r do PHP

Postado em 20 jan 2009
Categoria(s) Ruby on Rails

Para que vem do PHP para o Rails vai sentir falta do print_r e var_dump.

No Rails podemos usar o método inspect para debugar o conteúdo de uma variável:

1
<%= @foo.inspect %>

Um exemplo de retorno:

1
[{"Muito ruim"=>28}, {"Ruim"=>14}, {"Regular"=>14}, {"Bom"=>28}, {"Ótimo"=>14}]

Seja feliz :-). Até mais.

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

  • Share/Bookmark

symfony usar o object_select_tag para retornar os valores ordenados

Postado em 02 dez 2008
Categoria(s) Symfony

Esses tempos estava usando o object_select_tag (é uma mão na roda), mas precisava trazer os resultados em ordem crescente. Foi ae que eu descobri que existe uma opção peer_method onde é possível definir o método no model para retornar a lista de resultados.

Eu não curto o Propel, prefiro bem mais o Doctrine. Desta forma esse exemplo é baseado usando o Doctrine:

No template:

1
2
3
4
5
6
7
<?php echo object_select_tag(isset($filters['Status']) ? $filters['Status'] : null, null, array (
  'include_blank' => true,
  'related_class' => 'Status',
  'text_method' => '__toString',
  'control_name' => 'filters[Status]',
  'peer_method' => 'getSorted'
)) ?>

No model StatusTable.class.php:

1
2
3
4
5
6
7
public static function getSorted()
{
  $q = new Doctrine_Query();
  $q->from('Status')->orderBy('name ASC');
 
  return $q->execute();
}

No código acima que é possível definir a forma de ordenação e qual coluna que deve ser usada para ordenar.

Agora falta criar o método __toString no model Status.class.php:

1
2
3
4
public function __toString()
{
  return $this->name;
}

O método __toString e usado para imprimir os valores no combo box.

Pronto! ;-)

  • Share/Bookmark