예제 #1
0
 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;
 }
예제 #2
0
        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());
        }
예제 #3
0
 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();
 }
예제 #4
0
        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;
        }
예제 #5
0
        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");
            }
        }
예제 #6
0
 public abstract bool IsInvoke(IInvokeable invokeable);
예제 #7
0
파일: InvokeVm.cs 프로젝트: genoher/Noodles
 public InvokeVm(IInvokeable invokeable)
 {
     
 }
예제 #8
0
 public InvokeSuccessResult(IInvokeable invokeable)
 {
     _invokeable = invokeable;
 }
예제 #9
0
 public InvokeSuccessVm(IInvokeable method, object result)
 {
     Method = method;
     Result = result;
 }
예제 #10
0
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

});

}
예제 #11
0
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

});

}
예제 #12
0
 public AutoInvoker(IInvokeable invokeable)
 {
     this.invokeable   = invokeable;
     invokeableAsValue = (Value)this.invokeable;
 }
예제 #13
0
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

});

                               }
예제 #14
0
 public abstract Task<ArgumentBinding[]> GetArgumentBindings(IInvokeable method);
예제 #15
0
        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);
        }
예제 #16
0
 public override bool IsInvoke(IInvokeable invokeable)
 {
     return _request.Method == HttpMethod.Post;
 }
예제 #17
0
 public override Task<ArgumentBinding[]> GetArgumentBindings(IInvokeable method)
 {
     var binder = new PostParameterBinder();
     return binder.BindParameters(method, _request, _ct);
 }
예제 #18
0
 static IInvokeable cloneInvokeable(IInvokeable value) => (IInvokeable)((Value)value)?.Clone();