public override bool IsInvoke(IInvokeable method) { if (_cc.HttpContext.Request.HttpMethod == "POST") return true; if (_cc.HttpContext.Request.HttpMethod == "GET" && method.GetAttribute<HttpGetAttribute>() != null) { return true; } return false; }
public override async Task<ArgumentBinding[]> GetArgumentBindings(IInvokeable method) { var invokeableParameters = method.Parameters; var boundValues = new List<ArgumentBinding>(); foreach (var invokeableParameter in invokeableParameters) { var parameterObject = BindObject(_cc, invokeableParameter, method.InvokeDisplayName); boundValues.Add(parameterObject); } return await Task.FromResult(boundValues.ToArray()); }
public async Task<ArgumentBinding[]> BindParameters(IInvokeable nm, HttpRequestMessage request, CancellationToken cancellationToken) { var config = (HttpConfiguration) request.Properties["MS_HttpConfiguration"]; var formatter = config.Formatters.FindReader(nm.ParameterType, request.Content.Headers.ContentType); //formatter = new Noodles.WebApi.JQueryMvcFormUrlEncodedFormatter(); var stream = await request.Content.ReadAsStreamAsync(); var modelState = new ModelStateDictionary(); var logger = new ModelStateFormatterLogger(modelState, "model"); var obj = await formatter.ReadFromStreamAsync(nm.ParameterType, stream, request.Content, logger); if (obj == null) return Enumerable.Empty<ArgumentBinding>().ToArray(); throw new NotImplementedException("Aargh"); //return obj.GetType().GetProperties().Select(pi => // new ArgumentBinding(){ Parameter = pi, pi.Name, pi.GetValue(obj, null))).ToArray(); }
void addPossibleInvariant(string name, IInvokeable invokeable) { if (!IsPrefixed(name, out var type, out var plainName)) { return; } if (type != "inv") { return; } var setterName = VAR_MANGLE + "set_" + plainName; Assert(variables.ContainsKey(setterName) || variables.ContainsKey(plainName), LOCATION, $"Field {plainName} for invariant must be defined first"); invariants[plainName] = invokeable; }
void getContractInvokeable(string name, IInvokeable invokeable) { if (!IsPrefixed(name, out var type, out var plainName)) { return; } if (!type.IsMatch("^ 'req' | 'ens' $")) { return; } Assert(variables.ContainsKey(plainName), LOCATION, $"Invokeable {plainName} must be defined before any of its contract terms"); var mainValue = variables[plainName]; if (mainValue is InvokeableReference mainReference) { var mainInvokeable = mainReference.Invokeable; if (mainInvokeable is ContractInvokeable contractInvokeable) { var newInvokeable = new ContractInvokeable { Main = mainInvokeable, ImmediatelyInvokeable = true, Name = plainName }; State.SetInvokeable(mainReference.VariableName, newInvokeable); SetVariable(plainName, mainReference); switch (type) { case "req": contractInvokeable.Require = invokeable; break; case "ens": contractInvokeable.Ensure = invokeable; break; } } } else { Throw(LOCATION, $"{plainName} must be an invokeable"); } }
public abstract bool IsInvoke(IInvokeable invokeable);
public InvokeVm(IInvokeable invokeable) { }
public InvokeSuccessResult(IInvokeable invokeable) { _invokeable = invokeable; }
public InvokeSuccessVm(IInvokeable method, object result) { Method = method; Result = result; }
public static System.Web.WebPages.HelperResult NodeMethodLink(IInvokeable method, string additionalClasses) { return new System.Web.WebPages.HelperResult(__razor_helper_writer => { #line 35 "..\..\Helpers\NoodlesHelper.cshtml" #line default #line hidden #line 36 "..\..\Helpers\NoodlesHelper.cshtml" WebViewPage.WriteTo(@__razor_helper_writer, NodeMethodLink(method, additionalClasses,item => new System.Web.WebPages.HelperResult(__razor_template_writer => { #line default #line hidden WebViewPage.WriteLiteralTo(@__razor_template_writer, " "); #line 36 "..\..\Helpers\NoodlesHelper.cshtml" WebViewPage.WriteTo(@__razor_template_writer, method.InvokeDisplayName); #line default #line hidden #line 36 "..\..\Helpers\NoodlesHelper.cshtml" }))); #line default #line hidden #line 36 "..\..\Helpers\NoodlesHelper.cshtml" #line default #line hidden }); }
public static System.Web.WebPages.HelperResult NodeMethodLink(IInvokeable method, string additionalClasses, Func<dynamic, HelperResult> innerHtml) { return new System.Web.WebPages.HelperResult(__razor_helper_writer => { #line 39 "..\..\Helpers\NoodlesHelper.cshtml" if (method != null) { #line default #line hidden WebViewPage.WriteLiteralTo(@__razor_helper_writer, " <a class=\"nodeMethodLink "); #line 42 "..\..\Helpers\NoodlesHelper.cshtml" WebViewPage.WriteTo(@__razor_helper_writer, additionalClasses ?? ""); #line default #line hidden WebViewPage.WriteLiteralTo(@__razor_helper_writer, " "); #line 42 "..\..\Helpers\NoodlesHelper.cshtml" WebViewPage.WriteTo(@__razor_helper_writer, method.Target.NodeType().Name.ToClassName()); #line default #line hidden WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\" href=\""); #line 42 "..\..\Helpers\NoodlesHelper.cshtml" WebViewPage.WriteTo(@__razor_helper_writer, method.InvokeUrl); #line default #line hidden WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\">"); #line 42 "..\..\Helpers\NoodlesHelper.cshtml" WebViewPage.WriteTo(@__razor_helper_writer, innerHtml(null)); #line default #line hidden WebViewPage.WriteLiteralTo(@__razor_helper_writer, "</a>\r\n"); #line 43 "..\..\Helpers\NoodlesHelper.cshtml" } #line default #line hidden }); }
public AutoInvoker(IInvokeable invokeable) { this.invokeable = invokeable; invokeableAsValue = (Value)this.invokeable; }
public static System.Web.WebPages.HelperResult NodeMethodLink(IInvokeable method) { return new System.Web.WebPages.HelperResult(__razor_helper_writer => { #line 33 "..\..\Helpers\NoodlesHelper.cshtml" #line default #line hidden #line 33 "..\..\Helpers\NoodlesHelper.cshtml" WebViewPage.WriteTo(@__razor_helper_writer, NodeMethodLink(method, null)); #line default #line hidden #line 33 "..\..\Helpers\NoodlesHelper.cshtml" #line default #line hidden }); }
public abstract Task<ArgumentBinding[]> GetArgumentBindings(IInvokeable method);
public HttpResponse Handle(HttpRequest request) { this.getParams = GetGetParams(request.Url); this.postParams = GetPostParams(request.Content); this.requestMethod = request.Method.ToString(); ParseContrAndActionName(request.Url); MethodInfo method = GetMethod(); IEnumerable <ParameterInfo> parameters = method.GetParameters(); this.methodParams = new object[parameters.Count()]; int index = 0; foreach (ParameterInfo parameter in parameters) { if (parameter.ParameterType.IsPrimitive) { object value = this.getParams[parameter.Name]; this.methodParams[index] = Convert.ChangeType( value, parameter.ParameterType); index++; } else if (parameter.ParameterType == typeof(HttpRequest)) { this.methodParams[index] = request; index++; } else if (parameter.ParameterType == typeof(HttpSession)) { this.methodParams[index] = request.Session; index++; } else { Type bindingModelType = parameter.ParameterType; object bindingModel = Activator .CreateInstance(bindingModelType); PropertyInfo[] properties = bindingModelType.GetProperties(); foreach (PropertyInfo property in properties) { property.SetValue( bindingModel, Convert.ChangeType( postParams[property.Name], property.PropertyType) ); } this.methodParams[index] = Convert.ChangeType( bindingModel, bindingModelType); index++; } } IInvokeable actionResult = (IInvokeable)this.GetMethod() .Invoke(this.GetController(), this.methodParams); string content = actionResult.Invoke(); HttpResponse response = new HttpResponse() { StatusCode = ResponseStatusCode.Ok, ContentAsUTF8 = content }; return(response); }
public override bool IsInvoke(IInvokeable invokeable) { return _request.Method == HttpMethod.Post; }
public override Task<ArgumentBinding[]> GetArgumentBindings(IInvokeable method) { var binder = new PostParameterBinder(); return binder.BindParameters(method, _request, _ct); }
static IInvokeable cloneInvokeable(IInvokeable value) => (IInvokeable)((Value)value)?.Clone();