Created
March 29, 2013 18:20
-
-
Save khalidabuhakmeh/5272569 to your computer and use it in GitHub Desktop.
A possible wrapper for Firebase HTTP api. Not sure about this, but good demo I guess.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| using System; | |
| using System.Dynamic; | |
| using System.Text; | |
| namespace Spiffy | |
| { | |
| class Program | |
| { | |
| static void Main(string[] args) | |
| { | |
| dynamic firebase = new Firebase(); | |
| var result = firebase.users.jack.name(new {name = "Jack Sparrow"}); | |
| Console.WriteLine(result); | |
| Console.ReadLine(); | |
| } | |
| } | |
| public class Firebase : DynamicObject | |
| { | |
| public override bool TryGetMember(GetMemberBinder binder, | |
| out object result) | |
| { | |
| result = new MemberAccessWrapper("member accessed was " + binder.Name); | |
| return true; | |
| } | |
| private class MemberAccessWrapper : DynamicObject | |
| { | |
| private readonly string message; | |
| public override bool TryInvoke(InvokeBinder binder, object[] args, out object result) | |
| { | |
| StringBuilder builder = new StringBuilder(message).Append("("); | |
| for (int i = 0; i < args.Length; i++) | |
| { | |
| if (i != 0) builder.Append(", "); | |
| if (args[i] == null) | |
| { | |
| builder.Append("null"); | |
| } | |
| else if (args[i] is string) | |
| { | |
| builder.Append("@\"").Append(((string)args[i]) | |
| .Replace("\"", "\"\"")).Append("\""); | |
| } | |
| else | |
| { | |
| builder.Append(args[i]); | |
| } | |
| } | |
| builder.Append(")"); | |
| result = new MemberAccessWrapper(builder.ToString()); | |
| return true; | |
| } | |
| public MemberAccessWrapper(string message) | |
| { | |
| this.message = message; | |
| } | |
| public override string ToString() | |
| { | |
| return message; | |
| } | |
| public override bool TryGetMember(GetMemberBinder binder, | |
| out object result) | |
| { | |
| result = new MemberAccessWrapper(message + "." + binder.Name); | |
| return true; | |
| } | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment