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
73
3
Share
Ruby Tricks 2
Michał Łomnicki
November 21, 2012
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
69
CAP Theorem
mlomnicki
2
130
[PL] Transakcje w bazach danych
mlomnicki
1
280
SchemaPlus
mlomnicki
1
47
Other Decks in Technology
See All in Technology
Oracle AI Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
4
2.2k
New CBs New Challenges
ysuzuki
1
170
NgRx SignalStore: The Power of Extensibility
rainerhahnekamp
0
180
組織的なAI活用を阻む 最大のハードルは コンテキストデザインだった
ixbox
6
1.3k
さくらのAI Engineから始める クラウドネイティブ意識
melonps
0
130
AI時代に新卒採用、はじめました/junior-engineer-never-die
dmnlk
0
230
ふりかえりを 「あそび」にしたら、 学習が勝手に進んだ / Playful Retros Drive Learning
katoaz
0
440
2026年度新卒技術研修 サイバーエージェントのデータベース 活用事例とパフォーマンス調査入門
cyberagentdevelopers
PRO
6
7.1k
チームで育てるAI自走環境_20260409
fuktig
0
980
ふりかえりがなかった職能横断チームにふりかえりを導入してみて学んだこと 〜チームのふりかえりを「みんなで未来を考える場」にするプロローグ設計〜
masahiro1214shimokawa
0
320
AI前提とはどういうことか
daisuketakeda
0
170
ストライクウィッチーズ2期6話のエイラの行動が許せないのでPjMの観点から何をすべきだったのかを考える
ichimichi
1
310
Featured
See All Featured
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
370
Leading Effective Engineering Teams in the AI Era
addyosmani
9
1.8k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
250
Reality Check: Gamification 10 Years Later
codingconduct
0
2.1k
エンジニアに許された特別な時間の終わり
watany
106
240k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
480
The Cost Of JavaScript in 2023
addyosmani
55
9.8k
Balancing Empowerment & Direction
lara
5
1k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
WENDY [Excerpt]
tessaabrams
9
37k
My Coaching Mixtape
mlcsv
0
96
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
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?