caphe

0.0.2 • Public • Published

Caphe

Various design utils for htpp://coffeescript.org. Implementation of Reg Braithwaite's article.

Features

> mixin consumer, modules...

Mix modules' methods to the model.

class Person
 
person = new Person()
 
Talkable =
  speak: ->
    console.log "Yeah!"
 
Moveable =
  walk: (speed) ->
    console.log "Walk by #{speed}"
  run: (speed) ->
    console.log "Run by #{speed}"
 
Caphe.mixin(personTalkableMoveable)
 
 
person.speak() # "Yeah!" 
person.walk(8) # "Walk by 8" 
person.run(5)  # "Run by 5" 

> include module

Like mixin but do it Ruby style.

Talkable =
  speak: ->
    console.log "Yeah!"
 
class Person extends Caphe
  @include Talkable
 
person = new Person()
 
 
person.speak() # "Yeah!" 

> attrAccessor names...

Create getter & setter methods in Ruby style and hide the properties from public access.

class Person extends Caphe
  @attrAccessor "name""age"
 
  constructor: (@job) ->
 
 
person = new Person("Bar")
person.setName("Foo")
person.getName()        # Foo 
person.name             # undefined 
person.getAge()         # undefined 
person.setAge(5)
person.getAge()         # 5 
person.age              # undefined 
person.job              # Bar 

> CONST name: value, ...

Create constant getters in prototype level.

class Person extends Caphe
  @CONST EYE: 2SPECIES: 'homo sapiens'
 
 
Person::EYE()      # 2 
Person::SPECIES()  # homo sapiens 

> forward consumer, providers...

Mixin with late bound. The forwarded methods have each own module as their context.

module.foo = -> console.log "a"
module.bar = -> console.log @name
Caphe.forward(personmodule)
 
 
person.foo()  # a 
person.bar()  # undefined 
 
module.bar = -> console.log "b"
person.bar()  # b 

> delegate consumer, providers...

Like #forward, but the forwarded methods have the consumer as their context.

person.name = "John"
module.foo = -> console.log "a"
module.bar = -> console.log @name
Caphe.delegate(personmodule)
 
 
person.foo()  # a 
person.bar()  # John 
 
module.foo = -> console.log "b"
person.foo()  # b 

Package Sidebar

Install

npm i caphe

Weekly Downloads

3

Version

0.0.2

License

MIT

Last publish

Collaborators

  • drabiter