Is there a way for me to simultaneously create a class and an instance method in a ruby class that have the same name?
I have a version of this created in the class Foo
class Foo
def self.bar
"hello world"
end
def bar
self.class.bar
end
end
While this works, is there a more elegant way of achieving this? Right now, I would have to duplicate ~10 methods as instance and class methods.
you can use Ruby's Forwardable like this:
# in foo.rb
class Foo
extend Forwardable
def_delegators :Foo, :bar, :baz, :qux
def self.bar
"hello bar"
end
end
then
> Foo.bar #=> "hello bar"
> Foo.new.bar #=> "hello bar"
You can also use method_missing like this:
class Foo
DelegatedMethods = %i[bar baz qux]
def method_missing(method)
if DelegatedMethods.include? method
self.class.send method
else
super
end
end
def self.bar
"a man walked into a bar"
end
end
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With