RubyRedGrapefruit
RubyRedGrapefruit

Reputation: 12214

How can I refer to a module method without referring to the entire namespace?

I have a module defined as:

module MyApp
  module Utility
    def Utility.my_method

I want to use that method in several other classes. But I don't want to have to call:

MyApp::Utility.my_method

I would rather just call:

Utility.my_method

Is that reasonable? I've tried include MyApp::Utility and include MyApp to no avail.

Upvotes: 1

Views: 1156

Answers (2)

Matt Hulse
Matt Hulse

Reputation: 6212

Here is an example of mixing in my_method to a class:

#myapp.rb
module MyApp
  module Utility
    def my_method
      "called my_method"
    end
  end
end

#test.rb
require './myapp'
class MyClass
  include MyApp::Utility
end

if __FILE__ == $0 then
  m = MyClass.new
  puts m.my_method
end

It sounds like you want to maintain the namespace of the module on the mixed-in method. I have seen attempts to do so (https://stackoverflow.com/a/7575460/149212) but it seems pretty messy.

If you need my_method to be namespaced, you could simply include a module identifier in the method name:

module MyApp
  module Utility
    def util_my_method
      "called my_method"
    end
  end
end

Upvotes: 0

iced
iced

Reputation: 1572

Well, just assign any alias you want, e.g.:

ShortNameGoesHere = MyApp::Utility
ShortNameGoesHere.my_method

Upvotes: 2

Related Questions