Posts Tagged ‘Ruby’

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 conversão de datas com I18n

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

Eu estou desenvolvendo uma aplicação que precisa trabalhar com datas com I18n e fazer conversões para salvar a data no banco de dados e exibir para o usuário de acordo com o seu idioma.

Eu estou usando o Date Picker do jQuery em um campo do tipo text_field.

datepicker

Vou mostrar um esboço de como eu fiz isso, em primeiro lugar eu defini no arquivo config/environment.rb o idioma:

config.i18n.default_locale = 'pt-BR'

Depois eu defini no arquivo config/locales/pt-BR.yml os formatos de data:

pt-BR:
  date:
    formats:
      default: "%d/%m/%Y"
      short: "%d de %B"
      long: "%d de %B de %Y"
 
    day_names: [Domingo, Segunda, Terça, Quarta, Quinta, Sexta, Sábado]
    abbr_day_names: [Dom, Seg, Ter, Qua, Qui, Sex, Sáb]
    month_names: [~, Janeiro, Fevereiro, Março, Abril, Maio, Junho, Julho, Agosto, Setembro, Outubro, Novembro, Dezembro]
    abbr_month_names: [~, Jan, Fev, Mar, Abr, Mai, Jun, Jul, Ago, Set, Out, Nov, Dez]
    order: [ :day, :month, :year ]

No meu formulário eu deixei assim:

<% content_for :javascripts do %>
  <%= include_jquery %>
  <%= javascript_include_tag "jquery.maskedinput-1.2.2.min" %>
  <% javascript_tag do %>
    $(document).ready(function() {
      // Adiciona date picker ao campo data de nascimento
      $.datepicker.setDefaults($.extend({showMonthAfterYear: false}, $.datepicker.regional['<%= I18n.locale %>']));
      $("#investor_date_of_birth").datepicker({
        showOn: 'both',
        buttonImage: '/images/calendar.gif',
        buttonImageOnly: false,
        buttonText: '<%= t('ui.admin.crud.datepicker_button_text') %>',
        changeMonth: true,
        changeYear: true,
        yearRange: '1900:<%= Time.now.year %>'
      });
 
      // Adiciona mascara ao campo data de nascimento
      $("#investor_date_of_birth").mask("99/99/9999");
    });
  <% end %>
<% end %>
 
<% form_for [:admin, @investor] do |f| -%>
  <%= f.error_messages %>
 
  <%= f.label :date_of_birth %>
 
  <% if @investor.new_record? %>
    <%= f.text_field :date_of_birth, :class => "smallInput" %>
  <% else %>
    <%= f.text_field :date_of_birth, :value => l(@investor.date_of_birth, :format => :default), :class => "smallInput" %>
  <% end %>
<% end %>

Caso exista o registro é realizado a conversão para exibir a data corretamente no formulário, não é necessário fazer conversão para salvar no banco de dados, o Rails já faz isso automaticamente.

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

  • Share/Bookmark

Ruby on Rails validates_numericality_of para integer ou valores determinados

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

Se a sua aplicação Ruby on Rails trabalha com chaves estrangeiras, relacionamentos, é interessante adicionar algumas validações para que o seu sistema não dê erro 500 por uma tentativa mal intecionada de inserção ou atualização do registro.

Isso também é útil quando você quer delimitar uma faixa de valores válidos para o campo.

Geralmente os campos de chave estrangeira são do tipo integer que pertence ao intervalo de -2147483648 até +2147483647, onde a grande maioria das aplicações trabalha somente com o conjunto dos números N* (naturais sem o zero).

Eu recomendo a seguinte validação no seu model:

class Investor < ActiveRecord::Base
  # Para chaves estrangeiras
  validates_numericality_of [:country_id, :gender_id, :civil_position_id], :greater_than_or_equal_to => 1, :less_than_or_equal_to => 2147483647
  # Para faixa de valor definida
  validates_numericality_of :number_of_dependents, :allow_nil => true, :greater_than_or_equal_to => 0, :less_than_or_equal_to => 9999
end

Desta forma para chaves estrangeiras são apenas aceitos valores de 1 até 2147483647.

Já para a faixa de valor definida você mesmo deve definir, conforme a sua necessidade, no caso do exemplo acima de 0 até 9999.

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

  • Share/Bookmark

Ruby on Rails Validação de Data

Postado em 05 nov 2009
Categoria(s) Ruby on Rails

Não existe no core do Ruby on Rails um validator para datas, mas existe um plugin que faz muito bem essa tarefa, o nome do plugin é validates_date_time.

Esse plugin está disponível no Github em: http://github.com/nickstenning/validates_date_time/.

Instalação

./script/plugin install git://github.com/nickstenning/validates_date_time.git

Configuração

class Investor < ActiveRecord::Base
  validates_date :date_of_birth
end

Esse validator aceita datas no formato: 2006-01-01 ou 1 Jan 06 ou 1 Jan 2006 ou 10/1/06 ou 1/1/2006, por padrão o plugin espera datas no formato dia/mês/ano, caso você queria datas no formato americano e necessário adicionar a seguinte linha no seu config/environment.rb:

ValidatesDateTime.us_date_format = true

Outro detalhe é que o validates_date por padrão considera que o campo de data é obrigatório, caso você queria que seu preenchimento seja opcional você pode adicionar o parâmetro :allow_nil => true da seguinte forma:

validates_date :date_of_birth, :allow_nil => true

I18n

Eu procurei na internet uma forma elegante para usar I18n no plugin, eu encontrei apenas uma (http://github.com/nickstenning/validates_date_time/blob/master/test/fixtures/en.yml), mas essa solução não contempla todas as mensagens de validações, existe a mensagem de validação de data inválida que eu não consegui traduzir da forma do link anterior, desta forma eu implementei manualmente o I18n para a mensagem de validação “is an invalid date” da seguinte forma:

No arquivo config/locales/pt-BR.yml adicionei o atributo invalid_date:

pt-BR:
  # Active Record
  activerecord:
    errors:
      messages:
        invalid_date: "é uma data inválida"

e no model eu configurei da seguinte forma:

class Investor < ActiveRecord::Base
  validates_date :date_of_birth, :message => I18n.t('activerecord.errors.messages.invalid_date')
end

O plugin também trabalha com validações time e date time, nos formatos: 1pm ou 10:11 ou 12:30pm ou 8am e 1 Jan 2006 2pm ou 31/1/06 8:30am.

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

  • Share/Bookmark

Ruby-Processing Exemplo de Modelo 3D com Drag e Carregamento de Material OBJ e MTL

Postado em 24 ago 2009
Categoria(s) PIBIC, Processing, Ruby, Ruby-Processing

O exemplo abaixo ilustra uma aplicação no modelo 3D com drag e carregamento de material OBJ e MTL, usando Ruby-Processing.
Para trabalhar com .OBJ esse exemplo usa a biblioteca: .OBJ loader for Processing, você pode encontrar mais informações em: http://code.google.com/p/saitoobjloader/.

Para esse exemplo funcionar você deve possuir o Ruby-Processing instalado, caso não possua siga os passos: http://blog.patrickespake.com/2009/08/23/ruby-processing.

Exemplo Modelo 3D com Drag e Carregamento de Material OBJ e MTL

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
class Example < Processing::App
  load_library :objloader
  import "saito.objloader"
 
  def setup
    size 800, 600, P3D
    @model = OBJModel.new(self, "m1.obj")
    @rot_x = 0
    @rot_y = 0
  end
 
  def draw
     background 51
     no_stroke
     lights
     smooth
 
     push_matrix
     translate width/2, height/2, 0
     rotate_x @rot_y
     rotate_y @rot_x
     scale 3
     @model.drawMode POLYGON
     @model.draw
     pop_matrix
  end
 
  def mouse_dragged
    @rot_x += (mouse_x - pmouse_x) * 0.01;
    @rot_y -= (mouse_y - pmouse_y) * 0.01;
  end
end
 
Example.new :title => "Example 3D With .OBJ Loader"

Esse exemplo importa um modelo 3D criado no 3D Studio Max, quando você clica e faz drag o modelo 3D se movimenta.

Executando

No terminal digite:

rp5 run example.rb

Resultado

ruby-processing-modelo-3d-drag-objloader

Você pode ver esse exemplo em execução no endereço: http://lab.patrickespake.com/ruby-processing-examples/example_3d_objloader/run/. Você precisa ter paciência para visualizar o modelo rodando, ele demora um certo tempo para carregar no browser.

Código fonte completo: http://github.com/patrickespake/ruby-processing-examples/tree/c80a080dd1e27a562b252fa01bc1030d924a9f47/example_3d_objloader.

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

  • Share/Bookmark