ruby on rails - tei peiraeus
DESCRIPTION
Η πρώτη μας παρουσίαση για ruby on rails στο ΤΕΙ Πειραιά, στις 9/12/2011.TRANSCRIPT
Ruby on Rails
"Strong like Bruce Lee efficient As Einstein" 1
Ruby on RailsΠαρουσίαση
Μιχάλης ΖαμπάραςΓιάννης Δεληγιάννης
PreOpenfest Event
osLab
2
openfest;Τι είναι το
• Προώθηση τεχνολογιών ανοιχτού / ελεύθερου λογισμικού
• Δημιουργία ομάδων μεταξύ μας και συμμετοχή στην ανάπτυξη open source projects
Μα πάνω από όλα...
3
Have Fun!
4
Τι είναι η ruby;
• «Καθαρό» συντακτικό, χωρίς περιττά στοιχεία
• Αντικειμενοστραφής γλώσσα με πολλά functional χαρακτηριστικά
• Interpreter, strong και dynamic typing
• Ιδανική για δημιουργία DSL και dynamic metaprogramming
• Ισχυρή και φιλική κοινότητα
5
...Λίγη ιστορία
• Yukihiro Matsumoto
• 1995 εμπνευσμένη Από τη smalltalk
• 1999 Μεταφράστηκε σε Αγγλικά το documentation
• 2004 ξεκινά να γίνεται γνωστή η ruby… ο λόγος;;
6
Ruby – ;Από εδώ και πέρα τι
• Τωρινή έκδοση 1.9.3
• Οδεύουμε προς την έκδοση 2
• Πρόκειται να γίνει ISO
7
Τι είναι ηRails; 1/2
• Το πιο δημοφιλές web framework που υπάρχει αυτή τη στιγμή
• Δημιουργήθηκε το 2004 από την 37signals
• Sites σε Rails:6.Twitter7.Github8.Groupon9.Diaspora10.Basecampκλπ.
8
Τι είναι ηRails; 2/2
• Από τα πρώτα MVC frameworks, ενέπνευσε πολλά άλλα
• Αρκετά ώριμο (αναπτύσσεται 8 χρόνια)
• Έμφαση στις σωστές πρακτικές της μηχανικής λογισμικού
«Testing is like a religion in ruby community»
9
μ Ξεκινώντας ε τηRuby (simple one liners)Επανάληψη στην ruby•10.times do puts “I love ruby!” end•(1..10).each do |i| print “I love rails version #{i}” end•3.upto(15) { |tmp| p “Number is #{tmp}” }•x = 1; x = x + 2 while x < 300•%w{a e i o u}.each { |vowel| p vowel }
Δομές ελέγχου•x = 5; y = 10; p “x is smaller than y” if x < y•x = 5; y = 10; p “x is smaller than y” unless x > y•Switch / case (no example, sorry)
10
μΠερισσότερη αγεία
('A'..'Z').include?('R') # => επιστρέφει true“I am a happy string :D”.class # => StringString.methods.grep(/^an/) # => ancestors, anonymous
Ready to fly??(1..100).select{ |k| k % 2 == 0 }tmp_random_name = File.read(“data.txt”)[56, -34, 452, 5].min # => -34
require ‘nokogiri’require ‘open-uri’doc = Nokogiri::HTML(open('http://www.google.com'))
11
μ Ξεκινώντας ε τηνRails• MVC (Model – View – Controller)
12
μ Ξεκινώντας ε τηνRails
• ORM (Object Relational Mapping)
• REST αντιστοίχιση με CRUDΓια κάθε action ενός resource, αντιστοιχίζεται το http verbActions: index (get), show(get), new(get), create(post),
edit(get), update(put), destroy(delete) Χρήση του get, post, put, delete ανάλογα το action
13
μ Ξεκινώντας ε τηνRails
• Migrations
• TDDRed-Green-RefactorHow we test?From bottom to up or from up to bottom?Unit tests / functional tests / integration testsFixtures / Factoriesmock / stub
Πολλά test frameworksUnit test, Rspec, capybara, cucumber
14
μΑπλά παραδείγ ατα testsIntegration tests με το capybara:
describe "Failed Login" do it "Shows error message on empty email and empty password " do visit new_user_session_path click_button “Login" current_path.should eq(new_user_session_path) page.should have_content("Invalid email or password.") end it "Shows error message on invalid username and password" do visit new_user_session_path fill_in "Email", :with => "emaildoesn'[email protected]" fill_in "Password", :with => "wrong password" click_button “Login" current_path.should eq(new_user_session_path) page.should have_content("Invalid email or password.") endend
15
μΑπλά παραδείγ ατα testsUnit tests με το rspec:
Page model: class Page < ActiveRecord::Base validates :name, :presence => true end
Test Page model: it "should have a name" do Page.new(name: nil).should have(1).error_on(:name) end
16
Ώρα για λίγο εξάσκηση!
17