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!
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
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
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
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
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