Are there two kinds of 'require'?

I’m reading a tutorial and it has an example like this"

require ‘rubygems’
require ‘RedCloth’

The tutorial says:
"…the RubyGems library over-rides the require method and enables it to
be used to

load gems as if they were normal, local libraries."

I don’t know how it works.

Is there a rubygems require and an ordinary require?

I’m using 1.9.2 and I know require ‘rubygems’ is not necessary as
RubyGems is loaded

by default. But I still don’t understand the logic behind the
"over-rides the require

method and enables it to be used to load gems as if they were normal,
local libraries"

part.

  1. Does RedCloth have the .rb suffix? Is it different from any simple
    library I can

make (e.g. string_extensions.rb) in that it has to use the rubygems
version of

‘require’?

  1. Regarding the ‘string_extensions.rb’ , is RubyGems even necessary?
    That is, does

the automatically-loaded RubyGems have any bearing on simple libraries
that I may

create? Or is it just for downloaded gems like RedCloth?

Can someone please explain it to me in simple terms?

Thank you. =)

On Nov 5, 2011, at 1:26 PM, Kaye Ng wrote:

I don’t know how it works.

Is there a rubygems require and an ordinary require?

The salient point is that require depends on your LOAD_PATH. There are
many ways to inspect your load path, for example, you can start irb and
look at the $: global variable. If you use require with a name like
‘string_extensions’ it searches your load path for a matching file (it
adds ‘rb’ or the appropriate extension file extension automatically).
Basically, you can think of requiring ‘rubygems’ as adding all your
installed gems to the load path so that they will be found if you
require them.

Most developers (in my experience) discourage the use of explicitly
requiring ruby gems in libraries. For a detailed explanation see:

Whenever you require one of your files and it can’t be found, it means
that the file isn’t in your current load path. For that reason, Ryan
Davis above suggested you use ruby -I. (this explicitly adds your
working directory to the load path) and Luke Gruber explained how you
can use require with an absolute path.

And the reason that the current directory isn’t in the $LOAD_PATH
(also known as $:) anymore is due to security:
http://www.faqs.org/faqs/unix-faq/faq/part2/section-13.html

This is why require_relative is preferable to ‘require “./foo”’ or
'$:.unshift(“.”)`

PS: also *.so files are loaded not only *.rb files

1.Actually, a ruby library is a ruby file, the require method will
checks the file with the .rb suffix, and the path of the file. the
path of the require file maybe in current directory, or rubygems
directory.

2.The ruby interpreter(>1.9.2) includes the rubygems lib, so you not
really need to require it.

hope this helps.

2011/11/5 Steve K. [email protected]: