hi-mixin

Makes it easy to define mixins that can be added to your classes

Mixin

Inspired by The Little Book on CoffeeScript

npm install hi-mixin
npm test
coffee  ./example/example-1.coffee
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
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]
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)
lion = new Animal('cat')
lion.setName('meowie')
lion.save()
console.log Animal.count()
lion.destroy()
coffee --compile  -o ./lib ./coffee
  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Update the specs and source files (./spec and ./coffee)
  4. Build the project (coffee --compile -o ./lib ./coffee)
  5. Commit your changes (git commit -am 'Add some feature')
  6. Push to the branch (git push origin my-new-feature)
  7. Create new Pull Request