Arquivo

Textos com Etiquetas ‘Ruby’

[IT Web - Ruby Fundamental] Módulos com mixin

16, janeiro, 2012

Em um post anterior do blog Ruby Fundamental vimos como usar módulos como namespaces. Agora veremos como usar os módulos em Ruby como mixin, misturando os métodos de instância de um módulo em outras classes.

Veja o post completo no blog Ruby Fundamental:
Módulos como mixin

Veja também os outros posts do blog Ruby Fundamental:

Ruby , , , , ,

Algumas fotos da Ruby Conf Brasil 2011

12, novembro, 2011

Daniel Konishi, eu e Fabio Perrella (e Ricardo Bernadelli de pescoçudo lá no fundo)

Palestrando

Palestrando

Palestrantes e organizadores do evento

Na palestra Multitenancy em Rails com Ricardo Bernardelli

Na palestra Multitenancy em Rails com Ricardo Bernardelli

Douglas Campos, Bruno Oliveira e eu assistindo a apresentação de encerramento do Tender Love

Douglas Campos, Bruno Oliveira e eu assistindo a apresentação de encerramento do Tender Love

Todas as fotos foram extraídas do Flickr da Locaweb.

Eventos, Ruby , , ,

RubyConf Brasil 2011: Vídeo e slides da palestra Multitenancy em Rails

7, novembro, 2011

A RubyConf Brasil 2011, a maior conferência com foco em Ruby da América do Sul, aconteceu nos dias 3 e 4 de novembro, com muitas palestras interessantes, networking e discussões sobre Ruby e desenvolvimento de software.

Na palestra Multitenancy em Rails: cortando custos e aumentando capacidade, Ricardo Bernardelli e eu falamos sobre a mudança de arquitetura da WebStore, loja virtual desenvolvida pela equipe de SaaS da Locaweb, onde utilizamos uma opção não tão usual de multitenancy em Rails.

O vídeo da apresentação está disponível aqui, inclusive com sincronia de slides, disponibilizado pela Eventials.

Você também pode visualizar os slides no SlideShare ou fazer download do arquivo PDF.

Meu agradecimento a todos que estiveram presentes na RubyConf acompanhando a palestra ou que assistiram remotamente pela transmissão ao vivo online, e também a todos os feedbacks positivos que recebemos.

Palestrantes da RubyConf Brasil 2011 (por Daniel Cukier)

Palestrantes da RubyConf Brasil 2011 (por Daniel Cukier)

Eventos, Ruby , , , , , ,

[IT Web - Ruby Fundamental] RubyConf New Orleans 2011: vídeos disponíveis

4, novembro, 2011

RubyConf é a conferência internacional oficial de Ruby nos Estados Unidos. Organizada pela Ruby Central, a RubyConf foi fundada em 2001 e é realizada anualmente, sendo o maior evento da comunidade Ruby.

Estão disponíveis nada menos que 48 vídeos da conferência, entre keynotes, palestras e lightning talks.

Veja o post completo no blog Ruby Fundamental:
RubyConf New Orleans 2011: vídeos disponíveis

Veja também os outros posts do blog Ruby Fundamental:

Eventos, Ruby , , , , ,

Porque não gosto de usar “should” nos testes de RSpec

23, outubro, 2011

Desde que li o post RSpec Best Practices de Jared Carroll (post o qual David Chelimsky prefere citar como Good Guidelines) eu prefiro não mais utilizar o termo should para todos os exemplos (testes) de RSpec.

Primeiro que concordo com Jared sobre a redundância da palavra should e como o resultado dos testes ficam mais claros quando rodamos no formato de documentação.

Abaixo dois exemplos (extraídos do post de Jared).

O primeiro usa should:

$ rspec spec/controllers/posts_controller_spec.rb --format documentation

PostsController
  #new
    when not logged in
      should redirect to the sign in page
      should display a message to sign in

Agora eliminando o should e usando o verbo na terceira pessoa:

$ rspec spec/controllers/posts_controller_spec.rb --format documentation

PostsController
  #new
    when not logged in
      redirects to the sign in page
      displays a message to sign in

A segunda razão é a questão gramatical e do sentido dos testes.

O verbo modal should, entre outros significados, pode ser considerado uma obrigação, mas é uma obrigação gentil, cuidadosa, sem muita firmeza.

When not logged in, should redirect to the sign in page.
Quando não logado, deveria redirecionar para a página de login.

Deveria ou deve? Para o teste passar tem que redirecionar para a página de login. Se não redirecionar, o teste falhará. Nessa caso, gramaticalmente, não é melhor usar o verbo modal must, que expressa uma obrigação impreterível?

Então, para ficar simples, uso o verbo na terceira pessoa, evito verbos modais repetitivos e deixo explícito o que o teste está assegurando.

When not logged in, redirects to the sign in page.
Quando não logado, redireciona para a tela de login.

Ruby , ,

[IT Web - Ruby Fundamental] Rocky Mountain Ruby 2011: vídeos disponíveis

9, outubro, 2011

Rocky Mountain Ruby é uma conferência focada na linguagem de programação Ruby, mesclando palestras técnicas, eventos comunitários e atividades ao ar livre.

Estão disponíveis 27 vídeos da conferência, entre keynotes, palestras e lightning talks.

Veja o post completo no blog Ruby Fundamental:
Rocky Mountain Ruby 2011: vídeos disponíveis

Veja também os outros posts do blog Ruby Fundamental:

Eventos, Ruby , , , , ,

[IT Web - Ruby Fundamental] Módulos como namespaces

30, setembro, 2011

Módulos em Ruby são grupos de métodos, constantes e variáveis de classes.

Os módulos não podem ser instanciados e não existe herança de módulos. Uma das maneiras de usar módulos é como namespaces.

Veja o post completo no blog Ruby Fundamental:
Módulos como namespaces

Veja também os outros posts do blog Ruby Fundamental:

Ruby , , , , ,

Irei palestrar na RubyConf Brasil 2011

23, setembro, 2011

A RubyConf Brasil é a maior conferência com foco em Ruby da América do Sul e é comparável em tamanho às maiores conferências de tecnologia no continente.

O evento desse ano acontecerá nos dias 3 e 4 de novembro, no Centro de Convenções Frei Caneca, que fica próximo à avenida Paulista em São Paulo.

Irei palestrar, juntamente com Ricardo Bernardelli, sobre a mudança de arquitetura da WebStore, loja virtual desenvolvida pela equipe de SaaS da Locaweb.

Na palestra Multitenancy em Rails: cortando custos e aumentando capacidade, iremos falar como a escolha de uma opção não tão usual de multitenancy em Rails melhorou a arquitetura da WebStore, que antes possuía 1.000 clientes, distribuídos em 12 servidores Web, e passou a utilizar apenas um servidor com mais 4.000 clientes.

As inscrições para o evento foram abertas ontem, com valor promocional de R$ 150,00 até 27/09/2011, e espera-se mais de 700 participantes, a exemplo do que aconteceu na edição do ano passado.

A programação, lista completa dos participantes e demais informações você tem no site do evento.

Eventos, Ruby , , , , , ,

Gem para cálculo de frete do PayPal Frete Fácil

4, setembro, 2011

O PayPal Frete Fácil é um serviço onde você tem desconto a partir de 30% no valor do frete, em relação ao valor de balcão do SEDEX dos Correios, para vendas feitas pelo PayPal.

PayPal Frete Facil

Você escolhe a transação de venda feita pelo PayPal, paga o frete pelo site, imprime a etiqueta que deve ser colada no pacote das mercadorias e posta em uma agência dos Correios conveniada.

O PayPal disponibiliza um Web Service para fazer o cálculo do PayPal Frete Fácil nos carrinhos de compra de lojas virtuais. Criei a gem paypal-frete-facil que consome esse Web Service.

Abaixo estão todos os detalhes de como instalar e utilizar a gem paypal-frete-facil.

Instalando

Gemfile:
gem 'paypal-frete-facil'

Instalação direta:
$ gem install paypal-frete-facil

Usando

require 'paypal-frete-facil'

frete = PayPal::FreteFacil::Frete.new :cep_origem => "04094-050",
                                       :cep_destino => "90619-900",
                                       :largura => 15,
                                       :altura => 2,
                                       :profundidade => 30,
                                       :peso => 0.3

frete.calcular  # => 13.87
frete.calculate # => 13.87

Log

Por padrão, cada chamada ao Web Service do PayPal Frete Fácil é logada em STDOUT, com nível de log :info, usando a gem LogMe.

Exemplo de log:
I, [2011-08-29T22:00:52.624430 #2186] INFO — : PayPal-Frete-Facil Request:
https://ff.paypal-brasil.com.br/FretesPayPalWS/WSFretesPayPal
<soapenv:Envelope xmlns:soapenv=”http://schemas.xmlsoap.org/soap/envelope/” xmlns:frete=”https://ff.paypal-brasil.com.br/FretesPayPalWS”><soapenv:Header /><soapenv:Body><frete:getPreco><cepOrigem>04094-050</cepOrigem><cepDestino>90619-900</cepDestino><largura>15</largura><altura>2</altura><profundidade>30</profundidade><peso>0.3</peso></frete:getPreco></soapenv:Body></soapenv:Envelope>

I, [2011-08-29T22:00:53.917895 #2186] INFO — : PayPal-Frete-Facil Response:
HTTP/1.1 200 OK
<?xml version=’1.0′ encoding=’UTF-8′?><S:Envelope xmlns:S=”http://schemas.xmlsoap.org/soap/envelope/”><S:Body><ns2:getPrecoResponse xmlns:ns2=”https://ff.paypal-brasil.com.br/FretesPayPalWS”><return>13.873999999999999</return></ns2:getPrecoResponse></S:Body></S:Envelope>

Se você configurar o nível de log como :debug, serão logados também todos os cabeçalhos HTTP da requisição e da resposta:
D, [2011-08-29T22:00:52.624430 #2186] DEBUG — : PayPal-Frete-Facil Request:
https://ff.paypal-brasil.com.br/FretesPayPalWS/WSFretesPayPal
accept: */*
user-agent: Ruby
content-type: text/xml; charset=utf-8
soapaction: https://ff.paypal-brasil.com.br/FretesPayPalWS/WSFretesPayPal/getPreco
<soapenv:Envelope xmlns:soapenv=”http://schemas.xmlsoap.org/soap/envelope/” xmlns:frete=”https://ff.paypal-brasil.com.br/FretesPayPalWS”><soapenv:Header /><soapenv:Body><frete:getPreco><cepOrigem>04094-050</cepOrigem><cepDestino>90619-900</cepDestino><largura>15</largura><altura>2</altura><profundidade>30</profundidade><peso>0.3</peso></frete:getPreco></soapenv:Body></soapenv:Envelope>

D, [2011-08-29T22:00:53.917895 #2186] DEBUG — : PayPal-Frete-Facil Response:
HTTP/1.1 200 OK
date: Tue, 30 Aug 2011 01:00:52 GMT
server: Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/0.9.8e-fips-rhel5 DAV/2 mod_jk/1.2.30
content-length: 271
content-type: text/xml;charset=utf-8
set-cookie: ROUTEID=.2; path=/
connection: close
<?xml version=’1.0′ encoding=’UTF-8′?><S:Envelope xmlns:S=”http://schemas.xmlsoap.org/soap/envelope/”><S:Body><ns2:getPrecoResponse xmlns:ns2=”https://ff.paypal-brasil.com.br/FretesPayPalWS”><return>13.873999999999999</return></ns2:getPrecoResponse></S:Body></S:Envelope>

Para desabilitar o log, mudar o nível do log ou configurar um outro mecanismo de log, use o módulo PayPal::FreteFacil.

PayPal::FreteFacil.configure do |config|
  config.log_enabled = false   # Desabilita o log
  config.log_level = :debug     # Altera o nível do log
  config.logger = Rails.logger  # Usa o logger do Rails
end

Informações adicionais

Maneiras de configurar atributos no construtor de PayPal::FreteFacil::Frete

Com um hash:

frete = PayPal::FreteFacil::Frete.new :cep_origem => "04094-050",
                                       :cep_destino => "90619-900",
                                       :largura => 15,
                                       :altura => 2,
                                       :profundidade => 30,
                                       :peso => 0.3

Com um bloco:

frete = PayPal::FreteFacil::Frete.new do |f|
  f.cep_origem = "04094-050"
  f.cep_destino = "90619-900"
  f.largura = 15
  f.altura = 2
  f.profundidade = 30
  f.peso = 0.3
end
Atributos de PayPal::FreteFacil::Frete
  • String: cep_origem, cep_destino
  • Fixnum: largura, altura, profundidade
  • Float: peso
Código no Github

https://github.com/prodis/paypal-frete-facil

Gem no RubyGems.org

https://rubygems.org/gems/paypal-frete-facil

Ruby , , , , , , , , ,

[IT Web - Ruby Fundamental] Diferenças entre procs e lambdas

28, agosto, 2011

No último post do blog Ruby Fundamental falei sobre procs e lambdas. Agora vamos ver quais as diferenças entre eles.

Um proc se comporta como um bloco. Invocar um proc é semelhante a produzir um bloco. Já um lambda tem o comportamento de um método. Invocar um lambda é como invocar um método.

Veja o post completo no blog Ruby Fundamental:
Diferenças entre procs e lambdas

Veja também os outros posts do blog Ruby Fundamental:

Ruby , , , , ,