-
Notifications
You must be signed in to change notification settings - Fork 50
/
KeyOptions.cs
118 lines (104 loc) · 2.69 KB
/
KeyOptions.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using LoveSeat.Interfaces;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
namespace LoveSeat
{
public class KeyOptions : IKeyOptions
{
private JArray objects;
public KeyOptions(params object[] objects)
{
this.objects = new JArray(objects);
}
public KeyOptions(JArray jArray)
{
this.objects = jArray;
}
public override string ToString()
{
if (objects.Count == 0)
{
return "";
}
if (objects.Count == 1)
{
return HttpUtility.UrlEncode(objects[0].ToString(Formatting.None, new IsoDateTimeConverter()));
}
string result = "[";
bool first = true;
foreach (var item in objects)
{
if (!first)
result += ",";
first = false;
if(item.ToString().Equals("{}"))
result += item.ToString(Formatting.None, new IsoDateTimeConverter());
else
result += HttpUtility.UrlEncode(item.ToString(Formatting.None, new IsoDateTimeConverter()));
}
result += "]";
return result;
}
public void Insert(int index, JToken item)
{
objects.Insert(index, item);
}
public void RemoveAt(int index)
{
objects.RemoveAt(index);
}
public bool Remove(JToken item)
{
return objects.Remove(item);
}
public int Count
{
get { return objects.Count; }
}
public bool HasValues
{
get { return objects.Count > 0; }
}
public void Add(JToken item)
{
objects.Add(item);
}
public void Add(object item)
{
if (item == CouchValue.MaxValue)
{
objects.Add(new JRaw("{}"));
return;
}
objects.Add(item);
}
public void Add(params object[] items)
{
foreach (var item in items)
{
Add(item);
}
}
}
public static class CouchValue
{
static object value = new object();
public static object MaxValue
{
get
{
return value;
}
}
public static object MinValue
{
get { return null; }
}
}
}