Posts Tagged ‘helper’

Ruby on Rails plugin stylesheet_by_browser

Postado em 03 ago 2009
Categoria(s) Plugins, Ruby on Rails

stylesheet_by_browser

Ruby on Rails helper insere o stylesheet de acordo com o navegador.
Desta forma você pode adicionar o css específico para cada navegador, na sua folha de estilo, não necessitando mais fazer hacks em uma única folha de estilo css.

Instalação

Etapa 1

./script/plugin install git://github.com/patrickespake/stylesheet_by_browser.git

Etapa 2

Em seguida, instalar os arquivos necessários no diretório public, executando:

rake stylesheet_by_browser:install

Serão adicionados os arquivos abaixo, no diretório public/stylesheets:

  • chrome.css
  • firefox.css
  • ie.css
  • opera.css
  • safari.css

Etapa 3

Por último, adicionar a linha abaixo no elemento HEAD do layout da aplicação:

<%= stylesheet_by_browser %>

Exemplos

<%= stylesheet_by_browser %>
<%= stylesheet_by_browser :media => "all" %>
<%= stylesheet_by_browser :media => "print" %>
<%= stylesheet_by_browser :media => "screen" %>

Documentação

http://lab.patrickespake.com/stylesheet_by_browser

Desinstalação

rake stylesheet_by_browser:uninstall

Código fonte

http://github.com/patrickespake/stylesheet_by_browser/tree/master

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

  • Share/Bookmark

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 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 usando o jQuery ao invés do Prototype

Postado em 09 jun 2009
Categoria(s) Ruby on Rails, jQuery

Eu gosto mais do jQuery acho ele mais leve, mais funcional e com efeitos melhores.

Vou mostrar como substituir o Prototype e colocar o jQuery no seu lugar.

Instalação do plugin jRails:

ruby script/plugin install http://ennerchi.googlecode.com/svn/trunk/plugins/jrails

No layout da sua aplicação remova o uso do Prototype, remova a linha abaixo, caso ela exista:

<%= javascript_include_tag :defaults %>

Agora adicionei as bibliotecas javascripts entre as tags heads:

...
  <head>
    ...
    <%= javascript_include_tag "jquery" %>
    <%= javascript_include_tag "jquery-ui" %>
    <%= javascript_include_tag "jrails" %>
  </head>
...

Pronto! Fazendo isso o jQuery está disponível e compatível com o Ruby on Rails, ou seja, todos os helpers javascript usarão agora o jQuery como framework javascript.

O plugin jRails sobrescreve os helpers javascript para usar o jQuery.

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

  • Share/Bookmark

Ruby on Rails usando o helper Cycle de uma forma mais apurada

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

O helper cycle é legal para trabalhar com alternância de classes css em linhas de uma tabela, divs, listas e outros elementos html. Quando você deseja que as linhas pares fiquem de uma cor e as linhas ímpares fiquem de outra cor.

Por exemplo:

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
26
27
28
29
<table class="media-table">
  <caption>Photos</caption>
 
  <thead>
    <tr>
      <th class="photo">Photo</th>
      <th class="description">Description</th>
      <th class="actions">Actions</th>
    </tr>
  </thead>
 
  <tbody>
    <% if @message.photos.size > 0%>
      <% for photo in @message.photos %>
        <tr class="<%= cycle('even', 'odd') %>">
          <td><%= image_tag photo.file.url(:thumb) %></td>
          <td><%= photo.description %></td>
          <td class="actions">
            <%= link_to_delete message_photo_path(@message, photo) %>
          </td>
        </tr>
      <% end %>
    <% else %>
      <tr>
        <td colspan="3">No photos.</td>
      </tr>
    <% end %>
  </tbody>
</table>

E você pode ter uma regra css da seguinte forma:

1
2
3
4
5
6
table.media-table tr.even {
}
 
table.media-table tr.odd {
  background-color: #e5eefa;
}

Desta forma todas as linhas ímpares ficaram de uma cor diferente.

É um helper bem simples que permite deixar suas tabelas, divs, listas e outros itens htmls bem legíveis através de regras css adequadas.

Você pode encontrar um problema de estilização quando usar o helper cycle em duas tabelas distintas conforme exemplo:

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<table class="media-table">
  <caption>Photos</caption>
 
  <thead>
    <tr>
      <th class="photo">Photo</th>
      <th class="description">Description</th>
      <th class="actions">Actions</th>
    </tr>
  </thead>
 
  <tbody>
    <% if @message.photos.size > 0%>
      <% for photo in @message.photos %>
        <tr class="<%= cycle('even', 'odd') %>">
          <td>< %= image_tag photo.file.url(:thumb) %></td>
          <td>< %= photo.description %></td>
          <td class="actions">
            <%= link_to_delete message_photo_path(@message, photo) %>
          </td>
        </tr>
      <% end %>
    <% else %>
      <tr>
        <td colspan="3">No photos.</td>
      </tr>
    <% end %>
  </tbody>
</table>
 
<br />
<br />
 
<table class="media-table">
  <caption>Videos</caption>
 
  <thead>
    <tr>
      <th class="video">Video</th>
      <th class="description">Description</th>
      <th class="actions">Actions</th>
    </tr>
  </thead>
 
  <tbody>
    <% if @message.videos.size > 0 %>
      <% for video in @message.videos %>
        <tr class="<%= cycle('even', 'odd') %>">
          <td><%= video.file.url %></td>
          <td><%= video.description %></td>
          <td><%= link_to_delete message_video_path(@message, video) %></td>
        </tr>
      <% end %>
    <% else %>
      <tr>
        <td colspan="3">No videos.</td>
      </tr>
    <% end %>
  </tbody>
</table>

No exemplo acima nós temos duas tabelas, uma para as fotos e outra para os vídeos. Nessa situação pode acontecer da próxima linha da tabela de vídeos ser pintada com a regra css odd, caso o número de linhas da tabela de fotos seja par.

Isso acontece por que o helper cycle não zera o seu contador entre um uso e outro.

Para trabalhar adequadamente você pode dar um nome para cada uso do helper cycle, desta forma:

1
2
3
4
5
...
<%= cycle('even', 'odd', 'row_photos') %>
...
<%= cycle('even', 'odd', 'row_videos') %>
...

Fazendo isso cada uso do helper cycle terá o seu próprio contador, e o problema de pintar o cabeçalho da tabela não ocorre mais.

Existe uma outra opção, você pode usar o helper cycle como mencionado no primeiro exemplo, sem definir um nome para cada uso do helper cycle, entre um uso e outro do helper cycle você pode pedir para zerar o seu contador, chamando o helper reset_cycle, exemplo:

1
2
3
4
5
6
7
...
<%= cycle('even', 'odd') %>
...
<% reset_cycle %>
...
<%= cycle('even', 'odd') %>
...

O helper reset_cycle também aceita zerar apenas um determinado helper cycle, basta informar o nome que você deseja zerar:

1
<% reset_cycle("row_photos") %>

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

  • Share/Bookmark