Slide 1

Slide 1 text

Do Ruby ao Ruby on Rails em 3hs

Slide 2

Slide 2 text

http://jcemer.com

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

Ruby 1994 Ruby on 
 Rails 2004 Linguagem Framework

Slide 10

Slide 10 text

Perl Smalltalk Lisp Python Sistema de objetos Funcional

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

Ruby

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

$ _

Slide 17

Slide 17 text

Ruby é uma linguagem interpretada e dinâmica

Slide 18

Slide 18 text

$ irb Interactive Ruby Shell

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

1  +  2
 =>  3   5  *  5  +  2
 =>  27   'Ruby  '  +  '  on  '  +  '  Rails'
 =>  "Ruby    on    Rails"

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

[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  /  "

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

[].class   [].methods

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

puts  'Hello  World!'

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

Métodos!

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

Definir classes é o alicerce de qualquer programa orientado a objetos

Slide 37

Slide 37 text

class  Task
    def  initialize(name)
        @name  =  name
    end
 end

Slide 38

Slide 38 text

Task.new  "Clean  the  house"

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

class  Task
    def  initialize(name)
        @name  =  name
    end
 
    def  name
        @name
    end
 end

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

class  Task
    attr_reader  :name
 
    def  initialize(name)
        @name  =  name
    end
 end

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

class  Task
    attr_accessor  :name
 
    def  initialize(name)
        @name  =  name
    end
 end

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

class  String
    def  hello
        "Hello,  #{self}"
    end
 end   "Jean".hello
 =>  "Hello,  Jean"

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

Herança

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

Módulos

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

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

Slide 60

Slide 60 text

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

Slide 61

Slide 61 text

Algo mais...

Slide 62

Slide 62 text

4.months  +  3.weeks  +  2.days

Slide 63

Slide 63 text

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

Slide 64

Slide 64 text

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

Slide 65

Slide 65 text

DSLs

Slide 66

Slide 66 text

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

Slide 67

Slide 67 text

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

Slide 68

Slide 68 text

=>     !      Name:                  Address:         !    Submit  

Slide 69

Slide 69 text

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

Slide 70

Slide 70 text

No content

Slide 71

Slide 71 text

GEMS

Slide 72

Slide 72 text

RubyGems é o gerenciador de pacotes padrão do Ruby

Slide 73

Slide 73 text

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

Slide 74

Slide 74 text

$ _

Slide 75

Slide 75 text

gem  list

Slide 76

Slide 76 text

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

Slide 77

Slide 77 text

Rails Ruby on

Slide 78

Slide 78 text

gem  install  rails

Slide 79

Slide 79 text

Arquitetura de model, view e controller

Slide 80

Slide 80 text

Implementado pela 
 primeira vez nos
 anos 70s

Slide 81

Slide 81 text

Browser Web Server 1

Slide 82

Slide 82 text

Routes Browser Web Server 1

Slide 83

Slide 83 text

Associam uma URL para determinada action de um controller Routes

Slide 84

Slide 84 text

Routes Controller Browser Web Server 1 2

Slide 85

Slide 85 text

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

Slide 86

Slide 86 text

Routes Controller Models Browser Web Server 1 2 3 4

Slide 87

Slide 87 text

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

Slide 88

Slide 88 text

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

Slide 89

Slide 89 text

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

Slide 90

Slide 90 text

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

Slide 91

Slide 91 text

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

Slide 92

Slide 92 text

rails  new  task_manager

Slide 93

Slide 93 text

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

Slide 94

Slide 94 text

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

Slide 95

Slide 95 text

No content

Slide 96

Slide 96 text

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

Slide 97

Slide 97 text

As dependências devem ser indicadas no arquivo Gemfile

Slide 98

Slide 98 text

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

Slide 99

Slide 99 text

gem  install  bundler

Slide 100

Slide 100 text

bundle  install

Slide 101

Slide 101 text

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

Slide 102

Slide 102 text

bundle  exec  rails  server

Slide 103

Slide 103 text

No content

Slide 104

Slide 104 text

rails  generate  scaffold  Task  title:string

Slide 105

Slide 105 text

• Migration • Model • Route • Controller • Views

Slide 106

Slide 106 text

rake  db:migrate

Slide 107

Slide 107 text

rake  routes

Slide 108

Slide 108 text

Obrigado!