--001485e7c92625b7f304a4391096
Content-Type: text/plain; charset=ISO-8859-1

On Thu, May 26, 2011 at 9:22 PM, Ill Everbe <illeverbe / yahoo.com> wrote:

> #i have a file 'user.rb' in the current directory. if i ...
>
> require "user"
>
> #i get this messege (1.9.2 in xp and in windows 7)
>
> ##<internal:lib/rubygems/custom_require>:29:in `require': no such file
> to
> ##load -- user_input (LoadError)
> ##  from <internal:lib/rubygems/custom_require>:29:in `require'
>
> ##this worked fine in 1.9.1 in xp. and when i
>
> puts $:
>
> #in 1.9.1 the last load path is '.', but '.' is not in load path for
> #1.9.2
> #works fine if i
>
> require_relative 'user'
>
> #or if i
>
> load 'user.rb'
>
> #a bug or a reason for this behavior?  i used the installer. on xp and
> on #windows 7
>
> --
> Posted via http://www.ruby-forum.com/.
>
>
It's intentional, because "." is relative. So your script would work if you
invoke it from the same dir on 1.9.1, but would break if you invoke it from
the parent dir, because now it is looking in the parent dir for "user"
rather than the dir of the file. So most code that does require statements
like that has a bug there.



IDK what everyone else does, but for me, if its a bigger project, I add the
project root dir to the load path so that require("user") would then work if
user.rb is in the root dir of the project.

For smaller projects, like 1 or 2 files, I just do require("#{File.dirname
__FILE__}/user").

In library code (ie a gem you are writing), I don't think you are supposed
to alter the load path as part of the lib at all, rather do that in your
test code or in your binary, or just rely on rubygems to do it for you. Then
within the library, you can require things relative to the lib directory of
your project, even though the lib itself doesn't alter the path.



I'd be interested to know whether everyone else does it like this also, or
if you guys have discovered some useful pattern I don't know about.

--001485e7c92625b7f304a4391096--