This project uses [busted](http://olivinelabs.com/busted/) for its specs. If you want to run the specs, you will have to install it first. Then just execute the following:
Middleclass used to expose several global variables on the main scope. It does not do that any more.
`class` is now returned by `require 'middleclass'`, and it is not set globally. So you can do this:
local class = require 'middleclass'
local MyClass = class('MyClass') -- works as before
`Object` is not a global variable any more. But you can get it from `class.Object`
local class = require 'middleclass'
local Object = class.Object
print(Object) -- prints 'class Object'
The public functions `instanceOf`, `subclassOf` and `includes` have been replaced by `Object.isInstanceOf`, `Object.static.isSubclassOf` and `Object.static.includes`.
Before:
instanceOf(MyClass, obj)
subclassOf(Object, aClass)
includes(aMixin, aClass)
After:
obj:isInstanceOf(MyClass)
aClass:isSubclassOf(Object)
aClass:includes(aMixin)
The previous code will throw an error if `obj` is not an object, or if `aClass` is not a class (since they will not implement `isInstanceOf`, `isSubclassOf` or `includes`).
If you are unsure of wether `obj` and `aClass` are an object or a class, you can use the methods in `Object`. They are prepared to work with random types, not just classes and instances:
Object.isInstanceOf(obj, MyClass)
Object.isSubclassOf(aClass, Object)
Object.includes(aClass, aMixin)
Notice that the parameter order is not the same now as it was in 2.x. Also note the change in naming: `isInstanceOf` instead of `istanceOf`, and `isSubclassOf` instead of `subclassOf`.