All (scripting) languages allow you to load code from other supporting source files, using keywords like
use,
load,
source and
include. In Ruby, the most common way to load other code is to
require it - and if you use the
require method you'll load in code from another file which will be assumed to have a
.rb extension.
But where is the extra code loaded
from? And - more importantly - where do you want it loaded from?
Ruby looks for code it's asked to load in the directories listed in the
$LOAD_PATH special variable (also known as
$:) ... taking each of the directories in turn. There's a whole discussion on this variable and manipulating it on StackOverflow -
[here].
Let's take a look at where the codes loaded from on my current system:
WomanWithCat:kingston grahamellis$ irb
irb(main):001:0> require "pp"
=> true
irb(main):002:0> pp $:
["/Library/Ruby/Site/2.0.0",
"/Library/Ruby/Site/2.0.0/x86_64-darwin13",
"/Library/Ruby/Site/2.0.0/universal-darwin13",
"/Library/Ruby/Site",
"/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/vendor_ruby/2.0.0",
"/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/vendor_ruby/2.0.0/x86_64-darwin13",
"/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/vendor_ruby/2.0.0/universal-darwin13",
"/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/vendor_ruby",
"/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0",
"/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/x86_64-darwin13",
"/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/universal-darwin13"]
Any you'll note that Ruby looks first in various local (site) directories, and then into a series of directories that are supplier specific, and finally into general directories. But it does NOT include the current directory, which can be an issue when you're developing and testing code.
You could add a check of your current directory onto the top of your program:
$:.unshift File.dirname(__FILE__)
or (for something really quick and dirty) simply be specific in the
require - here's a 'complete' program:
require "./transport"
p (Train.new 9,40,"09:45").getCapacity
Complete source of that (and sample output!)
[here]. The cluster of classes that uses
[here].
(written 2015-06-03)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
R104 - Ruby - Control Structures [4674] Alternating valuses / flip-flop / toggle - example in Ruby - (2016-05-17)
[4503] Separating your code for easier testing, understanding and re-use; example in Ruby - (2015-06-02)
[4402] Finding sum, minimum, maximum and average in Python (and Ruby) - (2015-01-19)
[4370] Conditionals, loops and methods in Ruby - a primer with simple examples - (2014-12-29)
[4323] Learning to program - Loop statements such as while - (2014-11-22)
[4322] Learning to Program - the conditional statement (if) - (2014-11-21)
[3769] Muttable v immutable and implications - Ruby - (2012-06-20)
[3620] Finding the total, average, minimum and maximum in a program - (2012-02-22)
[3619] Ruby v Perl - a comparison example - (2012-02-21)
[3422] Assigning values to variables within other statements - Ruby - (2011-09-07)
[3397] Does a for loop evaluate its end condition once, or on every iteration? - (2011-08-18)
[3254] Multiple inputs, multiple out, ruby functions - (2011-04-19)
[3253] Is this number between? Does this list include? - Ruby - (2011-04-18)
[3200] How a for loop works Java, Perl and other languages - (2011-03-12)
[3159] Returning multiple values from a function call in various languages - a comparison - (2011-02-06)
[3158] Ruby training - some fresh examples for string handling applications - (2011-02-05)
[3156] Splitting data reading code from data processing code - Ruby - (2011-02-04)
[2975] Why do I need brackets in Ruby ... or Perl, Python, C or Java - (2010-09-29)
[2892] Alternative loops and conditionals in Ruby and Perl - (2010-07-28)
[2711] For loop - checked once, or evety time? Ruby v Perl comparison and contrast - (2010-04-07)
[2619] Passing code to procedures and yield in Ruby - (2010-02-02)
[2471] A short form of if ... then ... else - (2009-10-23)
[2287] Learning to program in Ruby - examples of the programming basics - (2009-07-15)
[1904] Ruby, Perl, Linux, MySQL - some training notes - (2008-11-23)
[1891] Ruby to access web services - (2008-11-16)
[1887] Ruby Programming Course - Saturday and Sunday - (2008-11-16)
[1870] What to do with a huge crop of apples - (2008-11-04)
[1738] Clean code, jump free (Example in Lua) - (2008-08-06)
[1696] Saying NOT in Perl, PHP, Python, Lua ... - (2008-07-04)
[1587] Some Ruby programming examples from our course - (2008-03-21)
[1582] Ruby, C, Java and more - getting out of loops - (2008-03-19)
[1220] for loop - how it works (Perl, PHP, Java, C, etc) - (2007-06-06)
[1163] A better alternative to cutting and pasting code - (2007-04-26)
[995] Ruby's case - no break - (2006-12-17)
[985] Equality in Ruby - == eql? and equal? - (2006-12-14)
[962] Breaking a loop - Ruby and other languages - (2006-12-03)
[960] 1st, 2nd, 3rd revisited in Ruby - (2006-12-02)
R103 - Basic Ruby Language Elements [4369] Ruby - the second rung of learning the language - (2014-12-28)
[4324] Learning to program - variables and constants - (2014-11-22)
[3917] BODMAS - the order a computer evaluates arithmetic expressions - (2012-11-09)
[3758] Ruby - standard operators are overloaded. Perl - they are not - (2012-06-09)
[3430] Sigils - the characters on the start of variable names in Perl, Ruby and Fortran - (2011-09-10)
[3278] Do I need to initialise variables - programming in C, C++, Perl, PHP, Python, Ruby or Java. - (2011-05-05)
[2617] Comparing floating point numbers - a word of caution and a solution - (2010-02-01)
[2613] Constants in Ruby - (2010-02-01)
[2296] Variable scope - what is it, and how does it Ruby? - (2009-07-18)
[986] puts - opposite of chomp in Ruby - (2006-12-15)
R108 - Ruby - More Classes and Objects [4551] Testing your new class - first steps with cucumber - (2015-10-23)
[4550] Build up classes into applications sharing data types in Ruby - (2015-10-23)
[4366] Changing what operators do on objects - a comparison across different programming languages - (2014-12-26)
[3782] Standard methods available on all objects in Ruby - (2012-06-23)
[3781] Private, Protected, Public in Ruby. What about interfaces and abstract classes in Ruby? - (2012-06-23)
[3760] Why you should use objects even for short data manipulation programs in Ruby - (2012-06-10)
[3260] Ruby - a training example that puts many language elements together to demonstrate the whole - (2011-04-23)
[3154] Changing a class later on - Ruby - (2011-02-02)
[3142] Private and Public - and things between - (2011-01-22)
[2980] Ruby - examples of regular expressions, inheritance and polymorphism - (2010-10-02)
[2977] What is a factory method and why use one? - Example in Ruby - (2010-09-30)
[2717] The Multiple Inheritance Conundrum, interfaces and mixins - (2010-04-11)
[2623] Object Oriented Ruby - new examples - (2010-02-03)
[2620] Direct access to object variable (attributes) in Ruby - (2010-02-02)
[2616] Defining a static method - Java, Python and Ruby - (2010-02-01)
[2604] Tips for writing a test program (Ruby / Python / Java) - (2010-01-29)
[2603] Ruby objects - a primer - (2010-01-29)
[2601] Ruby - is_a? v instance_of? - what is the difference? - (2010-01-27)
[2292] Object Orientation in Ruby - intermediate examples - (2009-07-16)
[1217] What are factory and singleton classes? - (2007-06-04)
[656] Think about your design even if you don't use full UML - (2006-03-24)
[184] MTBF of coffee machines - (2005-01-20)
Some other Articles
Melksham to London by train - dont buy more than you needIn favour of adoption rather than puppy purchase - dogs!Peak weekend - where there are still rooms near MelkshamRegular Expressions for the petrified - in RubyWhere does Ruby load modules from, and how to load from current directoryReading and parsing a JSON object in RubyDefining the behaviour of your web site and testing that it worksThe TransWilts Community Intergrated Transport CorridorSignificant work - beyond helloworld in Ruby