ruby & rails

56
Ruby & Rails Conhecendo

Upload: sergio-henrique

Post on 27-Jun-2015

246 views

Category:

Software


2 download

DESCRIPTION

O mercado de internet evolui em uma velocidade muito rápida, se não formos capazes de acompanhar as evoluções e apresentar inovações, ficamos para trás. Ruby e Rails vem trazer ao mundo do desenvolvimento web a produtividade e alegria necessária!

TRANSCRIPT

Page 1: Ruby & Rails

Ruby&

Rails

Conhecendo

Page 2: Ruby & Rails

Sérgio Henrique Miranda Júnior

Quem sou eu:

Líder Técnico @ Dito Internet

Bacharel em Ciência da Computação pela Universidade FUMEC

Page 3: Ruby & Rails

Dito Internet:

Analytics Ativação Social+ +

Através da combinação dessas 3 forças a Dito atua com seus clientes com o objetivo

de engajar o seu público alvo e maximizar os resultados

Page 4: Ruby & Rails

Alguns números…

Mais de 27.631.682 eventos monitorados

Uma média de 4K Requisições Por Minuto (RPM)

Page 5: Ruby & Rails

Alguns clientes…

Page 6: Ruby & Rails

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

Page 7: Ruby & Rails

“  uma  linguagem  dinâmica    e  open  source  com  foco  na    

simplicidade  e  produtividade  ”  

https://www.ruby-lang.org/en/

Page 8: Ruby & Rails

Um pouco de história:

A linguagem foi lançada em 1995

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

Popularizada em 2006 graças ao Ruby on Rails

Influência de Perl, Smalltalk, Eiffel, Ada e Lisp

Page 9: Ruby & Rails

Tudo é objeto:

>> 1500.class

=> Fixnum

>> 1333.even?

=> false

>> “UFLA”.length

=> 4

Page 10: Ruby & Rails

Variáveis:Tipagem dinâmica

Não precisam ser declaradas

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

Variáveis de instância começam com símbolo @

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

Variáveis locais começam com a letra minúscula

Page 11: Ruby & Rails

Variáveis:

>> $diretorio = ‘/var'

>> faculdade = "UFLA"

>> class Pessoa!>> @@quantidade = nil!>> def nome!>> @nome!>> end!>> end

Page 12: Ruby & Rails

Variáveis:Como faz para validar tipo de variáveis ?

Duck typing!Se anda como um pato…faz “quack” como um pato…provavelmente é um pato!

Page 13: Ruby & Rails

Símbolos:

>> name = twitter_api[:screen_name]

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

Page 14: Ruby & Rails

Blocos:

Um bloco de código está sendo passado para o método each. O bloco será executado para cada elemento do array

elementos = [1,2,3,4] elementos.each do |elemento| faca_algo(elemento) end

def each index = 0 while index < self.length do yield self[index] index += 1 end end

Page 15: Ruby & Rails

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

seu arquivo é fechado automaticamente!

File.open("path_to_file") do |arquivo| faca_algo_com(arquivo) end

Page 16: Ruby & Rails

Métodos:Definição é realizada pela keyworkd def

Ruby suporta valor default e número variável de argumentosdef metodo_qualquer(arg1, arg2 = "teste") puts arg1 puts arg2 end

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

metodo_qualquer(0, “UFLA”) !#imprime na saida padrão: 0\n “UFLA”

Page 17: Ruby & Rails

Métodos:def add(*numeros) numeros.inject(0) do |soma, numero| soma + numero end end !add(1) add(1, 2) add(1, 2, 3) add(1, 2, 3, 4)

Page 18: Ruby & Rails

Classes:Definição é realizada pela keyword class e o construtor é o método initializeclass Professor def initialize(nome) @nome = nome end ! def nome @nome end end !p = Professor.new("Ricardo") p.nome

Page 19: Ruby & Rails

Classes:Classes em Ruby nunca são fechadas. Você pode alterar a classe que desejar em runtime!class Fixnum def +(another_integer) self * another_integer end end

>> 5 + 2 # mesma coisa que -> 5.+(2)

=> 10 #oooopssss! with great power comes great responsibility!

Page 20: Ruby & Rails

Classes:Herança é expressada de uma maneira bem simples

class Professor < Profissional def metodo_sobrescrito(nome) # super sem nenhum argumento # irá passar todos os argumentos # recebidos para o método # da classe pai resultado = super resultado end end

Page 21: Ruby & Rails

Módulos:Agrupam métodos, constantes e variáveis de classe

Não podem ser instanciados ou utilizados como subclasse

module QualquerCoisa def self.algum_metodo ... end !end !QualquerCoisa.algum_metodo

Page 22: Ruby & Rails

Módulos:

class Carro include MotorV8 include ABS include AirBag ! def acelerar #... end end

Podem ser incluídos em classes

Page 23: Ruby & Rails

Gem:É o gerenciador de pacotes utilizado pela linguagem

Pode conter uma aplicação completa!

$ gem install devise!$ gem install mysql2!$ gem install archruby

Page 24: Ruby & Rails

Ecossistema:Garbage Collector

Standard Library

String encoding/transcoding

Regexp engine

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

Parser

VM

Page 25: Ruby & Rails

Recapitulando:class Professor def initialize(nome) if nome.eql? "" @nome = "Fulano" else @nome = nome end end ! def nome @nome end end !p = Professor.new("Ricardo") p.nome

definição de classe

variável de instância

Constante

definição de método

condicional

chamada de método

Page 26: Ruby & Rails

Railshttp://rubyonrails.com.br/

Page 27: Ruby & Rails

“  é  um  framework  web  open  source  otimizado  para  a  felicidade  e  produtividade  do  programador.  Faz  com  que  você  escreva  código  bonito  favorecendo  a  convenção    

sobre  configuração  ”  

http://rubyonrails.org/

Page 28: Ruby & Rails

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  ”  

Page 29: Ruby & Rails

Filosofia do Rails:Don’t repeat yourself (DRY): é 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

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

Page 30: Ruby & Rails

Model View Controller (MVC):

View

Controller Model

apresenta

seleciona & renderiza

utiliza, procura e controla

apresenta uma visão do model para o usuário

lógica do negócio, lógica do domínio

controla a interação entre o usuário e o app

Page 31: Ruby & Rails

Sub-componentes do Rails: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 e definições de controllers que implementam ações e renderizam o resultado gerado

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

Page 32: Ruby & Rails

Sub-componentes do Rails:Active Record: Conecta classes a tabelas do banco de dados, ou seja, é o ORM do Rails.

Active Support: é uma coleção de classes utilitárias e extensões a standard library, que são úteis ao Rails

Action View: é um framework para procurar e renderizar templates.

Page 33: Ruby & Rails

Model View Controller (MVC):

Action View

Action Controller Active Record

apresenta

seleciona & renderiza

utiliza, procura e controla(& Active Model)(& Action Dispatch)

Page 34: Ruby & Rails

Exemplo ActiveRecord:class Person < ActiveRecord::Base validates :email, :presence => true validates :surname, :presence => true, :if => "name.nil?" ! has_many :books end !class Book < ActiveRecord::Base validates :name, :presence => true ! belongs_to :person end !!p = Person.new(:email => nil, :name => nil, :surname => "Miranda") p.valid? # false puts p.errors # email can't be blank !p1 = Person.first p1_books = p1.books

Page 35: Ruby & Rails

Ambientes:Teste: é o ambiente que sua aplicação é executada quando seus testes automatizados estão sendo realizados

Desenvolvimento: é o ambiente default quando você está trabalhando na sua aplicação

Produção: é o ambiente em que sua aplicação é executada quando ela está no ar, sendo utilizada por usuários reais

Page 36: Ruby & Rails

Desenvolvimento com testes:Os testes são feitos antes da implementação

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

Framework largamente utilizado para testes na comunidade Rails: Rspec

Page 37: Ruby & Rails

Desenvolvimento com testes:

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

Page 38: Ruby & Rails

Desenvolvimento com testes:

Análise Teste Implemente

TesteRefatoreTeste

Page 39: Ruby & Rails

Migrations:É uma forma eficiente de alterar a base de dados

Mantém o controle das alterações feitas e garante uma estrutura de base idêntica entre os desenvolvedores

Facilita modificações na base de produção

Page 40: Ruby & Rails

Migrations:

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

Page 41: Ruby & Rails

Assets pipeline:É um framework para concatenar e reduzir ou comprimir arquivos JavaScript e CSS.

Adiciona a possibilidade de escrever os assets em outras linguagens e pre-processadores como: CoffeeScript, Sass e ERB

Page 42: Ruby & Rails

Assets pipeline:

Page 43: Ruby & Rails

Assets pipeline:

Page 44: Ruby & Rails

Rake:É um software para gerenciar tarefas. Similar ao make

As tarefas são colocadas em Rakefile, que contêm código Ruby

Migrations e testes automatizados são exemplos de tarefas executadas com o Rake

Page 45: Ruby & Rails

Rake:

namespace :namespace_da_sua_task do desc "descricao da sua task" task :nome_da_sua_task => :dependencia_da_sua_task do tarefa_a_ser_executada end end

Page 46: Ruby & Rails

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

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

Page 47: Ruby & Rails

Console:É um Read Eval Print Loop (REPL) utilizado para interagir com a sua aplicação Rails sem precisar utilizar a interface web para isso

$ rails c

>> Post.all

>> Post.first

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

Page 48: Ruby & Rails

Hello Rails:$ rails new hello_rails

$ cd hello_rails

$ rails server

$ rails generate controller home index

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

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

Abra seu browser e acesse o endereço http://localhost:3000

Page 49: Ruby & Rails

Hello Rails:

Page 50: Ruby & Rails

Recapitulando:MVCComponentesAmbientesTestesMigrationsAssets pipelineRakeScaffold

Page 51: Ruby & Rails

Quem utiliza Rails:

Page 52: Ruby & Rails

NÃO vire REFÉM

do Frameworkescolha a ferramenta certa para o problema que você está enfrentando

Page 53: Ruby & Rails

Software só tem

valor quando está

sendo utilizado

Page 54: Ruby & Rails

O que vocês precisam…Terminal para executar seus comandos e inicializar o rails server

Editor de texto para escrever/editar códigos

Browser para visualizar e interagir com a sua aplicação

Ruby, para programar sua aplicação

Rails, o framework para desenvolver aplicações web

Page 55: Ruby & Rails
Page 56: Ruby & Rails

OBRIGADO!

sergiohenriquemiranda.com.brtwitter: @sergiohenrique