0.8.2 • Published 13 years ago
hi-mixin v0.8.2
Mixin
Make it easy to define mixins that can be added to your classes
Inspired by The Little Book on CoffeeScript
Installation
npm install hi-mixin
Test
npm test
Example Code
coffee ./example/example-1.coffee
Usage
To define a mixin:
global.Mixin = require 'hi-mixin'
class ModelBase extends Mixin
@addTheseToClass:
pi: 3.14
@addTheseToInstance:
legs: 4
atts: {}
get: (field)-> @atts[field]
set: (field, val)-> @atts[field] = val
To define a mixin that depends on another mixin:
class ORM extends Mixin
@include ModelBase
@addTheseToClass: # this (@) will refer to the class
storage: {}
count: ()-> @findAll().length
find: (id)-> @storage[id]
findAll: ()-> val for own key, val of @storage
@addTheseToInstance: # this (@) will refer to the instance
id: null
save: ()-> global[@constructor.name].storage[@id] = @
destroy:()-> delete global[@constructor.name].storage[@id]
To add a mixin to a Class:
class Animal
ORM.mixinTo @ # Adds methods and atts from ORM into this class
constructor: (@id)->
type: ()-> @get('type')
name: ()-> @get('name')
setName: (n)-> @set('name', n)
Use the new class:
lion = new Animal('cat')
lion.setName('meowie')
lion.save()
console.log Animal.count()
lion.destroy()
Build
coffee --compile -o ./lib ./coffee
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Update the specs and source files (./spec and ./coffee)
- Build the project (coffee --compile -o ./lib ./coffee)
- Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request