Upload
sergio-henrique
View
240
Download
2
Embed Size (px)
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!
Citation preview
Ruby&
Rails
Conhecendo
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
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…
Rubyhttp://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:
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
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
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”
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 initializeclass 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:
class Carro include MotorV8 include ABS include AirBag ! def acelerar #... end end
Podem ser incluídos em classes
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: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
Railshttp://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):
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
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
Action Controller Active Record
apresenta
seleciona & renderiza
utiliza, procura e controla(& Active Model)(& Action Dispatch)
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
TesteRefatoreTeste
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 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
Hello Rails:
Recapitulando:MVCComponentesAmbientesTestesMigrationsAssets pipelineRakeScaffold
Quem utiliza Rails:
NÃO vire REFÉM
do Frameworkescolha 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!
sergiohenriquemiranda.com.brtwitter: @sergiohenrique