Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/simonrichardson/fantasy-environment
Library for creating environment which holds methods and properties.
https://github.com/simonrichardson/fantasy-environment
Last synced: 22 days ago
JSON representation
Library for creating environment which holds methods and properties.
- Host: GitHub
- URL: https://github.com/simonrichardson/fantasy-environment
- Owner: SimonRichardson
- Created: 2013-10-29T16:02:27.000Z (about 11 years ago)
- Default Branch: master
- Last Pushed: 2016-02-05T10:48:12.000Z (over 8 years ago)
- Last Synced: 2024-08-08T15:47:26.357Z (3 months ago)
- Language: JavaScript
- Size: 7.81 KB
- Stars: 4
- Watchers: 4
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Fantasy Environment
![](https://raw.github.com/puffnfresh/fantasy-land/master/logo.png)
An environment holds methods and properties.
Methods are implemented as multi-methods, which allow a form of
*ad-hoc polymorphism*. Duck typing is another example of ad-hoc
polymorphism, but only allows a single implementation at a time, via
prototype mutation.A method instance is a product of a name, a predicate and an
implementation:```javascript
var env = environment()
.method(
// Name
'negate',
// Predicate
function(n) {
return typeof n == 'number';
},
// Implementation
function(n) {
return -n;
}
);env.negate(100) == -100;
```We can now override the environment with Some more implementations:
```javascript
var env2 = env
.method(
'negate',
function(b) {
return typeof b == 'boolean';
},
function(b) {
return !b;
}
);env2.negate(100) == -100;
env2.negate(true) == false;
```Environments are immutable; references to `env` won't see an
implementation for boolean. The `env2` environment could have
overwritten the implementation for number and code relying on `env`
would still work.Properties can be accessed without dispatching on arguments. They
can almost be thought of as methods with predicates that always
return true:```javascript
var env = fantasy.environment()
.property('name', 'Fantasy');env.name === 'Fantasy';
```
## Testing### Library
Fantasy Environment uses [nodeunit](https://github.com/caolan/nodeunit)
for all the tests and because of this there is currently an existing
[adapter](test/lib/test.js) in the library to help with integration
between nodeunit and Fantasy Environment.### Coverage
Currently Fantasy Environment is using [Istanbul](https://github.com/gotwarlost/istanbul)
for code coverage analysis; you can run the coverage via the following
command:_This assumes that you have istanbul installed correctly._
```
istanbul cover nodeunit -- test/*.js
```It should report that the total coverage is at 100% (branches at 80.95%)
for the whole lib.