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.
Para fazer os testes pararem quando o primeiro teste falhar, basta adicionar a linha:
No seu arquivo .rspec, localizado na raiz do projeto Rails.
Ficando o arquivo da seguinte forma:
Posted in
RSpec at agosto 28th, 2012.
No Comments.
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:
Pronto!
Posted in
Ruby on Rails at julho 16th, 2012.
No Comments.
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.
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.
Quando nós desenvolvemos aplicações usando test-driven development sempre temos que rodar o comando:
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.
Usando o Simple Form é possível prover uma listagem de países.
Algumas vezes é interessante deixar um determinando país em destaque no select.
Para fazer isso basta adicionar a opção “:priority” na montagem do campo.
f.input :country, :priority => [ "Brazil" ]
Mais detalhes em: https://github.com/plataformatec/simple_form.
Posted in
Ruby on Rails at junho 25th, 2012.
No Comments.
Ao invés de toda vez você rodar “rails server” para subir uma aplicação Ruby on Rails, você pode deixar ela rodando por padrão no seu servidor Apache em um endereço por exemplo: http://nome_da_sua_aplicacao
Para isso no terminal:
sudo apt-get install apache2
sudo apt-get install libapache2-mod-passenger
Agora no arquivo /etc/hosts adicione um nome local para a sua aplicação para responder no navegador:
127.0.0.1 localhost nome_da_sua_aplicacao
127.0.1.1 tron
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
No meu caso adicionei nome_da_sua_aplicacao para responder localmente.
Agora será necessário adicionar a configuração do site no Apache, para isso:
sudo touch /etc/apache2/sites-available/nome_da_sua_aplicacao
Depois edite o arquivo acima e adicione o seguinte conteúdo:
ServerAdmin webmaster@localhost
ServerName nome_da_sua_aplicacao
DocumentRoot /var/www/nome_da_sua_aplicacao/public
Options FollowSymLinks
AllowOverride None
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /doc/ "/usr/share/doc/"
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
Onde /var/www/nome_da_sua_aplicacao/public é o caminho da sua aplicação Ruby on Rails, mais exatamente o caminho até o diretório public dela.
E ServerName nome_da_sua_aplicacao é o nome que você deseja acessar via navegador o mesmo nome que configuramos no /etc/hosts.
Agora vamos criar um link simbólico para o site funcionar no Apache:
cd /etc/apache2/sites-enabled
sudo ln -s ../sites-available/nome_da_sua_aplicacao 001-nome_da_sua_aplicacao
Agora é a hora de reiniciar o servidor web Apache para pegar as novas configurações, para isso:
sudo /etc/init.d/apache2 restart
Agora se você abrir a URL http://nome_da_sua_aplicacao no seu navegador já deve ver o seu site rodando.
Posted in
Ruby on Rails at junho 12th, 2012.
No Comments.
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:
- Crie o arquivo: config/preinitializer.rb
- Com o conteúdo abaixo:
require 'rubygems'
begin
gem 'i18n', "~> 0.4.0"
rescue LoadError
# no biggie, optional anyway
end
- 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ê: 
Posted in
Ruby on Rails at maio 24th, 2012.
No Comments.
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: 
Posted in
Ruby on Rails,
Ubuntu at março 1st, 2012.
No Comments.