16

I found this in Gemspec file of surveyor gem. What does the following line do?

$:.push File.expand_path("../lib", __FILE__)
require "surveyor/version"

Why does the $:.push thing do? To me it looks like its just requires the ../lib/surveyor/version file. if so, can't I just replace that with following one line?

require File.expand_path('../lib/surveyor/version', __FILE__)

Are both these same thing? If not, then what the difference?

CuriousMind
  • 33,537
  • 28
  • 98
  • 137

1 Answers1

17

$: is Ruby's load path, so it's in fact adding the a subfolder /lib of a folder in which __FILE__ resides to this array, so that other files from this gem can be required.

Joshua Cheek
  • 30,436
  • 16
  • 74
  • 83
Mchl
  • 61,444
  • 9
  • 118
  • 120
  • Basically a shortcut of having to write the complete path. That explains it. Thanks! – CuriousMind Apr 29 '12 at 14:52
  • @Gaurish: Not only that. The gem can assume that it is in the load path, in which it will fail to load if you require it by full path, without adding it to the load path. – Niklas B. Apr 29 '12 at 15:15