{ Wilker-Dev: Blog }
June 1, 2010

Basic Http Auth with Devise to protect entire site for staging versions

Sometimes you need to stage a client site to he can see it, but some clients are a little neurotic about others seeing their sites before the launch, what is an acceptable behavior. In one job that Im doing I dropped in this case and need to protect entire site from access. It will be easier to do with a clean Rails installation, but Im using Devise, and Devise do some jobs on basic auth, so, it don't play nice at start... The solution was create an extra strategy for Warden, in order to make it do the authentication, after a lot of research and code read I reached a solution, and I'm here sharing it with you :)

At first you need to create the strategy and configure Devise:

After you need to configure your application controller:

And it will make your entire site to be protected with http basic auth.

To make it works I first created a separated scope for this login, otherwise the devise will go crazy, and also I need to created that FakeModel class, because devise always try to serialize/deserialize the record save, to make a record compatible, just need to have an "id" method on instance, and a "find" method in class.

So, if you need to protected your site for staging, this solution will make everyone happy :)

Filed under // auth  basic  development  devise  http  rails  ruby  warden  // 0 Comments
May 7, 2010

[Rails Plugin] Mongoid Taggable: criando tags para documentos mongoid

Após certa luta eu ontem criei um novo plugin para Rails, o mongoid_taggable. Traduzi o meu README pra BR aqui:

Mongoid Taggable

Mongoid Taggable provê uma maneira simples para criar documentos com tags.

Instalação

Basta apenas instala-lo como um plugin para Rails:

script/plugin install git://github.com/wilkerlucio/mongoid_taggable.git

Uso Básico

Para ativar as tags em um documento basta incluir o módulo Mongoid::Taggable:

No seu formulário:

Nesse caso, seu campo de texto deve receber uma lista de tags separadas por vírgula (abaixo nesse documento você verá como trocar o separador padrão.

Então seu documento terá as propriedades tags e tags_array. A propriedades tags você deve usar como uma string com as tags separadas por vírgula, o tags_array é um array de tags, essas duas propriedades são sincronizadas automaticamente.

Indexando Tags

Essa biblioteca irá criar automaticamente um índice das tags após salvar o documento, esse índice é bastante útil para ter uma lista de todas as tags usadas nos documentos ou para criar um tag cloud. Veja o seguinte exemplo para entender como usar isso:

Se você não for usar esse recurso, é bom desativar para melhorar a performance:

Mudando o separador padrão

Para alterar o separador padrão você precisa apenas chamar o método tags_separator na sua classe:

Filed under // development  mongoid  plugin  rails  ruby  tags  // 0 Comments
April 26, 2010

Nunca mais toque no arquivo /etc/hosts para definir aplicações locais

Quem usa um servidor local para desenvolver (nginx, apache ou outro...) deve passar pela etapa de editar o arquivo /etc/hosts para definir um ip local para a aplicação. Isso é especialmente chato quando você precisa desenvolver aplicações que usam subdominios, porque voce tem que definir os subdominios de teste 1 por 1 ja que o arquivo hosts nao suporta wildcards.
Hoje descobri uma solução bem interessante para isso, que é criar um arquivo de configuração de proxy.
No meu caso eu criei no meu home o arquivo proxy.pac:
Com ele eu estou dizendo que sempre que um dominio terminar com .local, ele deve ser usado no localhost (eu sempre uso .local para aplicações internas, você pode modificar se preferir).
Para utilizar esse arquivo no Mac eu fui em Settings/Network/Advanced/Proxies/Automatic Proxy Configuration e mandei ele utilizar esse arquivo (lembre também de remover o *.local dos hosts bypass na caixa de texto quem tem logo abaixo, se o *.local estiver presente).
Com isso agora tudo que termina com .local vai para local, nunca mais preciso mexer no /etc/hosts
Não sei se tem como aplicar esse arquivo a nivel de sistema em outros SO, mas é possivel utiliza-lo direto no Firefox se você nao tiver a opção de aplicar a nivel de sistema.
detalhe: no caso do mac, se lembre de ir nas configurações do firefox e mandar ele utilizar o proxy do sistema, senão ele simplesmente vai passar direto, Safari e Chrome não exigem nenhuma configuração extra.

 

Filed under // rails  unix  // 0 Comments
March 10, 2010

Harmony - Acesse um ambiente JavaScript e DOM em Ruby

O Harmony, desenvolvido por Martin Aumont, é uma nova DSL Ruby para executar código JavaScript e que usa DOM a partir de aplicativos Ruby. Por que isso é legal? Porque isso possibilita a criação de testes unitários para o Javascript utilizado em suas aplicações em Ruby, ou seja, tudo pode ser testado com um único conjunto de testes!

Falando assim parece que o Harmony é uma biblioteca incrivelmente complexa, mas na verdade ela encapsula outras bibliotecas, como a Johnson, que oferece acesso ao interpretador de Javascript da Mozilla Spidermonkey no Ruby, e env.js, um ambiente DOM recriado em JavaScript.

Veja o "Hello World" do Harmony:

harmony2.png

HolyGrail - O plugin para Rails

Se você está usando Rails, o HolyGrail é o plugin que leva o leva o poder do Harmony às suas aplicações (até o momento só para testes funcionais). Veja alguns exemplos com o HolyGrail:

holygrailtest.png

Biblioteca que parece muito boa, espero começar alguns testes com a mesma em breve :)

Filed under // development  javascript  rails  ruby  test  // 1 Comment
November 5, 2009

Template para Rails

Bom, como eu comecei a desenvolver mais com rails ultimamente eu decidi criar um template de inicialização para minhas apps.

Os templates do Rails podem fazer para você várias configurações iniciais para sua aplicação (configurar gems, iniciar repositório git...).

Abaixo segue o template que eu criei:

Para quem quizer utilizar para testar basta executar o seguinte comando:

rails NOME_APP -m http://gist.github.com/raw/227656/f64ca46032c6e83f92000c9c33ce078b65beafdd/rails_template.rb

Filed under // rails  // 0 Comments
November 2, 2009

Rails no Ubuntu 9.10 (usando o mysql do xampp)

Bom, estive tendo alguns problemas para instalar as coisas aqui no Ubuntu, mas consegui resolver, segue o passo a passo de comandos para ter tudo instalado e pegando:

1. Instalar o XAMPP e o XAMPP development package (instrucoes no site do xampp)
2. Instalar o Ruby com Development Package:
sudo apt-get install ruby1.8 ruby1.8-dev rubygems1.8 irb rake libopenssl-ruby1.8

3. instalar o rails
sudo gem install rails

4. rodar o xampp
sudo /opt/lampp/lampp start

5. instalar o mysql
sudo gem install mysql -- --with-mysql-dir=/opt/lampp/ --with-mysql-lib=/opt/lampp/lib/mysql --with-mysql-include=/opt/lampp/include/mysql

6. configurar link para socket
sudo mkdir /var/run/mysqld
sudo ln -s /opt/lampp/var/mysql/mysql.sock /var/run/mysqld/mysqld.sock

É isso, com isso rolo tudo certo aqui :)

UPDATE:

Eu percebi que o link do mysqlsock é perdido sempre que o sistema é reiniciado.
Então eu criei um script para iniciar o xampp e criar o link automaticamente na inicialização:

crie o arquivo abaixo:

/usr/bin/lamppstart
#! /bin/bash

/opt/lampp/lampp start
mkdir /var/run/mysqld
ln -s /opt/lampp/var/mysql/mysql.sock /var/run/mysqld/mysqld.sock

após criar o script é nescessário incluí-lo na inicialização do sistema, para isso adicione a linha para executa-lo dentro do arquivo /etc/rc.local, o meu arquivo ficou assim:

/etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

/usr/bin/lamppstart

exit 0

Filed under // mysql  rails  ruby  ubuntu  xampp  // 0 Comments
October 9, 2009

Calendar Iterator, criando calendários para Rails

Eu estava aqui trabalhando num projeto em Rails, e surgiu a nescessidade de usar um calendário no site. Bom, como tudo no Rails eu decidi procurar algum plugin para isso, e encontrei o Calendar Helper, foi uma surpresa pois esse foi o único que eu encontrei, tentei utiliza-lo, precisei fazer algumas modificações no mesmo, mas fui precisando de mais e mais modificações, até eu decidir que esse plugin não era o correto pra mim, eu precisava de algo mais customizavel e simples. Então decidi criar o meu próprio, o Calendar Iterator.

A idéia é bastante simples, no lugar gerar o calendário inteiro (tabela, headers...) eu decidi simplesmente gerar os dias pertinentes ao calendário do mês atual, dessa forma o resto é facilmente customizável.

Veja alguns exemplos de uso:

# criando um calendário simples<table>  <tbody>    <% calendar_iterate do |d| %>      <%= d %>    <% end %>  </tbody></table># usando links nos dias do calendário<table>  <tbody>    <% calendar_iterate do |d| %>      <%= link_to d, events_path(:day => d.mday) %>    <% end %>  </tbody></table># trocando a data do calendário (se você não preencher algum parâmetro, o ano/mês atual serão utilizados)<table>  <tbody>    <% calendar_iterate :month => 6, :year => 2009 do |d| %>      <%= d %>    <% end %>  </tbody></table># usando uma versão totalmente customizada das tags <tr> e <td><table>  <tbody>    <% calendar_iterate.each_week do |w| %>    <tr class="some_class">      <% w.each do |d| %>        <td class="cell_class"><%= d %></td>      <% end %>    </tr>    <% end %>  </tbody></table>

Então é isso, o código do projeto está no Github, e pode ser visto aqui.

Para instalar o Calendar Iterator na sua aplicação execute o seguinte comando:

script/plugin install git://github.com/wilkerlucio/calendar_iterator.git

Filed under // plugin  rails  // 0 Comments