Novos ventos

31/03/08

Novos ventos trazem mudanças. E espero que sejam mudanças para melhor! Muitas pessoas já estavam sabendo, mas chegou a hora de tornar oficial.

Depois de dois anos trabalhando com uma galera muito legal no UOL — onde fiz grandes amizades, com uma em especial —, estou mudando de empresa. Foram dois anos muito divertidos e que nunca vou esquecer, mas já não estava com o mesmo ânimo de quando entrei. Por coincidência, recebi uma proposta muito interessante do Manoel Lemos que me fez pensar bastante e que, por fim, aceitei.

Irei trabalhar com o Ronaldo Ferraz, Roudi, e mais uma galera que parece ser muito boa, em projetos feitos principalmente com Ruby on Rails. Com certeza, isso irá refletir diretamente na quantidade de posts, que caiu consideravelmente nos últimos meses.

Estou ansioso para ver no que vai dar! Mais notícias em breve!

Desejem me sorte!

Removendo plugins instalados como svn:externals no Rails

24/01/08

Se você utiliza plugins no Rails em um projeto versionado com Subversion, provavelmente já deve ter visto que é possível fazer tal instalação utilizando o svn:externals, através do argumento -x.

script/plugin install -x http://code.bitsweat.net/svn/object_transactions/

A diferença é que toda vez que você fizer o checkout de seu projeto, o Subversion irá buscar a última versão disponível no repositório que você adicionou. Isso é uma excelente maneira de deixar o plugin sempre atualizado. Mas e se por algum motivo você não precisa mais do plugin e quer removê-lo?

Você terá que fazer isso através de um comando do Subversion. Vá ao diretório de plugins e execute as linhas abaixo. Isso irá abrir o arquivo com a lista de repositórios externos do seu projeto. Neste exemplo editaremos tal arquivo usando o Vi.

$ cd vendor/plugins
$ svn propedit svn:externals . --editor-cmd vi

Editando o arquivo no Vi

Vá até a linha do repositório e pressione CTRL + → para removê-lo. Para salvar o arquivo, pressione ESC, digite :wq! e, então, pressione Enter. Remova o diretório do plugin com o comando rm -rf object_transactions.

Salvando o arquivo e fechando o editor

Agora, basta fazer o commit de seu projeto!

Recebendo dados do usuário: attr_accessible e attr_protected

26/12/07

O Ruby on Rails permite que você defina os valores dos atributos de um objeto ActiveRecord através dos métodos new e attributes. A esse tipo de atribuição é dado o nome mass assignment. Tal tipo de atribuição facilita muito na hora de instanciar um novo objeto, pois você não precisa fazer a atribuição individualmente. Veja um exemplo.

# the old way
user = User.new
user.login = "rox"
user.email = "rox@example.com"
user.admin = true
 
# the ruby way
user = User.new(:login => "rox", :email => "rox@example.com", :admin => true)

Os mais atentos acabaram de identificar uma enorme falha de segurança, pois posso definir o tipo de um usuário — admin, neste caso — por enviar o atributo admin no método params.

# the "do whatever you want" way
user = User.new(params[:user])

Se você teve um mínimo de preocupação com a segurança de seu aplicativo, deve ter chegado aos métodos attr_protected ou, melhor ainda, attr_accessible. Ambos estipulam quais atributos podem ser definidos através do mass assignment. A grande diferença entre eles é que o método attr_protected informa quais atributos são protegidos (não podem ser definidos), e o segundo trabalha no caminho contrário: você deve informar quais atributos podem ser definidos por mass assignment. Veja exemplos de como utilizar ambos os métodos.

class User < ActiveRecord::Base
  # inform the attributes you want
  # to protect
  attr_protected :admin
end
 
class User < ActiveRecord::Base
  # inform the attributes you want
  # to allow mass assignment
  attr_accessible :name, :login, :email
end

Apesar de ser mais trabalhoso, o método attr_accessible, por ser restritivo, é mais seguro. Eu fico com ele, e você?