Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Rummaging around the stdlib
Search
jswanner
April 09, 2015
Programming
0
57
Rummaging around the stdlib
Presented at an ORUG meeting
jswanner
April 09, 2015
Tweet
Share
More Decks by jswanner
See All by jswanner
ActiveRecord Scopes & Arel [RailsWayCon Version]
jswanner
3
170
ActiveRecord Scopes & Arel
jswanner
6
1.2k
Other Decks in Programming
See All in Programming
仕様がそのままテストになる!Javaで始める振る舞い駆動開発
ohmori_yusuke
6
3.3k
Core MIDI を勉強して作曲用の電子ピアノ作ってみた!
hypebeans
0
110
Honoを技術選定したAI要件定義プラットフォームAcsimでの意思決定
codenote
0
160
AI駆動開発カンファレンスAutumn2025 _AI駆動開発にはAI駆動品質保証
autifyhq
0
160
自動テストを活かすためのテスト分析・テスト設計の進め方/JaSST25 Shikoku
goyoki
2
620
予防に勝る防御なし(2025年版) - 堅牢なコードを導く様々な設計のヒント / Growing Reliable Code PHP Conference Fukuoka 2025
twada
PRO
36
11k
Amazon Bedrock Knowledge Bases Hands-on
konny0311
0
140
なぜ強調表示できず ** が表示されるのか — Perlで始まったMarkdownの歴史と日本語文書における課題
kwahiro
11
5.5k
2026年向け会社紹介資料
misu
0
160
KoogではじめるAIエージェント開発
hiroaki404
1
460
Register is more than clipboard
satorunooshie
1
470
ボトムアップの生成AI活用を推進する社内AIエージェント開発
aku11i
0
1.6k
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
The Cost Of JavaScript in 2023
addyosmani
55
9.2k
Navigating Team Friction
lara
190
15k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.2k
Git: the NoSQL Database
bkeepers
PRO
432
66k
The Invisible Side of Design
smashingmag
302
51k
It's Worth the Effort
3n
187
28k
A designer walks into a library…
pauljervisheath
210
24k
Why You Should Never Use an ORM
jnunemaker
PRO
60
9.6k
Code Review Best Practice
trishagee
72
19k
Transcript
Rummaging around the stdlib Jacob Swanner @jswanner
Definition of stdlib
Not a library of these
Definition of stdlib • Ships with the language • Separate
from “core” • Opt-in parts of the language
Old Identification Scheme • Something you needed to `require` •
Doesn’t quite work anymore
New Identification Scheme • Use documentation • Core: http://ruby-doc.org/core-2.2.1/ •
stdlib: http://ruby-doc.org/stdlib-2.2.1/
Common Parts • base64 • csv • erb • fileutils
• json • logger • net/http • pathname • pp • securerandom • webrick • yaml
Confusing Parts: Time $ irb >> Time.new(2015, 4, 9) =>
2015-04-09 00:00:00 -0400 >> Time.parse('2015-04-09') NoMethodError: undefined method `parse' for Time:Class >> require 'time' => true >> Time.parse('2015-04-09') => 2015-04-09 00:00:00 -0400
Confusing Parts: Date $ irb >> Date.new(2015, 4, 9) NameError:
uninitialized constant Date >> require 'date' => true >> Date.new(2015, 4, 9) => #<Date: 2015-04-09 ((2457122j,0s,0n),+0s,2299161j)> >> Date.parse('2015-04-09') => #<Date: 2015-04-09 ((2457122j,0s,0n),+0s,2299161j)>
Confusing Parts: RubyGems $ irb >> Gem => Gem >>
require 'rails' => true $ ruby --disable-gems -S -- irb >> Gem NameError: uninitialized constant Gem >> require 'rails' LoadError: cannot load such file -- rails
Lesser Known: ipaddr $ irb -r ipaddr >> IPAddr.new('10.0.0.256') IPAddr::InvalidAddressError:
invalid address >> ip = IPAddr.new('10.0.0.10') => #<IPAddr: IPv4:10.0.0.10/255.255.255.255> >> ip.succ => #<IPAddr: IPv4:10.0.0.11/255.255.255.255> >> ip.ipv6? => false >> ip_range = ip.mask(24) => #<IPAddr: IPv4:10.0.0.0/255.255.255.0> >> ip_range.include?(ip) => true
Lesser Known: irb #!/usr/bin/env ruby require 'irb' # require application
code # perform application boot IRB.start(__FILE__)
Buried Treasure: FileList $ irb -r rake/file_list >> existing =
Rake::FileList.new("*.markdown") => ["a.markdown", "b.markdown", "c.markdown"] >> renamed = existing.ext(".md") => ["a.md", "b.md", "c.md"] >> existing.zip(renamed). ?> each { |from, to| FileUtils.mv(from, to) } => [["a.markdown", "a.md"], ["b.markdown", "b.md"], ["c.markdown", "c.md"]]
FileList, cont’d $ tree ├── lib/ │ ├── a.rb │
├── b.rb │ └── c.rb └── test/ ├── a_test.rb └── c_test.rb
FileList, cont’d $ irb -r rake/file_list >> source = Rake::FileList.new("lib/*.rb")
=> ["lib/a.rb", "lib/b.rb", "lib/c.rb"] >> tests = Rake::FileList.new("test/*_test.rb") => ["test/a_test.rb", "test/c_test.rb"] >> untested = source. ?> sub(‘lib/‘, 'test/').sub('.rb', '_test.rb'). ?> exclude { |f| tests.include?(f) } => ["test/b_test.rb"]
YAML::Store $ irb -r yaml/store >> store = YAML::Store.new("store.yml") =>
#<Psych::Store:0x007f9b8f5b2430 …> >> store.transaction do ?> store["people"] = ["dray", "jacob", "nate"] ?> store["time"] = Time.now ?> end => … >> store["people"] PStore::Error: not in transaction
YAML::Store, cont’d $ cat store.yml --- people: - dray -
jacob - nate time: 2015-04-09 16:23:58.394957000 -04:00
Quirky: un $ irb -I lib -r date $ irb
-Ilib -rdate
Quirky: un, cont’d ruby -run -e cp -- [OPTION] SOURCE
DEST ruby -run -e ln -- [OPTION] TARGET LINK_NAME ruby -run -e mv -- [OPTION] SOURCE DEST ruby -run -e rm -- [OPTION] FILE ruby -run -e mkdir -- [OPTION] DIR ruby -run -e rmdir -- [OPTION] DIR ruby -run -e install -- [OPTION] SOURCE DEST ruby -run -e touch -- [OPTION] FILE ruby -run -e wait_writable -- [OPTION] FILE ruby -run -e mkmf -- [OPTION] EXTNAME [OPTION] ruby -run -e httpd -- [OPTION] DocumentRoot ruby -run -e help [COMMAND]
Quirky: un, cont’d $ ruby -run -e httpd -- --port
8888 . & […] INFO WEBrick::HTTPServer#start: port=8888 $ curl "http://localhost:8888/store.yml" --- people: - dray - jacob - nate time: 2015-04-09 16:23:58.394957000 -04:00
Quirky: ubygems $ cat $RUBY_ROOT/lib/ruby/2.2.0/ubygems.rb # This file allows for
the running of rubygems with a nice # command line look-and-feel: ruby -rubygems foo.rb #-- # Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others. # All rights reserved. # See LICENSE.txt for permissions. #++ require 'rubygems'
• CDC/ C. Goldsmith, P. Feorino, E. L. Palmer, W.
R. McManus http:// en.wikipedia.org/wiki/HIV/AIDS#/media/File:HIV-budding-Color.jpg • http://commons.wikimedia.org/wiki/User:Nephron http://en.wikipedia.org/wiki/ Herpes_simplex_virus#/media/File:Herpes_simplex_virus_pap_test.jpg • http://en.wikipedia.org/wiki/Chlamydia_infection#/media/ File:Pap_smear_showing_clamydia_in_the_vacuoles_500x_H%26E.jpg