add gendarme support, ignore some rules and fix our implementation
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -25,7 +25,7 @@ build/
|
||||
bld/
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
|
||||
output/
|
||||
# Visual Studo 2015 cache/options directory
|
||||
.vs/
|
||||
|
||||
|
||||
@@ -4,4 +4,5 @@
|
||||
<package id="NUnit.Runners" version="2.6.4" />
|
||||
<package id="OpenCover" version="4.5.3723" />
|
||||
<package id="ReportGenerator" version="2.1.4.0" />
|
||||
<package id="Mono.Gendarme" version="2.11.0.20121120" />
|
||||
</packages>
|
||||
16
README.md
16
README.md
@@ -11,6 +11,22 @@
|
||||
|
||||
This is a c# wrapper around the Untappd API. This can be downloaded via [Nuget](https://www.nuget.org/packages/Untappd.Net/), or the [backup feed](https://www.myget.org/F/untappd-net/api/v2).
|
||||
|
||||
## Building via command line
|
||||
|
||||
If you wish to build via command line install ruby, and ruby gems. Open up a console in the root directory of this project, and then run the following:
|
||||
|
||||
* `gem install rake`
|
||||
* `gem install bundle`
|
||||
* `bundle`
|
||||
* `rake preflight`
|
||||
|
||||
## My PR is broken, it works in VS!
|
||||
|
||||
if your pull request is broken either one of two things is happening.
|
||||
|
||||
1. Your changes are not mono compatible, which prevent linux users from using your changes. This will only happen if travis ci says your build is broken, but appveyor does not.
|
||||
2. You have added gendarme violations. You can run gendarme locally by running `rake preflight` from your console.
|
||||
|
||||
## API Coverage
|
||||
|
||||
Current both Authenticated and Unauthenticated requests.
|
||||
|
||||
21
Rakefile
21
Rakefile
@@ -23,7 +23,7 @@ desc 'Run the tests'
|
||||
task :test => [:nunit]
|
||||
|
||||
desc 'Retrieve, Build, Test'
|
||||
task :preflight => [:retrieve, :build, :test]
|
||||
task :preflight => [:retrieve, :build, :test, :cs_lint]
|
||||
|
||||
|
||||
|
||||
@@ -37,6 +37,25 @@ test_runner :nunit do |tests|
|
||||
tests.exe = "packages/NUnit.Runners.2.6.4/tools/nunit-console.exe" # executable to run tests with
|
||||
end
|
||||
|
||||
task :cs_lint do
|
||||
|
||||
unless Dir.exists?('output')
|
||||
Dir.mkdir('output')
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
||||
CMD_PREFIX = ""
|
||||
if !OS.windows?
|
||||
CMD_PREFIX = "mono"
|
||||
end
|
||||
|
||||
sh "#{CMD_PREFIX} packages/Mono.Gendarme.2.11.0.20121120/tools/gendarme.exe src/Untappd.Net/bin/#{Configuration}/Untappd.Net.dll --html output/gendarme.html --severity high+ --ignore assets/gendarme/gendarme.ignore"
|
||||
|
||||
end
|
||||
|
||||
|
||||
# task :tests => :'tests:unit'
|
||||
|
||||
#task :ensure_nuget_key do
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 2013
|
||||
# Visual Studio 2012
|
||||
VisualStudioVersion = 12.0.31101.0
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Untappd.Net", "src\Untappd.Net\Untappd.Net.csproj", "{D8571A44-2E86-43A3-B64A-2364614C6934}"
|
||||
@@ -23,14 +23,58 @@ Global
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{D8571A44-2E86-43A3-B64A-2364614C6934}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D8571A44-2E86-43A3-B64A-2364614C6934}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D8571A44-2E86-43A3-B64A-2364614C6934}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D8571A44-2E86-43A3-B64A-2364614C6934}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{513A3FB2-6664-40E7-A03E-591D852C42E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{513A3FB2-6664-40E7-A03E-591D852C42E4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{513A3FB2-6664-40E7-A03E-591D852C42E4}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{513A3FB2-6664-40E7-A03E-591D852C42E4}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D8571A44-2E86-43A3-B64A-2364614C6934}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D8571A44-2E86-43A3-B64A-2364614C6934}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D8571A44-2E86-43A3-B64A-2364614C6934}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D8571A44-2E86-43A3-B64A-2364614C6934}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(NestedProjects) = preSolution
|
||||
EndGlobalSection
|
||||
GlobalSection(MonoDevelopProperties) = preSolution
|
||||
StartupItem = src\Untappd.Net\Untappd.Net.csproj
|
||||
Policies = $0
|
||||
$0.DotNetNamingPolicy = $1
|
||||
$1.DirectoryNamespaceAssociation = PrefixedHierarchical
|
||||
$1.ResourceNamePolicy = FileFormatDefault
|
||||
$0.TextStylePolicy = $2
|
||||
$2.inheritsSet = VisualStudio
|
||||
$2.inheritsScope = text/plain
|
||||
$2.scope = text/x-csharp
|
||||
$0.CSharpFormattingPolicy = $3
|
||||
$3.IndentSwitchBody = True
|
||||
$3.IndentBlocksInsideExpressions = True
|
||||
$3.AnonymousMethodBraceStyle = NextLine
|
||||
$3.PropertyBraceStyle = NextLine
|
||||
$3.PropertyGetBraceStyle = NextLine
|
||||
$3.PropertySetBraceStyle = NextLine
|
||||
$3.EventBraceStyle = NextLine
|
||||
$3.EventAddBraceStyle = NextLine
|
||||
$3.EventRemoveBraceStyle = NextLine
|
||||
$3.StatementBraceStyle = NextLine
|
||||
$3.ElseNewLinePlacement = NewLine
|
||||
$3.CatchNewLinePlacement = NewLine
|
||||
$3.FinallyNewLinePlacement = NewLine
|
||||
$3.WhileNewLinePlacement = DoNotCare
|
||||
$3.ArrayInitializerWrapping = DoNotChange
|
||||
$3.ArrayInitializerBraceStyle = NextLine
|
||||
$3.BeforeMethodDeclarationParentheses = False
|
||||
$3.BeforeMethodCallParentheses = False
|
||||
$3.BeforeConstructorDeclarationParentheses = False
|
||||
$3.NewLineBeforeConstructorInitializerColon = NewLine
|
||||
$3.NewLineAfterConstructorInitializerColon = SameLine
|
||||
$3.BeforeDelegateDeclarationParentheses = False
|
||||
$3.NewParentheses = False
|
||||
$3.SpacesBeforeBrackets = False
|
||||
$3.inheritsSet = Mono
|
||||
$3.inheritsScope = text/x-csharp
|
||||
$3.scope = text/x-csharp
|
||||
$0.StandardHeader = $4
|
||||
$4.Text =
|
||||
$4.IncludeInNewFiles = True
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
||||
60
assets/gendarme/gendarme.ignore
Normal file
60
assets/gendarme/gendarme.ignore
Normal file
@@ -0,0 +1,60 @@
|
||||
# we have hard coded strings...sue us
|
||||
R: Gendarme.Rules.Design.PreferUriOverStringRule
|
||||
A: *
|
||||
|
||||
# We don't really care if our exceptions are not serializable
|
||||
R: Gendarme.Rules.Serialization.MissingSerializationConstructorRule
|
||||
A: Untappd.Net
|
||||
|
||||
# Either implement or do not bother
|
||||
R: Gendarme.Rules.Exceptions.MissingExceptionConstructorsRule
|
||||
A: Untappd.Net
|
||||
|
||||
# TODO: Implement
|
||||
R: Gendarme.Rules.BadPractice.DoNotForgetNotImplementedMethodsRule
|
||||
N: Untappd.Net
|
||||
|
||||
|
||||
R: Gendarme.Rules.Design.ConsiderAddingInterfaceRule
|
||||
T: Untappd.Net.Request.BasicRequest # This class is an abstract class, its inheritors should implement the interface
|
||||
T: Untappd.Net.SingleObjectArrayConverter # We should figure out how to implement the write json here...
|
||||
A: Untappd.Net
|
||||
|
||||
# Microsoft says we shouldn't dispose tasks ourselves
|
||||
R: Gendarme.Rules.Correctness.EnsureLocalDisposalRule
|
||||
M: System.Void Untappd.Net.Request.Repository/<ExecuteRequestAsync>c__async0`1::MoveNext()
|
||||
|
||||
# We use the obsolete constructor for testing
|
||||
R: Gendarme.Rules.Performance.AvoidUncalledPrivateCodeRule
|
||||
T: Untappd.Net.Request.Repository
|
||||
|
||||
# we really want constants
|
||||
R: Gendarme.Rules.BadPractice.AvoidVisibleConstantFieldRule
|
||||
T: Untappd.Net.Constants
|
||||
|
||||
# for json binding
|
||||
R: Gendarme.Rules.Naming.AvoidNonAlphanumericIdentifierRule
|
||||
A: Untappd.Net
|
||||
|
||||
# cannot be helped
|
||||
R: Gendarme.Rules.Naming.AvoidDeepNamespaceHierarchyRule
|
||||
A: Untappd.Net
|
||||
|
||||
R: Gendarme.Rules.Maintainability.AvoidLackOfCohesionOfMethodsRule
|
||||
A: Untappd.Net
|
||||
|
||||
# We need to multiple call
|
||||
R: Gendarme.Rules.Performance.AvoidRepetitiveCallsToPropertiesRule
|
||||
T: Untappd.Net.Request.Repository
|
||||
|
||||
# we want to do this here
|
||||
R: Gendarme.Rules.Exceptions.DoNotSwallowErrorsCatchingNonSpecificExceptionsRule
|
||||
M: System.Void Untappd.Net.Request.Repository/<ExecuteRequestAsync>c__async0`1::MoveNext()
|
||||
|
||||
# We violate case sometimes for json bindings
|
||||
R: Gendarme.Rules.Naming.UseCorrectCasingRule
|
||||
A: Untappd.Net
|
||||
|
||||
# TODO: Serialize properly
|
||||
R: Gendarme.Rules.Serialization.ImplementISerializableCorrectlyRule
|
||||
T: Untappd.Net.Exception.HttpErrorException
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
@@ -33,10 +33,6 @@
|
||||
<Reference Include="Moq">
|
||||
<HintPath>..\..\packages\Moq.4.2.1502.0911\lib\net40\Moq.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="nunit.core">
|
||||
<HintPath>..\..\packages\NUnitTestAdapter.1.2\lib\nunit.core.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
@@ -56,10 +52,6 @@
|
||||
<HintPath>..\..\packages\NUnitTestAdapter.1.2\lib\NUnit.VisualStudio.TestAdapter.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="RestSharp, Version=105.0.1.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\packages\RestSharp.105.0.1\lib\net4\RestSharp.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
@@ -67,6 +59,12 @@
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="Newtonsoft.Json">
|
||||
<HintPath>..\..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="RestSharp">
|
||||
<HintPath>..\..\packages\RestSharp.105.0.1\lib\net4\RestSharp.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Responses\Actions\TestCheckInAction.cs" />
|
||||
@@ -98,7 +96,7 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Untappd.Net\Untappd.Net.csproj">
|
||||
<Project>{d8571a44-2e86-43a3-b64a-2364614c6934}</Project>
|
||||
<Project>{D8571A44-2E86-43A3-B64A-2364614C6934}</Project>
|
||||
<Name>Untappd.Net</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
|
||||
@@ -4,6 +4,7 @@ using RestSharp;
|
||||
|
||||
namespace Untappd.Net.Exception
|
||||
{
|
||||
[Serializable]
|
||||
public sealed class HttpErrorException : BaseUntappdException
|
||||
{
|
||||
public override string Message
|
||||
@@ -17,6 +18,14 @@ namespace Untappd.Net.Exception
|
||||
private readonly string _message;
|
||||
public HttpErrorException(IRestRequest request, IRestResponse response)
|
||||
{
|
||||
if(request == null)
|
||||
{
|
||||
throw new ArgumentNullException("request");
|
||||
}
|
||||
if (response == null)
|
||||
{
|
||||
throw new ArgumentNullException("response");
|
||||
}
|
||||
var code = (int) response.StatusCode;
|
||||
if (code == 200)
|
||||
{
|
||||
|
||||
@@ -5,6 +5,9 @@ using System.Runtime.InteropServices;
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
using System;
|
||||
|
||||
|
||||
[assembly: AssemblyTitle("Untappd.Net")]
|
||||
[assembly: AssemblyDescription("C# Untappd Wrapper")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
@@ -13,6 +16,7 @@ using System.Runtime.InteropServices;
|
||||
[assembly: AssemblyCopyright("Copyright © Microsoft 2015")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
[assembly: CLSCompliantAttribute(true)]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
|
||||
@@ -13,7 +13,7 @@ namespace Untappd.Net.Request
|
||||
{
|
||||
internal IRestClient Client;
|
||||
internal IRestRequest Request;
|
||||
private bool FailFast { get; set; }
|
||||
bool FailFast { get; set; }
|
||||
/// <summary>
|
||||
/// Event to listen to when failFast is set to false
|
||||
/// This allows you to capture the excpetion, before its swallowed
|
||||
@@ -65,28 +65,30 @@ namespace Untappd.Net.Request
|
||||
return this;
|
||||
}
|
||||
|
||||
private TResult ExecuteRequest<TResult>()
|
||||
TResult ExecuteRequest<TResult>()
|
||||
where TResult : class
|
||||
{
|
||||
return ProcessExecution<TResult>(Client.Execute(Request));
|
||||
}
|
||||
|
||||
private async Task<TResult> ExecuteRequestAsync<TResult>()
|
||||
async Task<TResult> ExecuteRequestAsync<TResult>()
|
||||
where TResult : class
|
||||
{
|
||||
return ProcessExecution<TResult>(await Client.ExecuteTaskAsync(Request));
|
||||
}
|
||||
|
||||
private TResult ProcessExecution<TResult>(IRestResponse response)
|
||||
TResult ProcessExecution<TResult>(IRestResponse response)
|
||||
where TResult : class
|
||||
{
|
||||
//if the return type is not 200 throw errors
|
||||
if (response.StatusCode != HttpStatusCode.OK)
|
||||
{
|
||||
var excpetion = new HttpErrorException(Request, response);
|
||||
if (OnExceptionThrown != null)
|
||||
var eventThrow = OnExceptionThrown;
|
||||
|
||||
if (eventThrow != null)
|
||||
{
|
||||
OnExceptionThrown(this, new UnhandledExceptionEventArgs(excpetion, FailFast));
|
||||
eventThrow(this, new UnhandledExceptionEventArgs(excpetion, FailFast));
|
||||
}
|
||||
if (FailFast)
|
||||
{
|
||||
@@ -101,9 +103,11 @@ namespace Untappd.Net.Request
|
||||
}
|
||||
catch(System.Exception e)
|
||||
{
|
||||
if (OnExceptionThrown != null)
|
||||
var eventThrow = OnExceptionThrown;
|
||||
|
||||
if (eventThrow != null)
|
||||
{
|
||||
OnExceptionThrown(this, new UnhandledExceptionEventArgs(e, FailFast));
|
||||
eventThrow(this, new UnhandledExceptionEventArgs(e, FailFast));
|
||||
}
|
||||
if (FailFast)
|
||||
{
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System.Threading.Tasks;
|
||||
using Untappd.Net.Authentication;
|
||||
using System;
|
||||
|
||||
namespace Untappd.Net.Request
|
||||
{
|
||||
@@ -13,6 +14,15 @@ namespace Untappd.Net.Request
|
||||
/// <returns>returns dynamic since often the return doesn't matter</returns>
|
||||
public dynamic Post(IAuthenticatedUntappdCredentials credentials, IAction action)
|
||||
{
|
||||
if (credentials == null)
|
||||
{
|
||||
throw new ArgumentNullException("credentials");
|
||||
}
|
||||
if (action == null)
|
||||
{
|
||||
throw new ArgumentNullException("action");
|
||||
}
|
||||
|
||||
return ConfigureRequest(credentials, action.EndPoint, action.BodyParameters, action.RequestMethod)
|
||||
.ExecuteRequest<dynamic>();
|
||||
}
|
||||
@@ -25,6 +35,15 @@ namespace Untappd.Net.Request
|
||||
/// <returns>returns dynamic since often the return doesn't matter</returns>
|
||||
public Task<dynamic> PostAsync(IAuthenticatedUntappdCredentials credentials, IAction action)
|
||||
{
|
||||
if (credentials == null)
|
||||
{
|
||||
throw new ArgumentNullException("credentials");
|
||||
}
|
||||
if (action == null)
|
||||
{
|
||||
throw new ArgumentNullException("action");
|
||||
}
|
||||
|
||||
return ConfigureRequest(credentials, action.EndPoint, action.BodyParameters, action.RequestMethod)
|
||||
.ExecuteRequestAsync<dynamic>();
|
||||
}
|
||||
|
||||
@@ -53,6 +53,10 @@ namespace Untappd.Net.Responses.Actions
|
||||
get { return _shout; }
|
||||
set
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
throw new ArgumentNullException("value");
|
||||
}
|
||||
if (value.Length > 140)
|
||||
{
|
||||
throw new ArgumentOutOfRangeException("value", value,"Shout can be no more than 140 characters");
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
@@ -30,10 +30,6 @@
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="RestSharp">
|
||||
<HintPath>..\..\packages\RestSharp.105.0.1\lib\net4\RestSharp.dll</HintPath>
|
||||
</Reference>
|
||||
@@ -44,6 +40,9 @@
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="Newtonsoft.Json">
|
||||
<HintPath>..\..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="OAuth\AuthenticationHelper.cs" />
|
||||
|
||||
Reference in New Issue
Block a user