Giter Club home page Giter Club logo

caphe's Introduction

Caphe

Build Status Coverage Status NPM Download

NPM

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(person, Talkable, Moveable)


person.speak() # "Yeah!"
person.walk(8) # "Walk by 8"
person.run(5)  # "Run by 5"

> include module[, names...]

Like mixin but do it Ruby style. Optionally, specify name of methods that will be included

Talkable =
  speak: ->
    console.log "Yeah!"

class Person extends Caphe
  @include Talkable
  @include Moveable, 'run'

person = new Person()


person.speak() # "Yeah!"
person.run(6)  # "Run by 6"

person.walk(4) # undefined

> 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: 2, SPECIES: '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(person, module)


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(person, module)


person.foo()  # a
person.bar()  # John

module.foo = -> console.log "b"
person.foo()  # b

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.