Upload
frevo-on-rails
View
6
Download
1
Embed Size (px)
DESCRIPTION
Citation preview
INTRODUÇÃO A RUBY ERUBY ON RAILS
Ruby.new
FREVO ON RAILSGRUPO DE USUÁRIOS RUBY/RAILS DE PERNAMBUCO
Friday, December 18, 2009
FREVO ON RAILS
Por que Rails mesmo?
• Framework da web 2.0
• Uso crescente desde 2006
• Usado em websites importantes
• Twitter Stay Connected OR What are you doing?
• Yellow Pages Find it locally.
• Scribd Books, presentations and more.
• Usado em website desimportantes
Friday, December 18, 2009
FREVO ON RAILS
Por que Rails mesmo?
ou simplesmente
por que é divertido!
• Desenvolver aplicações web é muito trabalhoso
• HTML, CSS, Javascript, AJAX, XML…
• Rails ajuda a tornar o processo menos penoso
Friday, December 18, 2009
FREVO ON RAILS
RUBY ON RAILS
Friday, December 18, 2009
FREVO ON RAILS
Mais uma linguagem?
Ruby is a dynamic programming language with a complex but expressive grammar and a core class library with a rich and powerful API. Ruby draws inspiration from Lisp, Smalltalk, and Perl, but uses a grammar that is easy for C and JavaTM programmers to learn. Ruby is a pure object-oriented language, but it is also suitable for procedural and functional programming styles. It includes powerful metaprogramming capabilities and can be used to create domain-specific languages or DSLs.
“
”— The Ruby Programming Language, David Flanagan
Friday, December 18, 2009
FREVO ON RAILS
Mais uma linguagem?
Ruby is designed to make programmers happy.
• Yukihiro Matsumoto (1995)
• Versão atual 1.9.1-p376
• Linguagem Interpretada = Lenta
• Duck typing
“If it walks like a duck and quacks like a duck, it must be a duck”
Friday, December 18, 2009
FREVO ON RAILS
Básico
• Declaração de variável local
nome_grupo = “Frevo on Rails”
• Chamada de método
“Frevo on Rails”.upcasenome_grupo.sub(“Frevo”, “Ruby”)
• Impressão
puts “Frevo on Rails”puts nome_grupo
Friday, December 18, 2009
FREVO ON RAILS
Básico
• Declaração e uso de “funções”
def repetir(str)puts str * 3
endrepetir(“Frevo”)# Retornando valoresdef repetir(str)
return str * 3endrep = repetir(“Frevo”)puts rep
Friday, December 18, 2009
FREVO ON RAILS
Expressões e Operadores
• Tudo é uma expressão
• E portanto retorna um resultado
nome_grupo = if cidade == “Recife”“Frevo on Rails”
else“Não importa” # =D
end
• if/unless/case
• while/until
Friday, December 18, 2009
FREVO ON RAILS
Expressões e Operadores
• for
• Não existe o “for tradicional”
• Mas lembra que tudo é objeto?
3.times do |i|puts “Iterando pela #{i+1} vez.”
end
• Interpolação de Strings
nome = “Frevo”nome + “ on Rails” = “#{nome} on Rails”
Friday, December 18, 2009
FREVO ON RAILS
Arrays
• Inicialização
numeros = [1, 2, 3]elementos = [1, “a”, true]
• Indexação
elementos[0]elementos[1]
• Crescem automaticamente
elementos[10] = “frevo”
• size/length, first, last, shuffle, uniq, sort…
Friday, December 18, 2009
FREVO ON RAILS
Hashes
• Inicialização
• area = {“brasil” => 8514877, “argentina” => 2766890}• capitais = {:pernambuco => “recife”, :piaui => “teresina”}
• Indexação
• area[“brasil”]• capitais[:pernambuco]• capitais[:paraiba]
• Símbolos
• Comparação rápida
Friday, December 18, 2009
FREVO ON RAILS
Blocos
• Cada chamada pode ter um bloco associado
• Como no 3.times…
• Característica mais versátil da linguagem IMHO
• animais = [“camelo”, “mosca”, “tubarão”]• animais.each do |animal|
• puts “#{animal.capitalize} é um animal!”• end
Friday, December 18, 2009
FREVO ON RAILS
Blocos
• map
• quadrados = [1,2,3,4,5].map do |numero|• numero*numero
• end
• select
• verbos = [“comer”, “caçar”, “estudar”, “limpar”, “coçar”]• verbos_c = verbos.select do |verbo|
• verbo.start_with? “c”• end
Friday, December 18, 2009
FREVO ON RAILS
Blocos
• each
• capitais = {:pernambuco => “recife”, :piaui => “teresina”}• capitais.each do |estado, capital|
• puts “A capital de #{estado.to_s.capitalize} é #{capital}”• end
• Arquivos
• File.open(“arquivo.txt”) do |file|• puts file.read
• end
Friday, December 18, 2009
FREVO ON RAILS
Pontuação
• Ruby possui convenções de pontuação
• Métodos que retornam booleanos terminam com ?
• lista.empty?
• Métodos que alteram o objeto terminam com !
• lista.sort• lista.sort!
• Variáveis globais começam com $
• $parametro = “evil” # não façam isso em casa!
Friday, December 18, 2009
FREVO ON RAILS
Classes
• Definição
• class Ponto• # Construtor• def initialize(x,y)
• @x, @y = x,y• end
• end
• Instância
• p = Ponto.new(10,20)
Friday, December 18, 2009
FREVO ON RAILS
Classes
• Variáveis de instância (aka atributos) começam com @
• Variáveis de classe (aka estáticas) começam com @@
• Todas são privadas
• Só podem ser acessadas fora da classe por meio de acessores
• self se refere ao objeto atual
Friday, December 18, 2009
FREVO ON RAILS
Classes
• Em Ruby, as classes são abertas
• É possível adicionar métodos a classes já existentes
• class Array• def frevo_on_rails
• “Frevo on Rails”• end
• end
• É possível adicionar métodos até a objetos únicos
Friday, December 18, 2009
FREVO ON RAILS
Ainda tem muito mais…
• Expressões Regulares
• Intervalos
• Lançamento/tratamento de exceções
• Procs, Lambdas, Fibers, Closures
• Reflexão e Metaprogramação
• API Rica
• Theading, Sistema de Arquivos, Networking, Strings, Datas…
Friday, December 18, 2009
FREVO ON RAILS
Referências
The Hummingbird Book The Pickaxe Book
Friday, December 18, 2009
FREVO ON RAILS
Demonstração
• Finding mean and median
• Doing date arithmetic
• Getting the N Smallest Items of an Array
• Picking a Random Line from a File
• Grabbing the Contents of a Web Page
Friday, December 18, 2009
FREVO ON RAILS
RUBY ON RAILS
Friday, December 18, 2009
FREVO ON RAILS
Mais um framework?
• David Heinemeier Hansson (2005), 37signals
• Hoje mais de sete mantenedores no core team
• Opinionated Software
• CoC: Convention over Configuration
• DRY: Don’t repeat yourself
• KISS: Keep it stupidly simple
Friday, December 18, 2009
FREVO ON RAILS
Demonstração
Creating a weblog in 15 minuteshttp://rubyonrails.org/screencasts
Friday, December 18, 2009
FREVO ON RAILS
Achou difícil?
Aldo não…http://www.youtube.com/watch?v=9ertJw5C2H8
Friday, December 18, 2009
FREVO ON RAILS
Organização
ModelViewController
Friday, December 18, 2009
FREVO ON RAILS
• Representa a informação da aplicação
• Modela o domínio do negócio
• Contém todas as regras de negócio
• Normalmente corresponde a uma tabela no BD
• Dados sempre armazenados em um banco de dados
• Cada objeto é identificado por um id único
• Mapeamento Objeto-Relacional (ORM)
Models
Friday, December 18, 2009
FREVO ON RAILS
Models
• Criação
• script/generate model usuario
• Corresponde automaticamente à tabela usuários
• Migrações
• Executa operações no banco de dados
• Criação/alteração/remoção de tabelas, índices…
• Importação de dados
• Permite reproduzir as mesmas operações em produção
Friday, December 18, 2009
FREVO ON RAILS
Models
• Operações
• new/create
• find
• find_all
• find_by dinâmicos
• destroy
Friday, December 18, 2009
FREVO ON RAILS
Models
• Validações
• validates_presence_of
• validates_uniqueness_of
• validates_numericality_of
• Relacionamentos
• belongs_to
• has_many
Friday, December 18, 2009
FREVO ON RAILS
Controllers
• Controlam o fluxo da aplicação
• Recebem a requisição e dados do cliente
• Determina que action corresponde a cada URL
• Manipula o model e prepara-o para view
• “Cola” entre model e view
Friday, December 18, 2009
FREVO ON RAILS
Controllers
• Criação
• script/generate controller usuarios
• Actions REST
• index
• show
• new/create
• edit/update
• destroy
Friday, December 18, 2009
FREVO ON RAILS
Controllers
• Recebendo parâmetros POST e GET
• Hash params
• Rotas
• Que URLs correspondem a cada ação?
• connect
• resource
Friday, December 18, 2009
FREVO ON RAILS
Views
• Formatam os dados para o usuário
• Vários formatos suportados
• HTML, Javascript/JSON, XML, RSS…
• Arquivos de view gerados juntamente com controllers
• Embedded Ruby (ERb)
• <h1>Olá <%= @usuario.nome %></h1>
Friday, December 18, 2009
FREVO ON RAILS
Views
• Pode-se usar estruturas de controle
• <ul>• <% @posts.each do |post| %>
• <li><%= post.titulo %></li>• <% end %>
• </ul>• #• <% if usuario %>
• <p>Olá usuário <%= usuario.nome %></p>• <% end %>
Friday, December 18, 2009
FREVO ON RAILS
Views
• Helpers
• link_to
• form_for
• Partials
• Usados para evitar duplicação de código
• Extrair o que for diferente e centralizar o que for igual
• render :partial
Friday, December 18, 2009
FREVO ON RAILS
Referências
Agile Web Development with Rails The Rails Way
Friday, December 18, 2009
FREVO ON RAILS
Referências
Rails Guideshttp://guides.rubyonrails.org/
Friday, December 18, 2009
FREVO ON RAILSGRUPO DE USUÁRIOS RUBY/RAILS DE PERNAMBUCO
Friday, December 18, 2009