Skip to content

With a third optional parameter for @delegate #2

@sjamayee

Description

@sjamayee

After modification of module.coffee/@DeleGate like:

# Add methods on this prototype that point to another method
# on another object's prototype.
@delegate: (args...) ->
  name = if args.length > 2 then args.pop() else null
  target = args.pop()
  source = args.pop()
  name = source if not name
  @::[name] = target::[source]

It could work like this:

{Module} = require 'coffeescript-module'

class Foo extends Module
  log: -> console.log 'Foo!'

class Bar extends Module
  @delegate 'log', Foo, 'foo'

  log: -> console.log 'Bar!'

class Baz extends Bar #Module
  #@includes Bar
  @delegate 'log', Bar, 'bar'
  #@includes Foo
  @delegate 'log', Foo, 'foo'

foo = new Foo()
foo.log() #calls Foo::log() > Foo!

bar = new Bar()
bar.log() #calls Bar::log() > Bar!
bar.foo() #calls Foo::log() > Foo!

baz = new Baz()
baz.log() #calls Bar::log() > Bar!
baz.bar() #calls Bar::log() > Bar!
baz.foo() #calls Foo::log() > Foo!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions