ruby on rails - tei peiraeus

17
Ruby on Rails "Strong like Bruce Lee efficient As Einstein" 1

Upload: yiannis-deliyiannis

Post on 04-Jul-2015

585 views

Category:

Technology


2 download

DESCRIPTION

Η πρώτη μας παρουσίαση για ruby on rails στο ΤΕΙ Πειραιά, στις 9/12/2011.

TRANSCRIPT

Page 1: Ruby on rails - TEI Peiraeus

Ruby on Rails

"Strong like Bruce Lee efficient As Einstein" 1

Page 2: Ruby on rails - TEI Peiraeus

Ruby on RailsΠαρουσίαση

Μιχάλης ΖαμπάραςΓιάννης Δεληγιάννης

PreOpenfest Event

osLab

2

Page 3: Ruby on rails - TEI Peiraeus

openfest;Τι είναι το

• Προώθηση τεχνολογιών ανοιχτού / ελεύθερου λογισμικού

• Δημιουργία ομάδων μεταξύ μας και συμμετοχή στην ανάπτυξη open source projects

Μα πάνω από όλα...

3

Page 4: Ruby on rails - TEI Peiraeus

Have Fun!

4

Page 5: Ruby on rails - TEI Peiraeus

Τι είναι η ruby;

• «Καθαρό» συντακτικό, χωρίς περιττά στοιχεία

• Αντικειμενοστραφής γλώσσα με πολλά functional χαρακτηριστικά

• Interpreter, strong και dynamic typing

• Ιδανική για δημιουργία DSL και dynamic metaprogramming

• Ισχυρή και φιλική κοινότητα

5

Page 6: Ruby on rails - TEI Peiraeus

...Λίγη ιστορία

• Yukihiro Matsumoto

• 1995 εμπνευσμένη Από τη smalltalk

• 1999 Μεταφράστηκε σε Αγγλικά το documentation

• 2004 ξεκινά να γίνεται γνωστή η ruby… ο λόγος;;

6

Page 7: Ruby on rails - TEI Peiraeus

Ruby – ;Από εδώ και πέρα τι

• Τωρινή έκδοση 1.9.3

• Οδεύουμε προς την έκδοση 2

• Πρόκειται να γίνει ISO

7

Page 8: Ruby on rails - TEI Peiraeus

Τι είναι ηRails; 1/2

• Το πιο δημοφιλές web framework που υπάρχει αυτή τη στιγμή

• Δημιουργήθηκε το 2004 από την 37signals

• Sites σε Rails:6.Twitter7.Github8.Groupon9.Diaspora10.Basecampκλπ.

8

Page 9: Ruby on rails - TEI Peiraeus

Τι είναι ηRails; 2/2

• Από τα πρώτα MVC frameworks, ενέπνευσε πολλά άλλα

• Αρκετά ώριμο (αναπτύσσεται 8 χρόνια)

• Έμφαση στις σωστές πρακτικές της μηχανικής λογισμικού

«Testing is like a religion in ruby community»

9

Page 10: Ruby on rails - TEI Peiraeus

μ Ξεκινώντας ε τη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

Page 11: Ruby on rails - TEI Peiraeus

μΠερισσότερη αγεία

('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

Page 12: Ruby on rails - TEI Peiraeus

μ Ξεκινώντας ε τηνRails• MVC (Model – View – Controller)

12

Page 13: Ruby on rails - TEI Peiraeus

μ Ξεκινώντας ε την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

Page 14: Ruby on rails - TEI Peiraeus

μ Ξεκινώντας ε την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

Page 15: Ruby on rails - TEI Peiraeus

μΑπλά παραδείγ ατα 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

Page 16: Ruby on rails - TEI Peiraeus

μΑπλά παραδείγ ατα 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

Page 17: Ruby on rails - TEI Peiraeus

Ώρα για λίγο εξάσκηση!

17