Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
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
70
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
66
CAP Theorem
mlomnicki
2
130
[PL] Transakcje w bazach danych
mlomnicki
1
250
SchemaPlus
mlomnicki
1
43
Other Decks in Technology
See All in Technology
New Relic 1 年生の振り返りと Cloud Cost Intelligence について #NRUG
play_inc
0
200
[Data & AI Summit '25 Fall] AIでデータ活用を進化させる!Google Cloudで作るデータ活用の未来
kirimaru
0
1k
接客歴・営業歴の方が長いエンジニアから見たre:Invent2025
yama3133
0
100
2025-12-18_AI駆動開発推進プロジェクト運営について / AIDD-Promotion project management
yayoi_dd
0
150
アプリにAIを正しく組み込むための アーキテクチャ── 国産LLMの現実と実践
kohju
0
190
IAMユーザーゼロの運用は果たして可能なのか
yama3133
2
520
1人1サービス開発しているチームでのClaudeCodeの使い方
noayaoshiro
2
570
『君の名は』と聞く君の名は。 / Your name, you who asks for mine.
nttcom
1
100
Oracle Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
1
740
Kiro を用いたペアプロのススメ
taikis
4
1.6k
Building Serverless AI Memory with Mastra × AWS
vvatanabe
0
320
AI時代のワークフロー設計〜Durable Functions / Step Functions / Strands Agents を添えて〜
yakumo
3
1.9k
Featured
See All Featured
Stop Working from a Prison Cell
hatefulcrawdad
273
21k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
170
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
1
1.3k
Building the Perfect Custom Keyboard
takai
1
660
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
99
Visualization
eitanlees
150
16k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.6k
The Curse of the Amulet
leimatthew05
0
4.6k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
Skip the Path - Find Your Career Trail
mkilby
0
25
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.3k
Build The Right Thing And Hit Your Dates
maggiecrowley
38
3k
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?