Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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)

C5df370a883b65279af5a7ca94a5eed7?s=128

Jean Carlo Emer

September 25, 2014
Tweet

Transcript

  1. Do Ruby ao Ruby on Rails em 3hs

  2. http://jcemer.com

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

  6. Ruby on Rails é um framework fullstack para construção de

    aplicações web Ruby on Rails
  7. O front-end é a marcação, aparência, acessibilidade, usabilidade e performance

    da sua aplicação em múltiplas plataformas Front-end
  8. O back-end é responsável por gerenciar e gerar representações de

    recursos Back-end
  9. Ruby 1994 Ruby on 
 Rails 2004 Linguagem Framework

  10. Perl Smalltalk Lisp Python Sistema de objetos Funcional

  11. None
  12. Ruby

  13. None
  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
  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
  16. $ _

  17. Ruby é uma linguagem interpretada e dinâmica

  18. $ irb Interactive Ruby Shell

  19. Numeric String Symbol Array Hash 1,  2,  3.1   'string'

      :symbol   [1,  'string']   {  key:  'value'  } Algumas Core Classes do Ruby
  20. 1  +  2
 =>  3   5  *  5  +

     2
 =>  27   'Ruby  '  +  '  on  '  +  '  Rails'
 =>  "Ruby    on    Rails"
  21. [1,  3]  +  [2]   [1,  2]  -­‐  [2]  

    'I  like  Ruby  /  '  *  4
  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  /  "
  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
  24. [].class   [].methods

  25. [].class
 =>  Array   [].methods
 =>  [:inspect,  :to_s,  :to_a...

  26. puts  'Hello  World!'

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

  28. [].class.ancestors
 =>  [Array,  Enumerable,  Object,   Kernel,  BasicObject]

  29. true.class
 =>  TrueClass   false.class
 =>  FalseClass   nil.class
 =>

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

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

  32. Kernel.methods.include?  :puts   self.class.ancestors
 =>  [Object,  Kernel,  BasicObject] O próprio

    puts é um método
  33. 1.send  :+,  2   1.+(2)   1.+  2   1

     +  2
  34. Métodos!

  35. def  hello(name)
    puts  "Hello,  #{name}"
 end   hello  "Jean"

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

    objetos
  37. class  Task
    def  initialize(name)
        @name  =

     name
    end
 end
  38. Task.new  "Clean  the  house"

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

  40. class  Task
    def  initialize(name)
        @name  =

     name
    end
 
    def  name
        @name
    end
 end
  41. Task.new("Clean  the  house").name

  42. class  Task
    attr_reader  :name
 
    def  initialize(name)
  

         @name  =  name
    end
 end
  43. class  Task
    attr_writer  :name
 
    def  initialize(name)
  

         @name  =  name
    end
 end
  44. a  =  Task.new  "Clean  the  house"   a.name  =  "Take

     out  the  trash"   puts  a
  45. class  Task
    attr_accessor  :name
 
    def  initialize(name)
  

         @name  =  name
    end
 end
  46. def  hello(name)
    puts  "Hello,  #{name}"
 end   hello  "Jean"

    Voltando...
  47. A linguagem é dinâmica o que significa que posso abrir

    classes já definidas
  48. class  String
    def  hello
        "Hello,  #{self}"


       end
 end   "Jean".hello
 =>  "Hello,  Jean"
  49. Alguns métodos que são designados como padrão, como é o

    caso do to_s
  50. class  Task    def  initialize(name)          @name

     =  name      end            def  to_s          @name      end   end   ! puts  Task.new  "Clean  the  house"
  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
  52. class  Person      attr_accessor  :name,  :age   !  

     def  initialize(name,  age)          @name,  @age  =  name,  age      end   !    def  >(person)          age  >  person.age      end   end
  53. Herança

  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
  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
  56. Módulos

  57. module  Status      def  done?        

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

     @done  ||  false      end   !    def  done!          @done  =  true      end   end
  59. class  Issue      include  Status      attr_reader  :name

      !    def  initialize(name)          @name  =  name      end   end   ! class  Task      include  Status   end
  60. issue  =  Issue.new('The  refrigerator  is  broken')   task    =

     Task.new('Fix  the  refrigerator')   ! issue.done!   puts  issue.done?   ! task.done!   puts  task.done?
  61. Algo mais...

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

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

  64. class  Sample      def  method_missing(m,  *args,  &block)    

         "Method  '#{m}'  missing!"      end   end   ! puts  Sample.new.some_method
  65. DSLs

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

  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
  68. =>  <!-­‐-­‐  This  is  a  simple  HTML  form  -­‐-­‐>  

    ! <form  name='registration'  action='http:// www.example.com/register.cgi'  method='GET'   enctype='application/x-­‐www-­‐form-­‐urlencoded'>      Name:      <input  name='name'  type='text'/>            Address:      <textarea  name='address'  rows='6'  cols='40'          Please  enter  your  mailing  address  here      </textarea>   !    <button  type='submit'>Submit</button>   </form>
  69. A facilidade em criar DSLs em Ruby é um dos

    maiores poderes da linguagem
  70. None
  71. GEMS

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

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

  74. $ _

  75. gem  list

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

  77. Rails Ruby on

  78. gem  install  rails

  79. Arquitetura de model, view e controller

  80. Implementado pela 
 primeira vez nos
 anos 70s

  81. Browser Web Server 1

  82. Routes Browser Web Server 1

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

  84. Routes Controller Browser Web Server 1 2

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

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

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

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

    4 5 6
  89. Representam os recursos em um determinado formato (HTML, XML, JSON)

    Views
  90. Routes Controller Models View Browser Web Server 1 2 3

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

    4 5 6 7 8
  92. rails  new  task_manager

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

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

  95. None
  96. Bundle constrói o mapa de dependências e mantém as gems

    adequadas para o funcionamento da aplicação
  97. As dependências devem ser indicadas no arquivo Gemfile

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

    gems instaladas
  99. gem  install  bundler

  100. bundle  install

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

  102. bundle  exec  rails  server

  103. None
  104. rails  generate  scaffold  Task  title:string

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

  106. rake  db:migrate

  107. rake  routes

  108. Obrigado!