Conhecendo Ruby on Rails                          Sérgio Henrique Miranda JuniorThursday, October 4, 12
Sumário              - Sobre mim              - Dito Internet              - Ruby              - Ruby on Rails            ...
Quem sou eu?                          - Sérgio Henrique Miranda Júnior                          - Engenheiro de software @...
Dito Internet              - Nasceu em 2008              - Desde o início trabalha com Ruby on Rails              - Possui...
Tim Beta              - Plataforma desenvolvida para o público jovem da TIM              - Aplicativo no facebook e orkut ...
Plataforma Social           - Possui 4 módulos que permitem utilizar           a influência das amizades para gerar novos  ...
Ruby                          http://www.ruby-lang.org/pt/Thursday, October 4, 12
Ruby              - Linguagem de programação lançada em 1995              - Desenvolvida por um japonês: Yukihiro “Matz”  ...
Ruby       Tudo é objeto:          >> 1500.class          => Fixnum          >> 1333.even?          => false          >> “...
Ruby       Variáveis:        - Tipagem dinâmica        - Não precisam ser declaradas         Variáveis globais começam com...
Ruby       Variáveis:        - O que fazer quando é preciso validar o tipo da variável        que está sendo passada?     ...
Ruby       Símbolos:               name = twitter_api[:screen_name]              O que são:               - Basicamente é ...
Ruby       Blocos:          object.each do |elemento|            realize_alguma_acao(elemento)          end         Estamo...
Ruby       Blocos:            É uma feature muito importante da linguagem. Vários            métodos das bibliotecas padrõ...
Ruby       Classes:        - Definição de classe é bem simples e possui o método        initializer como construtor.       ...
Ruby       Classes:        - Existe uma maneira mais simples de fazer getters e        setters                    - attr_r...
Ruby       Classes:        - As classes no ruby nunca são fechadas. A qualquer        momento você pode abrir qualquer cla...
Ruby       Classes:             - Herança é expressada de uma maneira bem simples          class Professor < Profissional ...
Ruby       Métodos:        - Definição de método é bem simples, basta utilizar a        keyword def             - Ruby supo...
Ruby       Métodos:             - Exemplo de número variável de argumentos           def estudar(materia, *livros)        ...
Ruby       Módulos:             - Agrupam métodos, constantes e variáveis de classe             - Não podem ser instanciad...
Ruby       Gem:             - É o gerenciador de pacotes da linguagem Ruby             - Pode ser até uma aplicação comple...
Ruby       Ecossistema:        - Garbage Collector             - Builtin classes             - Standard Library           ...
Rails                          http://rubyonrails.com.br/Thursday, October 4, 12
Rails              - Lançado em julho de 2004              - Extraído da ferramenta de gestão de projetos              Bas...
Rails       O que é um framework?            “Conjunto de componentes de software que            provêem uma arquitetura e...
Aprendendo RailsThursday, October 4, 12
Rails       Filosofia do rails:              - DRY(Don’t Repeat Yourself): é uma sugestão para não repetir o              m...
Rails       MVC:             - É um design pattern que separa a representação dos             dados da regra de negócio   ...
MVCThursday, October 4, 12
Rails       Sub-componentes:              - Action Mailer:                   É um framework para desenvolver serviços de e...
Rails       Sub-componentes:             - ActiveRecord:                  Conecta classes a tabelas de bancos relacionais....
Rails       Exemplo de código AR:          class Person < ActiveRecord::Base             validates :email, :presence => tr...
Rails       Ambientes:             - Teste:                  É o ambiente que sua app executa quando seus testes          ...
Rails       Organização de pastas:              - sua_app                 - app                 - config                 - ...
Rails       Desenvolvimento orientado a teste:             - Testes são feitos antes da implementação             - Rails ...
Rails       Desenvolvimento orientado a teste:             - Exemplo de teste automatizado utilizando Rspec            des...
Ciclo de testesThursday, October 4, 12
Rails       Migrations:             - É uma forma eficiente de alterar a base de dados             - Mantém o controle das ...
Rails       Assets pipeline:             - É um framework para concatenar e reduzir ou             comprimir. É utilizado ...
Rails       Rake:            - É um software que gerencia tarefas. Similar ao make.            - Tarefas são colocadas em ...
Rails       Scaffold:        - É gerador de código que proporciona um        desenvolvimento mais rápido           rails g...
Rails       Scaffold:                 db/migrate/20100207214725_create_posts.rb                          Migrate para cria...
Rails       Console:             - É um prompt de comando utilizado para interagir com             a base e testar código ...
Rails       Hello Rails:         $ rails new hello_rails         $ cd hello_rails         $ rails server         $ rails g...
Quem utiliza RailsThursday, October 4, 12
um presente pra                             vocês...Thursday, October 4, 12
Vota Três Pontas                                      https://github.com/sergiotp/vota_trespontas                         ...
não virem refém do                  frameworkThursday, October 4, 12
Não tenho um talento especial. Eu                          sou apenas apaixonadamente curiosoThursday, October 4, 12
Obrigado!   e-mail: sergio.miranda@dito.com.br   twitter: @sergiohenrique   fb: /sergiohenriquemirandaThursday, October 4,...
Upcoming SlideShare
Loading in …5
×

Conhecendo Ruby on Rails

521 views
483 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
521
On SlideShare
0
From Embeds
0
Number of Embeds
138
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Conhecendo Ruby on Rails

  1. 1. Conhecendo Ruby on Rails Sérgio Henrique Miranda JuniorThursday, October 4, 12
  2. 2. Sumário - Sobre mim - Dito Internet - Ruby - Ruby on Rails - Fazendo acontecerThursday, October 4, 12
  3. 3. Quem sou eu? - Sérgio Henrique Miranda Júnior - Engenheiro de software @ Dito Internet - Bacharel em Ciência da ComputaçãoThursday, October 4, 12
  4. 4. 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
  5. 5. 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
  6. 6. Plataforma Social - Possui 4 módulos que permitem utilizar a influência das amizades para gerar novos negócios para as marcas Social apps Módulos sociais Gamification Analytics Criamos interações Levamos as redes Utilizamos mecânicas Transformamos todas as e engajamento sociais para dentro de games (rankings, ações dos usuários para as marcas através do seu website (login, badges e níveis) para em relatórios com um de apps dentro das compartilhamento e dados aumentar a fidelização rico conjunto de redes sociais. ligados às amizades). do público alvo. dados.Thursday, October 4, 12
  7. 7. Ruby http://www.ruby-lang.org/pt/Thursday, October 4, 12
  8. 8. Ruby - Linguagem de programação lançada em 1995 - Desenvolvida por um japonês: Yukihiro “Matz” Matsumoto - Popularizada em 2006 graças ao Ruby on Rails - Totalmente gratuita - Linguagem interpretadaThursday, October 4, 12
  9. 9. Ruby Tudo é objeto: >> 1500.class => Fixnum >> 1333.even? => false >> “Fumec”.length => 5Thursday, October 4, 12
  10. 10. 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úscula Ex: nome Também existe variável de instância de classe!Thursday, October 4, 12
  11. 11. Ruby Variáveis: - O que fazer quando é preciso validar o tipo da variável que está sendo passada? Duck typing: - Se anda como um pato... - Faz “quack” como um pato... - Provavelmente é um pato!Thursday, October 4, 12
  12. 12. 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 finalizadoThursday, October 4, 12
  13. 13. 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 each index = 0 while index < length yield arr[index] index += 1 endThursday, October 4, 12
  14. 14. 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
  15. 15. Ruby Classes: - Definição de classe é bem simples e possui o método initializer como construtor. class Professor def initializer(nome) @nome = nome end def nome @nome end end p = Professor.new(“José”) p.nome #retorna “José”Thursday, October 4, 12
  16. 16. Ruby Classes: - Existe uma maneira mais simples de fazer getters e setters - attr_reader - attr_writer - attr_accessor class Professor attr_accessor :nome def initializer(nome) @nome = nome end end p = Professor.new(“José”) p.nome #retorna “José” p.nome = “José Francisco”Thursday, October 4, 12
  17. 17. 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 existente 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!Thursday, October 4, 12
  18. 18. Ruby 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 endThursday, October 4, 12
  19. 19. 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 arg1 puts 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
  20. 20. Ruby Métodos: - Exemplo de número variável de argumentos def estudar(materia, *livros) livros.each do |livro| leia(livro) end end estudar(“Ruby”, “Design Patterns in Ruby”, “The well grounded Rubyist”) estudar(“Rails”, “The Rails 3 Way”, “Rails Recipes”, “Crafting Rails Applications”)Thursday, October 4, 12
  21. 21. Ruby Módulos: - Agrupam métodos, constantes e variáveis de classe - Não podem ser instanciados ou feitos como sub-classe module QualquerCoisa def self.algum_metodo ... end end QualquerCoisa.algum_metodoThursday, October 4, 12
  22. 22. Ruby Gem: - É o gerenciador de pacotes da linguagem Ruby - Pode ser até uma aplicação completa gem install devise gem install mysql2 gem install mechanizeThursday, October 4, 12
  23. 23. 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
  24. 24. Rails http://rubyonrails.com.br/Thursday, October 4, 12
  25. 25. Rails - Lançado em julho de 2004 - Extraído da ferramenta de gestão de projetos Basecamp - 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.Thursday, October 4, 12
  26. 26. 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
  27. 27. Aprendendo RailsThursday, October 4, 12
  28. 28. 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 HTTPThursday, October 4, 12
  29. 29. 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 - View: gera a interface com o usuário - Controller: recebe evento do mundo externo, interage com o model e retorna a view correta para o usuárioThursday, October 4, 12
  30. 30. MVCThursday, October 4, 12
  31. 31. 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 modelThursday, October 4, 12
  32. 32. 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
  33. 33. Rails Exemplo de código AR: 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 = Person.valid? #false puts p.errors #email can’t be blank p1 = Person.first p1_books = p1.booksThursday, October 4, 12
  34. 34. 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 reaisThursday, October 4, 12
  35. 35. Rails Organização de pastas: - sua_app - app - config - db - doc - lib - log - public - script - test - tmp - vendorThursday, October 4, 12
  36. 36. 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: RSpecThursday, October 4, 12
  37. 37. Rails Desenvolvimento orientado a teste: - Exemplo de teste automatizado utilizando Rspec describe Teacher do describe "requirements" do it "should have a name" do t = Teacher.new(:name => nil) t.should_not be_valid end end endThursday, October 4, 12
  38. 38. Ciclo de testesThursday, October 4, 12
  39. 39. Rails Migrations: - É 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 class CreateTeacher < ActiveRecord::Migration def change create_table :teachers do |t| t.string :name t.string :cpf t.timestamps end end endThursday, October 4, 12
  40. 40. 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, etcThursday, October 4, 12
  41. 41. Rails Rake: - É 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! namespace :namespace_da_sua_task do desc “descrição da sua task” task :nome_da_sua_task => :dependencia_da_sua_task do tarefa_a_ser_executada end end $ rake namespace_da_sua_task:nome_da_sua_taskThursday, October 4, 12
  42. 42. Rails Scaffold: - É gerador de código que proporciona um desenvolvimento mais rápido rails generate scaffold Post nome:string titulo:string conteudo:stringThursday, October 4, 12
  43. 43. 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 scaffoldThursday, October 4, 12
  44. 44. 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
  45. 45. Rails Hello Rails: $ rails new hello_rails $ cd hello_rails $ rails server $ rails generate controller home index $ rm public/index.html $ vim app/views/home/index.html.erb => <h1> Hello Rails! </h1> $ vim config/routes.rb => root :to => “home#index”Thursday, October 4, 12
  46. 46. Quem utiliza RailsThursday, October 4, 12
  47. 47. um presente pra vocês...Thursday, October 4, 12
  48. 48. 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 PontasThursday, October 4, 12
  49. 49. não virem refém do frameworkThursday, October 4, 12
  50. 50. Não tenho um talento especial. Eu sou apenas apaixonadamente curiosoThursday, October 4, 12
  51. 51. Obrigado! e-mail: sergio.miranda@dito.com.br twitter: @sergiohenrique fb: /sergiohenriquemirandaThursday, October 4, 12

×