conhecendo ruby on rails

51
Conhecendo Ruby on Rails Sérgio Henrique Miranda Junior Thursday, October 4, 12

Upload: sergio-henrique

Post on 05-Dec-2014

465 views

Category:

Technology


2 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Conhecendo Ruby on Rails

Conhecendo Ruby on RailsSérgio Henrique Miranda Junior

Thursday, October 4, 12

Page 2: Conhecendo Ruby on Rails

Sumário

- Sobre mim

- Dito Internet

- Ruby

- Ruby on Rails

- Fazendo acontecer

Thursday, October 4, 12

Page 3: Conhecendo Ruby on Rails

Quem sou eu?

- Sérgio Henrique Miranda Júnior

- Engenheiro de software @ Dito Internet

- Bacharel em Ciência da Computação

Thursday, October 4, 12

Page 4: Conhecendo Ruby on Rails

Dito Internet

- Nasceu em 2008

- Desde o início trabalha com Ruby on Rails

- Possui grandes clientes: Gorverno de Minas, TIM, UOL, RG/A, Giovanni Draft e Lápis Raro

- Desenvolve produtos próprios: Plataforma Social, Odrible e GraphMonitor

- Somos uma das primeiras empresas da América Latina a ser qualificada em desenvolvimento de apps no exclusivo programa de Marketing do Facebook(PMD)

Thursday, October 4, 12

Page 5: Conhecendo Ruby on Rails

Tim Beta

- Plataforma desenvolvida para o público jovem da TIM

- Aplicativo no facebook e orkut

- Um portal onde você pode conectar todas suas contas (facebook, orkut, twitter e foursquare)

- Mais de 3.5 milhões de pessoas!

Thursday, October 4, 12

Page 6: Conhecendo Ruby on Rails

Plataforma Social

Social apps AnalyticsGamificationMódulos sociais

- Possui 4 módulos que permitem utilizar a influência das amizades para gerar novos negócios para as marcas

Criamos interações e engajamento para as marcas através de apps dentro das redes sociais.

Levamos as redes sociais para dentro do seu website (login, compartilhamento e dados ligados às amizades).

Utilizamos mecânicas de games (rankings, badges e níveis) para aumentar a fidelização do público alvo.

Transformamos todas as ações dos usuários em relatórios com um rico conjunto de dados.

Thursday, October 4, 12

Page 7: Conhecendo Ruby on Rails

Rubyhttp://www.ruby-lang.org/pt/

Thursday, October 4, 12

Page 8: Conhecendo Ruby on Rails

Ruby

- Linguagem de programação lançada em 1995

- Popularizada em 2006 graças ao Ruby on Rails

- Totalmente gratuita

- Linguagem interpretada

- Desenvolvida por um japonês: Yukihiro “Matz” Matsumoto

Thursday, October 4, 12

Page 9: Conhecendo Ruby on Rails

Ruby

Tudo é objeto:

>> 1500.class

=> Fixnum

>> 1333.even?

=> false

>> “Fumec”.length

=> 5

Thursday, October 4, 12

Page 10: Conhecendo Ruby on Rails

Ruby

Variáveis:- Tipagem dinâmica- Não precisam ser declaradas

Variáveis globais começam com o símbolo: $Ex: $diretorio

Variáveis de instância começam com o símbolo: @Ex: @salario

Variáveis de classe começam com o símbolo: @@Ex: @@contador

Variáveis locais começam com letra minúsculaEx: nome

Também existe variável de instância de classe!

Thursday, October 4, 12

Page 11: Conhecendo Ruby on Rails

Ruby

- O que fazer quando é preciso validar o tipo da variável que está sendo passada?

Variáveis:

Duck typing:

- Se anda como um pato...

- Faz “quack” como um pato...

- Provavelmente é um pato!

Thursday, October 4, 12

Page 12: Conhecendo Ruby on Rails

Ruby

Símbolos:name = twitter_api[:screen_name]

O que são:- Basicamente é uma string interna

- Existe somente uma cópia de cada símbolo na memória.

- Persistem na memória até o programa ser finalizado

Thursday, October 4, 12

Page 13: Conhecendo Ruby on Rails

Ruby

Blocos:

object.each do |elemento|realize_alguma_acao(elemento)

end

Estamos passando um bloco de código para o método each que irá chamar o método yield para executar o bloco de código passado.

def eachindex = 0while index < lengthyield arr[index]index += 1

end

Thursday, October 4, 12

Page 14: Conhecendo Ruby on Rails

Ruby

Blocos:

É uma feature muito importante da linguagem. Vários métodos das bibliotecas padrões utilizam blocos em suas implementações

File.open(‘path_to_file’) do |arquivo|faca_algo_com(arquivo)

end

Feature interessante:

O método open sabe quando seu bloco foi finalizado e automaticamente fecha o arquivo para você.

Thursday, October 4, 12

Page 15: Conhecendo Ruby on Rails

Ruby

Classes:

- Definição de classe é bem simples e possui o método initializer como construtor.

class Professordef initializer(nome)@nome = nome

end

def nome@nome

endend

p = Professor.new(“José”)p.nome #retorna “José”

Thursday, October 4, 12

Page 16: Conhecendo Ruby on Rails

Ruby

Classes:

- Existe uma maneira mais simples de fazer getters e setters

class Professorattr_accessor :nomedef initializer(nome)@nome = nome

endendp = Professor.new(“José”)p.nome #retorna “José”p.nome = “José Francisco”

- attr_accessor- attr_writer- attr_reader

Thursday, October 4, 12

Page 17: Conhecendo Ruby on Rails

Ruby

Classes:- As classes no ruby nunca são fechadas. A qualquer momento você pode abrir qualquer classe e adicionar novos métodos ou alterar o comportamento de um método existenteclass Fixnumdef +(another_integer)self * another_integer

endend

>> 5 + 2 # mesma coisa que -> 5.+(2)=> 10 #oooopssss! with great power comes great responsibility!

Thursday, October 4, 12

Page 18: Conhecendo Ruby on Rails

Ruby

Classes:

- Herança é expressada de uma maneira bem simples

class Professor < Profissionaldef metodo_sobrescrito(nome)# super sem nenhum argumento irá passar todos os# argumentos recebidos para o método da classe pairesultado = superresultado

endend

Thursday, October 4, 12

Page 19: Conhecendo Ruby on Rails

Ruby

Métodos:

- Definição de método é bem simples, basta utilizar a keyword def- Ruby suporta valor default e número variável de argumentos

def metodo_qualquer(arg1, arg2 = “teste”)puts arg1puts arg2

end

metodo_qualquer(1) #imprime na saida padrão: 1/n “teste”

metodo_qualquer(0, “Fumec”) #imprime na saida padrão: 0/n “Fumec”

Thursday, October 4, 12

Page 20: Conhecendo Ruby on Rails

Ruby

Métodos:

def estudar(materia, *livros)livros.each do |livro|leia(livro)

endend

estudar(“Ruby”, “Design Patterns in Ruby”, “The well grounded Rubyist”)

estudar(“Rails”, “The Rails 3 Way”, “Rails Recipes”, “Crafting Rails Applications”)

- Exemplo de número variável de argumentos

Thursday, October 4, 12

Page 21: Conhecendo Ruby on Rails

Ruby

Módulos:

- Agrupam métodos, constantes e variáveis de classe- Não podem ser instanciados ou feitos como sub-classe

module QualquerCoisadef self.algum_metodo...

endend

QualquerCoisa.algum_metodo

Thursday, October 4, 12

Page 22: Conhecendo Ruby on Rails

Ruby

Gem:

- É o gerenciador de pacotes da linguagem Ruby

- Pode ser até uma aplicação completa

gem install devise

gem install mysql2

gem install mechanize

Thursday, October 4, 12

Page 23: Conhecendo Ruby on Rails

Ruby

Ecossistema:- Garbage Collector

- Builtin classes

- Standard Library

- String enconding/transcoding

- Regexp engine

- Utilitários (ferramentas de debug, formatação de strings ...)

- Parser

- VMThursday, October 4, 12

Page 24: Conhecendo Ruby on Rails

Railshttp://rubyonrails.com.br/

Thursday, October 4, 12

Page 25: Conhecendo Ruby on Rails

Rails

- Lançado em julho de 2004

- Tornar o desenvolvimento web mais rápido e simples

- Em 2006 a Apple anunciou que o Mac OS X começaria a vir com o Rails.

- Extraído da ferramenta de gestão de projetos Basecamp

Thursday, October 4, 12

Page 26: Conhecendo Ruby on Rails

Rails

O que é um framework?

“Conjunto de componentes de software que provêem uma arquitetura e estrutura básicas para o desenvolvimento de uma aplicação. É uma aplicação semi pronta que deve ser extendida e personalizada.”

Thursday, October 4, 12

Page 27: Conhecendo Ruby on Rails

Aprendendo RailsThursday, October 4, 12

Page 28: Conhecendo Ruby on Rails

Rails

Filosofia do rails:

- DRY(Don’t Repeat Yourself): é uma sugestão para não repetir o mesmo código em vários lugares.

- Convention over Configuration: o rails faz suposições sobre o que você quer fazer e como você fará o que deseja.

- REST (Representational State Transfer): é uma maneira de organizar sua aplicação em recursos e verbos padrões utilizados pelo protocolo HTTP

Thursday, October 4, 12

Page 29: Conhecendo Ruby on Rails

Rails

MVC:

- É um design pattern que separa a representação dos dados da regra de negócio

- Permite testar cada parte separadamente

Componentes:

- Model: regra de negócio

- Controller : recebe evento do mundo externo, interage com o model e retorna a view corretapara o usuário

- View: gera a interface com o usuário

Thursday, October 4, 12

Page 30: Conhecendo Ruby on Rails

MVCThursday, October 4, 12

Page 31: Conhecendo Ruby on Rails

Rails

Sub-componentes:

- Action Mailer :É um framework para desenvolver serviços de entrega de emails

- Action Pack:É um framework para responder e receber requisições web. Fornece mecanismos para rotas, definições de controllers que implementam ações e renderização de views para respostas às requisições

- Active Model: Fornece várias interfaces que podem ser utilizadas pelo model

Thursday, October 4, 12

Page 32: Conhecendo Ruby on Rails

Rails

Sub-componentes:

- ActiveRecord:Conecta classes a tabelas de bancos relacionais. Seguindo as convenções do rails a configuração da camada de persistência é quase zero.

- ActiveSupport:É uma coleção de classes utilitárias e extensões a standard library, que são úteis ao Rails.

Thursday, October 4, 12

Page 33: Conhecendo Ruby on Rails

Rails

Exemplo de código AR:

class Person < ActiveRecord::Basevalidates :email, :presence => truevalidates :surname, :presence => true, :if => "name.nil?"

has_many :booksend

class Book < ActiveRecord::Base validates :name, :presence => true

belongs_to :personend

p = Person.new(:email => nil, :name => nil, :surname => “Miranda”)

p = Person.valid? #false

p1 = Person.first

p1_books = p1.books

puts p.errors #email can’t be blank

Thursday, October 4, 12

Page 34: Conhecendo Ruby on Rails

Rails

Ambientes:

- Teste:É o ambiente que sua app executa quando seus testes automatizados estão sendo executados

- Desenvolvimento:É o ambiente que sua app executa quando você está desenvolvendo suas funcionalidades

- Produção:É o ambiente que sua app roda quando está no ar sendo utilizada por usuários reais

Thursday, October 4, 12

Page 35: Conhecendo Ruby on Rails

Rails

Organização de pastas:

- sua_app- app- config- db- doc- lib- log- public- script- test- tmp- vendor

Thursday, October 4, 12

Page 36: Conhecendo Ruby on Rails

Rails

Desenvolvimento orientado a teste:

- Testes são feitos antes da implementação

- Rails já vem preparado para o desenvolvimento orientado a testes

- Framework para BDD: RSpec

Thursday, October 4, 12

Page 37: Conhecendo Ruby on Rails

Rails

Desenvolvimento orientado a teste:

describe Teacher do describe "requirements" do it "should have a name" do t = Teacher.new(:name => nil) t.should_not be_valid end endend

- Exemplo de teste automatizado utilizando Rspec

Thursday, October 4, 12

Page 38: Conhecendo Ruby on Rails

Ciclo de testesThursday, October 4, 12

Page 39: Conhecendo Ruby on Rails

Rails

Migrations:

class CreateTeacher < ActiveRecord::Migration def change create_table :teachers do |t| t.string :name t.string :cpf t.timestamps end endend

- É uma forma eficiente de alterar a base de dados- Mantém o controle das alterações feitas- Garante estrutura de bases idênticas- Facilita modificações na base de dados de produção

Thursday, October 4, 12

Page 40: Conhecendo Ruby on Rails

Rails

Assets pipeline:

- É um framework para concatenar e reduzir ou comprimir. É utilizado para JavaScript e CSS

- Adiciona a possibilidade de escrever os assets em outra linguagem como: CoffeScript, Sass, etc

Thursday, October 4, 12

Page 41: Conhecendo Ruby on Rails

Rails

Rake:

namespace :namespace_da_sua_task dodesc “descrição da sua task”task :nome_da_sua_task => :dependencia_da_sua_task dotarefa_a_ser_executada

endend

- É um software que gerencia tarefas. Similar ao make.- Tarefas são colocadas em um Rakefile, que contêm código ruby

- Migrations e testes automatizados são todos executados utilizando o Rake!

$ rake namespace_da_sua_task:nome_da_sua_task

Thursday, October 4, 12

Page 42: Conhecendo Ruby on Rails

Rails

Scaffold:

- É gerador de código que proporciona um desenvolvimento mais rápido

rails generate scaffold Post nome:string titulo:string conteudo:string

Thursday, October 4, 12

Page 43: Conhecendo Ruby on Rails

Rails

Scaffold:

db/migrate/20100207214725_create_posts.rb Migrate para criar a tabela no banco

app/models/post.rb Model para representar o post

test/unit/post_test.rb Testes para o model Post

test/fixtures/posts.yml Fixtures para serem utilizadas nos testes com posts

config/routes.rb Adição do recurso post ao arquivo de rota

app/controllers/posts_controller.rb Controller para o recurso post

app/views/posts/index.html.erb View para ação index do recurso post

app/views/posts/edit.html.erb View para ação edit do recurso post

app/views/posts/show.html.erb View para ação show do recurso post

app/views/posts/new.html.erb View para ação new do recurso post

app/views/posts/_form.html.erb Partial para representar o formulario utilizado no recurso post

test/functional/posts_controller_test.rb Testes para o controller do recurso post

app/helpers/posts_helper.rb Helpers para serem utilizados com o recurso post

test/unit/helpers/posts_helper_test.rb Helpers para serem utilizados nos testes do recurso post

app/assets/javascripts/posts.js.coffee Javascript para o recurso post

app/assets/stylesheets/posts.css.scss Css para o recurso post

app/assets/stylesheets/scaffolds.css.scss Estilo para as views geradas com scaffold

Thursday, October 4, 12

Page 44: Conhecendo Ruby on Rails

Rails

Console:

- É um prompt de comando utilizado para interagir com a base e testar código sem precisar utilizar a interface web

$ rails c

>> Post.all

>> Post.first

>> p = Post.new(:nome => “Teste”, :titulo => “titulo teste”, :conteudo => “Conteudo do post”)

Thursday, October 4, 12

Page 45: Conhecendo Ruby on Rails

Rails

Hello Rails:

$ rails new hello_rails

$ cd hello_rails

$ rails server

$ rails generate controller home index

$ rm public/index.html

$ vim config/routes.rb => root :to => “home#index”

$ vim app/views/home/index.html.erb => <h1> Hello Rails! </h1>

Thursday, October 4, 12

Page 46: Conhecendo Ruby on Rails

Quem utiliza RailsThursday, October 4, 12

Page 47: Conhecendo Ruby on Rails

um presente pra vocês...

Thursday, October 4, 12

Page 48: Conhecendo Ruby on Rails

Vota Três Pontas

https://github.com/sergiotp/vota_trespontasÉ um app feito em dois dias para validar a estatistica eleitoral na cidade de Três Pontas

Thursday, October 4, 12

Page 49: Conhecendo Ruby on Rails

não virem refém do framework

Thursday, October 4, 12

Page 50: Conhecendo Ruby on Rails

Não tenho um talento especial. Eu sou apenas apaixonadamente curioso

Thursday, October 4, 12