WithUnmatched() public method

public WithUnmatched ( FalcorPath unmatched, dynamic parameters = null ) : RequestContext
unmatched FalcorPath
parameters dynamic
return RequestContext
Beispiel #1
0
        private IObservable <PathValue> Resolve(Route route, RequestContext context)
        {
            if (!context.Unmatched.Any() || _results.Any(pv => pv.Path.Equals(context.Unmatched)))
            {
                return(Observable.Empty <PathValue>());
            }

            var results = route(context).SelectMany(result =>
            {
                if (result.IsComplete)
                {
                    var pathValues = result.Values;
                    if (pathValues.Any())
                    {
                        _results.AddRange(pathValues);
                        if (result.UnmatchedPath.Any())
                        {
                            return(pathValues.ToObservable()
                                   .Where(pathValue => pathValue.Value is Ref)
                                   .SelectMany(pathValue =>
                            {
                                var unmatched = ((Ref)pathValue.Value).AsRef().AppendAll(result.UnmatchedPath);
                                return Resolve(route, context.WithUnmatched(unmatched));
                            })
                                   //.StartWith(pathValues) // Is this nescessary?
                                   );
                        }
                    }
                }
                else
                {
                    var error = new Error(result.Error);
                    _results.Add(new PathValue(context.Unmatched, error));
                    return(Observable.Return(new PathValue(context.Unmatched, error)));
                }
                return(Observable.Empty <PathValue>());
            });

            return(results);
        }
        private IObservable<PathValue> Resolve(Route route, RequestContext context)
        {
            if (!context.Unmatched.Any() || _results.Any(pv => pv.Path.Equals(context.Unmatched)))
                return Observable.Empty<PathValue>();

            var results = route(context).SelectMany(result =>
            {
                if (result.IsComplete)
                {
                    var pathValues = result.Values;
                    if (pathValues.Any())
                    {
                        _results.AddRange(pathValues);
                        if (result.UnmatchedPath.Any())
                        {
                            return pathValues.ToObservable()
                                .Where(pathValue => pathValue.Value is Ref)
                                .SelectMany(pathValue =>
                                {
                                    var unmatched = ((Ref) pathValue.Value).AsRef().AppendAll(result.UnmatchedPath);
                                    return Resolve(route, context.WithUnmatched(unmatched));
                                })
                                //.StartWith(pathValues) // Is this nescessary?
                                ;
                        }
                    }
                }
                else
                {
                    var error = new Error(result.Error);
                    _results.Add(new PathValue(context.Unmatched, error));
                    return Observable.Return(new PathValue(context.Unmatched, error));
                }
                return Observable.Empty<PathValue>();
            });

            return results;
        }