diff --git a/Octokit.Reactive/Clients/IObservableGitDatabaseClient.cs b/Octokit.Reactive/Clients/IObservableGitDatabaseClient.cs
index d071c78a..14b8a369 100644
--- a/Octokit.Reactive/Clients/IObservableGitDatabaseClient.cs
+++ b/Octokit.Reactive/Clients/IObservableGitDatabaseClient.cs
@@ -7,5 +7,6 @@
{
IObservableTagsClient Tag { get; set; }
IObservableCommitsClient Commit { get; set; }
+ IObservableReferencesClient Reference { get; set; }
}
}
\ No newline at end of file
diff --git a/Octokit.Reactive/Clients/IObservableReferencesClient.cs b/Octokit.Reactive/Clients/IObservableReferencesClient.cs
new file mode 100644
index 00000000..699b45bc
--- /dev/null
+++ b/Octokit.Reactive/Clients/IObservableReferencesClient.cs
@@ -0,0 +1,83 @@
+using System;
+using System.Diagnostics.CodeAnalysis;
+using System.Reactive;
+
+namespace Octokit.Reactive
+{
+ public interface IObservableReferencesClient
+ {
+ ///
+ /// Gets a reference for a given repository by reference name
+ ///
+ ///
+ /// http://developer.github.com/v3/git/refs/#get-a-reference
+ ///
+ /// The owner of the repository
+ /// The name of the repository
+ /// Tha name of the reference
+ ///
+ [SuppressMessage("Microsoft.Naming", "CA1716:IdentifiersShouldNotMatchKeywords", MessageId = "Get",
+ Justification = "Method makes a network request")]
+ IObservable Get(string owner, string name, string reference);
+
+ ///
+ /// Gets all references for a given repository
+ ///
+ ///
+ /// http://developer.github.com/v3/git/refs/#get-all-references
+ ///
+ /// The owner of the repository
+ /// The name of the repository
+ ///
+ IObservable GetAll(string owner, string name);
+
+ ///
+ /// Gets references for a given repository by sub-namespace, i.e. "tags" or "heads"
+ ///
+ ///
+ /// http://developer.github.com/v3/git/refs/#get-all-references
+ ///
+ /// The owner of the repository
+ /// The name of the repository
+ /// The sub-namespace to get references for
+ ///
+ IObservable GetAll(string owner, string name, string subNamespace);
+
+ ///
+ /// Creates a reference for a given repository
+ ///
+ ///
+ /// http://developer.github.com/v3/git/refs/#create-a-reference
+ ///
+ /// The owner of the repository
+ /// The name of the repository
+ /// The reference to create
+ ///
+ IObservable Create(string owner, string name, NewReference reference);
+
+ ///
+ /// Updates a reference for a given repository by reference name
+ ///
+ ///
+ /// http://developer.github.com/v3/git/refs/#update-a-reference
+ ///
+ /// The owner of the repository
+ /// The name of the repository
+ /// The name of the reference
+ /// The updated reference data
+ ///
+ IObservable Update(string owner, string name, string reference, ReferenceUpdate referenceUpdate);
+
+ ///
+ /// Deletes a reference for a given repository by reference name
+ ///
+ ///
+ /// http://developer.github.com/v3/git/refs/#delete-a-reference
+ ///
+ /// The owner of the repository
+ /// The name of the repository
+ /// The name of the reference
+ ///
+ IObservable Delete(string owner, string name, string reference);
+ }
+}
\ No newline at end of file
diff --git a/Octokit.Reactive/Clients/ObservableGitDatabaseClient.cs b/Octokit.Reactive/Clients/ObservableGitDatabaseClient.cs
index 48a65d0a..2ea26302 100644
--- a/Octokit.Reactive/Clients/ObservableGitDatabaseClient.cs
+++ b/Octokit.Reactive/Clients/ObservableGitDatabaseClient.cs
@@ -6,9 +6,11 @@
{
Tag = new ObservableTagsClient(client);
Commit = new ObservableCommitsClient(client);
+ Reference = new ObservableReferencesClient(client);
}
public IObservableTagsClient Tag { get; set; }
public IObservableCommitsClient Commit { get; set; }
+ public IObservableReferencesClient Reference { get; set; }
}
}
\ No newline at end of file
diff --git a/Octokit.Reactive/Clients/ObservableReferencesClient.cs b/Octokit.Reactive/Clients/ObservableReferencesClient.cs
new file mode 100644
index 00000000..3537607c
--- /dev/null
+++ b/Octokit.Reactive/Clients/ObservableReferencesClient.cs
@@ -0,0 +1,136 @@
+using System;
+using System.Reactive;
+using System.Reactive.Threading.Tasks;
+
+using Octokit.Reactive.Internal;
+
+namespace Octokit.Reactive
+{
+ public class ObservableReferencesClient : IObservableReferencesClient
+ {
+ readonly IReferencesClient _reference;
+ readonly IConnection _connection;
+
+ public ObservableReferencesClient(IGitHubClient client)
+ {
+ Ensure.ArgumentNotNull(client, "client");
+
+ _reference = client.GitDatabase.Reference;
+ _connection = client.Connection;
+ }
+
+ ///
+ /// Gets a reference for a given repository by reference name
+ ///
+ ///
+ /// http://developer.github.com/v3/git/refs/#get-a-reference
+ ///
+ /// The owner of the repository
+ /// The name of the repository
+ /// Tha name of the reference
+ ///
+ public IObservable Get(string owner, string name, string reference)
+ {
+ Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
+ Ensure.ArgumentNotNullOrEmptyString(name, "name");
+ Ensure.ArgumentNotNullOrEmptyString(reference, "reference");
+
+ return _reference.Get(owner, name, reference).ToObservable();
+ }
+
+ ///
+ /// Gets all references for a given repository
+ ///
+ ///
+ /// http://developer.github.com/v3/git/refs/#get-all-references
+ ///
+ /// The owner of the repository
+ /// The name of the repository
+ ///
+ public IObservable GetAll(string owner, string name)
+ {
+ Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
+ Ensure.ArgumentNotNullOrEmptyString(name, "name");
+
+ return _connection.GetAndFlattenAllPages(ApiUrls.Reference(owner, name));
+ }
+
+ ///
+ /// Gets references for a given repository by sub-namespace, i.e. "tags" or "heads"
+ ///
+ ///
+ /// http://developer.github.com/v3/git/refs/#get-all-references
+ ///
+ /// The owner of the repository
+ /// The name of the repository
+ /// The sub-namespace to get references for
+ ///
+ public IObservable GetAll(string owner, string name, string subNamespace)
+ {
+ Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
+ Ensure.ArgumentNotNullOrEmptyString(name, "name");
+ Ensure.ArgumentNotNullOrEmptyString(subNamespace, "subNamespace");
+
+ return _connection.GetAndFlattenAllPages(ApiUrls.Reference(owner, name, subNamespace));
+ }
+
+ ///
+ /// Creates a reference for a given repository
+ ///
+ ///
+ /// http://developer.github.com/v3/git/refs/#create-a-reference
+ ///
+ /// The owner of the repository
+ /// The name of the repository
+ /// The reference to create
+ ///
+ public IObservable Create(string owner, string name, NewReference reference)
+ {
+ Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
+ Ensure.ArgumentNotNullOrEmptyString(name, "name");
+ Ensure.ArgumentNotNull(reference, "reference");
+
+ return _reference.Create(owner, name, reference).ToObservable();
+ }
+
+ ///
+ /// Updates a reference for a given repository by reference name
+ ///
+ ///
+ /// http://developer.github.com/v3/git/refs/#update-a-reference
+ ///
+ /// The owner of the repository
+ /// The name of the repository
+ /// The name of the reference
+ /// The updated reference data
+ ///
+ public IObservable Update(string owner, string name, string reference, ReferenceUpdate referenceUpdate)
+ {
+ Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
+ Ensure.ArgumentNotNullOrEmptyString(name, "name");
+ Ensure.ArgumentNotNullOrEmptyString(reference, "reference");
+ Ensure.ArgumentNotNull(referenceUpdate, "update");
+
+ return _reference.Update(owner, name, reference, referenceUpdate).ToObservable();
+ }
+
+ ///
+ /// Deletes a reference for a given repository by reference name
+ ///
+ ///
+ /// http://developer.github.com/v3/git/refs/#delete-a-reference
+ ///
+ /// The owner of the repository
+ /// The name of the repository
+ /// The name of the reference
+ ///
+ public IObservable Delete(string owner, string name, string reference)
+ {
+ Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
+ Ensure.ArgumentNotNullOrEmptyString(name, "name");
+ Ensure.ArgumentNotNullOrEmptyString(reference, "reference");
+
+ return _reference.Delete(owner, name, reference).ToObservable();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Octokit.Reactive/Octokit.Reactive-Mono.csproj b/Octokit.Reactive/Octokit.Reactive-Mono.csproj
index 8a65ae6c..331c8ca3 100644
--- a/Octokit.Reactive/Octokit.Reactive-Mono.csproj
+++ b/Octokit.Reactive/Octokit.Reactive-Mono.csproj
@@ -110,6 +110,8 @@
+
+
diff --git a/Octokit.Reactive/Octokit.Reactive-MonoAndroid.csproj b/Octokit.Reactive/Octokit.Reactive-MonoAndroid.csproj
index da0f5738..92e7e2c2 100644
--- a/Octokit.Reactive/Octokit.Reactive-MonoAndroid.csproj
+++ b/Octokit.Reactive/Octokit.Reactive-MonoAndroid.csproj
@@ -119,6 +119,8 @@
+
+
diff --git a/Octokit.Reactive/Octokit.Reactive-Monotouch.csproj b/Octokit.Reactive/Octokit.Reactive-Monotouch.csproj
index cd3bfee2..1c08e72f 100644
--- a/Octokit.Reactive/Octokit.Reactive-Monotouch.csproj
+++ b/Octokit.Reactive/Octokit.Reactive-Monotouch.csproj
@@ -114,6 +114,8 @@
+
+
diff --git a/Octokit.Reactive/Octokit.Reactive.csproj b/Octokit.Reactive/Octokit.Reactive.csproj
index 1c38caf5..1917158a 100644
--- a/Octokit.Reactive/Octokit.Reactive.csproj
+++ b/Octokit.Reactive/Octokit.Reactive.csproj
@@ -74,6 +74,8 @@
Properties\SolutionInfo.cs
+
+