SlideShare ist ein Scribd-Unternehmen logo
1 von 56
Downloaden Sie, um offline zu lesen
Conhecendo 
Ruby 
& 
Rails
Quem sou eu: 
Sérgio Henrique Miranda Júnior 
Líder Técnico @ Dito Internet 
Bacharel em Ciência da Computação pela 
Universidade FUMEC
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
Alguns números… 
Mais de 27.631.682 eventos monitorados 
Uma média de 4K Requisições Por Minuto (RPM)
Alguns clientes…
Ruby http://www.ruby-lang.org/pt/
“ uma linguagem dinâmica 
e open source com foco na 
simplicidade e produtividade ” 
https://www.ruby-lang.org/en/
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
Tudo é objeto: 
>> 1500.class 
=> Fixnum 
>> 1333.even? 
=> false 
>> “UFLA”.length 
=> 4
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
Variáveis: 
>> $diretorio = ‘/var' 
>> faculdade = "UFLA" 
>> class Pessoa! 
>> @@quantidade = nil! 
>> def nome! 
>> @nome! 
>> end! 
>> end
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!
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
Blocos: 
elementos = [1,2,3,4] 
elementos.each do |elemento| 
faca_algo(elemento) 
end 
Um bloco de código está sendo passado para o método 
each. O bloco será executado para cada elemento do array 
def each 
index = 0 
while index < self.length do 
yield self[index] 
index += 1 
end 
end
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 
seu arquivo é fechado automaticamente!
Métodos: 
Definição é realizada pela keyworkd def 
Ruby suporta valor default e número variável de argumentos 
def metodo_qualquer(arg1, arg2 = "teste") 
puts arg1 
puts arg2 
end 
metodo_qualquer(1) ! 
#imprime na saida padrão: 1n “teste” 
metodo_qualquer(0, “UFLA”) ! 
#imprime na saida padrão: 0n “UFLA”
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)
Classes: 
Definição é realizada pela keyword class e o construtor é 
o método initialize 
class Professor 
def initialize(nome) 
@nome = nome 
end 
! 
def nome 
@nome 
end 
end 
! 
p = Professor.new("Ricardo") 
p.nome
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!
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
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
Módulos: 
Podem ser incluídos em classes 
class Carro 
include MotorV8 
include ABS 
include AirBag 
! 
def acelerar 
#... 
end 
end
Gem: 
É o gerenciador de pacotes utilizado pela linguagem 
Pode conter uma aplicação completa! 
$ gem install devise! 
$ gem install mysql2! 
$ gem install archruby
Ecossistema: 
Garbage Collector 
Standard Library 
String encoding/transcoding 
Regexp engine 
Utilitários (ferramentas de debug, formatação de strings) 
Parser 
VM
Recapitulando: 
definição de método 
class Professor 
def initialize(nome) 
if nome.eql? "" 
@nome = "Fulano" 
else 
condicional 
@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 
chamada de 
método
Rails http://rubyonrails.com.br/
“ é 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/
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 ”
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
Model View Controller (MVC): 
apresenta uma visão do 
model para o usuário 
View 
apresenta 
seleciona & renderiza 
utiliza, procura e controla 
Controller Model 
lógica do negócio, 
lógica do domínio 
controla a interação 
entre o usuário e o app
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
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.
Model View Controller (MVC): 
Action View 
apresenta 
seleciona & renderiza 
Action Controller utiliza, procura e controla 
Active Record 
(& Action Dispatch) (& Active Model)
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
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
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
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
Desenvolvimento com testes: 
Análise Teste Implemente 
Teste Refatore Teste
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
Migrations: 
class CreateTeacher < ActiveRecord::Migration 
def change 
create_table :teachers do |t| 
t.string :name 
t.string :cpf 
t.timestamps 
end 
end 
end
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
Assets pipeline:
Assets pipeline:
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
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
Scaffold: 
É um gerador de código que proporciona um desenvolvimento 
mais rápido 
$ rails generate scaffold Post nome:string titulo:string 
conteudo:string
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”)
Hello Rails: 
$ rails new hello_rails 
$ cd hello_rails 
$ rails generate controller home index 
$ vim app/views/home/index.html.erb => <h1> Hello Rails! </h1> 
$ vim config/routes.rb => root :to => “home#index” 
$ rails server 
Abra seu browser e acesse o endereço http://localhost:3000
Hello Rails:
Recapitulando: 
MVC 
Componentes 
Ambientes 
Testes 
Migrations 
Assets pipeline 
Rake 
Scaffold
Quem utiliza Rails:
NÃO vire REFÉM 
do Framework 
escolha a ferramenta certa para o 
problema que você está enfrentando
Software só tem 
valor quando está 
sendo utilizado
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
OBRIGADO! 
twitter: @sergiohenrique 
sergiohenriquemiranda.com.br

Weitere ähnliche Inhalte

Was ist angesagt?

Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Emerson Macedo
 
Ruby, Simples e Expressivo
Ruby, Simples e ExpressivoRuby, Simples e Expressivo
Ruby, Simples e ExpressivoRodrigo Martins
 
JavaScript for Beginners
JavaScript for BeginnersJavaScript for Beginners
JavaScript for BeginnersSAPO Sessions
 
Delphi Conference 2012 - Programação Baseado em Regras com RTTI
Delphi Conference 2012 - Programação Baseado em Regras com RTTIDelphi Conference 2012 - Programação Baseado em Regras com RTTI
Delphi Conference 2012 - Programação Baseado em Regras com RTTIMario Guedes
 
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...Rogério Moraes de Carvalho
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
Delphi Parallel Programming Library
Delphi Parallel Programming LibraryDelphi Parallel Programming Library
Delphi Parallel Programming LibraryMario Guedes
 
Minicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e PythonMinicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e PythonGuilherme Garcia
 
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVA
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVAProgramação Orientada a Objetos - Conceitos básicos da linguagem JAVA
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVACristiano Almeida
 
Esta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com RailsEsta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com Railsismaelstahelin
 
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...Rogério Moraes de Carvalho
 
tmn - Introdução ao JavaScript
tmn - Introdução ao JavaScripttmn - Introdução ao JavaScript
tmn - Introdução ao JavaScriptClaudio Gamboa
 
Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-Thread
Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-ThreadDelphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-Thread
Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-ThreadMario Guedes
 
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScriptTDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScriptRogério Moraes de Carvalho
 
Introdução á linguagem Ruby com aplicativo em Rails
Introdução á linguagem Ruby com aplicativo em RailsIntrodução á linguagem Ruby com aplicativo em Rails
Introdução á linguagem Ruby com aplicativo em Railsoverduka
 
Desenvolvimento web com python e django
Desenvolvimento web com python e djangoDesenvolvimento web com python e django
Desenvolvimento web com python e djangoIgor Sobreira
 
Apresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBAApresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBALuciano Borges
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem PythonLuciano Ramalho
 

Was ist angesagt? (20)

Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
 
Ruby, Simples e Expressivo
Ruby, Simples e ExpressivoRuby, Simples e Expressivo
Ruby, Simples e Expressivo
 
JavaScript for Beginners
JavaScript for BeginnersJavaScript for Beginners
JavaScript for Beginners
 
Delphi Conference 2012 - Programação Baseado em Regras com RTTI
Delphi Conference 2012 - Programação Baseado em Regras com RTTIDelphi Conference 2012 - Programação Baseado em Regras com RTTI
Delphi Conference 2012 - Programação Baseado em Regras com RTTI
 
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
 
Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Delphi Parallel Programming Library
Delphi Parallel Programming LibraryDelphi Parallel Programming Library
Delphi Parallel Programming Library
 
Palestra Ruby
Palestra RubyPalestra Ruby
Palestra Ruby
 
Minicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e PythonMinicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e Python
 
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVA
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVAProgramação Orientada a Objetos - Conceitos básicos da linguagem JAVA
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVA
 
Esta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com RailsEsta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com Rails
 
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
 
tmn - Introdução ao JavaScript
tmn - Introdução ao JavaScripttmn - Introdução ao JavaScript
tmn - Introdução ao JavaScript
 
Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-Thread
Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-ThreadDelphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-Thread
Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-Thread
 
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScriptTDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
 
Introdução á linguagem Ruby com aplicativo em Rails
Introdução á linguagem Ruby com aplicativo em RailsIntrodução á linguagem Ruby com aplicativo em Rails
Introdução á linguagem Ruby com aplicativo em Rails
 
Desenvolvimento web com python e django
Desenvolvimento web com python e djangoDesenvolvimento web com python e django
Desenvolvimento web com python e django
 
Apresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBAApresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBA
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
 

Ähnlich wie Ruby & Rails

Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Zarathon Maia
 
Mini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOLMini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOLtarginosilveira
 
Comandos gerais do PHP
Comandos gerais do PHPComandos gerais do PHP
Comandos gerais do PHPPaulo Dayvson
 
Introdução ao framework Django
Introdução ao framework DjangoIntrodução ao framework Django
Introdução ao framework DjangoEduardo Palma
 
Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Lucas Augusto Carvalho
 
Ruby on Rails: um estudo de viabilidade em ambientes empresariais
Ruby on Rails: um estudo de viabilidade em ambientes empresariaisRuby on Rails: um estudo de viabilidade em ambientes empresariais
Ruby on Rails: um estudo de viabilidade em ambientes empresariaisRodrigo Recio
 
Desenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on RailsDesenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on RailsLucas Caton
 
Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Vinícius de Paula
 
Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01joaocarlobarros
 
Desenvolvendo aplicações com Angular e Laravel no Back-end
Desenvolvendo aplicações com Angular e Laravel no Back-endDesenvolvendo aplicações com Angular e Laravel no Back-end
Desenvolvendo aplicações com Angular e Laravel no Back-endGiovanny Valente
 
Dito Tech Talk RSpec
Dito Tech Talk RSpecDito Tech Talk RSpec
Dito Tech Talk RSpecguest49d83b2
 
Minicurso Ruby on Rails Dextra
Minicurso Ruby on Rails DextraMinicurso Ruby on Rails Dextra
Minicurso Ruby on Rails DextraDextra
 
Curso de Ruby on Rails - Aula 01
Curso de Ruby on Rails - Aula 01Curso de Ruby on Rails - Aula 01
Curso de Ruby on Rails - Aula 01Maurício Linhares
 

Ähnlich wie Ruby & Rails (20)

Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3
 
Oficial
OficialOficial
Oficial
 
Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014
 
Mini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOLMini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOL
 
Comandos gerais do PHP
Comandos gerais do PHPComandos gerais do PHP
Comandos gerais do PHP
 
Introdução ao framework Django
Introdução ao framework DjangoIntrodução ao framework Django
Introdução ao framework Django
 
Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5
 
Programando php com excelência
Programando php com excelênciaProgramando php com excelência
Programando php com excelência
 
Ruby on Rails: um estudo de viabilidade em ambientes empresariais
Ruby on Rails: um estudo de viabilidade em ambientes empresariaisRuby on Rails: um estudo de viabilidade em ambientes empresariais
Ruby on Rails: um estudo de viabilidade em ambientes empresariais
 
Desenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on RailsDesenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on Rails
 
Palestra
PalestraPalestra
Palestra
 
Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.
 
Ruby and Rails
Ruby and RailsRuby and Rails
Ruby and Rails
 
Rails na pratica
Rails na praticaRails na pratica
Rails na pratica
 
Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01
 
Ruby on rails
Ruby on railsRuby on rails
Ruby on rails
 
Desenvolvendo aplicações com Angular e Laravel no Back-end
Desenvolvendo aplicações com Angular e Laravel no Back-endDesenvolvendo aplicações com Angular e Laravel no Back-end
Desenvolvendo aplicações com Angular e Laravel no Back-end
 
Dito Tech Talk RSpec
Dito Tech Talk RSpecDito Tech Talk RSpec
Dito Tech Talk RSpec
 
Minicurso Ruby on Rails Dextra
Minicurso Ruby on Rails DextraMinicurso Ruby on Rails Dextra
Minicurso Ruby on Rails Dextra
 
Curso de Ruby on Rails - Aula 01
Curso de Ruby on Rails - Aula 01Curso de Ruby on Rails - Aula 01
Curso de Ruby on Rails - Aula 01
 

Ruby & Rails

  • 2. Quem sou eu: Sérgio Henrique Miranda Júnior Líder Técnico @ Dito Internet Bacharel em Ciência da Computação pela Universidade FUMEC
  • 3. 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
  • 4. Alguns números… Mais de 27.631.682 eventos monitorados Uma média de 4K Requisições Por Minuto (RPM)
  • 7. “ uma linguagem dinâmica e open source com foco na simplicidade e produtividade ” https://www.ruby-lang.org/en/
  • 8. 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
  • 9. Tudo é objeto: >> 1500.class => Fixnum >> 1333.even? => false >> “UFLA”.length => 4
  • 10. 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
  • 11. Variáveis: >> $diretorio = ‘/var' >> faculdade = "UFLA" >> class Pessoa! >> @@quantidade = nil! >> def nome! >> @nome! >> end! >> end
  • 12. 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!
  • 13. 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
  • 14. Blocos: elementos = [1,2,3,4] elementos.each do |elemento| faca_algo(elemento) end Um bloco de código está sendo passado para o método each. O bloco será executado para cada elemento do array def each index = 0 while index < self.length do yield self[index] index += 1 end end
  • 15. 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 seu arquivo é fechado automaticamente!
  • 16. Métodos: Definição é realizada pela keyworkd def Ruby suporta valor default e número variável de argumentos def metodo_qualquer(arg1, arg2 = "teste") puts arg1 puts arg2 end metodo_qualquer(1) ! #imprime na saida padrão: 1n “teste” metodo_qualquer(0, “UFLA”) ! #imprime na saida padrão: 0n “UFLA”
  • 17. 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)
  • 18. Classes: Definição é realizada pela keyword class e o construtor é o método initialize class Professor def initialize(nome) @nome = nome end ! def nome @nome end end ! p = Professor.new("Ricardo") p.nome
  • 19. 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!
  • 20. 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
  • 21. 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
  • 22. Módulos: Podem ser incluídos em classes class Carro include MotorV8 include ABS include AirBag ! def acelerar #... end end
  • 23. Gem: É o gerenciador de pacotes utilizado pela linguagem Pode conter uma aplicação completa! $ gem install devise! $ gem install mysql2! $ gem install archruby
  • 24. Ecossistema: Garbage Collector Standard Library String encoding/transcoding Regexp engine Utilitários (ferramentas de debug, formatação de strings) Parser VM
  • 25. Recapitulando: definição de método class Professor def initialize(nome) if nome.eql? "" @nome = "Fulano" else condicional @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 chamada de método
  • 27. “ é 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/
  • 28. 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 ”
  • 29. 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
  • 30. Model View Controller (MVC): apresenta uma visão do model para o usuário View apresenta seleciona & renderiza utiliza, procura e controla Controller Model lógica do negócio, lógica do domínio controla a interação entre o usuário e o app
  • 31. 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
  • 32. 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.
  • 33. Model View Controller (MVC): Action View apresenta seleciona & renderiza Action Controller utiliza, procura e controla Active Record (& Action Dispatch) (& Active Model)
  • 34. 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
  • 35. 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
  • 36. 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
  • 37. 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
  • 38. Desenvolvimento com testes: Análise Teste Implemente Teste Refatore Teste
  • 39. 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
  • 40. Migrations: class CreateTeacher < ActiveRecord::Migration def change create_table :teachers do |t| t.string :name t.string :cpf t.timestamps end end end
  • 41. 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
  • 44. 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
  • 45. 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
  • 46. Scaffold: É um gerador de código que proporciona um desenvolvimento mais rápido $ rails generate scaffold Post nome:string titulo:string conteudo:string
  • 47. 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”)
  • 48. Hello Rails: $ rails new hello_rails $ cd hello_rails $ rails generate controller home index $ vim app/views/home/index.html.erb => <h1> Hello Rails! </h1> $ vim config/routes.rb => root :to => “home#index” $ rails server Abra seu browser e acesse o endereço http://localhost:3000
  • 50. Recapitulando: MVC Componentes Ambientes Testes Migrations Assets pipeline Rake Scaffold
  • 52. NÃO vire REFÉM do Framework escolha a ferramenta certa para o problema que você está enfrentando
  • 53. Software só tem valor quando está sendo utilizado
  • 54. 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
  • 55.
  • 56. OBRIGADO! twitter: @sergiohenrique sergiohenriquemiranda.com.br