3

This is my first post so please excuse the brevity. I'm learning crystal and trying to include a file which has a shared name with another file in another path. According to the documentation I can use require "path/to/modules/" and include all files within, but when I do this I and then use the imported class, it tells me the class does not exist...

Nothing in the documentation seems to work. Is there some addon module I need to get the paths to work properly or am I misunderstanding something or do I have some syntax error?

This is my code (Using the example on the home page)

require "http/server"
require "modules/HttpRequest"

server = HTTP::Server.new do |context|
  context.response.print(request.result)
end

server.listen(80)

And the file HttpRequest.cr is in /modules/.

The error I get

Error in Server.cr:2: while requiring "modules/HttpRequest": can't find file 'modules/HttpRequest'

If you're trying to require a shard:
- Did you remember to run `shards install`?
- Did you make sure you're running the compiler in the same directory as your shard.yml?

require "modules/HttpRequest"
^
PinkFluff
  • 78
  • 8
  • Surely the `/` dashes are pointing to root and not relative to the working directory? In which case the first require should be failing as well which is a little strange that it's not... – Stephen Lake Nov 11 '18 at 13:30
  • No sorry I have made an error in writing my question - the slashes are not present – PinkFluff Nov 11 '18 at 13:50

1 Answers1

4

Using require "modules/HttpRequest" will look up modules/HttpRequest in CRYSTAL_PATH according to the require rules.

To require a file relative to the current file you need to use require "./modules/HttpRequest".

Stephie
  • 3,135
  • 17
  • 22