$30 off During Our Annual Pro Sale. View Details »
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
DSPy Meetup Tokyo #1 - はじめてのDSPy
masahiro_nishimi
1
160
WebRTC、 綺麗に見るか滑らかに見るか
sublimer
1
160
Socio-Technical Evolution: Growing an Architecture and Its Organization for Fast Flow
cer
PRO
0
320
251126 TestState APIってなんだっけ?Step Functionsテストどう変わる?
east_takumi
0
310
なあ兄弟、 余白の意味を考えてから UI実装してくれ!
ktcryomm
11
11k
TUIライブラリつくってみた / i-just-make-TUI-library
kazto
1
360
関数実行の裏側では何が起きているのか?
minop1205
1
680
dnx で実行できるコマンド、作ってみました
tomohisa
0
140
MAP, Jigsaw, Code Golf 振り返り会 by 関東Kaggler会|Jigsaw 15th Solution
hasibirok0
0
230
20 years of Symfony, what's next?
fabpot
2
350
從冷知識到漏洞,你不懂的 Web,駭客懂 - Huli @ WebConf Taiwan 2025
aszx87410
2
1.5k
令和最新版Android Studioで化石デバイス向けアプリを作る
arkw
0
380
Featured
See All Featured
Scaling GitHub
holman
464
140k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
A Tale of Four Properties
chriscoyier
162
23k
Side Projects
sachag
455
43k
How STYLIGHT went responsive
nonsquared
100
6k
Reflections from 52 weeks, 52 projects
jeffersonlam
355
21k
The Cult of Friendly URLs
andyhume
79
6.7k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
36
6.2k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.8k
Building an army of robots
kneath
306
46k
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/