Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Ruby 2.0 Walkthrough: The Best Bits
Search
Peter Cooper
February 25, 2013
Programming
11k
67
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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
More Decks by Peter Cooper
See All by Peter Cooper
The Future of Code
peterc
0
160
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
240
Redis Steady Go
peterc
31
2.3k
Other Decks in Programming
See All in Programming
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
310
mrbgem 三角測量 開発
ogom
0
200
技術的負債の返済は、AI時代の複利で効く投資 — 経営としての意思決定とその遂行
curekoshimizu
1
2.2k
半永久的に提供し続けられるプライベートクラウドを目指して ― 利用者の認知負荷を抑えるAPI抽象化とハードウェア世代交代の基盤設計
tomokon
0
450
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
480
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
350
Rでドレミ/Do-Re-Mi_with_R
florets1
0
120
Are APIs Still Relevant in the AI Era?
soyuka
0
420
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
540
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
270
モバイル交通系ICへのチャージ実例から考える、クロスプラットフォーム開発におけるiOS実機テスト設計とCI運用
yusuga
1
580
手動確認はもう限界 〜XCUITestでCustom URL Schemeの遷移を起動種別ごとに自動テストする〜 / Testing Custom URL Schemes with XCUITest
otouto
0
390
Featured
See All Featured
KATA
mclloyd
PRO
35
16k
First, design no harm
axbom
PRO
2
1.3k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
390
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
540
A designer walks into a library…
pauljervisheath
211
25k
sira's awesome portfolio website redesign presentation
elsirapls
0
440
Believing is Seeing
oripsolob
1
240
Designing for Timeless Needs
cassininazir
1
520
Are puppies a ranking factor?
jonoalderson
2
4k
Balancing Empowerment & Direction
lara
6
1.3k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
600
Building the Perfect Custom Keyboard
takai
2
890
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/