Skip to content

Instantly share code, notes, and snippets.

@khalidabuhakmeh
Created March 29, 2013 18:20
Show Gist options
  • Select an option

  • Save khalidabuhakmeh/5272569 to your computer and use it in GitHub Desktop.

Select an option

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.
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