newbie_86
newbie_86

Reputation: 4610

How to access a Ruby Module method

I have a Ruby module for constants. It has a list of variables and one method which applies formatting.

I can't seem to access the method in this module. Any idea why?

Upvotes: 32

Views: 46600

Answers (3)

Spyros
Spyros

Reputation: 48706

Generally, with modules, these things should be happening :

  • Autoload path in application.rb, add:

    config.autoload_paths += %W(#{config.root}/lib)
    
  • Place module in /lib

  • Include module with include NAMEOFMODULE

If the module name has an underscore like "game_engine", you need to use include GameEngine

Upvotes: 0

Jonas Elfström
Jonas Elfström

Reputation: 31458

If you include the module the method becomes an instance method but if you extend the module then it becomes a class method.

module Const
  def format
    puts 'Done!'
  end
end

class Car
  include Const
end

Car.new.format # Done!
Car.format # NoMethodError: undefined method format for Car:Class

class Bus
  extend Const
end

Bus.format # Done!
Bus.new.format # NoMethodError: undefined method format

Upvotes: 69

GutenYe
GutenYe

Reputation: 3399

module Foo
  def self.hello # This is a class method
    puts "self.hello"
  end

  def hello # When you include this module, it becomes an instance method 
    puts "hello"
  end
end

Foo.hello #=> self.hello

class Bar
  include Foo
end

Bar.new.hello #=> hello

Upvotes: 40

Related Questions