Você ama a Ruby?

Mostre ao mundo sua paixão pela Ruby, começando com a capa do Facebook.

Mostrando postagens com marcador ruby on rails. Mostrar todas as postagens
Mostrando postagens com marcador ruby on rails. Mostrar todas as postagens

sexta-feira, 19 de julho de 2013

Rails: Carregando constantes automaticamente

Postado por DoctorRu (Will)

Em outro post, de nome bem sugestivo Definindo método Initialize no controller sem destruir o layout expliquei como criar variáveis no método initialize sem comprometer o layout utilizando before_filter, aqui apresento uma maneira alternativa e mais recomendada para definir préviamente as constantes que venham a ser utilizadas em um projeto.

Arquivos criados no diretório initializers são carregados com as as outras configurações do Rails quando seu projeto é acessado no servidor, um ótimo lugar para definição de constantes.

Crie um arquivo com o nome desejado (irei utilizar site.rb) dentro do diretório initializers do seu projeto, como: raiz do projeto/config/initializers/site.rb e inclua as seguintes linhas:
#encoding:UTF-8
module Site

  CONFIG = {
    header:   "http://rubydoit.blogspot.com",
    footer:   "11 5555-5555 / 11 5555-5556 - São Paulo - Brasil"
  }

end
Acima foi criado um hash de nome CONFIG e dentro dele foram atribuídos chaves e valores para utilização dentro do seu código, como teste vou acessar o console do rails em modo sandbox (recomendando para testes pois todas as alterações sofrem rollback quando saímos do console).

Lembrando que é necessário especificar o namespace utilizando :: entre o nome do módulo e o nome do hash!
$ rails c --sandbox
Loading development environment in sandbox (Rails 3.2.13)
Any modifications you make will be rolled back on exit

irb(main):001:0> cabecalho = Site::CONFIG[:header]
=> "http://rubydoit.blogspot.com"

irb(main):002:0> rodape = Site::CONFIG[:footer]
=> "11 5555-5555 / 11 5555-5556 - São Paulo - Brasil"

Observação: Lembre-se de carregar o console a partir do diretório raiz do seu projeto.

Este post foi escrito ao som de Ibrahim Ferrer - Guaguanco callejero

domingo, 12 de maio de 2013

Rails: Definindo método Initialize no controller sem destruir o layout

Postado por DoctorRu (Will)

Normalmente na Ruby definimos o método initialize dentro de uma classe para formatar a passagem de parâmetros ao instanciar um novo objeto e também atribuir valores a variáveis.

Porém na Ruby on rails se utilizamos o método initialize dentro de um arquivo controller ocorre uma sobreescrita neste método que ja está pré definido, um dos problemas gerados ao tentar definir este método é que os layouts não são executados e nenhuma mensagem de erro específica é gerada.

Isso pode ser contornado de duas maneiras diferentes.

A primeira é logo após você definir suas variavéis efetuar a chamada ao método initialize da classe original através do super.
class MyClassController < ApplicationController

  layout 'myLayout'

  def initialize

    @var1 = val1
    @var2 = val2
    ...
  
    super

  end
end
ou utilize a segunda maneira com before_filter, esta instrução chamará automaticamente o método que você definir antes que qualquer outro método seja executado, funcionando normalmente como o initialize dentro de uma classe na Ruby.
class MyClassController < ApplicationController

  layout 'myLayout'

  before_filter :my_init_method

  def my_init_method

    @var1 = val1
    @var2 = val2
    ...

  end
end
Este post foi escrito ao som de Simple Minds - Don't You (Forget About Me)

sexta-feira, 10 de maio de 2013

Gerando diagramas de classes no Ruby on Rails com o Railroady e Graphviz

Postado por DoctorRu (Will)

Entendeu ou quer que eu desenhe?

Muitas vezes o desenho ajuda sim! Principalmente quando falamos de diagramas de tabelas do banco de dados ou das classes no Ruby on Rails.

O ideal é desenhar os diagramas antes de começar a codificar, mas se o projeto não foi documentado e você pega o bonde andando a chave pode ser a engenharia reversa para entender parte da coisa.

Utilizando o Railroady em conjunto com o Graphviz iremos fazer isso, atenção é Railroady com Y no final, essa versão roda na versão 1.9 da Ruby e na 3.2 do Rails.

Primeiro instale a gem railroady:
gem install railroady
Agora baixe o Graphviz em http://www.graphviz.org/Download..php

Após instalar é preciso adicionar o diretório bin do Graphviz ao path do seu sistema operacional, no windows proceda da seguinte maneira, abra: Control Panel\System and Security\System então clique em Environment Variables, selecione Path, clique em Edit e adicione o path do diretório bin da instalação que você acabou de fazer do Graphviz ao final da linha em Variable value, finalize a linha com ";"

































Agora escolha o diretório root de qualquer projeto do Rails e digite:
railroady -ilamM | dot -Tjpg > diagramas_dot.jpg

O comando acima é divido em duas partes, separadas por |, a primeira são os parâmetros do railroady e a segunda são os parâmetros do Graphviz (que é responsável por gerar a imagem.)

No Railroady você obrigatoriamente deve utilizar um destes parâmetros:
-C, -M, -A, respectivamente: Class, Model ou Legenda, os outros parâmetros são opcionais, utilize -h isoladamente para ver todos os disponíveis.

Existem diversos parâmetros que podem ser especificados no Graphiviz, então consulte a documentação, que é vasta, no site do mesmo http://www.graphviz.org/Documentation.php, o parâmetro mais utilizado é o do tipo de mapeamento, algumas sugestões para este são: dot, fdp, neato, osage, sfdp e twopi, sendo o dot, na minha opinião o mais legível, abaixo o exemplo de cada um destes.


dot

fdp (é sério)

neato

osage

sfdp

twopi

O outro parâmetro -T<formato de arquivo> especifica qual o tipo de imagem a ser gerada: jpg, svg, etc, consulte a doc para ver todos os disponíveis, não esqueça de adicionar a extensão correta no nome do arquivo.

Se você encontrar uma combinação bacana de parâmetros para o Graphviz, deixe um comentário com eles!


Esse post foi escrito ao som de Billy Idol - Rat race

quinta-feira, 9 de maio de 2013

Editando arquivos .rb e .html.erb no Dreamweaver

Postado por DoctorRu (Will)

Ok, macho que é macho edita código com Copy Con no prompt, mas quando se trata de editar formulários ou ajustar layout, um editor visual ajuda muito, ainda mais se você trabalha em parceria com um web designer e quer facilitar a vida do próximo.

Originalmente o Dreamweaver que é um dos softwares preferidos dos web designers não reconhece os arquivos da Ruby e da Ruby on Rails (sim eu me refiro a Ruby no feminino, veja o primeiro post do blog para entender o porque) além de não habilitar a syntax highlight pra os mesmos.

Para reconhecer os arquivos basta editar o arquivo Extensions.txt e adicionar a seguinte linha:

RB, ERB, HTML.ERB:Ruby and on Rails

No windows existem duas copias do arquivo Extensions.txt, edite a cópia que encontra-se no diretório de usuário. O arquivo está localizado em um path parecido com este:

C:\Users\<NOME DO USUÁRIO>\AppData\Roaming\Adobe\Dreamweaver CS6\en_US\Configuration

Para habilitar a syntax highlight abra o arquivo  MMDocumentTypes.xml, que está aproximadamente em:
 
C:\Users\<NOME DO USUÁRIO>\AppData\Roaming\Adobe\Dreamweaver CS6\en_US\Configuration\DocumentTypes

Procure a seguinte linha:

<documenttype id="ASP-JS" servermodel="ASP JavaScript" internaltype="Dynamic" winfileextension="asp" macfileextension="asp" file="Default_js.asp" writebyteordermark="false" mimetype="text/html">

Altere-a adicionando as extensões .rb, .erb e .html.erb

<documenttype id="ASP-JS" servermodel="ASP JavaScript" internaltype="Dynamic" winfileextension="asp,rb,erb,html.erb" macfileextension="asp" file="Default_js.asp" writebyteordermark="false" mimetype="text/html">

Essa é uma solução improvisada que utiliza as mesmas cores das páginas .asp 

Esse post foi criado ao som de Gorillaz - New Genious

sábado, 4 de maio de 2013

Ativando e desativando a saída do equivalente SQL nas instruções do ActiveRecord

Postado por DoctorRu (Will)

O ActiveRecord permite que as queries sejam escritas de maneira mais curtas e legíveis do que da maneira convencional.

Quando trabalhamos diretamente no console do Rails para cada instrução do ActiveRecord é exibda a query equivalente em SQL.

Para desabilitar esse print do SQL basta setar dentro do próprio console o log para nil


Ao executar:
Subject.find_by_name("First Subject")

É exibido o SQL equivalente:
Subject Load (1.0ms)  SELECT `subjects`.* FROM `subjects` WHERE `subjects`.`name` = 'First Subject' LIMIT 1

Retorno da query:
Subject id: 1, name: "First Subject", position: nil, visible: true, created_at: "2013-05-04 14:26:31", updated_at: "2013-05-04 14:26:31"

Para desativar o print SQL digite no console:
ActiveRecord::Base.logger = nil

Para reativar o print SQL digite no console:
ActiveRecord::Base.logger = Logger.new(STDOUT)

Ao reativar o log serão exibidos outros parâmetros de configuração.

Removendo códigos Ascii do console no Rails

Postado por DoctorRu (Will)

Se você utiliza o Rails no Windows e está tendo problema com caracteres estranhos como ←[1m←[36m ou apenas quer desabilitar as cores no terminal no linux acesse o arquivo \config\application.rb e antes do end da classe Application < Rails::Application adicione as seguintes linhas.

# Control ascii colors in console
config.colorize_logging = false

Problema :

Com a adição das duas linhas o final do arquivo applications.rb ficará assim:
    # Enable the asset pipeline
    config.assets.enabled = true

    # Version of your assets, change this if you want to expire all your assets
    config.assets.version = '1.0'

    # Enable / disable colors in rails console
    config.colorize_logging = false
  end
end

Console no Rails

Postado por DoctorRu (Will)

Tentando acessar o console do Ruby on Rails e nada acontecendo?
Bem, consultando o help do rails a opção console não aparece na lista, nada de
"-console" ou "-c" e agora?


Essa opção só está disponível se você estiver no diretório raiz de qualquer projeto!
Então certifique-se de digitar "rails console" no lugar certo!