SlideShare a Scribd company logo
Ruby
 programming language
         and
Ruby on Rails framework
Presentation Agenda
 What is Ruby?

 About the language

 Its history

 Principles of language

 Code examples

 Rails framework

January 18, 2010        Radek Mika - Unicorn College   2
What is Ruby?
 Programming language

 Interpreted language

 Modern language

 Object-oriented language

 Dynamically typed language

 Agile language



January 18, 2010         Radek Mika - Unicorn College   3
Principles of Ruby




January 18, 2010        Radek Mika - Unicorn College   4
Principles of Ruby




January 18, 2010        Radek Mika - Unicorn College   5
Principles of Ruby
 Japanese Design

       Focus on human factor

       Principle of Least Surprise

       Principle of Least Effort



January 18, 2010         Radek Mika - Unicorn College   6
The Principle of Least Surprise
This principle is the supreme design goal of Ruby
       It makes programmers happy
       It makes Ruby easy to learn
Examples
      What class is an object?
                   o.class
      Is it Array.size or Array.length?
                   same method - they are aliased
      What are the differences between arrays?
                   Diff = ary1 – ary2
                   Union = ary1 + ary2

January 18, 2010               Radek Mika - Unicorn College   7
The Principle of Least Effort
 We do not like to waste time
           Especially on XML configuration files, getters, setters, etc.


 Syntactic sugar wherever you look

 The quicker we program, the more we accomplish
           Sounds reasonable enough, does not it?


 Less code means less bugs



January 18, 2010                   Radek Mika - Unicorn College            8
Philosophy
 No perfect language

 Have joy

 Computers are my servants, not my masters!

 Unchangeable small core (syntax) and extensible class
  libraries



January 18, 2010        Radek Mika - Unicorn College      9
The History of Ruby
 Created in Japan 10 years ago

 Created by Yukihiro Matsumoto (known as
  Matz)

 Inspired by Perl, Python, Lisp and Smalltalk



January 18, 2010        Radek Mika - Unicorn College   10
Comparison with Python
 Interactive prompt (similar)
 No special line terminator (similar)
 Everything is an object (similar)


                     X
 More speed! (ruby is faster)
  …
January 18, 2010          Radek Mika - Unicorn College   11
Ruby is Truly Object-Oriented
 Ruby uses single inheritance
           X
 Mixins and Modules allow you to extend classes
  without multiple inheritance

 Reflection

 Things like ‘=’ and ‘+’ which may appear as
  operators are actually methods (like Smalltalk)

January 18, 2010    Radek Mika - Unicorn College    12
Well, that’s all nice but…




                       …is it FAST?
January 18, 2010           Radek Mika - Unicorn College   13
Merge Sort Algorithm




January 18, 2010       Radek Mika - Unicorn College   14
Ruby Speed Comparison

 3x faster than      PHP

 2.5x faster than    Perl

 2x faster than      Python



 2x (maybe more)     C++
 SLOWER than




January 18, 2010              Radek Mika - Unicorn College   15
Ruby Speed - WARNING


 Previous results are only
 informational (only Merge Sort
 Comparison)

 Another comparisons usually
 have different results




January 18, 2010         Radek Mika - Unicorn College   16
When I should not use Ruby?
 If I need highly effective and powerful language, e.g.
  for distributed calculations
 If I want to write a complicated, ugly or messy code


     Other disadvantages:


 Less spread than Perl is
 Ruby is relatively slow

January 18, 2010       Radek Mika - Unicorn College        17
And finally…




                   …some code examples
January 18, 2010         Radek Mika - Unicorn College   18
Clear Syntax
# Output "UPPER"
puts "upper".upcase

# Output the absolute value of -5:
puts -5.abs

# Output "Ruby Rocks!" 5 times
5.times do
  puts "Ruby Rocks!"
end
Source: http://pastie.org/785234


January 18, 2010                   Radek Mika - Unicorn College   19
Classes and Methods
#Classes begin with class and end with end:
# The Greeter class
class Greeter
end

#Methods begin with def and end with end:
# The salute method
def salute
end
Source: http://pastie.org/785249


January 18, 2010                   Radek Mika - Unicorn College   20
Classes and Methods
# The Greeter class
class Greeter
  def initialize(greeting)
    @greeting = greeting
  end

  def salute(name)
    puts "#{@greeting} #{name}!"
  end
end

# Initialize our Greeter
g = Greeter.new("Hello")

# Output "Hello World!"
g.salute("World")

Source: http://pastie.org/785258 - classes


January 18, 2010                     Radek Mika - Unicorn College   21
If Statements
# if with several branches
if account.total > 100000
  puts "large account"
elsif account.total > 25000
  puts "medium account"
else
  puts "small account„
end
Sources: http://pastie.org/785268



January 18, 2010                    Radek Mika - Unicorn College   22
Case Statements
# A simple case/when statement
case name
when "John"
  puts "Howdy John!"
when "Ryan"
  puts "Whatz up Ryan!"
else
  puts "Hi #{name}!"
end
Sources: http://pastie.org/785278


January 18, 2010                    Radek Mika - Unicorn College   23
Regular Expressions
#Ruby supports Perl-style regular expressions:
# Extract the parts of a phone number

phone = "123-456-7890"

if phone           =~ /(d{3})-(d{3})-(d{4})/
  ext =            $1
  city =           $2
  num =            $3
end
Sources: http://pastie.org/785732


January 18, 2010                    Radek Mika - Unicorn College   24
Regular Expressions
# Case statement with regular expression
case lang
when /ruby/i
  puts "Matz created Ruby!"
when /perl/i
  puts "Larry created Perl!"
else
  puts "I don't know who created #{lang}."
end
Sources: http://pastie.org/785738



January 18, 2010                    Radek Mika - Unicorn College   25
Ruby Blocks
# Print out a list of people from
# each person in the Array
people.each do |person|
  puts "* #{person.name}"
end

# A block using the bracket syntax
5.times { puts "Ruby rocks!" }

# Custom sorting
[2,1,3].sort! { |a, b| b <=> a }

Sources: http://pastie.org/pastes/785239



January 18, 2010                     Radek Mika - Unicorn College   26
Yield to the Block!
# define the thrice method
def thrice
  yield
  yield
  yield
end

# Output "Blocks are cool!" three times
thrice { puts "Blocks are cool!" }

#This example use yield from within a method to
#hand control over to a block:
Sources: http://pastie.org/785774



January 18, 2010                    Radek Mika - Unicorn College   27
Blocks with Parameters
# redefine the thrice method
def thrice
  yield(1)
  yield(2)
  yield(3)
end

# Output "Blocks are cool!" three times,
# prefix it with the count
thrice { | i |
  puts "#{i}: Blocks are cool!"
}
Sources: http://pastie.org/785789



January 18, 2010                    Radek Mika - Unicorn College   28
Enough talking about Ruby!...




              What about Ruby on Rails?
January 18, 2010      Radek Mika - Unicorn College   29
Ruby on Rails
 Web framework

 An extremely productive web-application
  framework that is written in Ruby by
  David Hansson

 Includes everything needed to create database-driven web
  applications according to the Model-View-Control pattern
  of separation

 So-called reason of spreading ruby


January 18, 2010       Radek Mika - Unicorn College      30
Ruby on Rails
 MVC

 Convention over Configurations

 Don’t Repeat Yourself (DRY)




January 18, 2010     Radek Mika - Unicorn College   31
History
 Predominantly written by David H. Hannson
       Talented designer
       His dream is to change the world
       A 37signals.com principal – World class designers


 Since 2005



January 18, 2010        Radek Mika - Unicorn College        32
Model – View - Controller
 MVC is an architectural pattern, used not only for building web
  applications

 Model classes are the "smart" domain objects (such as Account,
  Product, Person, Post) that hold business logic and know how to
  persist themselves to a database

 Views are HTML templates

 Controllers handle incoming requests (such as Save New Account,
  Update Product, Show Post) by manipulating the model and
  directing data to the view



January 18, 2010           Radek Mika - Unicorn College             33
Active Record
Object/Relational Mapping Framework = Active Record

 Automatic mapping between columns and class
  attributes
 Declarative configuration via macros
 Dynamic finders
 Associations, Aggregations, Tree and List Behaviors
 Locking
 Lifecycle Callbacks
 Single-table inheritance supported
 Validation rules

January 18, 2010       Radek Mika - Unicorn College     34
From Controller to View
Rails gives you many rendering options

 Default template rendering
             Just follow naming conventions and magic happens.


 Explicitly render to particular action

 Redirect to another action

 Render a string response (or no response)
January 18, 2010                 Radek Mika - Unicorn College    35
View Template
ERB –Embedded Ruby

 Similar to JSPs <% and <%= syntax

 Easy to learn and teach for designers

 Execute in scope of controller

 Denoted with .rhtml extension

January 18, 2010      Radek Mika - Unicorn College   36
View Template
XmlMarkup –Programmatic View Construction

 Great for writing xhtml and xml content

 Denoted with .rxml extension

 Embeddable in ERB templates

January 18, 2010      Radek Mika - Unicorn College   37
And Much More…
    Templates and partials
    Pagination
    Caching (page, fragment, action)
    Helpers
    Routing with routes.rb
    Exceptions
    Unit testing
    ActiveSupport API (date conversion, time calculations)
    ActionMailer API
    ActionWebService API
    Rake

January 18, 2010          Radek Mika - Unicorn College        38
Sources
   Ruby on Rails (Agile Atlanta Group) – Obie Fernandez – May 10 ’05
   Ruby Language Overview – Muhamad Admin Rastgee
   Ruby on Rails – Curt Hibbs
   Workin’ on the Rails Road – Obie Fernandez
   Get to the Point! (Development with Ruby on Rails) – Ryan Platte, John W. Long

   Ruby speed comparison (http://is.gd/70hjD)

   http://en.wikipedia.org/wiki/Ruby_on_Rails




January 18, 2010                 Radek Mika - Unicorn College                        39
External Links
   http://ruby-lang.org – official website

   http://www.ruby-doc.org/ - Ruby doc project

   http://rubyforge.org/ - projects in Ruby

   http://www.rubycentral.com/book/ - online book Programming Ruby

   Full Ruby on Rails Tutorial

   Euruko 2008 - videos from European Ruby Conference 2008 in Prague on avc-
    cvut.cz (Czech)



January 18, 2010                  Radek Mika - Unicorn College                  40
Between Q&A…
   … you can run this code …




     … do you still think that you have a fast computer? :)


January 18, 2010        Radek Mika - Unicorn College          41
Acknowledgments & Contact

    Special thanks to Mgr. Veronika Kaplanová for English correction.




                       Radek Mika
                        radek@radekmika.cz
                        @radekmika (twitter)


January 18, 2010           Radek Mika - Unicorn College             42
January 18, 2010   Radek Mika - Unicorn College   43

More Related Content

What's hot (20)

PPTX
Introduction of grid computing
Pooja Dixit
 
PPTX
Storage Virtualization
Mehul Jariwala
 
PDF
Node.js with WebRTC DataChannel
mganeko
 
PPTX
VMware vSphere vsan EN.pptx
CH431
 
PPTX
MPLS-TE
Aymen Bouzid
 
PDF
Network function virtualization
Satish Chavan
 
PDF
30分でわかる! コンピュータネットワーク
Trainocate Japan, Ltd.
 
PDF
Lezione 8: Introduzione ai Web Service
Andrea Della Corte
 
PDF
Wireless LAN technology
HimaBindu Valiveti
 
PPT
Authentication (Distributed computing)
Sri Prasanna
 
PDF
AnyConnect Secure Mobility
Cisco Canada
 
PPTX
Fundamental Concepts-and-Models Cloud Computing
Mohammed Sajjad Ali
 
PPTX
How a Proxy Server Works
Mer Joyce
 
PPT
Basic networking course
LuxoftTraining
 
PPSX
Fundamentals of JDBC
Jainul Musani
 
PPTX
Hypervisor
kalpita surve
 
PPT
Unit 2 -Cloud Computing Architecture
MonishaNehkal
 
PPSX
Virtualization basics
Chandrani Ray Chowdhury
 
PPTX
Hypervisors Vs Bare Metal Servers: a Beginner’s Guide
GlobalTeleHost Corp.
 
PDF
Network Analysis Using Wireshark Jan 18- seminar
Yoram Orzach
 
Introduction of grid computing
Pooja Dixit
 
Storage Virtualization
Mehul Jariwala
 
Node.js with WebRTC DataChannel
mganeko
 
VMware vSphere vsan EN.pptx
CH431
 
MPLS-TE
Aymen Bouzid
 
Network function virtualization
Satish Chavan
 
30分でわかる! コンピュータネットワーク
Trainocate Japan, Ltd.
 
Lezione 8: Introduzione ai Web Service
Andrea Della Corte
 
Wireless LAN technology
HimaBindu Valiveti
 
Authentication (Distributed computing)
Sri Prasanna
 
AnyConnect Secure Mobility
Cisco Canada
 
Fundamental Concepts-and-Models Cloud Computing
Mohammed Sajjad Ali
 
How a Proxy Server Works
Mer Joyce
 
Basic networking course
LuxoftTraining
 
Fundamentals of JDBC
Jainul Musani
 
Hypervisor
kalpita surve
 
Unit 2 -Cloud Computing Architecture
MonishaNehkal
 
Virtualization basics
Chandrani Ray Chowdhury
 
Hypervisors Vs Bare Metal Servers: a Beginner’s Guide
GlobalTeleHost Corp.
 
Network Analysis Using Wireshark Jan 18- seminar
Yoram Orzach
 

Similar to Programming language Ruby and the Rails framework (20)

PDF
IJTC%202009%20JRuby
tutorialsruby
 
PDF
IJTC%202009%20JRuby
tutorialsruby
 
PPT
Rapid Application Development using Ruby on Rails
Simobo
 
PPTX
Why Ruby?
IT Weekend
 
ZIP
Meta Programming in Ruby - Code Camp 2010
ssoroka
 
KEY
Ruby on Rails Training - Module 1
Mark Menard
 
PDF
Ruby on Rails: a brief introduction
Luigi De Russis
 
PDF
Web Development With Ruby - From Simple To Complex
Brian Hogan
 
KEY
Introduction to Ruby
Mark Menard
 
PDF
Connecting the Worlds of Java and Ruby with JRuby
Nick Sieger
 
PDF
Ruby an overall approach
Felipe Schmitt
 
PPTX
Day 1 - Intro to Ruby
Barry Jones
 
PPT
Workin ontherailsroad
Jim Jones
 
PPT
WorkinOnTheRailsRoad
webuploader
 
PPTX
Code for Startup MVP (Ruby on Rails) Session 2
Henry S
 
PPTX
How to use Ruby in QA, DevOps, Development. Ruby lang Intro
Viacheslav Horbovskykh
 
PDF
Ruby 4.0 To Infinity and Beyond at Ruby Conference Kenya 2017 by Bozhidar Batsov
Michael Kimathi
 
PDF
Introduction to Ruby & Modern Programming
Christos Sotirelis
 
PPTX
Ruby for .NET developers
Max Titov
 
PDF
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...
Nilesh Panchal
 
IJTC%202009%20JRuby
tutorialsruby
 
IJTC%202009%20JRuby
tutorialsruby
 
Rapid Application Development using Ruby on Rails
Simobo
 
Why Ruby?
IT Weekend
 
Meta Programming in Ruby - Code Camp 2010
ssoroka
 
Ruby on Rails Training - Module 1
Mark Menard
 
Ruby on Rails: a brief introduction
Luigi De Russis
 
Web Development With Ruby - From Simple To Complex
Brian Hogan
 
Introduction to Ruby
Mark Menard
 
Connecting the Worlds of Java and Ruby with JRuby
Nick Sieger
 
Ruby an overall approach
Felipe Schmitt
 
Day 1 - Intro to Ruby
Barry Jones
 
Workin ontherailsroad
Jim Jones
 
WorkinOnTheRailsRoad
webuploader
 
Code for Startup MVP (Ruby on Rails) Session 2
Henry S
 
How to use Ruby in QA, DevOps, Development. Ruby lang Intro
Viacheslav Horbovskykh
 
Ruby 4.0 To Infinity and Beyond at Ruby Conference Kenya 2017 by Bozhidar Batsov
Michael Kimathi
 
Introduction to Ruby & Modern Programming
Christos Sotirelis
 
Ruby for .NET developers
Max Titov
 
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...
Nilesh Panchal
 
Ad

Recently uploaded (20)

PDF
Java 25 and Beyond - A Roadmap of Innovations
Ana-Maria Mihalceanu
 
PDF
DoS Attack vs DDoS Attack_ The Silent Wars of the Internet.pdf
CyberPro Magazine
 
PDF
Hyderabad MuleSoft In-Person Meetup (June 21, 2025) Slides
Ravi Tamada
 
PDF
Quantum AI Discoveries: Fractal Patterns Consciousness and Cyclical Universes
Saikat Basu
 
PPTX
2025 HackRedCon Cyber Career Paths.pptx Scott Stanton
Scott Stanton
 
PDF
Understanding The True Cost of DynamoDB Webinar
ScyllaDB
 
PPTX
MARTSIA: A Tool for Confidential Data Exchange via Public Blockchain - Poster...
Michele Kryston
 
PDF
The Future of Product Management in AI ERA.pdf
Alyona Owens
 
PDF
How to Comply With Saudi Arabia’s National Cybersecurity Regulations.pdf
Bluechip Advanced Technologies
 
PPTX
01_Approach Cyber- DORA Incident Management.pptx
FinTech Belgium
 
PPSX
Usergroup - OutSystems Architecture.ppsx
Kurt Vandevelde
 
DOCX
Daily Lesson Log MATATAG ICT TEchnology 8
LOIDAALMAZAN3
 
PDF
Optimizing the trajectory of a wheel loader working in short loading cycles
Reno Filla
 
PDF
Simplify Your FME Flow Setup: Fault-Tolerant Deployment Made Easy with Packer...
Safe Software
 
PPTX
MARTSIA: A Tool for Confidential Data Exchange via Public Blockchain - Pitch ...
Michele Kryston
 
PDF
“Scaling i.MX Applications Processors’ Native Edge AI with Discrete AI Accele...
Edge AI and Vision Alliance
 
PDF
GDG Cloud Southlake #44: Eyal Bukchin: Tightening the Kubernetes Feedback Loo...
James Anderson
 
PPTX
Practical Applications of AI in Local Government
OnBoard
 
PPTX
Enabling the Digital Artisan – keynote at ICOCI 2025
Alan Dix
 
PDF
Enhancing Environmental Monitoring with Real-Time Data Integration: Leveragin...
Safe Software
 
Java 25 and Beyond - A Roadmap of Innovations
Ana-Maria Mihalceanu
 
DoS Attack vs DDoS Attack_ The Silent Wars of the Internet.pdf
CyberPro Magazine
 
Hyderabad MuleSoft In-Person Meetup (June 21, 2025) Slides
Ravi Tamada
 
Quantum AI Discoveries: Fractal Patterns Consciousness and Cyclical Universes
Saikat Basu
 
2025 HackRedCon Cyber Career Paths.pptx Scott Stanton
Scott Stanton
 
Understanding The True Cost of DynamoDB Webinar
ScyllaDB
 
MARTSIA: A Tool for Confidential Data Exchange via Public Blockchain - Poster...
Michele Kryston
 
The Future of Product Management in AI ERA.pdf
Alyona Owens
 
How to Comply With Saudi Arabia’s National Cybersecurity Regulations.pdf
Bluechip Advanced Technologies
 
01_Approach Cyber- DORA Incident Management.pptx
FinTech Belgium
 
Usergroup - OutSystems Architecture.ppsx
Kurt Vandevelde
 
Daily Lesson Log MATATAG ICT TEchnology 8
LOIDAALMAZAN3
 
Optimizing the trajectory of a wheel loader working in short loading cycles
Reno Filla
 
Simplify Your FME Flow Setup: Fault-Tolerant Deployment Made Easy with Packer...
Safe Software
 
MARTSIA: A Tool for Confidential Data Exchange via Public Blockchain - Pitch ...
Michele Kryston
 
“Scaling i.MX Applications Processors’ Native Edge AI with Discrete AI Accele...
Edge AI and Vision Alliance
 
GDG Cloud Southlake #44: Eyal Bukchin: Tightening the Kubernetes Feedback Loo...
James Anderson
 
Practical Applications of AI in Local Government
OnBoard
 
Enabling the Digital Artisan – keynote at ICOCI 2025
Alan Dix
 
Enhancing Environmental Monitoring with Real-Time Data Integration: Leveragin...
Safe Software
 
Ad

Programming language Ruby and the Rails framework

  • 1. Ruby programming language and Ruby on Rails framework
  • 2. Presentation Agenda  What is Ruby?  About the language  Its history  Principles of language  Code examples  Rails framework January 18, 2010 Radek Mika - Unicorn College 2
  • 3. What is Ruby?  Programming language  Interpreted language  Modern language  Object-oriented language  Dynamically typed language  Agile language January 18, 2010 Radek Mika - Unicorn College 3
  • 4. Principles of Ruby January 18, 2010 Radek Mika - Unicorn College 4
  • 5. Principles of Ruby January 18, 2010 Radek Mika - Unicorn College 5
  • 6. Principles of Ruby  Japanese Design  Focus on human factor  Principle of Least Surprise  Principle of Least Effort January 18, 2010 Radek Mika - Unicorn College 6
  • 7. The Principle of Least Surprise This principle is the supreme design goal of Ruby  It makes programmers happy  It makes Ruby easy to learn Examples  What class is an object? o.class  Is it Array.size or Array.length? same method - they are aliased  What are the differences between arrays? Diff = ary1 – ary2 Union = ary1 + ary2 January 18, 2010 Radek Mika - Unicorn College 7
  • 8. The Principle of Least Effort  We do not like to waste time Especially on XML configuration files, getters, setters, etc.  Syntactic sugar wherever you look  The quicker we program, the more we accomplish Sounds reasonable enough, does not it?  Less code means less bugs January 18, 2010 Radek Mika - Unicorn College 8
  • 9. Philosophy  No perfect language  Have joy  Computers are my servants, not my masters!  Unchangeable small core (syntax) and extensible class libraries January 18, 2010 Radek Mika - Unicorn College 9
  • 10. The History of Ruby  Created in Japan 10 years ago  Created by Yukihiro Matsumoto (known as Matz)  Inspired by Perl, Python, Lisp and Smalltalk January 18, 2010 Radek Mika - Unicorn College 10
  • 11. Comparison with Python  Interactive prompt (similar)  No special line terminator (similar)  Everything is an object (similar) X  More speed! (ruby is faster) … January 18, 2010 Radek Mika - Unicorn College 11
  • 12. Ruby is Truly Object-Oriented  Ruby uses single inheritance X  Mixins and Modules allow you to extend classes without multiple inheritance  Reflection  Things like ‘=’ and ‘+’ which may appear as operators are actually methods (like Smalltalk) January 18, 2010 Radek Mika - Unicorn College 12
  • 13. Well, that’s all nice but… …is it FAST? January 18, 2010 Radek Mika - Unicorn College 13
  • 14. Merge Sort Algorithm January 18, 2010 Radek Mika - Unicorn College 14
  • 15. Ruby Speed Comparison 3x faster than PHP 2.5x faster than Perl 2x faster than Python 2x (maybe more) C++ SLOWER than January 18, 2010 Radek Mika - Unicorn College 15
  • 16. Ruby Speed - WARNING Previous results are only informational (only Merge Sort Comparison) Another comparisons usually have different results January 18, 2010 Radek Mika - Unicorn College 16
  • 17. When I should not use Ruby?  If I need highly effective and powerful language, e.g. for distributed calculations  If I want to write a complicated, ugly or messy code Other disadvantages:  Less spread than Perl is  Ruby is relatively slow January 18, 2010 Radek Mika - Unicorn College 17
  • 18. And finally… …some code examples January 18, 2010 Radek Mika - Unicorn College 18
  • 19. Clear Syntax # Output "UPPER" puts "upper".upcase # Output the absolute value of -5: puts -5.abs # Output "Ruby Rocks!" 5 times 5.times do puts "Ruby Rocks!" end Source: http://pastie.org/785234 January 18, 2010 Radek Mika - Unicorn College 19
  • 20. Classes and Methods #Classes begin with class and end with end: # The Greeter class class Greeter end #Methods begin with def and end with end: # The salute method def salute end Source: http://pastie.org/785249 January 18, 2010 Radek Mika - Unicorn College 20
  • 21. Classes and Methods # The Greeter class class Greeter def initialize(greeting) @greeting = greeting end def salute(name) puts "#{@greeting} #{name}!" end end # Initialize our Greeter g = Greeter.new("Hello") # Output "Hello World!" g.salute("World") Source: http://pastie.org/785258 - classes January 18, 2010 Radek Mika - Unicorn College 21
  • 22. If Statements # if with several branches if account.total > 100000 puts "large account" elsif account.total > 25000 puts "medium account" else puts "small account„ end Sources: http://pastie.org/785268 January 18, 2010 Radek Mika - Unicorn College 22
  • 23. Case Statements # A simple case/when statement case name when "John" puts "Howdy John!" when "Ryan" puts "Whatz up Ryan!" else puts "Hi #{name}!" end Sources: http://pastie.org/785278 January 18, 2010 Radek Mika - Unicorn College 23
  • 24. Regular Expressions #Ruby supports Perl-style regular expressions: # Extract the parts of a phone number phone = "123-456-7890" if phone =~ /(d{3})-(d{3})-(d{4})/ ext = $1 city = $2 num = $3 end Sources: http://pastie.org/785732 January 18, 2010 Radek Mika - Unicorn College 24
  • 25. Regular Expressions # Case statement with regular expression case lang when /ruby/i puts "Matz created Ruby!" when /perl/i puts "Larry created Perl!" else puts "I don't know who created #{lang}." end Sources: http://pastie.org/785738 January 18, 2010 Radek Mika - Unicorn College 25
  • 26. Ruby Blocks # Print out a list of people from # each person in the Array people.each do |person| puts "* #{person.name}" end # A block using the bracket syntax 5.times { puts "Ruby rocks!" } # Custom sorting [2,1,3].sort! { |a, b| b <=> a } Sources: http://pastie.org/pastes/785239 January 18, 2010 Radek Mika - Unicorn College 26
  • 27. Yield to the Block! # define the thrice method def thrice yield yield yield end # Output "Blocks are cool!" three times thrice { puts "Blocks are cool!" } #This example use yield from within a method to #hand control over to a block: Sources: http://pastie.org/785774 January 18, 2010 Radek Mika - Unicorn College 27
  • 28. Blocks with Parameters # redefine the thrice method def thrice yield(1) yield(2) yield(3) end # Output "Blocks are cool!" three times, # prefix it with the count thrice { | i | puts "#{i}: Blocks are cool!" } Sources: http://pastie.org/785789 January 18, 2010 Radek Mika - Unicorn College 28
  • 29. Enough talking about Ruby!... What about Ruby on Rails? January 18, 2010 Radek Mika - Unicorn College 29
  • 30. Ruby on Rails  Web framework  An extremely productive web-application framework that is written in Ruby by David Hansson  Includes everything needed to create database-driven web applications according to the Model-View-Control pattern of separation  So-called reason of spreading ruby January 18, 2010 Radek Mika - Unicorn College 30
  • 31. Ruby on Rails  MVC  Convention over Configurations  Don’t Repeat Yourself (DRY) January 18, 2010 Radek Mika - Unicorn College 31
  • 32. History  Predominantly written by David H. Hannson  Talented designer  His dream is to change the world  A 37signals.com principal – World class designers  Since 2005 January 18, 2010 Radek Mika - Unicorn College 32
  • 33. Model – View - Controller  MVC is an architectural pattern, used not only for building web applications  Model classes are the "smart" domain objects (such as Account, Product, Person, Post) that hold business logic and know how to persist themselves to a database  Views are HTML templates  Controllers handle incoming requests (such as Save New Account, Update Product, Show Post) by manipulating the model and directing data to the view January 18, 2010 Radek Mika - Unicorn College 33
  • 34. Active Record Object/Relational Mapping Framework = Active Record  Automatic mapping between columns and class attributes  Declarative configuration via macros  Dynamic finders  Associations, Aggregations, Tree and List Behaviors  Locking  Lifecycle Callbacks  Single-table inheritance supported  Validation rules January 18, 2010 Radek Mika - Unicorn College 34
  • 35. From Controller to View Rails gives you many rendering options  Default template rendering Just follow naming conventions and magic happens.  Explicitly render to particular action  Redirect to another action  Render a string response (or no response) January 18, 2010 Radek Mika - Unicorn College 35
  • 36. View Template ERB –Embedded Ruby  Similar to JSPs <% and <%= syntax  Easy to learn and teach for designers  Execute in scope of controller  Denoted with .rhtml extension January 18, 2010 Radek Mika - Unicorn College 36
  • 37. View Template XmlMarkup –Programmatic View Construction  Great for writing xhtml and xml content  Denoted with .rxml extension  Embeddable in ERB templates January 18, 2010 Radek Mika - Unicorn College 37
  • 38. And Much More…  Templates and partials  Pagination  Caching (page, fragment, action)  Helpers  Routing with routes.rb  Exceptions  Unit testing  ActiveSupport API (date conversion, time calculations)  ActionMailer API  ActionWebService API  Rake January 18, 2010 Radek Mika - Unicorn College 38
  • 39. Sources  Ruby on Rails (Agile Atlanta Group) – Obie Fernandez – May 10 ’05  Ruby Language Overview – Muhamad Admin Rastgee  Ruby on Rails – Curt Hibbs  Workin’ on the Rails Road – Obie Fernandez  Get to the Point! (Development with Ruby on Rails) – Ryan Platte, John W. Long  Ruby speed comparison (http://is.gd/70hjD)  http://en.wikipedia.org/wiki/Ruby_on_Rails January 18, 2010 Radek Mika - Unicorn College 39
  • 40. External Links  http://ruby-lang.org – official website  http://www.ruby-doc.org/ - Ruby doc project  http://rubyforge.org/ - projects in Ruby  http://www.rubycentral.com/book/ - online book Programming Ruby  Full Ruby on Rails Tutorial  Euruko 2008 - videos from European Ruby Conference 2008 in Prague on avc- cvut.cz (Czech) January 18, 2010 Radek Mika - Unicorn College 40
  • 41. Between Q&A… … you can run this code … … do you still think that you have a fast computer? :) January 18, 2010 Radek Mika - Unicorn College 41
  • 42. Acknowledgments & Contact Special thanks to Mgr. Veronika Kaplanová for English correction. Radek Mika [email protected] @radekmika (twitter) January 18, 2010 Radek Mika - Unicorn College 42
  • 43. January 18, 2010 Radek Mika - Unicorn College 43