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
Ruby Tricks 2
Search
Michał Łomnicki
November 21, 2012
Technology
3
73
Ruby Tricks 2
Michał Łomnicki
November 21, 2012
Tweet
Share
More Decks by Michał Łomnicki
See All by Michał Łomnicki
DDD, Rails and persistence
mlomnicki
1
280
Forget Ruby. Forget CoffeeScript. Do SOA
mlomnicki
1
130
Having fun with legacy apps
mlomnicki
1
67
CAP Theorem
mlomnicki
2
130
[PL] Transakcje w bazach danych
mlomnicki
1
260
SchemaPlus
mlomnicki
1
44
Other Decks in Technology
See All in Technology
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
3k
30万人の同時アクセスに耐えたい!新サービスの盤石なリリースを支える負荷試験 / SRE Kaigi 2026
genda
3
1.2k
生成AIを活用した音声文字起こしシステムの2つの構築パターンについて
miu_crescent
PRO
2
180
Bedrock PolicyでAmazon Bedrock Guardrails利用を強制してみた
yuu551
0
190
Kiro IDEのドキュメントを全部読んだので地味だけどちょっと嬉しい機能を紹介する
khmoryz
0
180
コスト削減から「セキュリティと利便性」を担うプラットフォームへ
sansantech
PRO
3
1.4k
Tebiki Engineering Team Deck
tebiki
0
24k
Ruby版 JSXのRuxが気になる
sansantech
PRO
0
140
Bill One 開発エンジニア 紹介資料
sansan33
PRO
4
17k
小さく始めるBCP ― 多プロダクト環境で始める最初の一歩
kekke_n
1
380
2026年、サーバーレスの現在地 -「制約と戦う技術」から「当たり前の実行基盤」へ- /serverless2026
slsops
2
220
会社紹介資料 / Sansan Company Profile
sansan33
PRO
15
400k
Featured
See All Featured
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
9.9k
For a Future-Friendly Web
brad_frost
182
10k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
140
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
100
Google's AI Overviews - The New Search
badams
0
900
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
200
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.1k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.2k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
0
1.1k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
6.9k
GraphQLの誤解/rethinking-graphql
sonatard
74
11k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
160
Transcript
Ruby Tips & Quirks #2 Michał Łomnicki http://mlomnicki.com
Local variables puts local_variables.inspect y = 4 puts local_variables.inspect
Local variables puts local_variables.inspect # => ["y"] y = 4
puts local_variables.inspect # => ["y"]
Local variables Ruby 1.8 puts local_variables.inspect # => ["y"] y
= 4 puts local_variables.inspect # => ["y"]
Local variables Ruby 1.9 puts local_variables.inspect # => [:y] y
= 4 puts local_variables.inspect # => [:y]
String vs Symbol class String unless instance_methods.include?("camelize") def camelize gsub(/\/(.?)/)
{ "::#{$1.upcase}" } .gsub(/(?:^|_)(.)/) { $1.upcase } end end end
String vs Symbol class String unless instance_methods.any? { |m| m.to_s
== "camelize" def camelize gsub(/\/(.?)/) { "::#{$1.upcase}" } .gsub(/(?:^|_)(.)/) { $1.upcase } end end end
String vs Symbol class String unless instance_methods.method_defined?(:camelize) def camelize gsub(/\/(.?)/)
{ "::#{$1.upcase}" } .gsub(/(?:^|_)(.)/) { $1.upcase } end end end
module functions module Security def generate_password ('a'..'z').sample(8) end end class
User include Security end User.new.generate_password
module functions module Security def generate_password ('a'..'z').sample(8) end end
module functions module Security extend self def generate_password ('a'..'z').sample(8) end
end
module functions module Security extend self def generate_password ('a'..'z').sample(8) end
end Security.generate_password
module functions module Security module_function def generate_password ('a'..'z').sample(8) end end
Security.generate_password
respond_to?(:super) module Sanitizer def save puts "sanitized" super end end
module Persistance def save puts "saved" super end end class User include Persistance include Sanitizer end
respond_to?(:super) module Sanitizer def save puts "sanitized" super end end
module Persistance def save puts "saved" super end end class User include Persistance include Sanitizer end
respond_to?(:super) > User.new.save => sanitized => saved => save: super:
no superclass method save (NoMeth
respond_to?(:super) module Sanitizer def save puts "sanitized" super if respond_to?(:super)
end end module Persistance def save puts "saved" super if respond_to?(:super) end end class User include Persistance include Sanitizer end
respond_to?(:super) module Sanitizer def save puts "sanitized" super if respond_to?(:super)
end end module Persistance def save puts "saved" super if respond_to?(:super) end end class User include Persistance include Sanitizer end
respond_to?(:super) > User.new.save => sanitized
respond_to?(:super) module Sanitizer def save puts "sanitized" super if defined?(super)
end end module Persistance def save puts "saved" super if defined?(super) end end class User include Persistance include Sanitizer end
respond_to?(:super) > User.new.save => sanitized => saved
Class.include module Sanitizer def save puts "sanitized" super if defined(super)
end end module Persistance def save puts "saved" super if defined(super) end end class User include Persistance include Sanitizer end
Class.include module Sanitizer def save puts "sanitized" super if defined(super)
end end module Persistance def save puts "saved" super if defined(super) end end class User include Persistance, Sanitizer end
Class.include > User.new.save => saved => sanitized
Class.include class User include Persistance, Sanitizer end
Class.include class User include Sanitizer, Persistance end
Class.include > User.new.save => sanitized => saved
Block comments =begin Objects don't specify their attributes directly, but
rather infer them from the table definition with which they're linked. Adding, removing, and changing attributes and their type is done directly in the database. =end
Ruby1.9 - each_with_object > (1..5).inject({}) do |i, hsh| hsh[i] =
i*2 hsh end => {1=>2, 2=>4, 3=>6, 4=>8, 5=>10} VS > (1..5).each_with_object({}) do |i, hsh| hsh[i] = i*2 end => {1=>2, 2=>4, 3=>6, 4=>8, 5=>10}
Ruby1.9 - public_send class User protected def destroy puts "destroyed"
end end User.new.public_send(:destroy) NoMethodError: protected method destroy called
Ruby1.9 - ObjectSpace.count_objects ObjectSpace.count_objects { :TOTAL=>76928, :FREE=>549, :T_OBJECT=>1363, :T_CLASS=>1008, :T_MODULE=>38,
:T_FLOAT=>7, :T_STRING=>50339, :T_REGEXP=>234, :T_ARRAY=>7259, :T_HASH=>558, :T_FILE=>16, :T_DATA=>1695, }
Ruby1.9 define_finalizer str = "ruby1.9" ObjectSpace.define_finalizer(str) do |object_id| puts "string
was destroyed id: #{object_id}" end str = nil GC.start => string was destroyed id: -607935038
Ruby1.9 call proc prc = proc { puts "proc called"
} 1) prc.call(1) # 1.8 2) prc[2] # 1.8 3) prc.(3) # new 4) prc.===(4) # new
Ruby1.9 call proc sleep_time = proc do |time| case time.hour
when 0..6 then true else false end end case Time.now when sleep_time puts "go to bed. now!" else puts "work harder" end
Ruby1.9 call proc sleep_time = proc do |time| case time.hour
when 0..6 then true else false end end case Time.now when sleep_time puts "go to bed. now!" else puts "work harder" end sleep_time.===(Time.now)
Questions?