Last active
September 28, 2018 16:34
-
-
Save amorphid/e66ca769e099d4447d0afdaf91cf0a45 to your computer and use it in GitHub Desktop.
Ruby refinement example
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
# here's a good blog post on Refinements => https://blog.codeship.com/ruby-refinements/ | |
# here's some Ruby documentation on Refinements => https://ruby-doc.org/core-2.1.1/doc/syntax/refinements_rdoc.html | |
class Foo < Struct.new(:bar) | |
end | |
module FooTools | |
refine Foo do | |
def baz | |
puts "hey look a baz!" | |
end | |
end | |
end | |
class SomeClass | |
using FooTools | |
def call_baz(foo) | |
foo.baz | |
end | |
end | |
f = Foo.new("bar") | |
begin | |
f.baz | |
rescue | |
puts "no baz :(" | |
end | |
SomeClass.new.call_baz(f) | |
begin | |
f.baz | |
rescue | |
puts "no baz :(" | |
end | |
# irb(main):001:0> #!/usr/bin/env ruby | |
# => nil | |
# irb(main):002:0> | |
# irb(main):003:0> class Foo < Struct.new(:bar) | |
# irb(main):004:1> end | |
# => nil | |
# irb(main):005:0> | |
# irb(main):006:0> module FooTools | |
# irb(main):007:1> refine Foo do | |
# irb(main):008:2* def baz | |
# irb(main):009:3> puts "hey look a baz!" | |
# irb(main):010:3> end | |
# irb(main):011:2> end | |
# irb(main):012:1> end | |
# => #<refinement:Foo@FooTools> | |
# irb(main):013:0> | |
# irb(main):014:0> class SomeClass | |
# irb(main):015:1> using FooTools | |
# irb(main):016:1> | |
# irb(main):017:1> def call_baz(foo) | |
# irb(main):018:2> foo.baz | |
# irb(main):019:2> end | |
# irb(main):020:1> end | |
# => :call_baz | |
# irb(main):021:0> | |
# irb(main):022:0> f = Foo.new("bar") | |
# => #<struct Foo bar="bar"> | |
# irb(main):023:0> | |
# irb(main):024:0> begin | |
# irb(main):025:1> f.baz | |
# irb(main):026:1> rescue | |
# irb(main):027:1> puts "no baz :(" | |
# irb(main):028:1> end | |
# no baz :( | |
# => nil | |
# irb(main):029:0> | |
# irb(main):030:0> SomeClass.new.call_baz(f) | |
# hey look a baz! | |
# => nil | |
# irb(main):031:0> | |
# irb(main):032:0> begin | |
# irb(main):033:1> f.baz | |
# irb(main):034:1> rescue | |
# irb(main):035:1> puts "no baz :(" | |
# irb(main):036:1> end | |
# no baz :( | |
# => nil | |
# irb(main):037:0> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment