An open API service indexing awesome lists of open source software.

https://github.com/kikito/middleclass-extras

A set of middleclass add-ons that make it easier to use in some cases
https://github.com/kikito/middleclass-extras

Last synced: 6 months ago
JSON representation

A set of middleclass add-ons that make it easier to use in some cases

Awesome Lists containing this project

README

          

h1. middleclass-extras

This is a set of additions to "middleclass":http://www.github.org/kikito/middleclass.

h1. Warning:

middleclass-extras was made for middleclass 1.x and it's not under development any more.

middleclass 2.x has some features that make it incompatible with middleclass-extras.

middleclass-extras is being (slowly) re-done as a series of smaller libs. Right now, the only one completely finished is Stateful:

* "stateful.lua":http://github.com/kikito/stateful.lua

Other libraries might follow, but it might just take time. Sorry about that.

h1. Module brief description

What follows is a brief description of each of the middleclass-extras modules. Each nodule is commented out with usage examples. You can find more examples on the /spec/ folder.

* *Apply* allows invoking a method in all the instances of a class (and its subclasses). It also allows sorting before executing.
* *Beholder* is a small signaling/event controller mixin. Your classes can 'observe' and 'stop observing' events. Note that *Invoker* must be required before *Beholder*, or the later will not work.
* *Branchy* defines some useful methods for classes that behave like trees (@addChild@, @getAncestors@, etc)
* *Callbacks* is a powerful mixin that allows you to add 'hooks' to any existing method. For example, you can specify on runtime that you want to call a method after initializing one object.
* *GetterSetter* just adds a couple convenience getXXX, setXXX methods to your class.
* *Indexable* allows classes to have a 'fallback' method, similar to lua's @__index@ metamethod. Since @__index@ is reserved, the method used for lookup will be @index@, whithout underscores.
* *Invoker* is a very small mixin that can be used to 'send' methods to instances. It's main advantage is that it accepts both method names and lua functions on its parameters.
* *Stateful* defines stateful objects. Classes receive a new method called @addState@, and instances receive a new method called @gotoState@. The behaviour of each of the instance methods can be redefined per-state.

h1. Downloading

The recommended way is using "git":http://git-scm.com/.

In order to use middleclass-extras, you also need middleclass. You can download them both by doing:

cd your/project/path

git clone git://github.com/kikito/middleclass.git
git clone git://github.com/kikito/middleclass-extras.git

Alternatively, you can manually download them:
* "middleclass download":https://github.com/kikito/middleclass/raw/master/middleclass.lua
* "middleclass-extras download":https://github.com/kikito/middleclass/raw/master/middleclass-extras.lua

h1. Usage

middleclass-extras is prepared to be required right after middleclass:


require('middleclass.init')
require('middleclass-extras.init')

Notes:
* You can remove the .init part from middleclass if you are using middleclass as a file (middleclass.lua) instead of as a dir (middleclass/)
* You can remove the .init part on both requires if your package.path setting already includes @?/init.lua@

h1. Specs

You may find the specs for this library in "middleclass-specs":https://github.com/kikito/middleclass-specs