Posts Tagged ‘config’

Ruby on Rails Paperclip com I18n

Postado em 18 nov 2009
Categoria(s) I18n, Ruby on Rails

O plugin paperclip não tem suporte para i18n por padrão.

Então vamos implementar isso no braço, talvez não seja a forma mais elegante do mundo, mas funciona.

No seu model:

class Ong < ActiveRecord::Base
  # Paperclip
  has_attached_file :logo, :styles => { :thumb => "100x100>" }
  validates_attachment_size :logo, :less_than => 50.kilobytes, :message => I18n.t('activerecord.errors.messages.attachment_size', :min => 0, :max => 50.kilobytes)
end

Agora você precisar criar a diretiva activerecord.errors.messages.attachment_size no seu config/locales/pt-BR.yml:

pt-BR:
  # Active Record
  activerecord:
    errors:
      template:
        header:
          one: "Não foi possível gravar: 1 erro"
          other: "Não foi possível gravar: {{count}} erros."
        body: "Por favor, verifique o(s) seguinte(s) campo(s):"
      messages:
        attachment_size: "tamanho do arquivo deve estar entre {{min}} e {{max}} bytes"

Pronto! Seja feliz!
Se o plugin não faz, a gente faz.

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

  • Share/Bookmark

Ruby on Rails Authlogic com I18n para pt-BR

Postado em 01 set 2009
Categoria(s) Ruby on Rails

Para traduzir as mensagens, campos e modelos do Authlogic para pt-BR basta seguir os passos abaixo:

1) Define o default_locale para pt-BR

Abra o arquivo config/environment.rb, descomente a linha e define o idioma para pt-BR:

...
  # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
  # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}')]
  config.i18n.default_locale = 'pt-BR'
end

2) Crie o arquivo pt-BR.yml

Dentro do diretório config/locales crie o arquivo pt-BR.yml, e adicione o seguinte conteúdo:

pt-BR:
  # Authlogic
  authlogic:
    error_messages:
      login_blank: "não pode ficar em branco"
      login_not_found: "não é válido"
      login_invalid: "deve usar somente letras, números, espaços e .-_@ por favor."
      consecutive_failed_logins_limit_exceeded: "Consecutivos logins que falharam limite excedido, a conta está desativada."
      email_invalid: "deve ser semelhante a um endereço de email."
      password_blank: "não pode ficar em branco"
      password_invalid: "não é válido"
      not_active: "Sua conta não está ativa"
      not_confirmed: "Sua conta não está confirmada"
      not_approved: "Sua conta não foi aprovada"
      no_authentication_details: "Você não forneceu nenhum detalhe para autenticação."
    models:
      user_session: "SessãoUsuário"
    attributes:
      user_session:
        login: "Usuário"
        email: "Email"
        password: "Senha"
        remember_me: "Lembrar me"

3) Reinicie a aplicação

Para garantir que todas as novas configurações sejam carregadas reinicie o servidor web.

4) Opcional: Instale o plugin para traduzir os labels dos formulários

./script/plugin install git://github.com/iain/i18n_label.git

Pronto!

Uma outra sugestão de leitura é: http://blog.patrickespake.com/2009/01/31/ruby-on-rails-22-como-usar-i18n-traduzir-as-mensagens-de-validacao-do-model-e-atributos-do-model/.

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

  • Share/Bookmark

Ruby on Rails enviando e-mails usando o Google Apps

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

Depois de algumas horas quebrando a cabeça, consegui fazer funcionar o envio de e-mails usando o Google Apps.

Vou explicar como configurar. ;-)
Vamos lá!

Configure o config/environment.rb

Configure o seu environment.rb com a sua conta de e-mail do Google Apps, ou conta do Gmail, os e-mails serão enviados via smtp.

1
2
3
4
5
6
7
8
9
10
11
12
...
Rails::Initializer.run do |config|
...
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    :address => "smtp.gmail.com",
    :port => 587,
    :authentication => :plain,
    :user_name => "seu-usuario@seudominio.com",
    :password => "sua senha"
  }
end

Mas só fazendo isso não vai funcionar, o Google Apps utiliza TLS (Transport Layer Security), ou seja, Protocolo de Camada de Sockets Segura.

Para funcionar é necessário adicionar a lib smtp_tls.rb responsável pela camada TLS, você encontra ela no seguinte endereço: http://github.com/patrickespake/SMTP-TLS/tree/master.

smtp_tls.rb

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
61
62
63
64
65
66
require "openssl"
require "net/smtp"
 
Net::SMTP.class_eval do
  private
  def do_start(helodomain, user, secret, authtype)
    raise IOError, 'SMTP session already started' if @started
    #check_auth_args user, secret, authtype if user or secret
    check_auth_args user, secret
 
    sock = timeout(@open_timeout) { TCPSocket.open(@address, @port) }
    @socket = Net::InternetMessageIO.new(sock)
    @socket.read_timeout = 60 #@read_timeout
 
    check_response(critical { recv_response() })
    do_helo(helodomain)
 
    if starttls
      raise 'openssl library not installed' unless defined?(OpenSSL)
      ssl = OpenSSL::SSL::SSLSocket.new(sock)
      ssl.sync_close = true
      ssl.connect
      @socket = Net::InternetMessageIO.new(ssl)
      @socket.read_timeout = 60 #@read_timeout
      do_helo(helodomain)
    end
 
    authenticate user, secret, authtype if user
    @started = true
  ensure
    unless @started
      # authentication failed, cancel connection.
      @socket.close if not @started and @socket and not @socket.closed?
      @socket = nil
    end
  end
 
  def do_helo(helodomain)
    begin
      if @esmtp
        ehlo helodomain
      else
        helo helodomain
      end
    rescue Net::ProtocolError
      if @esmtp
        @esmtp = false
        @error_occured = false
        retry
      end
      raise
    end
  end
 
  def starttls
    getok('STARTTLS') rescue return false
    return true
  end
 
  def quit
    begin
      getok('QUIT')
    rescue EOFError
    end
  end
end

Copie o arquivo smtp_tls.rb para o diretório lib do seu projeto Ruby on Rails.

Carregando a lib smtp_tls.rb no environment.rb

Volte para o environment.rb e adicione para carregar a lib smtp_tls.rb:

1
2
3
4
5
...
require 'smtp_tls'
 
Rails::Initializer.run do |config|
...

Pronto! Fazendo isso você irá conseguir enviar e-mails usando o Google Apps ou Gmail.

Existe um detalhe a ser considerado na lib smtp_tls.rb, se você olhar o código vai encontrar as linhas abaixo:

7
8
9
10
...
    #check_auth_args user, secret, authtype if user or secret
    check_auth_args user, secret
...

O código por padrão tinha a linha check_auth_args user, secret, authtype if user or secret, mas quando essa linha está habilitado os e-mails não são enviados, você pode entender melhor o por que lendo aqui: http://blog.inspired.no/smtp-error-while-using-gmail-in-rails-271. Desta forma eu deixei apenas check_auth_args user, secret.

Se você precisa entender o básico de como criar um e-mail e enviar leia aqui: http://guides.rubyonrails.org/action_mailer_basics.html.

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 traduzir rotas com I18n

Postado em 06 abr 2009
Categoria(s) Ruby on Rails

A partir da versão 2.2 do Ruby on Rails existe o plugin TranslateRoutes (http://github.com/raul/translate_routes/tree/master), esse plugin tem o objetivo de traduzir as suas rotas para vários idiomas.

Instalação:

1
ruby script/plugin install git://github.com/raul/translate_routes.git

Configuração:

No diretório config/locales crie um arquivo chamado i18n-routes.yml, nesse arquivo ficarão as traduções das urls:

1
2
3
4
5
pt-BR:
  new: "novo"
  edit: "editar"
  show: "exibir"
  users: "usuarios"

Esse plugin consegue trabalhar com rotas RESTFul e rotas padrões, desta forma você pode traduzir os paths como new, edit, show e users que representam uma rota RESTFul.

Agora é necessário habilitar o sistema de rotas para trabalhar com I18n, edite o arquivo routes.rb e adicionei a seguinte linha ActionController::Routing::Translator.i18n no final:

1
2
3
4
5
6
7
8
ActionController::Routing::Routes.draw do |map|
  map.resources :users
 
  map.connect ':controller/:action/:id'
  map.connect ':controller/:action/:id.:format'
end
 
ActionController::Routing::Translator.i18n

Para mais informações: http://github.com/raul/translate_routes/tree/master.

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

  • Share/Bookmark