0.2.0 • Published 8 years ago

pooka v0.2.0

Weekly downloads
2
License
ISC
Repository
github
Last release
8 years ago

Pooka Build Status

npm install pooka

to use this module you have to pass Node.js the --harmony_proxies V8 flag

% node --v8-options | grep proxies 
--harmony_proxies (enable "harmony proxies" (in progress))

Traits reimagined using ES6 Proxies.

Mostly a thought experiment for now, but as Proxies become more battle-tested, it could become a useful pattern.

This implementation lazily constructs implemented Traits.

The last Trait to implement a method is the one that is evaluated.

import Traits from 'pooka'

class Wheels {
  constructor (number = 4) {
    // this will be private since it isn't on the prototype
    this.n = number 
  }
  drive      () { return true   }
  // these will be public properties
  get wheels () { return this.n }
  get sinks  () { return true   }
}

class Storage {
  constructor (type) {
    // these two properties are also private
    this.type     = type
    this.contents = []
  }
  
  add (thing) {
    this.contents.push(thing)
  }  
}

class Wings {
  fly () { return true }
}

class Amphibious {
  get sinks () { return false }
}

class Airplane extends Traits {}
// Arguments are curried for instantiation
Airplane.implements(Storage, 'cargo')
Airplane.implements(Wheels, 3)
Airplane.implements(Wings)


class Car extends Traits {}
Car.implements(Storage, 'trunk')
Car.implements(Wheels/*, 4 as default */)

// Multiple levels of inheritance
class Amphicar extends Traits {}
Amphicar.implements(Car)
// override Wheels.prototyope.sinks
Amphicar.implements(Amphibious)

class Bike extends Traits {}
Bike.implements(Storage, 'basket')
Bike.implements(Wheels, 2)

class Semi extends Traits {}
Semi.implements(Storage, 'trailer')
Semi.implements(Wheels, 18)

car.fly() // new Error('Vehicle does not implement fly')
0.2.0

8 years ago

0.1.0

8 years ago

0.0.1

8 years ago