Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Ruby 2.0 Walkthrough: The Best Bits
Search
Peter Cooper
February 25, 2013
Programming
67
11k
Ruby 2.0 Walkthrough: The Best Bits
A quick overview of a few of the best bits in Ruby 2.0.
Peter Cooper
February 25, 2013
Tweet
Share
More Decks by Peter Cooper
See All by Peter Cooper
The Future of Code
peterc
0
140
Redis Steady Go (Nov 2012)
peterc
18
1.2k
I Choo-Choo Choose The Web: A History of the Web and JavaScript 1945-2012
peterc
1
200
Redis Steady Go
peterc
31
2.2k
Other Decks in Programming
See All in Programming
開発に寄りそう自動テストの実現
goyoki
1
360
なあ兄弟、 余白の意味を考えてから UI実装してくれ!
ktcryomm
10
11k
AIと協働し、イベントソーシングとアクターモデルで作る後悔しないアーキテクチャ Regret-Free Architecture with AI, Event Sourcing, and Actors
tomohisa
5
18k
ハイパーメディア駆動アプリケーションとIslandアーキテクチャ: htmxによるWebアプリケーション開発と動的UIの局所的適用
nowaki28
0
330
S3 VectorsとStrands Agentsを利用したAgentic RAGシステムの構築
tosuri13
5
260
React Native New Architecture 移行実践報告
taminif
1
130
全員アーキテクトで挑む、 巨大で高密度なドメインの紐解き方
agatan
8
18k
[SF Ruby Conf 2025] Rails X
palkan
0
440
新卒エンジニアのプルリクエスト with AI駆動
fukunaga2025
0
140
UIデザインに役立つ 2025年の最新CSS / The Latest CSS for UI Design 2025
clockmaker
17
6.6k
C-Shared Buildで突破するAI Agent バックテストの壁
po3rin
0
180
スタートアップを支える技術戦略と組織づくり
pospome
8
15k
Featured
See All Featured
Raft: Consensus for Rubyists
vanstee
140
7.2k
Thoughts on Productivity
jonyablonski
73
5k
A better future with KSS
kneath
240
18k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.3k
The Cult of Friendly URLs
andyhume
79
6.7k
We Have a Design System, Now What?
morganepeng
54
7.9k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
700
Mobile First: as difficult as doing things right
swwweet
225
10k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
37
2.6k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.2k
Agile that works and the tools we love
rasmusluckow
331
21k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Transcript
RUBY 2.0 WALKTHROUGH
The Best Bits THE RUBY 2.0 RUNTHROUGH
A sprint, not a stroll
BIG PARTS
Refinements Experimental scope-limited monkey patching
module FloatDivision refine Fixnum do def /(other); self.to_f / other;
end end end class MathFun using FloatDivision def self.ratio(a, b) a / b end end p MathFun.ratio(6, 8) THE OLD IDEA (no longer works)
module FloatDivision refine Fixnum do def /(other); self.to_f / other;
end end end class MathFun using FloatDivision def self.ratio(a, b) a / b end end p MathFun.ratio(6, 8)
module FloatDivision refine Fixnum do def /(other); self.to_f / other;
end end end using FloatDivision class MathFun def self.ratio(a, b) a / b end end p MathFun.ratio(6, 8) Main context is OK
Keyword Arguments definitely a: “pretty”, good: “addition”, to: “the language”
def some_method(options = {}) defaults = { x: 10, y:
20, z: 30 } options = defaults.merge(options) p options end some_method x: 1, y: 2
def some_method(x: 10, y: 20, z: 30) p x, y,
z end some_method x: 1, y: 2, z: 3
def some_method(x: 10, **rest) p x, rest end some_method x:
1, y: 2, z: 3, c: “x”
Enumerator::Lazy Lazy enumeration, finally made easy.
infinite_range = (0..Float::INFINITY) infinite_range.select { |num| num % 74 ==
0 }
infinite_range = (0..Float::INFINITY) e = infinite_range.lazy.select { |num| num %
74 == 0 } puts e.next puts e.next puts e.next
Module#prepend
module Bar def my_method "inside the module" end end class
Foo include Bar def my_method "inside the class" super end end x = Foo.new p x.my_method 1 2
module Bar def my_method "inside the module" super end end
class Foo prepend Bar def my_method "inside the class" end end x = Foo.new p x.my_method 1 2
INCLUDE PREPEND Foo class Bar module x object NEITHER Foo
class x object Object class Object class Foo class Bar module x object Object class
DETAILS
ABI Breakage Changes to the Application Binary Interface
Regex engine changed From Oniguruma to Onigmo
%{this\r\nis\n\ncool\vhello!}.gsub(/\R/, '')
RubyGems 2.0 Lots of refactoring, initial support for stdlib gemification,
gem search is now remote, arbitrary metadata support & more.
RDoc 4.0 Adds Markdown support & ri can now show
pages (e.g. READMEs with ri rdoc:README)
%i and %I To form arrays of symbols, like %w
does for words and arrays
%i{a b c} == [:a, :b, :c] %I{ #{(rand(26) +
65).chr} } == [:Y]
UTF-8 is default source encoding No more # encoding: utf-8
(if you don’t want)
Bitmap garbage collector Faster, more efficient
CSV.load and CSV.dump gone Not considered such a good idea
in light of the early 2013 YAML vulnerabilities
String#chars, #lines, #codepoints, etc. Now return arrays rather than enumerators.
Use #each_char, #each_line, etc. instead if you need enumerators.
TracePoint A more object oriented alternative to set_trace_func
tracer = lambda do |event, file, line, id, binding, klass|
to_display = [event, File.basename(file), line, klass, id] puts "%10s in %s at line %-2d %s:%s" % to_display end set_trace_func tracer # .. normal code here ..
tracer = TracePoint.new do |tp| to_display = [tp.event, File.basename(tp.path), tp.lineno,
tp.defined_class, tp.method_id] puts "%10s in %s at line %-2d %s:%s" % to_display end tracer.enable # .. normal code here ..
respond_to? respond_to? against a protected method now returns false
Method transplants with define_method Now accepts UnboundMethods
module M def foo; "foo"; end end define_method :foo, M.instance_method(:foo)
p foo
Array#bsearch Range#bsearch Binary search for monotonic collections
[1, 4, 9, 13, 14, 22, 40].bsearch { |i| p
i; i >= 6 } # 13 # 4 # 9 # => 9 (1..1000).bsearch { |i| i > 372 }
__dir__ Like __FILE__ but for the current source file’s directory
Equivalent to File.dirname(File.realpath(__FILE__))
to_h and Hash() A new convention. The hash equivalent to
#to_a A key use is with Struct and OpenStruct
User = Struct.new(:name, :age, :status) me = User.new("Peter", 31, :admin)
me.to_h ENV.to_h Hash(nil) # => {} Hash([]) # => {}
FIN https://cooperpress.com/