Introdução ao Ruby on Rails
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Introdução ao Ruby on Rails

on

  • 4,072 views

 

Statistics

Views

Total Views
4,072
Views on SlideShare
4,058
Embed Views
14

Actions

Likes
0
Downloads
30
Comments
0

2 Embeds 14

http://www.slideshare.net 13
http://www.slideee.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Introdução ao Ruby on Rails Presentation Transcript

  • 1. Introdução ao Ruby on Rails Introdução ao Ruby on Rails
  • 2. Introdução ao Ruby on Rails > Palestrante Juan Maiz Lulkin Flores da Cunha WWR person/9354 vice-campeão mundial de defender of the favicon
  • 3. Introdução ao Ruby on Rails > História História David Heinemeier Hanson (DHH) Martin Fowler 37Signals
  • 4. Introdução ao Ruby on Rails > Ruby on Rails Ruby on Rails Ruby Model View Controller Princípios Comunidade And so much more
  • 5. Introdução ao Ruby on Rails > Ruby on Rails > Ruby Ruby Smalltalk elegância conceitual Python facilidade de uso Perl pragmatismo
  • 6. Introdução ao Ruby on Rails > Ruby on Rails > Ruby > Smalltalk Smalltalk 1 + 1 => 2 1.+(1) => 2 1.send('+',1) => 2
  • 7. Introdução ao Ruby on Rails > Ruby on Rails > Ruby > Python Python for 1 in 1..10 puts i end 1 2 3 4 5 6
  • 8. Introdução ao Ruby on Rails > Ruby on Rails > Ruby > Perl Perl ls = %w{smalltalk python perl} => ["smalltalk", "python", "perl"] ls.map{|l| “Ruby é como #{l}. ” }.join => “Ruby é como smalltalk. Ruby é como python. Ruby é como perl.
  • 9. Introdução ao Ruby on Rails > Ruby on Rails > Ruby > Hello Ruby 5.times{ p “ybuR olleH”.reverse } "Hello Ruby" "Hello Ruby" "Hello Ruby" "Hello Ruby" "Hello Ruby" => 5
  • 10. Introdução ao Ruby on Rails > Ruby on Rails > Ruby > Conceitos Ruby Totalmente OO Mixins (toma essa!) Classes “abertas” Blocos Bibliotecas
  • 11. Introdução ao Ruby on Rails > Ruby on Rails > Ruby > Conceitos > Totalmente OO Totalmente OO 42.class => Fixnum Fixnum.class => Class
  • 12. Introdução ao Ruby on Rails > Ruby on Rails > Ruby > Conceitos > Mixins (toma essa!) Mixins (toma essa!) module Cool def is_cool! “#{self} is cool!” end end
  • 13. Introdução ao Ruby on Rails > Ruby on Rails > Ruby > Conceitos > Classes “abertas” Classes “abertas” class String include Cool end puts “Ruby”.is_cool! Ruby is cool!
  • 14. Introdução ao Ruby on Rails > Ruby on Rails > Ruby > Conceitos > Blocos Blocos [16,19,21,15].select{|n| n > 17} => [19,21] [1,2,3].map{|n| n*2 } => [2,4,6] [5,6,7,8].sort_by{ … } File.open('file.txt').each_line{ … } Dir.glob('*.rb').each{ … } Benchmark.measure { ... }
  • 15. Introdução ao Ruby on Rails > Ruby on Rails > Ruby > Conceitos > Bibliotecas Bibliotecas Hpricot + OpenUri Hpricot(open 'http://ab.com').search('a').map{|a| a[:href]} Prawn Prawn::Document.new.text(“Hello PDF”) RedCloth RedCloth.new(“Hello *Textile*”).to_html RMagick Image.read('i.pdf').first.write('i.png'){self.quality = 80} Shoes Shoes.app{ button "Hello Windows" } RubyGame Game.new.when_key_pressed(:q){ exit } Geokit YahooGeocoder.geocode 'Rua Vieira de Casto 262'
  • 16. Introdução ao Ruby on Rails > Ruby on Rails > Model View Controller Model View Controller Model dados e lógica de domínio View interface Controller caminhos e distribuição
  • 17. Introdução ao Ruby on Rails > Ruby on Rails > Model View Controller > Model Model ActiveRecord Migrações Operações básicas Relações Validações Acts as Named scopes Adicionar métodos
  • 18. Introdução ao Ruby on Rails > Ruby on Rails > Model View Controller > Model > Migrações Migrações class CreateEvents < ActiveRecord::Migration def self.up create_table :events do |t| t.string :name, :null => false t.boolean :active, :default => true t.integer :year, :null => false t.timestamps end end end
  • 19. Introdução ao Ruby on Rails > Ruby on Rails > Model View Controller > Model > Operações básicas Operações básicas Insert Event.create :name => 'RS on Rails', :year => Date.today.year e = Event.new e.name = 'RS on Rails' e.year = 2009 e.save
  • 20. Introdução ao Ruby on Rails > Ruby on Rails > Model View Controller > Model > Operações básicas Operações básicas Select Event.all :conditions => 'active', :order => 'created_at', :limit => 10 e = Event.first e = Event.find 1 e = Event.find_by_name 'RS on Rails' e = Event.find_by_year 2009
  • 21. Introdução ao Ruby on Rails > Ruby on Rails > Model View Controller > Model > Operações básicas Operações básicas Update Event.update_all 'active = true' e = Event.first e.name = 'other name' e.save e.update_attribute :active => false e.toggle! :active
  • 22. Introdução ao Ruby on Rails > Ruby on Rails > Model View Controller > Model > Operações básicas Operações básicas Delete Event.delete_all e = Event.first e.destroy
  • 23. Introdução ao Ruby on Rails > Ruby on Rails > Model View Controller > Model > Relações Relações class Event < ActiveRecord::Base has_many :talks end class Talk < ActiveRecord::Base belongs_to :event has_one :speaker end
  • 24. Introdução ao Ruby on Rails > Ruby on Rails > Model View Controller > Model > Relações Relações rsr = Event.find_by_name('rsrails') talk = rsr.talks.first talk.name => “Introdução ao Ruby on Rails” talk.speaker.name => “Juan Maiz Lulkin”
  • 25. Introdução ao Ruby on Rails > Ruby on Rails > Model View Controller > Model > Validações Validações class Event < ActiveRecord::Base validates_presence_of :name, :year validates_numericality_of :year validates_inclusion_of :year, :in => 2009..2099 validates_length_of :name, :minimum => 4 validates_format_of :name, :with => /[A-Z]d+/ end
  • 26. Introdução ao Ruby on Rails > Ruby on Rails > Model View Controller > Model > Acts as Acts As class Category < ActiveRecord::Base acts_as_tree enb Category.find(10).parent Category.find(20).children
  • 27. Introdução ao Ruby on Rails > Ruby on Rails > Model View Controller > Model > Acts as Acts As class Doc < ActiveRecord::Base acts_as_versioned end doc = Doc.create :name = '1 st name' doc.version => 1 doc.update_attribute :name, '2 nd name' doc.version => 2 doc.revert_to(1) doc.name => 1 st name
  • 28. Introdução ao Ruby on Rails > Ruby on Rails > Model View Controller > Model > Named scopes Named scopes class Product < ActiveRecord::Base named_scope :top, :order => 'rank desc' named_scope :ten, :limit => 10 named_scope :between, lambda{|min,max| {:conditions => [“price between ? and ?”, min, max]}} end Product.between(0,100).top.ten
  • 29. Introdução ao Ruby on Rails > Ruby on Rails > Model View Controller > Model > Adicionar métodos Adicionar métodos class Product < ActiveRecord::Base def +(product) price + product.price end end foo = Product.find(1) bar = Product.find(2) foo + bar
  • 30. Introdução ao Ruby on Rails > Ruby on Rails > Model View Controller > Controller Controller URL: http://seusite.com/events/rsrails class EventsController < ApplicationController def show name = params[:id] @event = Event.find_by_name(name) end end
  • 31. Introdução ao Ruby on Rails > Ruby on Rails > Model View Controller > View View app/views/events/show.html.haml #content %h1 Palestras %ul - for talk in @event.talks %li= talk.title * Você está usando HAML, não?
  • 32. Introdução ao Ruby on Rails > Ruby on Rails > Princípios Princípios Convention Over Configuration Se é usado na maior parte dos casos, deve ser o padrão. Don't Repeat Yourself Mixins, plugins, engines, gems... Métodos ágeis BDD, TDD, integração contínua, deployment...
  • 33. Introdução ao Ruby on Rails > Ruby on Rails > Princípios > CoC Convention Over Configuration XML YAML development: adapter: postgresql encoding: unicode database: events_development pool: 5 username: event_admin password: *****
  • 34. Introdução ao Ruby on Rails > Ruby on Rails > Princípios > CoC Convention Over Configuration rsrails = Event.find(1) => assume campo “id” na tabela “events” rsrails.talks => assume uma tabela “talks” com um fk “event_id” rsrails.talks.first.speaker => assume campo “speaker_id” em “talks” como fk para tabela “speakers”
  • 35. Introdução ao Ruby on Rails > Ruby on Rails > Princípios > CoC Convention Over Configuration script/generate scaffold Event name:string year:integer active:boolean
  • 36. Introdução ao Ruby on Rails > Ruby on Rails > Princípios > DRY Don't Repeat Yourself active_scaffold link_to login image_tag 'star.png' * hotel.stars render :partial => 'event', :collection => @events
  • 37. Introdução ao Ruby on Rails > Ruby on Rails > Princípios > Métodos ágeis Métodos ágeis class EventTest < ActiveSupport::TestCase test "creation" do assert Event.create :name => 'rsrails', :year => 2009 end end
  • 38. Introdução ao Ruby on Rails > Ruby on Rails > Model View Controller > Princípios > Métodos ágeis Métodos ágeis rake integrate cap deploy
  • 39. Introdução ao Ruby on Rails > Ruby on Rails > Model View Controller > Princípios > Métodos ágeis Métodos ágeis Getting Real http://gettingreal.37signals.com/
  • 40. Introdução ao Ruby on Rails > Ruby on Rails > Comunidade Comunidade Lista rails-br Ruby Inside (.com e .com.br) Working With Rails
  • 41. Introdução ao Ruby on Rails > Ruby on Rails > And so much more And so much more Internacionalização (i18n) Rotas Cache Ajax Background Jobs ...
  • 42. Introdução ao Ruby on Rails > Fim Fim