public
Description: Fluent programming (chained method calls) for JavaScript.
Homepage: http://osteele.com/sources/javascript/fluently/
Clone URL: git://github.com/osteele/fluently.git
fluently / README
100644 53 lines (37 sloc) 1.863 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
= About
 
Fluently is a JavaScript toolkit for creating FluentInterfaces[http://martinfowler.com/bliki/FluentInterface.html].
 
I use this to define the mocks, stubs, and expectations in LzTestKit[http://osteele.com/sources/openlaszlo/lztestkit].
 
= Status
 
Alpha. I use this in other projects, but it's got a known bug (chained modifiers
ignore all but the last one), and the API isn't final.
 
= Examples
 
With Fluently, you can do this:
    var o = Fluently.make(function(define) {
      define('fn1', function() {console.info('called fn1')});
      define('fn2', function() {console.info('called fn2')});
      define('fn3', function() {return 3});
    });
to define an object with chained methods, that can be invoked thus:
  o.fn1().fn2() // calls fn1 and then fn2
  o.fn2().fn1() // calls fn2 and then fn1
  o.fn1().fn3() // returns 3 (an explicit 'return' breaks the chain)
 
You can also define modifiers, and aliases:
    var o = Fluently.make(function(define) {
      define('fn1', function() {console.info('called fn1')});
      define('fn2', function() {console.info('called fn2')});
      define.empty('and');
      define.alias('fn3', 'fn1');
      define.modifier('not');
    });
  
  o.fn3(); // same as o.fn1()
  o.fn1().and.fn2() // same as o.fn1().fn2()
  o.fn1().and.not.fn2() // options.not is set when fn2 is called
 
I've extracted a couple of files, from LzTestKit, into the examples[http://osteele.com/sources/javascript/fluently/examples/]
directory. These don't run on their own, but at least they show the
code in use.
 
You can also see a range of examples by viewing the specs[http://osteele.com/sources/javascript/fluently/specs/fluently-specs.js].
 
= Download
 
Get it here: {download-location}.
 
= License
 
Fluently is licensed under the MIT License.
 
This package includes a distribution of jsspec, which is licensed under the LGPL.