RSpec forma de testar escopos do model

Uma forma simples de testar escopos no model é a seguintes:

O Model:

class User < ActiveRecord::Base
  # The scopes for search
  scope :signed, where("sign_in_count > 0")
end

O Teste RSpec:

# encoding: utf-8
require 'spec_helper'
 
describe User do
  describe "scopes" do
    it "should returns the signed users" do
      User.signed.to_sql.should == User.where("sign_in_count > 0").to_sql
    end
  end
end
Posted in RSpec at setembro 26th, 2012. 1 Comment.

Ruby gerando números randômicos em um range

Muito simples:

<%= rand(1..5) %>
Posted in Ruby at agosto 2nd, 2012. No Comments.

Curitiba vs Rio de Janeiro na Tecnologia

Curitiba não tem muitos desenvolvedores em Ruby on Rails.
E o cenário de inovação e startups lá está caminhando, mas não temos muitas empresas surgindo por lá.

Em Curitiba eu já estudei nas seguintes universidades: Universidade Positivo, UTFPR e PUCPR. Fazendo graduação e pós-graduação nessas universidades, eu sempre tive uma crítica muito forte a respeito das universidades em Curitiba, elas preparam os alunos para as grandes corporações como HSBC, GLT, GVT e outras, que usam tecnologias como Java e C#, mas raramente falam de tecnologias emergentes como Ruby, Python e outras, e raramente preparam os alunos para inovação e empreendedorismo tecnológico. Claro que existem pós-graduações em Empreendedorismo tecnológico e inovação tecnológica.

Outro fator em Curitiba é a questão de salários, os salários em Curitiba são medianos na área de tecnologia, por exemplo um ótimo desenvolvedor no regime CLT deve receber em torno de R$ 3.500,00 e se for no regime PJ em torno de R$ 5.000,00. Esse salário não é atrativo para um desenvolvedor com excelência, então é comum você ver os desenvolvedores migrando pra outros polos como São Paulo, Rio de Janeiro e outros muito bons indo para São Francisco.

Outro fator importante é que a cidade precisa ter eventos de tecnologia, é necessário ter essa cultura, pessoas e empresas incentivando esses eventos, em Curitiba eles caminham de forma muito lenta.

É importante é que o lugar tenha a cultura nerds e tenha interação entre essas pessoas, porque são essas pessoas que vão construir o cenário local e influenciar outras pessoas.

Por exemplo eu trabalhei durante quase 2 anos na Siemens Enterprise Communications, uma grande multinacional em Curitiba, acabei indo para uma multinacional pelo fato de não ter nenhuma outra empresa que eu ache-se interessante de trabalhar em Curitiba, que tivesse um ambiente inovador, dinâmico, com pessoas transpirando tecnologia e usando tecnologias interessantes. Curitiba está pobre de empresas com ambiente legal e projetos interessantes, inovando e usando tecnologias emergentes.

Eu morei por 27 anos em Curitiba, e faz 1 mês que eu me mudei para o Rio de Janeiro.
O Rio de Janeiro está vivendo uma bolha de internet e startups, está se tornando um polo muito forte de desenvolvimento web, tem muita gente boa aqui, do Brasil inteiro.

Tem muitos eventos de tecnologia acontecendo no Rio de Janeiro, tem muitos investidores também, e várias startups estão surgindo e aqui, e muitas outras estão migrando pra cá. Por exemplo o Peixe Urbano.

Comparando Curitiba e o Rio de Janeiro, eu diria que:

  • Curitiba equivale a uma pessoa de 40 anos, que tem família, que busca um emprego estável e não quer arriscar; Perfil geração X.
  • Rio de Janeiro equivale a uma pessoa de 20 anos, que não tem família, que não tem medo de arriscar, entende que o risco faz parte da vida, e acha isso parte da diversão, transpira novidades, e de alguma forma quer fazer a diferença e se destacar; Quer trabalhar de bermuda e camiseta, quer liberdade para criar e desenvolver o seu trabalho. Perfil geração Y.

Essa é uma opinião extremamente pessoal, baseada na minha experiência de vida em Curitiba.

Posted in Inovação, Reflexões at julho 17th, 2012. 10 Comments.

Ruby on Rails 3 como Traduzir o nome do Model

No YML de tradução, por exemplo:

pt:
  activerecord:
    models:
      user: Usuário

Nós temos no arquivo acima a tradução do nome do model para o locale “pt”.

Para obter o nome do model traduzido:

User.model_name.human

Pronto!

Posted in Ruby on Rails at julho 16th, 2012. No Comments.

Ruby on Rails problemas para rodar migrações com acentos e caracteres especiais

Se você criar uma migração para popular dados no banco de dados e as strings contiverem acentos ou caracteres especiais é bem provavelmente que você vai ter alguns erros de parse no código Ruby:

Por exemplo:

class PopulateTests < ActiveRecord::Migration
  def up
    data = [['Saúde', 'Bla bla bla'], ['Cabeça', 'Ble ble ble'], ['João', 'Belipx Blopx']]
    data.each do |item|
      test = Test.create(:name => item[0])
      test.save
    end
  end
 
  def down
    Test.delete_all
  end
end

Normalmente essa migração vai dar problema para rodar, devido aos caracteres de acentos e outros.

Para resolver isso bastar colocar no começo da sua migração: #encoding: UTF-8
Ficando o arquivo assim:

#encoding: UTF-8
 
class PopulateTests < ActiveRecord::Migration
  def up
    data = [['Saúde', 'Bla bla bla'], ['Cabeça', 'Ble ble ble'], ['João', 'Belipx Blopx']]
    data.each do |item|
      test = Test.create(:name => item[0])
      test.save
    end
  end
 
  def down
    Test.delete_all
  end
end
Posted in Ruby on Rails at julho 5th, 2012. No Comments.

Ruby on Rails RSpec testando associações

A forma mais elegante que eu encontrei para testar associações no rspec é a seguinte:

describe Group do
      it { should belong_to(:supergroup) }
      it { should have_many(:users) }
end

Utilizando a gem shoulda-matchers: https://github.com/thoughtbot/shoulda-matchers/.

Posted in RSpec, Ruby on Rails at julho 4th, 2012. 1 Comment.

Ruby on Rails Guard

Quando nós desenvolvemos aplicações usando test-driven development sempre temos que rodar o comando:

rake spec

mas isso é um pouco chato e trabalhoso. Para facilitar a nossa vida existe o “Guard“, a ideia do “Guard” e rodar os testes automaticamente toda vez que algum arquivo associado ao teste for alterado.

O “Guard” pode ficar monitorando vários tipos de arquivos diferentes, desde o rspec, até as alterações de html e css no site. Uma outra extensão interessante do “Guard” é o “livereload“, ele dá um refresh no browser automaticamente toda vez que algum arquivo relacionado com a view é alterado.

Para instalar o Guard, no Gemfile adicionar:

group :development, :test do
  # ...
  gem 'rb-fsevent', :require => false if RUBY_PLATFORM =~ /darwin/i
  gem 'guard-rspec'
  gem 'guard-livereload'
  gem 'yajl-ruby'
  gem 'rack-livereload'
end

Depois rodar no terminal:

bundle
guard init rspec
guard init livereload
guard

Na raiz do projeto será gerado o arquivo Guardfile, com as configurações do Guard e todos os arquivos que são monitorados, algo como isso:

guard 'livereload' do
  watch(%r{app/.+\.(erb|haml)})
  watch(%r{app/helpers/.+\.rb})
  watch(%r{public/.+\.(css|js|html)})
  watch(%r{config/locales/.+\.yml})
end
 
guard 'rspec', :version => 2 do
  watch(%r{^spec/.+_spec\.rb})
  watch(%r{^lib/(.+)\.rb})     { |m| "spec/lib/#{m[1]}_spec.rb" }
  watch('spec/spec_helper.rb') { "spec" }
 
  # Rails example
  watch('spec/spec_helper.rb')                       { "spec" }
  watch('config/routes.rb')                          { "spec/routing" }
  watch('app/controllers/application_controller.rb') { "spec/controllers" }
  watch(%r{^spec/.+_spec\.rb})
  watch(%r{^app/(.+)\.rb})                           { |m| "spec/#{m[1]}_spec.rb" }
  watch(%r{^lib/(.+)\.rb})                           { |m| "spec/lib/#{m[1]}_spec.rb" }
  watch(%r{^app/controllers/(.+)_(controller)\.rb})  { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/requests/#{m[1]}_spec.rb"] }
  watch(%r{^app/views/(.+)/})                        { |m| "spec/requests/#{m[1]}_spec.rb" }
end

Para configurar o livereload, adicione no arquivo: config/environments/development.rb

MyApp::Application.configure do
  config.middleware.insert_before(Rack::Lock, Rack::LiveReload)
 
  # ...or, change some options...
 
  config.middleware.insert_before(
    Rack::Lock, Rack::LiveReload,
    :min_delay => 500,
    :max_delay => 10000,
    :port => 56789,
    :host => 'localhost:3000',
    :ignore => [ %r{dont/modify\.html$} ]
  )
end

Para o livereload (http://livereload.com/) funcionar é necessário também instalar uma extensão no browser, nesse exemplo no Firefox:

Você pode obter as extensões aqui: http://feedback.livereload.com/knowledgebase/articles/86242-how-do-i-install-and-use-the-browser-extensions-.

Posted in Ruby on Rails at julho 4th, 2012. No Comments.

Ruby on Rails mensagens de erro: {{attribute}} {{message}}

Você provavelmente vê essas mensagens de erro quando roda Rails 2.3.8 ou mais antigo no mesmo servidor com o novo Rails 3 para cima.

Para arrumar isso existe 2 possíveis soluções:

Solução 1:

  1. Crie o arquivo: config/preinitializer.rb
  2. Com o conteúdo abaixo:
    require 'rubygems'
    begin
      gem 'i18n', "~> 0.4.0"
    rescue LoadError
      # no biggie, optional anyway
    end
  3. Reinicie o servidor web

Solução 2:

No terminal:

gem uninstall i18n
gem install i18n -v 0.4.0

Por favor recomende-me se esse post ajudou você: Recommend Me

Posted in Ruby on Rails at maio 24th, 2012. No Comments.

How to resolve “Could not find a JavaScript runtime” with Ruby on Rails App

If you tried to start Rails server and got this error:

/usr/lib/ruby/gems/1.8/gems/execjs-1.3.0/lib/execjs/runtimes.rb:50:in `autodetect': Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)

In Ubuntu, you can fix it installing node.js:

sudo apt-get install python-software-properties
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs
sudo apt-get install nodejs-dev

If you have other OS please look here: https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager

After you should starting Rails server with successful.

Please recommend me if this post help you: Recommend Me

Posted in Ruby on Rails, Ubuntu at março 1st, 2012. No Comments.

Ruby on Rails internacionalizando / localizando views

O Rails 2.3 introduziu uma forma de internacionalizar / localizar suas views.

Por exemplo, nós temos a view: managers/mailer/reset_password_instructions.html.erb.
Você pode apagar esse arquivo ou renomear e criar templates de acordo com os idiomas que você tem disponível na sua aplicação, como:

managers/mailer/reset_password_instructions.en.html.erb e colocar o conteúdo de acordo com o idioma:

<p>Hello <%= @resource.email %>!</p>
 
<p>Someone has requested a link to change your password, and you can do this through the link below.</p>
 
<p><%= link_to 'Change my password', edit_password_url(@resource, :reset_password_token => @resource.reset_password_token) %></p>
 
<p>If you didn't request this, please ignore this email.</p>
<p>Your password won't change until you access the link above and create a new one.</p>

e

managers/mailer/reset_password_intructions.pt-BR.html.erb e colocar o conteúdo de acordo com o idioma:

<p>Olá <%= @resource.email %>!</p>
 
<p>Alguém pediu um link para alterar sua senha, e você pode fazer isso através do link abaixo.</p>
 
<p><%= link_to 'Alterar minha senha', edit_password_url(@resource, :reset_password_token => @resource.reset_password_token) %></p>
 
<p>Se você não solicitou, por favor ignore este e-mail.</p>
<p>Sua senha não será alterada até que você acessar o link acima e criar uma nova.</p>

O Rails utiliza a view de acordo com o idioma definido no momento.

Posted in Ruby on Rails at maio 5th, 2011. 1 Comment.
 Assinar RSS Feed