Including a Ruby class from a separate file

Viewed 81575

For a while I had been including an entire class inside of a Ruby module. Apparently this is not what I am supposed to do. It appears that the point of a module is to store functions which can then be included as methods in a new class.

I don't want this. I have a class that I want to keep in a separate file which I can access from other files. How can I do this?

Thanks.

4 Answers

Modules serve a dual purpose as a holder for functions and as a namespace. Keeping classes in modules is perfectly acceptable. To put a class in a separate file, just define the class as usual and then in the file where you wish to use the class, simply put require 'name_of_file_with_class' at the top. For instance, if I defined class Foo in foo.rb, in bar.rb I would have the line require 'foo'.

If you are using Rails, this include often happens automagically

Edit: clarification of file layout

#file: foo.rb
class Foo
  def initialize
    puts "foo"
  end
end

...

#file: bar.rb
require 'foo'

Foo.new

If you are in Rails, put these classes in lib/ and use the naming convention for the files of lowercase underscored version of the class name, e.g. Foo -> foo.rb, FooBar -> foo_bar.rb, etc.

As of ruby version 1.9 you can use require_relative, to require files relatively to the file you are editing.

When Using Require, inside the string indicate the full path name of the class you are refereing to unless its in the Root Folder of Ruby

MyApp
|_ app
|_ bin
|_ etc, etc
root_level_file.rb

You can just do: require './root_level_file'.

RootLevelFile.new

Related