• Nenhum resultado encontrado

Ruby on Rails. Aprendizado evolutivo do Ruby até o desenvolvimento de aplicações em Rails

N/A
N/A
Protected

Academic year: 2021

Share "Ruby on Rails. Aprendizado evolutivo do Ruby até o desenvolvimento de aplicações em Rails"

Copied!
118
0
0

Texto

(1)

Ruby on Rails

(2)

Ruby on Rails

Aprendizado evolutivo do Ruby até o desenvolvimento de aplicações em Rails

(3)

Roteiro

Primeiro Dia Ruby Básico Ruby OO Rails Básico Segundo Dia Rails Avançado

(4)

Palestrantes

Glauco Roberto Munsberg dos Santos

Acadêmico da C. Computação

Presidente da Empresa Júnior Hut8 Presidente do CREJ

glaucoroberto.com

glaucomunsberg@gmail.com (53)81233559

(5)

Palestrantes

Daniel Krolow Retzlaff

Acadêmico da C. Computação

Dir. Adm. Fin. da Empresa Júnior Hut8

danielkretzlaff@gmail.com (53)91753766

(6)

Ruby

$ ruby -v ruby 2.1.* $ rails -v rails 4.1.* Vamos testar!

(7)

Ruby on Rails

(8)

Introdução a Ruby

Uma linguagem Dinâmica, Open Source com foco na Simplicidade e na

Produtividade. Tem uma sintaxe elegante

(9)

Introdução a Ruby

Curiosidades da Linguagem/Historia

O seu criador: Yukihiro Matz Matsumoto

Linguagens Favoritas: Perl, Smalltalk, Eiffel, Ada, e Lisp Nascido : 1995

(10)

Introdução a Ruby

Curiosidades da Linguagem/Historia

“Eu queria uma linguagem interpretada que fosse mais poderosa que o Perl e mais orientada a objetos do que o

(11)

Introdução a Ruby

Curiosidades da Linguagem/Historia

A quarta linguagem mais usada. Cresce a 10% ao ano.

(12)

O que faz o Rails?

Ruby on Rails é um framework de

desenvolvimento web (gratuito e de

código aberto) otimizado para a

produtividade sustentável e da diversão do programador. Ele permite que você

escreva código de forma elegante,

favorecimento a convenção ao invés de

(13)

O que faz o Rails?

Curiosidades do Framework/Historia

Rails foi criado em 2003 por David

(14)

O que faz o Rails?

Conceitos básicos de estrutura e organização do framework

DRY - Don't Repeat Yourself

A idéia por traz deste conceito no Rails, é a de proporcionar ao programador métodos que abstraia ao máximo todo o

(15)

O que faz o Rails?

Conceitos básicos de estrutura e organização do framework

CoC - Convention over Configuration

Ruby On Rails é estudando bastante todas as suas técnicas para seguir rigorosamente seus "padrões de sucesso".

(16)

O que faz o Rails?

Conceitos básicos de estrutura e organização do framework

Agilidade

Ruby On Rails segue fielmente a maioria dos conceitos do desenvolvimento Agile, TDD, BDD e DDD.

(17)

O que faz o Rails?

Conceitos básicos de estrutura e organização do framework

Foco no negócio

Ao criar um projeto, 90% do tempo será

investido fazendo o que mais agrega valor ao sistema, que são as regras de negócio,

layout, usabilidade, modelagem e testes, os outros 10% serão gastos configurando

(18)

O que faz o Rails?

Conceitos básicos de estrutura e organização do framework

A favorita das startups

Muitas das startups estão adotando Rails em alguns dos seus projetos, pois permite a eles se empenharem no que mais almejam, que é inovar em seus projeto, desenvolvendo-o em curto prazo.

(19)

O que faz o Rails?

Conceitos básicos de estrutura e organização do framework

Problemas grandes, soluções pequenas

Diferente das "linguagens clássicas" (Java, C#, C++, PHP) Ruby possui uma sintaxe

simplista e muitos métodos poderosos que facilitam muito a vida do programador.

(20)

O que faz o Rails?

Conceitos básicos de estrutura e organização do framework

Problemas grandes, soluções pequenas

Diferente das "linguagens clássicas" (Java, C#, C++, PHP) Ruby possui uma sintaxe

simplista e muitos métodos poderosos que facilitam muito a vida do programador.

(21)

O que faz o Rails?

Conceitos básicos de estrutura e organização do framework

Problemas grandes, soluções pequenas

Diferente das "linguagens clássicas" (Java, C#, C++, PHP) Ruby possui uma sintaxe

simplista e muitos métodos poderosos que facilitam muito a vida do programador.

(22)

Ruby on Rails

(23)

Ruby

$ irb

$ ruby <file>

(24)

Ruby

diz = “Meu nome é meu nome”

puts diz

diz[‘meu nome’] = “glauco roberto”

puts diz

puts diz.upcase

(25)

Ruby

(26)

Ruby

1.class

“a”.class

self.class

(27)

Ruby

(28)

Ruby

$ 1.methods

$ 1.methods.sort

(29)

Ruby

(30)

Ruby

def soma a, b a + b end soma 1,2 soma(1,2) Método e Retorno

(31)

Ruby

def teste(*parametros)

parametros.each { |parametro| puts parametro } end

teste 1,2,3,4,5,6,7 teste("a",1,2.2)

(32)

Ruby

(33)

Ruby

p1 = lambda do

puts “olá código p1” end

p2 = Proc.new {

puts “olá código p2”

}

p2.call

p1.call

(34)

Ruby

(35)

Ruby

Constante = 1 Constante = 2

(36)

Ruby

(37)

Ruby

a = “texto1”

b = “O #{a} está inserido”

puts b

(38)

Ruby

puts “algo”.object_id puts “algo”.object_id puts :“algo”.object_id puts :algo.object_id puts :symbol.object_id

(39)

Ruby

(40)

Ruby

a = -2..2 b = -2..2 a.each do |v| puts “#{v}” end b.each do |v| puts “#{v}” end intervalo Numérico

(41)

Ruby

(42)

Ruby

def testa_valor val if val

puts “#{val} é considerado verdadeiro pelo Ruby” else

puts “#{val} não é considerado verdadeiro pelo Ruby” end

end

(43)

Ruby

(44)

Ruby

arr1 = []

arr1 = [‘a’,1,:aaaa]

arr2 = 0..10

arr2.inject(0) do |val, it|

val + it

end

(45)

Ruby

(46)

Ruby

h = {1 => “valor algo”, “b”=> 1234, :posicao_tal => :posit } Hashes

(47)

Ruby

(48)

Ruby

a = 0 if a == 0 puts “zero” elsif a == 1 puts “um” else

puts “não sei que numero é este”

end

(49)

Ruby

(50)

Ruby

a = 5 case a when 1..3 puts “entre 1 e 3” when 4 puts “a é 4” when “algo” puts “É algo!” else

puts “Nenhuma anterior” end

(51)

Ruby

(52)

Ruby

i = [11,21,3,54,6] while b = i.pop puts b end Classes e Métodos

(53)

Ruby

(54)

Ruby

for i in 1..5 puts i end for a in %w{a b c d} puts a end Classes e Métodos

(55)

Ruby

(56)

Ruby

nome #Var. Local

@nome #Var. de Instância

@@nome #Var. de Classe

$nome #Var. global

(57)

Ruby

(58)

Ruby

class Carro def initialize(fabricante,modelo,ano) @fabricante = fabricante @modelo = modelo @ano = ano @chassi = “aushaiu1ash” end

attr_accessor :fabricante, :modelo, :ano

attr_reader :chassi

attr_writer :<Outra coisa qualquer>

end

clio = Carro.new “Renaut”, “clio”, “2000” puts clio.modelo

(59)

Ruby

require ‘./arquivo_anterior’ class Clio < Carro

@@fabricante = “Renault” @@modelo = “clio” def initialize(ano) super(@@fabricante,@@modelo,ano) end end Classes e Métodos

(60)

Ruby

require ‘arquivo_anterior_1’ class Fabrica def self.Clio Clio.new(2003) end def self.Megane

Carro.new “Renault”, “Megane”, 2003 end

end

(61)

Ruby

(62)

Ruby

ClienteEspecial -> cliente_especial.rb Classe -> Primeira maiuscula

(63)

Rails

(64)

$ rails new app $ rails s

on Rails

(65)

$ rails g scaffold task title:string description:text completed:boolean

on Rails

(66)

$ rake db:migrate

on Rails

(67)

# You can have the root of your site routed #root 'welcome#index'

root :to => "tasks#index"

on Rails

(68)

Rails

(69)

$ rails COMMAND

generate (alias “g”) console (alias “c”)

server (alias “s”) // $ rails s

dbconsole (alias “db”) new

(70)

$ bundle update | install $ rake db:migrate

(71)

Rails

(72)
(73)

Ruby

(74)

Ruby

$ rails generate migration task created_at:datetime

(75)

Ruby

$ rake db:migrate

(76)

Ruby

(77)

Ruby

# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder gem 'jbuilder', '~> 2.0'

# bundle exec rake doc:rails generates the API under doc/api. gem 'sdoc', '~> 0.4.0', group: :doc

# Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring

gem 'spring', group: :development

gem "twitter-bootstrap-rails"

(78)

Ruby

$ bundle update

(79)

Ruby

$ rails generate bootstrap:install static

(80)

Ruby

* defined in the other CSS/SCSS files in this directory. It is generally better to create a new

* file per style scope. * *= require bootstrap_and_overrides *= require_tree . *= require_self */ on Rails

(81)

Ruby

Use Font Awesome icons (default)

To use Glyphicons sprites instead of Font Awesome, replace with "require twitter-bootstrap-static/sprites"

=require twitter-bootstrap-static/fontawesome */

@import "twitter/boostrap"

(82)

Ruby

$ rails g bootstrap:themed Tasks

(83)

Ruby

Vamos Melhorar!

$ rails g controller Principal

$ rails g bootstrap:themed Principal

(84)

Ruby

index.erb.html

<div class="list-group">

<a href="#" class="list-group-item disabled">

Cadastros Básicos </a>

<a href="/tasks" class="list-group-item">Trasks</a>

</div>

(85)

Ruby

routes … resources :principal root 'principal#index' … on Rails

(86)

Ruby

Aplicações Avançadas

(87)

Ruby

A Hut8 está com um problema:

Quer ter um cadastro de empregados e saber algumas informações como

Nome Sobrenome Idade Gênero

Categoria na Empresa Email para contato

Como fazer isso de forma rápida?!

(88)

Ruby

$ rails g scaffold Nivel tipo:string

(89)

Ruby

$ rails g scaffold Sexo tipo:string

(90)

Ruby

$ rails g scaffold Funcionario nome:string sobrenome:string data_nas:date sexo: references nivel:references email:string

(91)

Ruby

$ rails g scaffold Empresa nome_do_projeto:string funcionario:references data_da_fundacao:date

(92)

Ruby

Principal/index.erb.html

adicionar:

<a href="/nivels" class="list-group-item">Niveis</a> <a href="/sexos" class="list-group-item">Sexos</a>

<a href="/funcionarios" class="list-group-item">Funcionarios</a> <a href="#" class="list-group-item disabled">

Programas </a>

<a href="/empresas" class="list-group-item">Empresa</a>

(93)

Ruby

No arquivo da model nivel.rb: has_many :funcionarios

No arquivo da model sexo.rb: has_many :funcionarios

No arquivo da model funcionario.rb: has_many :empresas

(94)

Ruby

# Na controller funcionario_controller.rb

# Add Nivel a Tabela Funcionario

if params[:nivel]

@funcionario.nivel = Funcionario.find(params[:nivel]) end

# Add Sexo a Tabela Funcionario

if params[:sexo]

@funcionario.sexo = Funcionario.find(params[:sexo]) end

(95)

Ruby

# Na Controller empresa_controller.rb

# Add Funcionario a Tabela Empresa

if params[:funcionario]

@empresa.funcionario = Empresa.find(params[:funcionario]) end

(96)

Ruby

Vejamos o que deu :D

(97)

Ruby

# No_form.html.erb do funcionario

<div> <p> <%= f.label :sexo_id %><br /> <%= f.collection_select(:sexo_id, Sexo. order(“tipo”), :id, :tipo, {:prompt => true}) %> </p> </div>

<div> <p> <%= f.label :nivel_id %><br /> <%= f.collection_select(:nivel_id, Nivel.order(“tipo”), :id, :tipo, {:prompt => true}) %> </p> </div>

(98)

Ruby

# Na index.html.erb do funcionario:

<td><%= funcionario.sexo.tipo %></td> <td><%= funcionario.nivel.tipo %></td> #Na show, assim:

<p> <b>Sexo:</b> <%= @funcionario.sexo.tipo %> </p> <p> <b>Nivel:</b> <%= @funcionario.nivel.tipo %> </p>

(99)

Ruby

# Na _form.html.erb do Empresa:

<p> <%= f.label :funcionario_id %><br /> <%= f.collection_select(:funcionario_id, Funcionario.order(‘nome’), :id, :nome, {:prompt => true}) %> </p></div>

(100)

Ruby

# Na index.html.erb da empresa: <td><%= empresa.funcionario.nome %></td> # Na show.html.erb da empresa: <p> <b>Funcionario:</b> <%= @empresa.funcionario.nome %> </p> on Rails

(101)

Ruby

Aplicações Avançadas - Com Estilo

(102)

Ruby

$ rails g bootstrap:themed nivels $ rails g bootstrap:themed sexos

(103)

Ruby

Validações

(104)

Ruby

class Nivel < ActiveRecord::Base has_many :funcionarios

validates :tipo, presence: true

end

(105)

Ruby

Validações Avançadas

(106)

Ruby

class Task < ActiveRecord::Base

validates :title, length: { minimum: 2 }

validates :description, length: { maximum: 500 }

end

(107)

Ruby

Semear

(108)

Ruby

Sexo.create(tipo:"Masculino")

Sexo.create([{tipo:"Feminino"},{tipo:"Não declarado"}])

Nivel.create([{ tipo: "Diretor"},{tipo:"Conselheiro"}, {tipo:"Associado"},

{tipo:"Trainee"} ])

(109)

Ruby

Meu Layout

(110)

Ruby

<nav class="navbar navbar-default" role="navigation">

<div class="container-fluid">

<div class="navbar-header">

<a class="navbar-brand" href="#">

<img alt="Brand" src="<%= image_tag 'hut8_logo.jpg', :style => "height: 50px;" %>"> </a> </div> </div> </nav> <div class="container"> <div class="col-md-12"> <%= yield %> </div> </div> on Rails

(111)

Ruby

Multiplos Layouts

(112)

Ruby

… <div class="container"> <div class="col-md-3"> MENU </div> <div class=”col-md-9”> <%= yield %> </div> </div>on Rails

(113)

Ruby

class NivelsController < ApplicationController

before_action :set_nivel, only: [:show, :edit, :update, :destroy] layout "application_menu"

(114)

Ruby

Internacionização

(115)

Ruby

config.i18n.available_locales = [:en, :"pt-BR"] config.i18n.default_locale = :"pt-BR"

(116)

Ruby

class PrincipalController < ApplicationController before_filter :set_locale

def set_locale

I18n.locale = params[:locale] || I18n.default_locale

end end

(117)

Ruby

<ul class="nav navbar-nav navbar-right">

<% if I18n.locale == I18n.default_locale %>

<%= link_to "English", :locale=>'en'%>

<% else %>

<%= link_to "Portugues", :locale=>'pt-BR'%>

<%end%>

</ul>

(118)

Ruby

Espero que tenham gostado :)

Referências

Documentos relacionados

Não será permitida a entrada no local e a realização da prova escrita, ao candidato que não estiver fazendo o uso de máscara.. §1º -Sugere-se que o candidato leve uma

O programa é executado por meio de programas de trabalho, nos termos do [artigo 110.º] do Regulamento Financeiro. Além disso, os programas de trabalho devem indicar os montantes

Prefeitura Municipal de Viana Gabinete do Prefeito DECRETO Nº 009/2016 ANEXO II Diretor Executivo de Tributos Diretor Executivo de Contabilidade, Orçamento e Finanças

Atenção Integrada às Doenças Prevalentes na Infância, desenvolvida pela Organização Mundial da Saúde e Fundo das Nações Unidas para a Infância, pretende reduzir a

2 – Fundamentando a sua pretensão, os embargantes começam por dizer que dão por reproduzida a matéria alegada pelo também fiador, seu filho, C…. Dizem que a

4634 MANUEL ALEXANDRE LOPES GOMES FERREIRA 7099 MANUEL AUGUSTO DE SANCHO FONTES RODRIGUES 2290 MANUEL LUDGERO SOUSA LOUREIRO HORTA E MELO 4114 MANUEL MARIA PINA DA SILVA GARCIA

É preciso afirmar que o núcleo fundamental das religiões não está em provar a existência de Deus, em refutar aqueles que não creem, em procurar identificar uma verdade a

865 de 29 de novembro de 2016 e o resultado será disponibilizado no endereço eletrônico PROEC: http://www.unifesp.br/reitoria/proex/ Parágrafo único: Não caberá recurso para