The document discusses why Ruby is a beloved programming language and development environment. It covers Ruby's object oriented features, syntax like blocks that make code cleaner, and the robust ecosystem of libraries known as gems. It also describes tools like Bundler that manage gem dependencies and RVM that allows isolating Ruby versions and gems for different projects.
1 of 7
Download to read offline
More Related Content
Ruby Presentation - Article
1. Ruby: Why We Love It
https://github.com/Kelsin/ruby-presentation
Christopher Giroir
November 8th, 2011
Contents
1 The Language 1
1.1 Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Why We Love It . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 Gems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2 Tools 6
2.1 Bundler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2 RVM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1 The Language
1.1 Basics
Overview
Inspired by Smalltalk (which I love)
Also draws from Perl, Ei鍖el, Ada and LISP
Includes a REPL
Built for developers as a language they would love to use
Dynamic, strict, re鍖ective, object oriented
Everything is an expression (even statements)
Everything is executed imperatively (even declarations)
Object Oriented
Everything is an object
Single Inheritance
Modules can be mixed in
Dynamic Dispatch
1
3. 4 super(3,3,3)
5 end
6
7 def open
8 puts @msg
9 end
10 end
11
12 jbox = JackInTheBox.new(Surprise!)
13 jbox.volume # => 27
14 jbox.open # prints Surprise!
Control
1 while true == false
2 if var == 5
3 break
4 end
5
6 begin
7 var - 1
8 end while var < 4
9
10 next if var == 6
11 end
Blocks
1 [1,2,3].each { |n| puts n }
This outputs:
1 1
2 2
3 3
4 => [1,2,3]
Block Syntax
1 5.upto(10) { |n| puts n }
This is exactly the same as the following:
1 5.upto(10) do |n|
2 puts n
3 end
1.2 Why We Love It
Attribute Methods
3
4. 1 class Person
2 def name
3 @name
4 end
5 def social=(s)
6 @social = s
7 end
8 def age
9 @age
10 end
11 def age=(a)
12 @age = a
13 end
14 end
The Easy Way
1 class Person
2 attr_reader :name
3 attr_writer :social
4 attr_accessor :age
5 end
The Easy Way Explained
1 class Person
2 attr_reader :name
3 attr_writer :social
4 attr_accessor :age
5 end
Ruby syntax allows method calls without ()
Result is clean and looks like a language feature
We can implement this ourselves
Untested code, please do not copy:
1 class Object
2 def self.attr_reader(var)
3 class_eval <<-METHODS
4 def #{var}
5 @#{var}
6 end
7 METHODS
8 end
9 end
Why Blocks
1 (map (lambda (n)
2 (+ n 5))
3 (1 2 3))
4
5. Becomes:
1 [1,2,3].map do |n|
2 n + 5
3 end
Results in:
1 => [6,7,8]
1.3 Gems
Modules
1 module Voice
2 def say(msg)
3 puts msg
4 end
5 end
6
7 class Person
8 include Voice
9 end
10
11 p = Person.new
12 p.say(Hello) # prints Hello
Using Gems
Require loads in 鍖les
1 require saver # pulls in saver.rb
Gems allow us to not deal with paths
1 require rubygems
2 require saver
3
4 class Item
5 include Saver
6 end
Writing Gems
1 Gem::Specification.new do |s|
2 s.name = "saver"
3 s.version = Saver::VERSION
4 s.authors = ["Christopher Giroir"]
5 s.email = ["kelsin@valefor.com"]
6 s.homepage = "http://kelsin.github.com/saver/"
7
8 s.files = git ls-files.split("n")
9 s.require_paths = ["lib"]
10
11 s.add_dependency activesupport, ~> 3.0.0
12 s.add_dependency mongo_mapper
13 end
5
6. 2 Tools
2.1 Bundler
Why Bundler?
Many projects (i.e. rails apps) are not gems themselves
They do have gem dependencies
Easy way to install and keep track of these dependencies
Making sure ONLY the proper gems are used
The Gem鍖le
1 source http://tools1.savewave.com/rubygems
2 source http://rubygems.org
3
4 gem rails, 3.0.7
5
6 gem sw-model, 0.13.0
7
8 group :development, :test do
9 gem "rspec"
10 end
Using Bundler
1 # Install the gems from the Gemfile
2 bundle install
3
4 # Update gems to new versions
5 bundle update
6
7 # Execute command with proper gems
8 bundle exec rake spec
In your ruby code
1 require "rubygems"
2 require "bundler/setup"
3 require "saver"
Gem鍖le.lock
When you initially install versions are saved to Gem鍖le.lock
After they are only updated on bundle update
SHOULD be checked into version control
Protects from version updates
6
7. 2.2 RVM
Why RVM?
Di鍖erent projects might use di鍖erent versions of rails
Di鍖erent projects might use di鍖erent ruby interpreters
Ruby
JRuby
Rubinus
While bundler helps, complete gem isolation is better!
Its nice to keep your system ruby separate and not update it
Using RVM
1 # Install the default 1.9.2 ruby interpretor
2 rvm install 1.9.2
3
4 # Switch to using 1.9.2
5 rvm use 1.9.2
6
7 # List installed rubies
8 rvm list
RVM Gemsets
1 # Create a new gemset
2 rvm gemset create savingstar-web
3
4 # List gemsets
5 rvm gemset list
6
7 # Switch to a ruby and gemset together
8 rvm use 1.9.2@savingstar-web
.rvmrc
A .rvmrc 鍖le per project allows you to say which ruby and gemset to use
Should be in source control. Helps RVM users out, ignored for others
Its a shell script thats executed everytime you cd (very unsafe)
Makes life very easy however!
1 rvm use 1.9.2@saveingstar-web --create
7