Depois eu leio

Refatorando arquivos de configuração

Para reduzir a quantidade de linhas repetidas em arquivos yml, é possível reutilizar blocos. Por exemplo, este arquivo de configuração padrão...

development:
  adapter: mysql
  database: my_project_development
  username: root
  password: 123
 
test:
  adapter: mysql
  database: my_project_test
  username: root
  password: 123
 
production:
  adapter: mysql
  database: my_project_production
  username: root
  password: 123

...pode ser refatorado assim:

shared: &shared
  adapter: mysql
  username: root
  password: 123
 
development:
  <<: *shared
  database: my_project_development
 
test:
  <<: *shared
  database: my_project_test
 
production:
  <<: *shared
  database: my_project_production
 
No comments

Pesquisar e alterar um valor no Hash

Esses dias precisei procurar e alterar um valor específico num Hash, por exemplo:

 
my_hash = {:key1 => "value1", :key2 => "value2", [{:key3 => "target_value"}]}
 

Como a classe Hash não oferece busca recursiva por padrão, podemos abri-la e adicionar nosso próprio método.

 
class Hash
  def swap_value(target_value, new_value)
    self.each do |k, v|
      case v
        when String
          self[k] = new_value if v == target_value
        when Array
          v.each {|item| item.swap_value(target_value, new_value) }
        when Hash
          v.swap_value(target_value, new_value)
        end
    end
  end
end
 

É isso, agora a classe Hash tem um método para find and replace recursivo.

 
my_hash.swap_value("target_value", "my_new_value")
 
No comments

I18N + datetime_select = erro “can’t convert Symbol into String”

Não acontece se especificar a ordem:

<%= f.datetime_select :date_of_birth, :o rder => [:year, :month, :day] %>

No comments

Rake temperamental com Mysql no Vista

Configurar o Rails pra rodar no Windows Vista não foi de primeira. Depois de uma briga com o RubyGems porque não tinha configurado a variável de ambiente GEM_PATH, o rake que ficou temperamental e sempre dava a seguinte mensagem:

rake aborted!
Mysql::Error: Commands out of sync; you can't run this command now: SHOW TABLES

Pra corrigir: precisa adicionar ao diretório C:\ruby\bin a DLL libmysql.dll. Achei a resposta aqui, e pra minha sorte eu também tinha o Wamp instalado com uma versão da DLL.

Ctrl+C –> Ctrl+V, rake feliz.

No comments