Skip to content

Commit 400ab00

Browse files
author
Tomas Bezouska
committed
All queries now take factories instead of final data
1 parent 3bffda4 commit 400ab00

12 files changed

+513
-92
lines changed

.gitattributes

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
###############################################################################
2+
# Set default behavior to automatically normalize line endings.
3+
###############################################################################
4+
* text=auto
5+
6+
###############################################################################
7+
# Set default behavior for command prompt diff.
8+
#
9+
# This is need for earlier builds of msysgit that does not have it on by
10+
# default for csharp files.
11+
# Note: This is only used by command line
12+
###############################################################################
13+
#*.cs diff=csharp
14+
15+
###############################################################################
16+
# Set the merge driver for project and solution files
17+
#
18+
# Merging from the command prompt will add diff markers to the files if there
19+
# are conflicts (Merging from VS is not affected by the settings below, in VS
20+
# the diff markers are never inserted). Diff markers may cause the following
21+
# file extensions to fail to load in VS. An alternative would be to treat
22+
# these files as binary and thus will always conflict and require user
23+
# intervention with every merge. To do so, just uncomment the entries below
24+
###############################################################################
25+
#*.sln merge=binary
26+
#*.csproj merge=binary
27+
#*.vbproj merge=binary
28+
#*.vcxproj merge=binary
29+
#*.vcproj merge=binary
30+
#*.dbproj merge=binary
31+
#*.fsproj merge=binary
32+
#*.lsproj merge=binary
33+
#*.wixproj merge=binary
34+
#*.modelproj merge=binary
35+
#*.sqlproj merge=binary
36+
#*.wwaproj merge=binary
37+
38+
###############################################################################
39+
# behavior for image files
40+
#
41+
# image files are treated as binary by default.
42+
###############################################################################
43+
#*.jpg binary
44+
#*.png binary
45+
#*.gif binary
46+
47+
###############################################################################
48+
# diff behavior for common document formats
49+
#
50+
# Convert binary document formats to text before diffing them. This feature
51+
# is only available from the command line. Turn it on by uncommenting the
52+
# entries below.
53+
###############################################################################
54+
#*.doc diff=astextplain
55+
#*.DOC diff=astextplain
56+
#*.docx diff=astextplain
57+
#*.DOCX diff=astextplain
58+
#*.dot diff=astextplain
59+
#*.DOT diff=astextplain
60+
#*.pdf diff=astextplain
61+
#*.PDF diff=astextplain
62+
#*.rtf diff=astextplain
63+
#*.RTF diff=astextplain

.gitignore

+212
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,212 @@
1+
## Ignore Visual Studio temporary files, build results, and
2+
## files generated by popular Visual Studio add-ons.
3+
4+
# User-specific files
5+
*.suo
6+
*.user
7+
*.userosscache
8+
*.sln.docstates
9+
10+
# User-specific files (MonoDevelop/Xamarin Studio)
11+
*.userprefs
12+
13+
# Build results
14+
[Dd]ebug/
15+
[Dd]ebugPublic/
16+
[Rr]elease/
17+
[Rr]eleases/
18+
x64/
19+
x86/
20+
build/
21+
bld/
22+
[Bb]in/
23+
[Oo]bj/
24+
25+
# Visual Studio 2015 cache/options directory
26+
.vs/
27+
28+
# MSTest test Results
29+
[Tt]est[Rr]esult*/
30+
[Bb]uild[Ll]og.*
31+
32+
# NUNIT
33+
*.VisualState.xml
34+
TestResult.xml
35+
36+
# Build Results of an ATL Project
37+
[Dd]ebugPS/
38+
[Rr]eleasePS/
39+
dlldata.c
40+
41+
# DNX
42+
project.lock.json
43+
artifacts/
44+
45+
*_i.c
46+
*_p.c
47+
*_i.h
48+
*.ilk
49+
*.meta
50+
*.obj
51+
*.pch
52+
*.pdb
53+
*.pgc
54+
*.pgd
55+
*.rsp
56+
*.sbr
57+
*.tlb
58+
*.tli
59+
*.tlh
60+
*.tmp
61+
*.tmp_proj
62+
*.log
63+
*.vspscc
64+
*.vssscc
65+
.builds
66+
*.pidb
67+
*.svclog
68+
*.scc
69+
70+
# Chutzpah Test files
71+
_Chutzpah*
72+
73+
# Visual C++ cache files
74+
ipch/
75+
*.aps
76+
*.ncb
77+
*.opensdf
78+
*.sdf
79+
*.cachefile
80+
81+
# Visual Studio profiler
82+
*.psess
83+
*.vsp
84+
*.vspx
85+
86+
# TFS 2012 Local Workspace
87+
$tf/
88+
89+
# Guidance Automation Toolkit
90+
*.gpState
91+
92+
# ReSharper is a .NET coding add-in
93+
_ReSharper*/
94+
*.[Rr]e[Ss]harper
95+
*.DotSettings.user
96+
97+
# JustCode is a .NET coding add-in
98+
.JustCode
99+
100+
# TeamCity is a build add-in
101+
_TeamCity*
102+
103+
# DotCover is a Code Coverage Tool
104+
*.dotCover
105+
106+
# NCrunch
107+
_NCrunch_*
108+
.*crunch*.local.xml
109+
110+
# MightyMoose
111+
*.mm.*
112+
AutoTest.Net/
113+
114+
# Web workbench (sass)
115+
.sass-cache/
116+
117+
# Installshield output folder
118+
[Ee]xpress/
119+
120+
# DocProject is a documentation generator add-in
121+
DocProject/buildhelp/
122+
DocProject/Help/*.HxT
123+
DocProject/Help/*.HxC
124+
DocProject/Help/*.hhc
125+
DocProject/Help/*.hhk
126+
DocProject/Help/*.hhp
127+
DocProject/Help/Html2
128+
DocProject/Help/html
129+
130+
# Click-Once directory
131+
publish/
132+
133+
# Publish Web Output
134+
*.[Pp]ublish.xml
135+
*.azurePubxml
136+
## TODO: Comment the next line if you want to checkin your
137+
## web deploy settings but do note that will include unencrypted
138+
## passwords
139+
#*.pubxml
140+
141+
*.publishproj
142+
143+
# NuGet Packages
144+
*.nupkg
145+
# The packages folder can be ignored because of Package Restore
146+
**/packages/*
147+
# except build/, which is used as an MSBuild target.
148+
!**/packages/build/
149+
# Uncomment if necessary however generally it will be regenerated when needed
150+
#!**/packages/repositories.config
151+
152+
# Windows Azure Build Output
153+
csx/
154+
*.build.csdef
155+
156+
# Windows Store app package directory
157+
AppPackages/
158+
159+
# Visual Studio cache files
160+
# files ending in .cache can be ignored
161+
*.[Cc]ache
162+
# but keep track of directories ending in .cache
163+
!*.[Cc]ache/
164+
165+
# Others
166+
ClientBin/
167+
[Ss]tyle[Cc]op.*
168+
~$*
169+
*~
170+
*.dbmdl
171+
*.dbproj.schemaview
172+
*.pfx
173+
*.publishsettings
174+
node_modules/
175+
orleans.codegen.cs
176+
177+
# RIA/Silverlight projects
178+
Generated_Code/
179+
180+
# Backup & report files from converting an old project file
181+
# to a newer Visual Studio version. Backup files are not needed,
182+
# because we have git ;-)
183+
_UpgradeReport_Files/
184+
Backup*/
185+
UpgradeLog*.XML
186+
UpgradeLog*.htm
187+
188+
# SQL Server files
189+
*.mdf
190+
*.ldf
191+
192+
# Business Intelligence projects
193+
*.rdl.data
194+
*.bim.layout
195+
*.bim_*.settings
196+
197+
# Microsoft Fakes
198+
FakesAssemblies/
199+
200+
# Node.js Tools for Visual Studio
201+
.ntvs_analysis.dat
202+
203+
# Visual Studio 6 build log
204+
*.plg
205+
206+
# Visual Studio 6 workspace options file
207+
*.opt
208+
209+
# LightSwitch generated files
210+
GeneratedArtifacts/
211+
_Pvt_Extensions/
212+
ModelManifest.xml

src/Firebase/FireBase.csproj

+1
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
<Compile Include="Query\IFirebaseQuery.cs" />
5656
<Compile Include="Query\OrderQuery.cs" />
5757
<Compile Include="Query\ParameterQuery.cs" />
58+
<Compile Include="Query\QueryFactoryExtensions.cs" />
5859
<Compile Include="Query\QueryExtensions.cs" />
5960
<Compile Include="Streaming\FirebaseCache.cs" />
6061
<Compile Include="Streaming\FirebaseEvent.cs" />

src/Firebase/FirebaseClient.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public FirebaseClient(string baseUrl, Func<Task<string>> authTokenAsyncFactory)
4545
/// <returns> <see cref="ChildQuery"/>. </returns>
4646
public ChildQuery Child(string resourceName)
4747
{
48-
return new ChildQuery(this.baseUrl + resourceName, this);
48+
return new ChildQuery(this, () => this.baseUrl + resourceName);
4949
}
5050
}
5151
}

src/Firebase/Query/AuthQuery.cs

+7-5
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,23 @@
11
namespace Firebase.Database.Query
22
{
3+
using System;
4+
35
/// <summary>
46
/// Represents an auth parameter in firebase query, e.g. "?auth=xyz".
57
/// </summary>
68
public class AuthQuery : ParameterQuery
79
{
8-
private readonly string token;
10+
private readonly Func<string> tokenFactory;
911

1012
/// <summary>
1113
/// Initializes a new instance of the <see cref="AuthQuery"/> class.
1214
/// </summary>
1315
/// <param name="parent"> The parent. </param>
14-
/// <param name="token"> The authentication token. </param>
16+
/// <param name="tokenFactory"> The authentication token factory. </param>
1517
/// <param name="client"> The owner. </param>
16-
public AuthQuery(FirebaseQuery parent, string token, FirebaseClient client) : base(parent, "auth", client)
18+
public AuthQuery(FirebaseQuery parent, Func<string> tokenFactory, FirebaseClient client) : base(parent, () => "auth", client)
1719
{
18-
this.token = token;
20+
this.tokenFactory = tokenFactory;
1921
}
2022

2123
/// <summary>
@@ -25,7 +27,7 @@ public AuthQuery(FirebaseQuery parent, string token, FirebaseClient client) : ba
2527
/// <returns> The <see cref="string"/>. </returns>
2628
protected override string BuildUrlParameter(FirebaseQuery child)
2729
{
28-
return this.token;
30+
return this.tokenFactory();
2931
}
3032
}
3133
}

src/Firebase/Query/ChildQuery.cs

+18-14
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,33 @@
11
namespace Firebase.Database.Query
22
{
3+
using System;
4+
35
/// <summary>
46
/// Firebase query which references the child of current node.
57
/// </summary>
68
public class ChildQuery : FirebaseQuery
79
{
8-
private readonly string path;
10+
private readonly Func<string> pathFactory;
911

1012
/// <summary>
1113
/// Initializes a new instance of the <see cref="ChildQuery"/> class.
1214
/// </summary>
13-
/// <param name="path"> The path to the child node. </param>
1415
/// <param name="parent"> The parent. </param>
16+
/// <param name="pathFactory"> The path to the child node. </param>
1517
/// <param name="client"> The owner. </param>
16-
public ChildQuery(string path, FirebaseQuery parent, FirebaseClient client)
18+
public ChildQuery(FirebaseQuery parent, Func<string> pathFactory, FirebaseClient client)
1719
: base(parent, client)
1820
{
19-
this.path = path;
20-
21-
if (!this.path.EndsWith("/"))
22-
{
23-
this.path += "/";
24-
}
21+
this.pathFactory = pathFactory;
2522
}
2623

2724
/// <summary>
2825
/// Initializes a new instance of the <see cref="ChildQuery"/> class.
2926
/// </summary>
30-
/// <param name="path"> The path to the child node. </param>
3127
/// <param name="client"> The client. </param>
32-
public ChildQuery(string path, FirebaseClient client)
33-
: this(path, null, client)
28+
/// <param name="pathFactory"> The path to the child node. </param>
29+
public ChildQuery(FirebaseClient client, Func<string> pathFactory)
30+
: this(null, pathFactory, client)
3431
{
3532
}
3633

@@ -41,12 +38,19 @@ public ChildQuery(string path, FirebaseClient client)
4138
/// <returns> The <see cref="string"/>. </returns>
4239
protected override string BuildUrlSegment(FirebaseQuery child)
4340
{
41+
var s = this.pathFactory();
42+
43+
if (!s.EndsWith("/"))
44+
{
45+
s += '/';
46+
}
47+
4448
if (!(child is ChildQuery))
4549
{
46-
return this.path + ".json";
50+
return s + ".json";
4751
}
4852

49-
return this.path;
53+
return s;
5054
}
5155
}
5256
}

0 commit comments

Comments
 (0)