goodguide-gibbon 0.4.1 → 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/lib/goodguide/gibbon.rb
CHANGED
@@ -116,6 +116,14 @@ module GoodGuide
|
|
116
116
|
def initialize(type, id, annotations)
|
117
117
|
@query_type, @id, @annotations = type, id, annotations
|
118
118
|
end
|
119
|
+
|
120
|
+
def equals(other)
|
121
|
+
[
|
122
|
+
query_type == other.query_type,
|
123
|
+
id == other.id,
|
124
|
+
annotations == other.annotations
|
125
|
+
].all?
|
126
|
+
end
|
119
127
|
end
|
120
128
|
|
121
129
|
class Program
|
@@ -169,7 +177,7 @@ module GoodGuide
|
|
169
177
|
@queries ||= {}
|
170
178
|
end
|
171
179
|
|
172
|
-
def self.query(type, &impl)
|
180
|
+
def self.query(type, opts={}, &impl)
|
173
181
|
queries[type.to_s] = impl
|
174
182
|
end
|
175
183
|
|
@@ -205,6 +213,20 @@ module GoodGuide
|
|
205
213
|
raise QueryError.new(*a)
|
206
214
|
end
|
207
215
|
|
216
|
+
def self.query(type, opts={}, &impl)
|
217
|
+
arity = opts.fetch(:arity, 1)
|
218
|
+
super type, opts do |input, args, builder|
|
219
|
+
if args.size != arity
|
220
|
+
query_error!(
|
221
|
+
"wrong number of arguments: " +
|
222
|
+
"#{args.size} for #{arity} (in .#{type} #{args.join(' ')})"
|
223
|
+
)
|
224
|
+
end
|
225
|
+
|
226
|
+
self.instance_exec(input, *args, builder, &impl)
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
208
230
|
def analyze_query(input_id, query, t)
|
209
231
|
query_impl = get_query(query.type)
|
210
232
|
analysis = instance_exec(input_id, obj_to_ruby(query.args), t, &query_impl)
|
@@ -1110,7 +1110,6 @@ parse = Gibbon.parse = (function() {
|
|
1110
1110
|
return AST.string(s);
|
1111
1111
|
});
|
1112
1112
|
accessorExpr = accessor.map(function(name) {
|
1113
|
-
debugger;
|
1114
1113
|
return AST.query('access', [name]);
|
1115
1114
|
});
|
1116
1115
|
queryExpr = query.then(function(q) {
|
@@ -2366,10 +2365,12 @@ Value = Gibbon.Value = Value = (function(_super) {
|
|
2366
2365
|
});
|
2367
2366
|
},
|
2368
2367
|
pair: function(eFirst, eSecond) {
|
2369
|
-
return Promise.combine([eFirst, eSecond]).then(function(
|
2370
|
-
|
2368
|
+
return Promise.combine([eFirst, eSecond]).then(function(_arg) {
|
2369
|
+
var first, second;
|
2370
|
+
first = _arg[0], second = _arg[1];
|
2371
|
+
return Promise.combine([f(first), f(second)]).map(function(_arg1) {
|
2371
2372
|
var mFirst, mSecond;
|
2372
|
-
mFirst =
|
2373
|
+
mFirst = _arg1[0], mSecond = _arg1[1];
|
2373
2374
|
return Value.pair(mFirst, mSecond);
|
2374
2375
|
});
|
2375
2376
|
});
|
@@ -2626,7 +2627,7 @@ Gibbon.Dependency = Dependency = (function(_super) {
|
|
2626
2627
|
eval_ = Gibbon["eval"] = (function() {
|
2627
2628
|
var evalAll;
|
2628
2629
|
evalAll = function(semantics, entity, client) {
|
2629
|
-
var evalFlow, globalPromise, resultThunks, results;
|
2630
|
+
var evalFlow, globalPromise, resultThunks, results, toForce;
|
2630
2631
|
results = new Hash;
|
2631
2632
|
globalPromise = Promise.unit(entity);
|
2632
2633
|
resultThunks = new Hash;
|
@@ -2634,11 +2635,6 @@ eval_ = Gibbon["eval"] = (function() {
|
|
2634
2635
|
return resultThunks.set(key, Promise.lazy(function() {
|
2635
2636
|
return evalFlow(definition.flow, globalPromise).then(function(val) {
|
2636
2637
|
return val.resolve();
|
2637
|
-
}).after(function(val, deps) {
|
2638
|
-
deps = uniq(deps, function(x, y) {
|
2639
|
-
return x.equals(y);
|
2640
|
-
});
|
2641
|
-
return results.set(key, [val, deps]);
|
2642
2638
|
});
|
2643
2639
|
}));
|
2644
2640
|
});
|
@@ -2728,7 +2724,20 @@ eval_ = Gibbon["eval"] = (function() {
|
|
2728
2724
|
}
|
2729
2725
|
});
|
2730
2726
|
};
|
2731
|
-
|
2727
|
+
toForce = [];
|
2728
|
+
resultThunks.each(function(key, thunk) {
|
2729
|
+
return toForce.push(thunk.rescue(function(failure) {
|
2730
|
+
results.set(key, [null, [Dependency.failure(failure)]]);
|
2731
|
+
resultThunks.set(key, Promise.fail(failure));
|
2732
|
+
return Promise.unit(null);
|
2733
|
+
}).after(function(val, deps) {
|
2734
|
+
deps = uniq(deps, function(x, y) {
|
2735
|
+
return x.equals(y);
|
2736
|
+
});
|
2737
|
+
return results.set(key, [val, deps]);
|
2738
|
+
}));
|
2739
|
+
});
|
2740
|
+
return Promise.combine(toForce).map(function() {
|
2732
2741
|
return results;
|
2733
2742
|
});
|
2734
2743
|
};
|
@@ -2749,7 +2758,13 @@ eval_ = Gibbon["eval"] = (function() {
|
|
2749
2758
|
return finish(fail);
|
2750
2759
|
};
|
2751
2760
|
onSuccess = function(vals) {
|
2752
|
-
|
2761
|
+
var deps, val, _ref4;
|
2762
|
+
_ref4 = vals.get('/'), val = _ref4[0], deps = _ref4[1];
|
2763
|
+
if (val) {
|
2764
|
+
return finish(null, vals);
|
2765
|
+
} else {
|
2766
|
+
return finish(deps[0].failure);
|
2767
|
+
}
|
2753
2768
|
};
|
2754
2769
|
return evalAll(semantics, entity, client).force(onFailure, onSuccess);
|
2755
2770
|
};
|
@@ -3324,7 +3339,6 @@ stdlib = Gibbon.stdlib = (function() {
|
|
3324
3339
|
"case-eq": {
|
3325
3340
|
type: parse.type('case-eq [%a : %b] = %a -> %b'),
|
3326
3341
|
impl: function(evalInput, evalList) {
|
3327
|
-
debugger;
|
3328
3342
|
return combine([evalInput, evalList]).then(function(_arg) {
|
3329
3343
|
var input, list, out, step;
|
3330
3344
|
input = _arg[0], list = _arg[1];
|
@@ -3455,7 +3469,6 @@ stdlib = Gibbon.stdlib = (function() {
|
|
3455
3469
|
"include?": {
|
3456
3470
|
type: parse.type('include? %a = [%a] -> bool'),
|
3457
3471
|
impl: function(evalList, evalElement) {
|
3458
|
-
debugger;
|
3459
3472
|
return combine([evalElement, evalList]).then(function(_arg) {
|
3460
3473
|
var booleans, el, list, p;
|
3461
3474
|
el = _arg[0], list = _arg[1];
|
@@ -3729,24 +3742,16 @@ stdlib = Gibbon.stdlib = (function() {
|
|
3729
3742
|
_results = [];
|
3730
3743
|
for (_i = 0, _len = elements.length; _i < _len; _i++) {
|
3731
3744
|
promise = elements[_i];
|
3732
|
-
_results.push(promise.
|
3733
|
-
return
|
3745
|
+
_results.push(promise.then(function(e) {
|
3746
|
+
return e.resolve().map(function(e) {
|
3747
|
+
return [e.promise()];
|
3748
|
+
});
|
3734
3749
|
}).or(unit([])));
|
3735
3750
|
}
|
3736
3751
|
return _results;
|
3737
3752
|
})();
|
3738
3753
|
return combine(wrapped).map(function(lists) {
|
3739
|
-
|
3740
|
-
return Value.list((function() {
|
3741
|
-
var _i, _len, _ref, _results;
|
3742
|
-
_ref = catLists(lists);
|
3743
|
-
_results = [];
|
3744
|
-
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
3745
|
-
e = _ref[_i];
|
3746
|
-
_results.push(unit(e));
|
3747
|
-
}
|
3748
|
-
return _results;
|
3749
|
-
})());
|
3754
|
+
return Value.list(catLists(lists));
|
3750
3755
|
});
|
3751
3756
|
});
|
3752
3757
|
},
|
@@ -3920,7 +3925,6 @@ Gibbon.jsonConsumer = (function() {
|
|
3920
3925
|
};
|
3921
3926
|
return {
|
3922
3927
|
analyzeQuery: function(id, query, t, callback) {
|
3923
|
-
debugger;
|
3924
3928
|
switch (query.type) {
|
3925
3929
|
case 'access':
|
3926
3930
|
return getType(id, query.args[0], t, callback);
|
@@ -1104,7 +1104,6 @@ parse = Gibbon.parse = (function() {
|
|
1104
1104
|
return AST.string(s);
|
1105
1105
|
});
|
1106
1106
|
accessorExpr = accessor.map(function(name) {
|
1107
|
-
debugger;
|
1108
1107
|
return AST.query('access', [name]);
|
1109
1108
|
});
|
1110
1109
|
queryExpr = query.then(function(q) {
|
@@ -2338,10 +2337,12 @@ Value = Gibbon.Value = Value = (function(_super) {
|
|
2338
2337
|
});
|
2339
2338
|
},
|
2340
2339
|
pair: function(eFirst, eSecond) {
|
2341
|
-
return Promise.combine([eFirst, eSecond]).then(function(
|
2342
|
-
|
2340
|
+
return Promise.combine([eFirst, eSecond]).then(function(_arg) {
|
2341
|
+
var first, second;
|
2342
|
+
first = _arg[0], second = _arg[1];
|
2343
|
+
return Promise.combine([f(first), f(second)]).map(function(_arg1) {
|
2343
2344
|
var mFirst, mSecond;
|
2344
|
-
mFirst =
|
2345
|
+
mFirst = _arg1[0], mSecond = _arg1[1];
|
2345
2346
|
return Value.pair(mFirst, mSecond);
|
2346
2347
|
});
|
2347
2348
|
});
|
@@ -2598,7 +2599,7 @@ Gibbon.Dependency = Dependency = (function(_super) {
|
|
2598
2599
|
eval_ = Gibbon["eval"] = (function() {
|
2599
2600
|
var evalAll;
|
2600
2601
|
evalAll = function(semantics, entity, client) {
|
2601
|
-
var evalFlow, globalPromise, resultThunks, results;
|
2602
|
+
var evalFlow, globalPromise, resultThunks, results, toForce;
|
2602
2603
|
results = new Hash;
|
2603
2604
|
globalPromise = Promise.unit(entity);
|
2604
2605
|
resultThunks = new Hash;
|
@@ -2606,11 +2607,6 @@ eval_ = Gibbon["eval"] = (function() {
|
|
2606
2607
|
return resultThunks.set(key, Promise.lazy(function() {
|
2607
2608
|
return evalFlow(definition.flow, globalPromise).then(function(val) {
|
2608
2609
|
return val.resolve();
|
2609
|
-
}).after(function(val, deps) {
|
2610
|
-
deps = uniq(deps, function(x, y) {
|
2611
|
-
return x.equals(y);
|
2612
|
-
});
|
2613
|
-
return results.set(key, [val, deps]);
|
2614
2610
|
});
|
2615
2611
|
}));
|
2616
2612
|
});
|
@@ -2700,7 +2696,20 @@ eval_ = Gibbon["eval"] = (function() {
|
|
2700
2696
|
}
|
2701
2697
|
});
|
2702
2698
|
};
|
2703
|
-
|
2699
|
+
toForce = [];
|
2700
|
+
resultThunks.each(function(key, thunk) {
|
2701
|
+
return toForce.push(thunk.rescue(function(failure) {
|
2702
|
+
results.set(key, [null, [Dependency.failure(failure)]]);
|
2703
|
+
resultThunks.set(key, Promise.fail(failure));
|
2704
|
+
return Promise.unit(null);
|
2705
|
+
}).after(function(val, deps) {
|
2706
|
+
deps = uniq(deps, function(x, y) {
|
2707
|
+
return x.equals(y);
|
2708
|
+
});
|
2709
|
+
return results.set(key, [val, deps]);
|
2710
|
+
}));
|
2711
|
+
});
|
2712
|
+
return Promise.combine(toForce).map(function() {
|
2704
2713
|
return results;
|
2705
2714
|
});
|
2706
2715
|
};
|
@@ -2721,7 +2730,13 @@ eval_ = Gibbon["eval"] = (function() {
|
|
2721
2730
|
return finish(fail);
|
2722
2731
|
};
|
2723
2732
|
onSuccess = function(vals) {
|
2724
|
-
|
2733
|
+
var deps, val, _ref4;
|
2734
|
+
_ref4 = vals.get('/'), val = _ref4[0], deps = _ref4[1];
|
2735
|
+
if (val) {
|
2736
|
+
return finish(null, vals);
|
2737
|
+
} else {
|
2738
|
+
return finish(deps[0].failure);
|
2739
|
+
}
|
2725
2740
|
};
|
2726
2741
|
return evalAll(semantics, entity, client).force(onFailure, onSuccess);
|
2727
2742
|
};
|
@@ -3296,7 +3311,6 @@ stdlib = Gibbon.stdlib = (function() {
|
|
3296
3311
|
"case-eq": {
|
3297
3312
|
type: parse.type('case-eq [%a : %b] = %a -> %b'),
|
3298
3313
|
impl: function(evalInput, evalList) {
|
3299
|
-
debugger;
|
3300
3314
|
return combine([evalInput, evalList]).then(function(_arg) {
|
3301
3315
|
var input, list, out, step;
|
3302
3316
|
input = _arg[0], list = _arg[1];
|
@@ -3427,7 +3441,6 @@ stdlib = Gibbon.stdlib = (function() {
|
|
3427
3441
|
"include?": {
|
3428
3442
|
type: parse.type('include? %a = [%a] -> bool'),
|
3429
3443
|
impl: function(evalList, evalElement) {
|
3430
|
-
debugger;
|
3431
3444
|
return combine([evalElement, evalList]).then(function(_arg) {
|
3432
3445
|
var booleans, el, list, p;
|
3433
3446
|
el = _arg[0], list = _arg[1];
|
@@ -3701,24 +3714,16 @@ stdlib = Gibbon.stdlib = (function() {
|
|
3701
3714
|
_results = [];
|
3702
3715
|
for (_i = 0, _len = elements.length; _i < _len; _i++) {
|
3703
3716
|
promise = elements[_i];
|
3704
|
-
_results.push(promise.
|
3705
|
-
return
|
3717
|
+
_results.push(promise.then(function(e) {
|
3718
|
+
return e.resolve().map(function(e) {
|
3719
|
+
return [e.promise()];
|
3720
|
+
});
|
3706
3721
|
}).or(unit([])));
|
3707
3722
|
}
|
3708
3723
|
return _results;
|
3709
3724
|
})();
|
3710
3725
|
return combine(wrapped).map(function(lists) {
|
3711
|
-
|
3712
|
-
return Value.list((function() {
|
3713
|
-
var _i, _len, _ref, _results;
|
3714
|
-
_ref = catLists(lists);
|
3715
|
-
_results = [];
|
3716
|
-
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
3717
|
-
e = _ref[_i];
|
3718
|
-
_results.push(unit(e));
|
3719
|
-
}
|
3720
|
-
return _results;
|
3721
|
-
})());
|
3726
|
+
return Value.list(catLists(lists));
|
3722
3727
|
});
|
3723
3728
|
});
|
3724
3729
|
},
|
@@ -3892,7 +3897,6 @@ Gibbon.jsonConsumer = (function() {
|
|
3892
3897
|
};
|
3893
3898
|
return {
|
3894
3899
|
analyzeQuery: function(id, query, t, callback) {
|
3895
|
-
debugger;
|
3896
3900
|
switch (query.type) {
|
3897
3901
|
case 'access':
|
3898
3902
|
return getType(id, query.args[0], t, callback);
|
data/vendor/gibbon/package.json
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: goodguide-gibbon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-10-
|
12
|
+
date: 2013-10-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: therubyracer
|
@@ -55,7 +55,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
55
55
|
version: '0'
|
56
56
|
segments:
|
57
57
|
- 0
|
58
|
-
hash:
|
58
|
+
hash: 207982896115587216
|
59
59
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
60
60
|
none: false
|
61
61
|
requirements:
|
@@ -64,7 +64,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
64
64
|
version: '0'
|
65
65
|
segments:
|
66
66
|
- 0
|
67
|
-
hash:
|
67
|
+
hash: 207982896115587216
|
68
68
|
requirements: []
|
69
69
|
rubyforge_project: goodguide-gibbon
|
70
70
|
rubygems_version: 1.8.23
|