Home Accessibility Courses Diary The Mouth Facebook Resources Site Map About Us Contact
Ruby mixins, modules, require and include

A Ruby "mixin" is a way of adding extra code from a module into a class - thus giving the programmer the ability to share code between a number of classes in a way that's in addition to inheritance. So - in effect - it gives multiple inheritance.

In some ways, you can compare a mixin to a (Java) interfaces which defines extra methods that you MUST have in a Java class in order for it to complete (implement) an interface. However, a Java interface is all to do with meeting the rules of the extra methods that must be provided and doesn't bring in any code at all, whereas in Ruby there are no such rules to be enforced (Ruby assumes you know what you are doing) and the mixin is all about bringing in the extra code.

We've got an example of a module for use in a mixin at tcalc.rb and a file that contains a class that uses it, together with a test harness here.

I have also written an example today that:
• loads a module via require
• then imports its namespace via include
which are the same basic principles as used in the mixin ... and I'm going to paste the source code below. Remember that require and include do different things in Ruby to they do in Perl ... in Ruby, require is used to load in a file (which probably contains a module) and include then brings its namespace into the current namespace.

Example: here's the file taxcalc.rb

module Taxcalc
  VAT_RATE = 17.5
  def net(gross)
    net = gross / (100.0 + VAT_RATE) * 100.0
    return net
  end
  def tax(gross)
    tax = gross - net(gross)
  end
end


And here's a sample program that uses it

# Drag in the file ...
require "taxcalc"
 
# And merge in its namespace
include Taxcalc
 
amount = 70.50
# because of the include, no need to say Taxcalc::net, etc
shopkeeper = net(amount)
vatman = tax(amount)
print "#{vatman} to the taxman\n"
print "#{shopkeeper} to the supplier\n"
print "Tax rate is #{VAT_RATE}\n"


See also here for a further example of modules, mixing and comparators in Ruby.

Code example written to illustrate our Ruby Training Courses
(written 2008-11-16)

 
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
R119 - Ruby Miscellany
  [3799] Ruby Documentation through rdoc - (2012-07-07)
  [3783] Load path, load and require in Ruby, and a change from 1.8 to 1.9 - (2012-06-24)
  [3622] Loading Ruby classes - where does Ruby look? - (2012-02-24)
  [3428] How many days to Christmas? - (2011-09-09)
  [3155] Rake - a build system using code written in Ruby - (2011-02-03)
  [1890] MySQL database from Ruby - an example - (2008-11-16)
  [1720] Some Ruby lesser used functions - (2008-07-26)
  [1586] Variable types in Ruby - (2008-03-21)
  [1181] Good Programming practise - where to initialise variables - (2007-05-09)


Back to
Find the link
Previous and next
or
Horse's mouth home
Forward to
MySQL database from Ruby - an example
Some other Articles
Some Linux and Unix tips
Melksham Chamber of Commerce and Industry
Ruby to access web services
Ruby mixins, modules, require and include
Find the link
Ruby Programming Course - Saturday and Sunday
Keys to friendless churches
Hiding a MySQL database behind a web page
Recession? Depression?
4254 posts, page by page
Link to page ... 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86 at 50 posts per page


This is a page archived from The Horse's Mouth at http://www.wellho.net/horse/ - the diary and writings of Graham Ellis. Every attempt was made to provide current information at the time the page was written, but things do move forward in our business - new software releases, price changes, new techniques. Please check back via our main site for current courses, prices, versions, etc - any mention of a price in "The Horse's Mouth" cannot be taken as an offer to supply at that price.

Link to Ezine home page (for reading).
Link to Blogging home page (to add comments).

You can Add a comment or ranking to this page

© WELL HOUSE CONSULTANTS LTD., 2014: Well House Manor • 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
PH: 01144 1225 708225 • FAX: 01144 1225 899360 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho

PAGE: http://www.wellho.net/mouth/1889_Rub ... clude.html • PAGE BUILT: Sun Mar 30 15:20:58 2014 • BUILD SYSTEM: WomanWithCat