$30 off During Our Annual Pro Sale. View Details »

Do Ruby ao Ruby on Rails em 3hs

Do Ruby ao Ruby on Rails em 3hs

Curso de Ruby on Rails ministrado na Jornada Acadêmica da FACIN (PUC-RS)

Jean Carlo Emer

September 25, 2014
Tweet

More Decks by Jean Carlo Emer

Other Decks in Technology

Transcript

  1. Do Ruby ao
    Ruby on
    Rails em 3hs

    View Slide

  2. http://jcemer.com

    View Slide

  3. View Slide

  4. View Slide

  5. http://www.slideshare.net/akitaonrails/
    workshop-de-ruby-e-rails-na-usp-leste-2012

    View Slide

  6. Ruby on Rails é um framework
    fullstack para construção de
    aplicações web
    Ruby on Rails

    View Slide

  7. O front-end é a marcação,
    aparência, acessibilidade,
    usabilidade e performance da sua
    aplicação em múltiplas
    plataformas
    Front-end

    View Slide

  8. O back-end é responsável por
    gerenciar e gerar representações
    de recursos
    Back-end

    View Slide

  9. Ruby
    1994
    Ruby on 

    Rails
    2004
    Linguagem
    Framework

    View Slide

  10. Perl Smalltalk Lisp Python
    Sistema de objetos Funcional

    View Slide

  11. View Slide

  12. Ruby

    View Slide

  13. View Slide

  14. 1. Qualquer valor é um objeto
    2. Objetos comunicam-se através de
    mensagens
    3. Objetos mantém estado
    4. Objetos são instâncias de uma classe
    5. Classes são repositórios de operações
    Alan Kay (Smalltalk) considera
    fundamental em OOP:
    http://c2.com/cgi/wiki?AlanKaysDefinitionOfObjectOriented

    View Slide

  15. OOP to me means only
    messaging, local retention and
    protection and hiding of state-
    process, and extreme late
    binding of all things.
    - Alan Kay

    View Slide

  16. $ _

    View Slide

  17. Ruby é uma linguagem
    interpretada e dinâmica

    View Slide

  18. $ irb
    Interactive Ruby Shell

    View Slide

  19. Numeric
    String
    Symbol
    Array
    Hash
    1,  2,  3.1  
    'string'  
    :symbol  
    [1,  'string']  
    {  key:  'value'  }
    Algumas Core
    Classes do Ruby

    View Slide

  20. 1  +  2

    =>  3  
    5  *  5  +  2

    =>  27  
    'Ruby  '  +  '  on  '  +  '  Rails'

    =>  "Ruby    on    Rails"

    View Slide

  21. [1,  3]  +  [2]  
    [1,  2]  -­‐  [2]  
    'I  like  Ruby  /  '  *  4

    View Slide

  22. [1,  3]  +  [2]  

    =>  [1,  3,  2]  
    [1,  2]  -­‐  [2]

    =>  [1]  
    'I  like  Ruby  /  '  *  4

    =>  "I  like  Ruby  /  I  like  Ruby  /  I  
    like  Ruby  /  I  like  Ruby  /  "

    View Slide

  23. A documentação das classes da
    linguagem é uma ótima referência
    http://www.ruby-doc.org/core-2.1.2/Array.html
    http://www.ruby-doc.org/core-2.1.2/String.html

    View Slide

  24. [].class  
    [].methods

    View Slide

  25. [].class

    =>  Array  
    [].methods

    =>  [:inspect,  :to_s,  :to_a...

    View Slide

  26. puts  'Hello  World!'

    View Slide

  27. Todo objeto da linguagem tem
    como ancestral o BasicObject
    Herança

    View Slide

  28. [].class.ancestors

    =>  [Array,  Enumerable,  Object,  
    Kernel,  BasicObject]

    View Slide

  29. true.class

    =>  TrueClass  
    false.class

    =>  FalseClass  
    nil.class

    =>  NilClass

    View Slide

  30. A linguagem é composta apenas
    por estes elementos
    Objetos e métodos

    View Slide

  31. Kernel.puts  'Hello  World'
    O próprio puts é um método

    View Slide

  32. Kernel.methods.include?  :puts  
    self.class.ancestors

    =>  [Object,  Kernel,  BasicObject]
    O próprio puts é um método

    View Slide

  33. 1.send  :+,  2  
    1.+(2)  
    1.+  2  
    1  +  2

    View Slide

  34. Métodos!

    View Slide

  35. def  hello(name)

       puts  "Hello,  #{name}"

    end  
    hello  "Jean"

    View Slide

  36. Definir classes é o alicerce de
    qualquer programa orientado a
    objetos

    View Slide

  37. class  Task

       def  initialize(name)

           @name  =  name

       end

    end

    View Slide

  38. Task.new  "Clean  the  house"

    View Slide

  39. Variáveis de instância precisam
    ser expostas através de um
    método

    View Slide

  40. class  Task

       def  initialize(name)

           @name  =  name

       end


       def  name

           @name

       end

    end

    View Slide

  41. Task.new("Clean  the  house").name

    View Slide

  42. class  Task

       attr_reader  :name


       def  initialize(name)

           @name  =  name

       end

    end

    View Slide

  43. class  Task

       attr_writer  :name


       def  initialize(name)

           @name  =  name

       end

    end

    View Slide

  44. a  =  Task.new  "Clean  the  house"  
    a.name  =  "Take  out  the  trash"  
    puts  a

    View Slide

  45. class  Task

       attr_accessor  :name


       def  initialize(name)

           @name  =  name

       end

    end

    View Slide

  46. def  hello(name)

       puts  "Hello,  #{name}"

    end  
    hello  "Jean"
    Voltando...

    View Slide

  47. A linguagem é dinâmica o que
    significa que posso abrir classes já
    definidas

    View Slide

  48. class  String

       def  hello

           "Hello,  #{self}"

       end

    end  
    "Jean".hello

    =>  "Hello,  Jean"

    View Slide

  49. Alguns métodos que são
    designados como padrão, como é
    o caso do to_s

    View Slide

  50. class  Task  
     def  initialize(name)  
           @name  =  name  
       end  
         
       def  to_s  
           @name  
       end  
    end  
    !
    puts  Task.new  "Clean  the  house"

    View Slide

  51. class  Task  
       def  +(task)  
           @name  +=  "  and  #{task.name}"  
       end

    end  
    !
    a  =  Task.new  "Clean  the  house"  
    b  =  Task.new  "Take  out  the  trash"  
    !
    puts  a  +  b

    View Slide

  52. class  Person  
       attr_accessor  :name,  :age  
    !
       def  initialize(name,  age)  
           @name,  @age  =  name,  age  
       end  
    !
       def  >(person)  
           age  >  person.age  
       end  
    end

    View Slide

  53. Herança

    View Slide

  54. class  EventTask  <  Task  
       attr_reader  :hours  
    !
       def  initialize(name,  hours)  
           @name    =  name  
           @hours  =  hours  
       end  
    !
       def  to_s  
           "#{hours.to_s}  ~  #{name}"  
       end  
    end

    View Slide

  55. class  EventTask  <  Task  
       attr_reader  :time  
    !
       def  initialize(name,  time)  
           @name,  @time  =  name,  time  
       end  
    !
       def  to_s  
           "#{time.to_s}  ~  #{name}"  
       end  
    end

    View Slide

  56. Módulos

    View Slide

  57. module  Status  
       def  done?  
           @done  ||  false  
       end  
    !
       def  done!  
           @done  =  true  
       end  
    end

    View Slide

  58. module  Status  
       def  done?  
           @done  ||  false  
       end  
    !
       def  done!  
           @done  =  true  
       end  
    end

    View Slide

  59. class  Issue  
       include  Status  
       attr_reader  :name  
    !
       def  initialize(name)  
           @name  =  name  
       end  
    end  
    !
    class  Task  
       include  Status  
    end

    View Slide

  60. issue  =  Issue.new('The  refrigerator  is  broken')  
    task    =  Task.new('Fix  the  refrigerator')  
    !
    issue.done!  
    puts  issue.done?  
    !
    task.done!  
    puts  task.done?

    View Slide

  61. Algo mais...

    View Slide

  62. 4.months  +  3.weeks  +  2.days

    View Slide

  63. Job Trends relative scale
    http://www.indeed.com

    View Slide

  64. class  Sample  
       def  method_missing(m,  *args,  &block)  
           "Method  '#{m}'  missing!"  
       end  
    end  
    !
    puts  Sample.new.some_method

    View Slide

  65. DSLs

    View Slide

  66. DSLs são linguagens que focam
    em um domínio específico

    View Slide

  67. HTMLForm.generate(STDOUT)  do  
       comment  "This  is  a  simple  HTML  form"  
       form  name:  "registration",  action:  "/"  do  
           content  "Name:"  
           input  name:  "name"  
           content  "Address:"  
           textarea  name:  "address",  rows:  6,  cols:  40  do  
               "Please  enter  your  mailing  address  here"  
           end  
    !
           button  do  
               "Submit"  
           end  
       end  
    end

    View Slide

  68. =>    
    !
    www.example.com/register.cgi'  method='GET'  
    enctype='application/x-­‐www-­‐form-­‐urlencoded'>  
       Name:  
         
         
       Address:  
               Please  enter  your  mailing  address  here  
         
    !
       Submit  

    View Slide

  69. A facilidade em criar DSLs em
    Ruby é um dos maiores poderes
    da linguagem

    View Slide

  70. View Slide

  71. GEMS

    View Slide

  72. RubyGems é o gerenciador de
    pacotes padrão do Ruby

    View Slide

  73. 3,689,469,346
    88,928
    downloads
    gems

    View Slide

  74. $ _

    View Slide

  75. gem  list

    View Slide

  76. http://www.rubygems.org
    http://guides.rubygems.org

    View Slide

  77. Rails
    Ruby on

    View Slide

  78. gem  install  rails

    View Slide

  79. Arquitetura de model, view e
    controller

    View Slide

  80. Implementado pela 

    primeira vez nos

    anos 70s

    View Slide

  81. Browser
    Web Server
    1

    View Slide

  82. Routes
    Browser
    Web Server
    1

    View Slide

  83. Associam uma URL para
    determinada action de um
    controller
    Routes

    View Slide

  84. Routes
    Controller
    Browser
    Web Server
    1
    2

    View Slide

  85. Contém a lógica de associação
    entre os recursos e as views
    Controllers

    View Slide

  86. Routes
    Controller
    Models
    Browser
    Web Server
    1
    2
    3
    4

    View Slide

  87. Representam os dados da
    aplicação com validação,
    associação e mais
    Models

    View Slide

  88. Routes
    Controller
    Models View
    Browser
    Web Server
    1
    2
    3
    4 5
    6

    View Slide

  89. Representam os recursos em um
    determinado formato (HTML, XML,
    JSON)
    Views

    View Slide

  90. Routes
    Controller
    Models View
    Browser
    Web Server
    1
    2
    3
    4 5
    6
    7
    8

    View Slide

  91. Routes
    Controller
    Models View
    Browser
    Web Server
    1
    2
    3
    4 5
    6
    7
    8

    View Slide

  92. rails  new  task_manager

    View Slide

  93. bundle  install  -­‐-­‐path  vendor/bundle

    View Slide

  94. Cria a aplicação e instala suas
    dependências

    View Slide

  95. View Slide

  96. Bundle constrói o mapa de
    dependências e mantém as gems
    adequadas para o funcionamento
    da aplicação

    View Slide

  97. As dependências devem ser
    indicadas no arquivo Gemfile

    View Slide

  98. Arquivo Gemfile.lock mantém a
    lista com a exata versão das gems
    instaladas

    View Slide

  99. gem  install  bundler

    View Slide

  100. bundle  install

    View Slide

  101. Bundle nos auxilia a executar a
    versão correta da gem

    View Slide

  102. bundle  exec  rails  server

    View Slide

  103. View Slide

  104. rails  generate  scaffold  Task  title:string

    View Slide

  105. • Migration
    • Model
    • Route
    • Controller
    • Views

    View Slide

  106. rake  db:migrate

    View Slide

  107. rake  routes

    View Slide

  108. Obrigado!

    View Slide