summaryrefslogtreecommitdiff
path: root/lib/results.js
blob: c12d194c450f8f7b7964a87dfbeb7e7e050b9878 (plain)
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
var _ = require("underscore");


exports.Result = Result;
exports.warning = warning;


function Result(value, messages) {
    this.value = value;
    this.messages = messages || [];
}

Result.prototype.map = function(func) {
    return new Result(func(this.value), this.messages);
};

Result.prototype.flatMapThen = function(func) {
    var messages = this.messages;
    return func(this.value).then(function(otherResult) {
        return new Result(otherResult.value, messages.concat(otherResult.messages));
    });
};

Result.combine = function(results) {
    var values = _.flatten(_.pluck(results, "value"));
    var messages = _.flatten(_.pluck(results, "messages"), true);
    return new Result(values, messages);
};

function warning(message) {
    return {
        type: "warning",
        message: message
    };
}