O documento discute o framework Ruby on Rails para desenvolvimento web. Em 3 frases:
Ruby on Rails é um framework popular para desenvolvimento web full-stack utilizando a linguagem Ruby. O framework utiliza o padrão MVC e convenções para gerar automaticamente muitos dos artefatos de uma aplicação como modelos, controladores e visões. Apresenta exemplos de como gerar scaffolds, rotas, controladores e visões em Ruby on Rails para construir rapidamente uma aplicação simples de blog.
4. ● Criação
● Objectivos principais
● Inspirada em Perl,
Smalltalk, Eiffel, Ada
e Lisp
RUBY
5. Tudo é um objecto. Até os tipos primitivos!
irb> 3.times { puts "Eu amo Ruby <3" }
Eu amo Ruby <3
Eu amo Ruby <3
Eu amo Ruby <3
irb> nil.inspect
=> "nil"
irb> nil.to_s
=> ""
irb> nil.to_i
=> 0
irb> nil.nil?
=> true
irb> 3.14159.negative?
=> false
irb> 1_500_000 == 1500000
=> true
RUBY
6. Tudo é um objecto. Até os tipos primitivos!
irb> [1,2,3].max
=> 3
irb> soma = 0
irb> [1,2,3].each { |n| soma += n }
irb> soma
=> 6
irb> [1,2,3].inject { |acc, n| acc += n }
=> 6
irb> [1,2,3].inject(&:+)
=> 6
RUBY
7. Tudo é um objecto. Até os tipos primitivos!
irb> my_hash = {a: 1, b: 'foo', c: [1,2,3]}
=> {:a=>1, :b=>"foo", :c=>[1, 2, 3]}
irb> my_hash[:b]
=> "foo"
irb> my_hash.values
=> [1, "foo", [1, 2, 3]]
RUBY
8. Semelhanças
● Garbage Collector
● Tipagem forte
○ Ruby: dinâmica / Java: estática
● Public, Private, Protected methods
DO JAVA PARA O RUBY
9. Diferenças
● Sem compilação (interpretado)
● end ao invés de colchetes {}
● require ao invés de import
● Sem declarações de tipos a = [1,2,3]vs int[] a = {1,2,3};
● foo = Foo.new("hi") ao invés de Foo foo = new Foo("hi")
● Construtor é sempre chamado de initialize
● Variáveis de instância são todas privadas
DO JAVA PARA O RUBY
10. class Animal
def say
nil
end
end
class Dog < Animal
def say
'Woff'
end
end
class Fox < Animal
# what does the fox say?
end
> Animal.new.say
=> nil
> Dog.new.say
=> "Woff"
> Fox.new.say
=> nil
RUBY
11. class Counter
def initialize
@value = 0
end
def add
@value += 1
end
def current
@value
end
end
> counter = Counter.new
=> #<Counter:0x000000034ca448
@value=0>
> counter.current
=> 0
> counter.add
=> 1
> counter.current
=> 1
> counter.value
NoMethodError: undefined method `value'
> counter.@value
SyntaxError:
RUBY
12. ● Matz’s Ruby Interpreter (MRI) / CRuby
○ Oficial, implementado em C
○ Acesso a bibliotecas escritas em C
● JRuby
○ Implementado em Java, roda na JVM
○ Acesso a bibliotecas escritas em Java
● RubyMotion
○ Implementado em Objective-C / Cocoa
○ Gera binários nativos para iOS, OS X e Android
● mruby
○ Versão embutível do MRI, para sistemas embarcados
○ Ideal para rodar Ruby em Raspberry Pi, IoTs, etc.
Interpretadores Ruby
RUBY
15. O que é o Ruby on Rails?
● Framework para desenvolvimento Web
● Open source
● Full-stack: do banco de dados ao cliente (browser)
● RESTful
● Valoriza a convenção ao invés da configuração
RUBY ON RAILS
16. $ gem install rails
$ rails new semana-academica --database=postgresql
$ cd semana-academica
├── app
├── bin
├── config
├── db
├── Gemfile
├── Gemfile.lock
├── lib
├── log
├── public
├── test
└── vendor
app/
├── assets
├── channels
├── controllers
├── helpers
├── jobs
├── mailers
├── models
└── views
RUBY ON RAILS
17. $ rails db:create
$ rails server
$ xdg-open http://localhost:3000
RUBY ON RAILS
20. MVC - Camada de dados + modelos
class CreatePosts < ActiveRecord::Migration[5.0]
def change
create_table :posts do |t|
t.string :title
t.text :body
t.timestamps
end
end
end
class Post < ApplicationRecord
end
RUBY ON RAILS
21. MVC - Camada de controladores + rotas
$ rails routes
Prefix Verb URI Pattern Controller#Action
posts GET /posts(.:format) posts#index
POST /posts(.:format) posts#create
new_post GET /posts/new(.:format) posts#new
edit_post GET /posts/:id/edit(.:format) posts#edit
post GET /posts/:id(.:format) posts#show
PATCH /posts/:id(.:format) posts#update
PUT /posts/:id(.:format) posts#update
DELETE /posts/:id(.:format) posts#destroy
Rails.application.routes.draw do
resources :posts
end
RUBY ON RAILS
22. MVC - Camada de controladores + rotas
class PostsController < ApplicationController
# GET /posts
# GET /posts.json
def index
@posts = Post.all
end
# GET /posts/1
# GET /posts/1.json
def show
@post = Post.find(params[:id])
end
# GET /posts/new
def new
@post = Post.new
end
RUBY ON RAILS
30. Do Java para Ruby
Performance
Ruby 2.3 ~ 4% mais lento que Java 8
https://github.com/famzah/langs-performance
http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=yarv&lang2=java