Vous êtes sur la page 1sur 55

http://marvinlemos.net http://zerokol.

com

LU: 30-01-12

Oficinas de Vero UESPI 2012

RubyonRails
@marvinlemos | @zerokol

MiniCurso:

SOBREOPROFESSOR
MarcusVinciusdeSousaLemos

MestreemInformticaAplicadapelaUniver.deFortalezaUnifor ProfessordaUniversidadeEstadualdoPiauUespi ProfessordaFaculdadedeTecnologiadeTeresinaCET AuditorFiscaldeControleExterno(Informtica)TCE/PI

marvinlemos@gmail.com http://www.marvinlemos.net @marvinlemos

SOBREOPROFESSOR
AntonioJosdeOliveiraAlves

BacharelemCinciasdaComputaoUESPI GerentedeprojetosnaEmpresaCajuinaLabs cajuinalabs.com.br

aj.zerokol@gmail.com|aj.alves@cajuinalabs.com.br http://zerokol.com @zerokol

OBJETIVOS

ImersonalinguagemdeprogramaoRuby ApresentaroframeworkRails LevarosalunosdoZERO/InicianteaoBsico IntermedirionoRubyonRails

OqueRubye oqueRails?

OqueoRuby
#mais_poderosa_que_PERL_e_mais_orientada_a_objeto_que_PYTHON

Yukihiro"Matz"Matsumoto 12
10 @yukihiro_matz 8 6 4 2 0

#1995
Row 1 Row 2 Row 3 Row 4

Column 1 Column 2 Column 3

#Japo

#script

#12_ling_de prog_+_pop_do_mundo

OqueoRuby

Interpretada Multiparadigma

#programao_funcional#orientada_a_objetos#imperativa#reflexiva

Tipagemdinmicaeforte

OqueoRuby

gerenciamentodememriaautomtico ltimaverso:1.9.2p290(15dejulhode2011) Influenciadapor:Ada,CLU,Dylan,Eiffel,Lisp, Perl,Python,Scheme,Smalltalk Influenciou:Falcon,Fantom,Groovy,Ioke,Nu Pginaoficial www.rubylang.org

OqueoRails
#meta-framework

@dhh
DavidHeinemeierHansson

#open_source

#2004 #MVC

#framework

OqueoRails

DRY Conventionoverconfiguration Escalabilidade PadrodeprojetoMVC (ModelViewController)


Versoestvel:3.2.1(20dejaneirode2012)

Pginaoficial:rubyonrails.org

Mas,MVC?!

OqueoMVC

TrygveReenskaug

#smalltalk #1979

OqueoMVC

Modelviewcontroller(MVC)

Eagora, oquefalta?

ConfigurarandooAmbiente

InstalareConfiguraroRuby InstalareConfiguraroRubyGems InstalareConfiguraroRails InstalareConfiguraroDBdesua preferncia.

http://www.zerokol.com/2012/01/configurando-ambiente-ruby-on-rails-32.html http://www.geeksbr.com/2010/03/instalando-o-ruby-on-rails-no-windows.html

Enfim, RubyonRail!!!

RubyonRails
MinhaprimeiraAPP

Provadeconceito(Aula)Escola
Sistema Web para gerenciar os professores cursos e alunos de uma determinada escola, cada curso deve ter um professor e pode aceitar at 20 alunos por curso. Todos os cursos pertencem auma categoria.Osistemadevepossuirumareainterna onde o administrador cadastrar os cursos e professores.

RubyonRails
MinhaprimeiraAPP

Provadeconceito(Casa)Locadora
Sistema Web para gerenciar uma locadora de jogos de videogame. Os consoles dividemse em categorias, cada console pode ter varios jogos, a vriosjogosdecadajogo,osistemadevecontrolara disponibilidadedelocao.Htambmumcadastro deusuriosassociados,quedeveminformarsempre um estado e cidadade, exite a possibilidade de ver um histrico de locao de cada usurio. Um administrador deve cadastrar os consoles, games, estadosecidades.

RubyonRails
MinhaprimeiraAPP >railsnewminha_app

Estruturadepastas

app config db Public

>railsserver

ServidordeTeste

webrick

RubyonRails
MinhaprimeiraAPP

Estruturadepastas

app

assets controllers helbers maillers models views

RubyonRails
MinhaprimeiraAPP

Estruturadepastas

config

environments initializers locales

Arquivos

application.rb database.yml routes.rb

RubyonRails
MinhaprimeiraAPP

Estruturadepastas

db

migrate

Arquivos

seeds.rb

PastaPUBLIC

Eulhesapresento,

GIT!

OqueoGIT
#Linus_Torvalds

Semelhante ao SVN, Mercurial ... Versionador de Cdigo

GitHub Free GIT Server

OqueoGIT
InstalandoeconfigurandooGIT

Materialtimoem:http://gitref.org/ InstalaroGitnoUbuntu >sudoaptgetinstallgit Apsinstalado,configurarGit >gitconfigglobaluser.name"AJAlves" >gitconfigglobaluser.emailzerokol@ymail.com


Obs:.degrandeimportnciaadicionarsuachavepblicaaogithub, Vejacomoem:http://help.github.com/linuxsetupgit/

OqueoGIT
CadastrandoseaoGITHUB.com

Cadastrarseemhttps://github.com/

CriarnovorepositrioCreatenewRepository Moverseparaapastacriadaserversionada >cdescola Inicializareenviar >gitinit >gitadd. >gitcommitm'firstcommit' >gitremoteaddorigingit@github.com:... >gitpushoriginmaster


Ps:.NohanecessidadedeCriaroaquivoREADMEtouchREADME, elejgeradoautomaticamentepeloRails.

RubyonRails
CRUD

QuatrooperaesbsicasCRUD

Create INSERT Read(Retrived) SELECT Update UPDATE Delete(Destroy) DELETE

RubyonRails
GENERATORSGeradoresdeCdigo >railsgenerateou>railsdestroy assets controller generator helper integration_test mailer migration model observer performance_test resource scaffold scaffold_controller session_migration task

RubyonRails
GeradorSCAFFOLD CriandoModels,ViewseControllers >railsgeneratescaffold

ModelTipossuportados

:binary :boolean :date :datetime :decimal :float

:integer :primary_key :string :text :time :timestamp

RubyonRails
GeradorSCAFFOLD

CriandoModelos,ViseseControladores

ArquivodeControle

app/controllersActionController::Base app/helpers app/views app/assets app/modelsActiveRecord::Base db/migrateActiveRecord::Migration

ArquivodeViso

ArquivodeModelo

Arquivoconfig/routes.rb

RubyonRails
Migrates

MigrateMetodosdeMigrao

http://guides.rubyonrails.org/migrations.html

upFazer downDesfazer changeFazer,Desfazerbvio


Usar CHANGE

Operaedemigrao

add_column add_index create_table change_column change_table

remove_column remove_index drop_table rename_column


Usar UP e DOWN

RubyonRails
Migrates Tiposespeciais

timestamps references >rakedb:create >rakedb:migrate >rakedb:drop >rakedb:rollbackSTEP=3 >rakedb:reset


>rakedb:migrate:upVERSION=NUM

MigrandoobancocomRake

Impedindoacriaodecreated_ateupdated_at

Adicionaraconfig/application.rb config.active_record.timestamped_migrations=false

RubyonRails
Routes

resourcesRoteamentoPadro
Criarotasparaindex,show,new,edit,create,updateedestroy UsaosmetodosGET,POST,PUTeDELETE

7requestsdiferentes

Caminhos

photos_pathreturns/photos new_photo_pathreturns/photos/new edit_photo_path(:id)returns/photos/:id/edit photo_path(:id)returns/photos/:id http://guides.rubyonrails.org/routing.html

resources!=resource

RubyonRails
Routes Namespaces
namespace:admindo resources:posts end

NestedResources
resources:magazinesdo resources:ads end

Seguimentos

post,puts,get,delete match

RubyonRails
Routes Seguimentosestticos

matchcurso_especial=>courses#special

Seguimentosdinmicos

matchaluno/:id=>students#get_aluno

Nomeandorotasparagerarcaminhos

matchaluno/:id=>students#get_aluno,:as=>:aluno

Root

root:to=>'pages#main'

ExplorandocomRake >rakeroutes

RubyonRails
ModelAssociaes

Tiposdeassociao

belongs_to has_one

has_one:through

has_many

has_many:through

Opesdeassociao

:dependent=>:nullify|:destroy|:update :foreign_key
http://guides.rubyonrails.org/association_basics.html

RubyonRails
ModelValidaes

Tiposdevalidaes

validates_associated validates:email,OPO

:confirmation=>true :presence=>true :format=>{:with=>/\A[azAZ]+\z/,:message =>"Onlylettersallowed"} :length=>{:minimum=>2,:maximum=>500} :numericality=>{:only_integer=>true} :uniqueness=>true

http://guides.rubyonrails.org/active_record_validations_callbacks.html

RubyonRails
ModelCallbacks Callbacks

before_create after_create before_updade after_update before_destroy after_destroy before_add after_add before_remove after_remove
http://guides.rubyonrails.org/active_record_validations_callbacks.html

RubyonRails

PopulandocomSEEDGeradoresdeMigrations,Controllers

Seeds db/seeds.rb >rakedb:seed >rakedb:setup

db/schema.rb GeradordeMigraes
>railsgeneratecontroller

GeradordeControllers
>railsgeneratemigration

RubyonRails
ComandosActiveRecord

BrincarcomoIRB >railsconsole ActiveRecord


Model.all() Model.find() :select=> :conditions=> :joins=> :limit=> :order=> :group=>

SQLPuro

ActiveRecord::Base.connection.execute(full_query)

Transao
Item.transactiondo i=Item.lock.first i.name='Jones' i.save end

MigrardeSGBD

Configurardatabase.yml

http://guides.rubyonrails.org/active_record_querying.html

RubyonRails
Internacionalizao

Intenacionalizaocomi18n

config/application.rb

config.i18n.default_locale="ptBR"

Pastaconfig/locales
https://github.com/svenfuchs/railsi18n/blob/master/rails/locale/ptBR.yml

Ptbr ?locale=en
http://guias.rubyonrails.com.br/i18n.html

RubyonRails
HellperseLayout

Hellpers Layout

RubyonRails
Deploy Deploy==PorsuaaplicaoemProduo

Passo1:CadastrarssenoHeroku
http://heroku.com

Passo2:LeroPassoaPassodaHeroku
http://devcenter.heroku.com/articles/quickstart

Passo3:FazeroPasso4daHerokuparaRails

Continuanoprximoslide

RubyonRails
Deploy

PortardoGithubparaoHeroku >rmrf.git ConfigurarGemfile


group:development,:testdo gem'sqlite3' end group:productiondo gem'thin' gem'pg' end gem'heroku'

FacilidadesdaHeroku

Noprecisacompilarosassets Noprecisaconfigurarodatabase.yml

RubyonRails
Deploy

ReinstalararquivosGIT
>gitinit >gitadd. >gitcommitm"primeirocommit"

CriarAPPnaHeroku
>herokucreatemy_appstackcedar

DeploynaHerokuAUTOMTICOnogitpush
>gitpushherokumaster

RubyonRails
Deploy

ComandarAPPRemotamente
>sudoherokurunCOMANDOSQUAISQUER Ex:.>sudoherokurunrakedb:migrate

Comandarteis
>sudoherokukeys:add~/.ssh/id_rsa.pub >sudoherokups >herokulogs

MenuHEROKU

MyApps ServidorGit

Minha APP : http://escola.herokuapp.com

Trabalhandocom

GEMs.

RubyonRails
GemDeviseControledeAutenticao

ControledeAutenticaoDevise

https://github.com/plataformatec/devise CriarumMODELparaaatividadeEX:.users AdicionaraoGemfile gem'desvise' ConfigurarDevisenasuaAPP railsgeneratedevise:install railsgeneratedeviseMODELEx:.Seusers,aquiuser Obs:.CuidadocomoatributoEMAIL Addemconfig/envioriments/production.rb


config.action_mailer.default_url_options={:host=>'localhost:3000'}

Addemapp/views/layouts/application.html.erb
<pclass="notice"><%=notice%></p> <pclass="alert"><%=alert%></p>

RubyonRails
GemDeviseControledeAutenticao

Addemconfig/application.rbImportanteparaoHEROKU config.assets.initialize_on_precompile=false

Addlinhaabaixoaoscontrollersparanegaracesso,casooModelsejauser before_filter:authenticate_user!

OquefoiadicionadopeloDEVISE

config/initializers/devise.rb app/models/users.rb config/routes.rb

Mtodosteis

user_signed_in? current_user user_session

rails generate devise:views users

RubyonRails
GemDeclarativeAuthorizationAutorizao

ControledeAutorizaoDeclarativeAuthorization

https://github.com/stffn/declarative_authorization AdicionaraoGemfile gem'declarative_authorization' Criararquivodepermissesconfig/authorization_rules.rb


authorizationdo role:admindo has_permission_on[:users],:to=>[:manage] end role:guestdo end end privilegesdo privilege:manage,:includes=>[:index,:show,:new,:create,:edit,:update,:destroy] privilege:read,:includes=>[:index,:show] privilege:create,:includes=>[:new] privilege:update,:includes=>[:edit] privilege:delete,:includes=>[:destroy] end

RubyonRails
GemDeclarativeAuthorizationAutorizao

CriarumModelchamadoRoles >railsgeneratemodelrolename:stringdescription:string

Addrole_idemUSERS >railsgeneratemigrationAddRoleIdToUsers

add_column(:users,:role_id,:integer)

RelacionandoUserseRoles

EmUSERS.rbadd:belongs_to:role EmROLES.rbadd:has_many:users

RubyonRails
GemDeclarativeAuthorizationAutorizao

Addaapp/controllers/applicarion_controller.rb

#Filtrododeclarativeauthorizationparatodososcontrollers before_filter{|c|Authorization.current_user=c.current_user} #mensagememcasodeusurionoautorizado protected defpermission_denied flash[:error]="Desculpe,vocnotempermiso." redirect_toroot_url end

RubyonRails
GemDeclarativeAuthorizationAutorizao

Addaapp/models/user.rb ##############################CALLBACK before_create:setting_user_default defsetting_user_default self.role=Role.find(:first,:conditions=>{:name=>'admin'}) end ##############################DECLARATIVEAUTHORIZATION defrole_symbols [role.name.underscore.to_sym] end

RubyonRails
GemDeclarativeAuthorizationAutorizao

Mtodosteis

Controllers

filter_resource_access filter_access_to:allPs:.PodemserosnomesdasActions

Views <%permitted_to?:create,:coursesdo%> <%=link_to'New',new_courses_path%> <%end%> Controllers

using_access_control

Obs:.nousarosmetodosdoDAcomosdoDEVISE

REFERNCIAS

http://pt.wikipedia.org/wiki/Ruby_%28linguagem_de_programa%C3%A7%C3%A3o%29 http://pt.wikipedia.org/wiki/Ruby_on_Rails http://pt.wikipedia.org/wiki/MVC http://www.zerokol.com/2012/01/configurando-ambiente-ruby-on-rails-32.html http://pt.wikipedia.org/wiki/CRUD http://guides.rubyonrails.org

http://gitref.org/

Vous aimerez peut-être aussi