├── .gitignore ├── FOAASClient.nuspec ├── FOAASClient.sln ├── FOAASClient ├── FOAASClient.csproj ├── FoaasClient.cs ├── IFoaasClient.cs ├── Properties │ └── AssemblyInfo.cs ├── Response.cs └── packages.config ├── FOASSClient.Tests ├── FOASSClient.Tests.csproj ├── FoassClientTests.cs ├── Properties │ └── AssemblyInfo.cs ├── app.config └── packages.config ├── LICENSE ├── README.md ├── build.bat ├── build.fsx └── tools └── NuGet ├── LICENSE.txt └── NuGet.exe /.gitignore: -------------------------------------------------------------------------------- 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 | *.sln.docstates 8 | 9 | # Build results 10 | [Dd]ebug/ 11 | [Dd]ebugPublic/ 12 | [Rr]elease/ 13 | [Rr]eleases/ 14 | x64/ 15 | x86/ 16 | build/ 17 | bld/ 18 | [Bb]in/ 19 | [Oo]bj/ 20 | 21 | # Roslyn cache directories 22 | *.ide/ 23 | 24 | # MSTest test Results 25 | [Tt]est[Rr]esult*/ 26 | [Bb]uild[Ll]og.* 27 | 28 | #NUNIT 29 | *.VisualState.xml 30 | TestResult.xml 31 | 32 | # Build Results of an ATL Project 33 | [Dd]ebugPS/ 34 | [Rr]eleasePS/ 35 | dlldata.c 36 | 37 | *_i.c 38 | *_p.c 39 | *_i.h 40 | *.ilk 41 | *.meta 42 | *.obj 43 | *.pch 44 | *.pdb 45 | *.pgc 46 | *.pgd 47 | *.rsp 48 | *.sbr 49 | *.tlb 50 | *.tli 51 | *.tlh 52 | *.tmp 53 | *.tmp_proj 54 | *.log 55 | *.vspscc 56 | *.vssscc 57 | .builds 58 | *.pidb 59 | *.svclog 60 | *.scc 61 | 62 | # Chutzpah Test files 63 | _Chutzpah* 64 | 65 | # Visual C++ cache files 66 | ipch/ 67 | *.aps 68 | *.ncb 69 | *.opensdf 70 | *.sdf 71 | *.cachefile 72 | 73 | # Visual Studio profiler 74 | *.psess 75 | *.vsp 76 | *.vspx 77 | 78 | # TFS 2012 Local Workspace 79 | $tf/ 80 | 81 | # Guidance Automation Toolkit 82 | *.gpState 83 | 84 | # ReSharper is a .NET coding add-in 85 | _ReSharper*/ 86 | *.[Rr]e[Ss]harper 87 | *.DotSettings.user 88 | 89 | # JustCode is a .NET coding addin-in 90 | .JustCode 91 | 92 | # TeamCity is a build add-in 93 | _TeamCity* 94 | 95 | # DotCover is a Code Coverage Tool 96 | *.dotCover 97 | 98 | # NCrunch 99 | _NCrunch_* 100 | .*crunch*.local.xml 101 | 102 | # MightyMoose 103 | *.mm.* 104 | AutoTest.Net/ 105 | 106 | # Web workbench (sass) 107 | .sass-cache/ 108 | 109 | # Installshield output folder 110 | [Ee]xpress/ 111 | 112 | # DocProject is a documentation generator add-in 113 | DocProject/buildhelp/ 114 | DocProject/Help/*.HxT 115 | DocProject/Help/*.HxC 116 | DocProject/Help/*.hhc 117 | DocProject/Help/*.hhk 118 | DocProject/Help/*.hhp 119 | DocProject/Help/Html2 120 | DocProject/Help/html 121 | 122 | # Click-Once directory 123 | publish/ 124 | 125 | # Publish Web Output 126 | *.[Pp]ublish.xml 127 | *.azurePubxml 128 | # TODO: Comment the next line if you want to checkin your web deploy settings 129 | # but database connection strings (with potential passwords) will be unencrypted 130 | *.pubxml 131 | *.publishproj 132 | 133 | # NuGet Packages 134 | *.nupkg 135 | # The packages folder can be ignored because of Package Restore 136 | **/packages/* 137 | # except build/, which is used as an MSBuild target. 138 | !**/packages/build/ 139 | # If using the old MSBuild-Integrated Package Restore, uncomment this: 140 | #!**/packages/repositories.config 141 | 142 | # Windows Azure Build Output 143 | csx/ 144 | *.build.csdef 145 | 146 | # Windows Store app package directory 147 | AppPackages/ 148 | 149 | # Others 150 | sql/ 151 | *.Cache 152 | ClientBin/ 153 | [Ss]tyle[Cc]op.* 154 | ~$* 155 | *~ 156 | *.dbmdl 157 | *.dbproj.schemaview 158 | *.pfx 159 | *.publishsettings 160 | node_modules/ 161 | 162 | # RIA/Silverlight projects 163 | Generated_Code/ 164 | 165 | # Backup & report files from converting an old project file 166 | # to a newer Visual Studio version. Backup files are not needed, 167 | # because we have git ;-) 168 | _UpgradeReport_Files/ 169 | Backup*/ 170 | UpgradeLog*.XML 171 | UpgradeLog*.htm 172 | 173 | # SQL Server files 174 | *.mdf 175 | *.ldf 176 | 177 | # Business Intelligence projects 178 | *.rdl.data 179 | *.bim.layout 180 | *.bim_*.settings 181 | 182 | # Microsoft Fakes 183 | FakesAssemblies/ 184 | /tools/FAKE 185 | /.fake 186 | -------------------------------------------------------------------------------- /FOAASClient.nuspec: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | FOASSClient 5 | 1.0.0.0 6 | FOASSClient 7 | Igor Kulman 8 | Igor Kulman 9 | 10 | Were you looking to leverage the cloud to tell someone to fuck themselves? Do you need to do it from .NET? Well fuck me! Look no further! 11 | 12 | 13 | 14 | 15 | Were you looking to leverage the cloud to tell someone to fuck themselves? Do you need to do it from .NET? Well fuck me! Look no further! 16 | 17 | en-US 18 | https://github.com/igorkulman/FOAASClient 19 | false 20 | https://github.com/igorkulman/FOAASClient/raw/master/LICENSE 21 | Copyright 2015 - 2016 22 | @dependencies@ 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /FOAASClient.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 14 4 | VisualStudioVersion = 14.0.22823.1 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FOAASClient", "FOAASClient\FOAASClient.csproj", "{52EAEB62-3EE9-4921-8EC4-FE62337CA1DD}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FOASSClient.Tests", "FOASSClient.Tests\FOASSClient.Tests.csproj", "{2359C617-5FCC-44FD-B607-A461E88F141A}" 9 | EndProject 10 | Global 11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 12 | Debug|Any CPU = Debug|Any CPU 13 | Release|Any CPU = Release|Any CPU 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {52EAEB62-3EE9-4921-8EC4-FE62337CA1DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 17 | {52EAEB62-3EE9-4921-8EC4-FE62337CA1DD}.Debug|Any CPU.Build.0 = Debug|Any CPU 18 | {52EAEB62-3EE9-4921-8EC4-FE62337CA1DD}.Release|Any CPU.ActiveCfg = Release|Any CPU 19 | {52EAEB62-3EE9-4921-8EC4-FE62337CA1DD}.Release|Any CPU.Build.0 = Release|Any CPU 20 | {2359C617-5FCC-44FD-B607-A461E88F141A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 21 | {2359C617-5FCC-44FD-B607-A461E88F141A}.Debug|Any CPU.Build.0 = Debug|Any CPU 22 | {2359C617-5FCC-44FD-B607-A461E88F141A}.Release|Any CPU.ActiveCfg = Release|Any CPU 23 | {2359C617-5FCC-44FD-B607-A461E88F141A}.Release|Any CPU.Build.0 = Release|Any CPU 24 | EndGlobalSection 25 | GlobalSection(SolutionProperties) = preSolution 26 | HideSolutionNode = FALSE 27 | EndGlobalSection 28 | EndGlobal 29 | -------------------------------------------------------------------------------- /FOAASClient/FOAASClient.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 11.0 6 | Debug 7 | AnyCPU 8 | {52EAEB62-3EE9-4921-8EC4-FE62337CA1DD} 9 | Library 10 | Properties 11 | FOAASClient 12 | FOAASClient 13 | en-US 14 | 512 15 | {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 16 | Profile259 17 | v4.5 18 | 19 | 20 | 21 | 22 | true 23 | full 24 | false 25 | bin\Debug\ 26 | DEBUG;TRACE 27 | prompt 28 | 4 29 | 30 | 31 | pdbonly 32 | true 33 | bin\Release\ 34 | TRACE 35 | prompt 36 | 4 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | ..\packages\Newtonsoft.Json.9.0.1\lib\portable-net45+wp80+win8+wpa81\Newtonsoft.Json.dll 51 | True 52 | 53 | 54 | ..\packages\Microsoft.Net.Http.2.2.29\lib\portable-net40+sl4+win8+wp71+wpa81\System.Net.Http.dll 55 | 56 | 57 | ..\packages\Microsoft.Net.Http.2.2.29\lib\portable-net40+sl4+win8+wp71+wpa81\System.Net.Http.Extensions.dll 58 | 59 | 60 | ..\packages\Microsoft.Net.Http.2.2.29\lib\portable-net40+sl4+win8+wp71+wpa81\System.Net.Http.Primitives.dll 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. 73 | 74 | 75 | 76 | 83 | -------------------------------------------------------------------------------- /FOAASClient/FoaasClient.cs: -------------------------------------------------------------------------------- 1 | using System.Net; 2 | using System.Net.Http; 3 | using System.Threading.Tasks; 4 | using System.Xml; 5 | using Newtonsoft.Json; 6 | 7 | namespace FOAASClient 8 | { 9 | public class FoaasClient : IFoaasClient 10 | { 11 | private const string BaseUrl = "http://foaas.com"; 12 | 13 | private readonly HttpClient _client; 14 | 15 | public FoaasClient() 16 | { 17 | var handler = new HttpClientHandler(); 18 | if (handler.SupportsAutomaticDecompression) 19 | { 20 | handler.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; 21 | } 22 | 23 | _client = new HttpClient(handler); 24 | _client.DefaultRequestHeaders.TryAddWithoutValidation("Accept", "application/json"); 25 | _client.DefaultRequestHeaders.TryAddWithoutValidation("Accept-Encoding", "gzip, deflate"); 26 | } 27 | 28 | private async Task Get(string url, params string[] parameters) 29 | { 30 | var res = await _client.GetStringAsync(BaseUrl + url+"/"+string.Join("/", parameters)); 31 | return JsonConvert.DeserializeObject(res); 32 | } 33 | 34 | public Task Off(string name, string from) 35 | { 36 | return Get("/off", name, from); 37 | } 38 | 39 | public Task You(string name, string from) 40 | { 41 | return Get("/you", name, from); 42 | } 43 | 44 | public Task That(string from) 45 | { 46 | return Get("/that", from); 47 | } 48 | 49 | public Task This(string from) 50 | { 51 | return Get("/this", from); 52 | } 53 | 54 | public Task Everything(string from) 55 | { 56 | return Get("/everything", from); 57 | } 58 | 59 | public Task Everyone(string from) 60 | { 61 | return Get("/everyone", from); 62 | } 63 | 64 | public Task Donut(string name, string from) 65 | { 66 | return Get("/donut", name, from); 67 | } 68 | 69 | public Task Shakespeare(string name, string from) 70 | { 71 | return Get("/shakespeare", name, from); 72 | } 73 | 74 | public Task Linus(string name, string from) 75 | { 76 | return Get("/linus", name, from); 77 | } 78 | 79 | public Task King(string name, string from) 80 | { 81 | return Get("/king", name, from); 82 | } 83 | 84 | public Task Pink(string from) 85 | { 86 | return Get("/pink", from); 87 | } 88 | 89 | public Task Life(string from) 90 | { 91 | return Get("/life", from); 92 | } 93 | 94 | public Task Chainsaw(string name, string from) 95 | { 96 | return Get("/chainsaw",name, from); 97 | } 98 | 99 | public Task Outside(string name, string from) 100 | { 101 | return Get("/outside", name, from); 102 | } 103 | 104 | public Task Thing(string thing, string from) 105 | { 106 | return Get($"/{thing}", from); 107 | } 108 | 109 | public Task Thanks(string from) 110 | { 111 | return Get("/thanks", from); 112 | } 113 | 114 | public Task Flying(string from) 115 | { 116 | return Get("/flying", from); 117 | } 118 | 119 | public Task Fascinating(string from) 120 | { 121 | return Get("/fascinating", from); 122 | } 123 | 124 | public Task Madison(string name, string from) 125 | { 126 | return Get("/madison", name, from); 127 | } 128 | 129 | public Task Cool(string from) 130 | { 131 | return Get("/cool", from); 132 | } 133 | 134 | public Task Field(string name, string from, string reference) 135 | { 136 | return Get("/field", name, from, reference); 137 | } 138 | 139 | public Task Nugget(string name, string from) 140 | { 141 | return Get("/nugget", name, from); 142 | } 143 | 144 | public Task Yoda(string name, string from) 145 | { 146 | return Get("/yoda", name, from); 147 | } 148 | 149 | public Task Ballmer(string name, string company, string from) 150 | { 151 | return Get("/ballmer", name, company, from); 152 | } 153 | 154 | public Task What(string from) 155 | { 156 | return Get("/what", from); 157 | } 158 | 159 | public Task Because(string from) 160 | { 161 | return Get("/because", from); 162 | } 163 | 164 | public Task Caniuse(string tool, string from) 165 | { 166 | return Get("/caniuse", tool, from); 167 | } 168 | 169 | public Task Bye(string from) 170 | { 171 | return Get("/bye", from); 172 | } 173 | 174 | public Task Diabetes(string from) 175 | { 176 | return Get("/diabetes", from); 177 | } 178 | 179 | public Task Bus(string name, string from) 180 | { 181 | return Get("/bus", name, from); 182 | } 183 | 184 | public Task Xmas(string name, string from) 185 | { 186 | return Get("/xmas", name, from); 187 | } 188 | 189 | public Task Bday(string name, string from) 190 | { 191 | return Get("/bday", name, from); 192 | } 193 | 194 | public Task Awesome(string from) 195 | { 196 | return Get("/awesome", from); 197 | } 198 | 199 | public Task Tucker(string from) 200 | { 201 | return Get("/tucker", from); 202 | } 203 | 204 | public Task Bucket(string from) 205 | { 206 | return Get("/bucket", from); 207 | } 208 | 209 | public Task Family(string from) 210 | { 211 | return Get("/family", from); 212 | } 213 | 214 | public Task Shutup(string name, string from) 215 | { 216 | return Get("/shutup", name, from); 217 | } 218 | 219 | public Task Zayn(string from) 220 | { 221 | return Get("/zayn", from); 222 | } 223 | 224 | public Task KeepCalm(string reaction, string from) 225 | { 226 | return Get("/keepcalm", reaction, from); 227 | } 228 | 229 | public Task DoSomething(string todo, string something, string from) 230 | { 231 | return Get("/dosomething", todo, something, from); 232 | } 233 | 234 | public Task Mornin(string from) 235 | { 236 | return Get("/mornin", from); 237 | } 238 | 239 | public Task Thumbs(string who, string from) 240 | { 241 | return Get("/thumbs", who, from); 242 | } 243 | 244 | public Task Retard(string from) 245 | { 246 | return Get("/retard", from); 247 | } 248 | 249 | public Task Greed(string noun, string from) 250 | { 251 | return Get("/greed", noun, from); 252 | } 253 | 254 | public Task Anyway(string company, string from) 255 | { 256 | return Get("/anyway", company, from); 257 | } 258 | 259 | public Task Back(string name, string from) 260 | { 261 | return Get("/back", name, from); 262 | } 263 | 264 | public Task Bag(string from) 265 | { 266 | return Get("/bag", from); 267 | } 268 | 269 | public Task Blackadder(string name, string from) 270 | { 271 | return Get("/blackadder", name, from); 272 | } 273 | 274 | public Task BravoMike(string name, string from) 275 | { 276 | return Get("/bm",name, from); 277 | } 278 | 279 | public Task Cocksplat(string name, string from) 280 | { 281 | return Get("/cocksplat", name, from); 282 | } 283 | 284 | public Task Dalton(string name, string from) 285 | { 286 | return Get("/dalton", name,from); 287 | } 288 | 289 | public Task Deraadt(string name, string from) 290 | { 291 | return Get("/deraadt",name,from); 292 | } 293 | 294 | public Task GolfFoxtrotYankee(string name, string from) 295 | { 296 | return Get("/gfy",name, from); 297 | } 298 | 299 | public Task Give(string from) 300 | { 301 | return Get("/give", from); 302 | } 303 | 304 | public Task Horse(string from) 305 | { 306 | return Get("/horse", from); 307 | } 308 | 309 | public Task FuckingOff(string name, string from) 310 | { 311 | return Get("/ing",name, from); 312 | } 313 | 314 | public Task Keep(string name, string from) 315 | { 316 | return Get("/keep",name,from); 317 | } 318 | 319 | public Task Look(string name, string from) 320 | { 321 | return Get("/look", name, from); 322 | } 323 | 324 | public Task Looking(string from) 325 | { 326 | return Get("/looking",from); 327 | } 328 | 329 | public Task Maybe(string from) 330 | { 331 | return Get("/maybe", from); 332 | } 333 | 334 | public Task Me(string from) 335 | { 336 | return Get("/me",from); 337 | } 338 | 339 | public Task No(string from) 340 | { 341 | return Get("/no",from); 342 | } 343 | 344 | public Task OffWith(string behaviour, string from) 345 | { 346 | return Get("/off-with",behaviour,from); 347 | } 348 | 349 | public Task Particular(string obj, string from) 350 | { 351 | return Get("/particular",obj, from); 352 | } 353 | 354 | public Task Problem(string name, string from) 355 | { 356 | return Get("/problem", name,from); 357 | } 358 | 359 | public Task Pulp(string language, string from) 360 | { 361 | return Get("/pulp",language,from); 362 | } 363 | 364 | public Task Ridiculous(string from) 365 | { 366 | return Get("/ridiculous", from); 367 | } 368 | 369 | public Task ReadTheManual(string from) 370 | { 371 | return Get("/rtfm", from); 372 | } 373 | 374 | public Task Sake(string from) 375 | { 376 | return Get("/sake", from); 377 | } 378 | 379 | public Task Shit(string from) 380 | { 381 | return Get("/shit", from); 382 | } 383 | 384 | public Task Single(string from) 385 | { 386 | return Get("/single", from); 387 | } 388 | 389 | public Task Think(string name, string from) 390 | { 391 | return Get("/think", name, from); 392 | } 393 | 394 | public Task Thinking(string name, string from) 395 | { 396 | return Get("/thinking", name, from); 397 | } 398 | 399 | public Task Too(string from) 400 | { 401 | return Get("/too", from); 402 | } 403 | 404 | public Task Zero(string from) 405 | { 406 | return Get("/zero", from); 407 | } 408 | } 409 | } 410 | -------------------------------------------------------------------------------- /FOAASClient/IFoaasClient.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.CompilerServices; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FOAASClient 9 | { 10 | public interface IFoaasClient 11 | { 12 | Task Off(string name, string from); 13 | Task You(string name, string from); 14 | Task That(string from); 15 | Task This(string from); 16 | Task Everything(string from); 17 | Task Everyone(string from); 18 | Task Donut(string name, string from); 19 | Task Shakespeare(string name, string from); 20 | Task Linus(string name, string from); 21 | Task King(string name, string from); 22 | Task Pink(string from); 23 | Task Life(string from); 24 | Task Chainsaw(string name, string from); 25 | Task Outside(string name, string from); 26 | Task Thing(string thing, string from); 27 | Task Thanks(string from); 28 | Task Flying(string from); 29 | Task Fascinating(string from); 30 | Task Madison(string name, string from); 31 | Task Cool(string from); 32 | Task Field(string name, string from, string reference); 33 | Task Nugget(string name, string from); 34 | Task Yoda(string name, string from); 35 | Task Ballmer(string name, string company, string from); 36 | Task What(string from); 37 | Task Because(string from); 38 | Task Caniuse(string tool, string from); 39 | Task Bye(string from); 40 | Task Diabetes(string from); 41 | Task Bus(string name, string from); 42 | Task Xmas(string name, string from); 43 | Task Bday(string name, string from); 44 | Task Awesome(string from); 45 | Task Tucker(string from); 46 | Task Bucket(string from); 47 | Task Family(string from); 48 | Task Shutup(string name, string from); 49 | Task Zayn(string from); 50 | Task KeepCalm(string reaction, string from); 51 | Task DoSomething(string todo, string something, string from); 52 | Task Mornin(string from); 53 | Task Thumbs(string who, string from); 54 | Task Retard(string from); 55 | Task Greed(string noun, string from); 56 | Task Anyway(string company, string from); 57 | Task Back(string name, string from); 58 | Task Bag(string from); 59 | Task Blackadder(string name, string from); 60 | Task BravoMike(string name, string from); 61 | Task Cocksplat(string name, string from); 62 | Task Dalton(string name, string from); 63 | Task Deraadt(string name, string from); 64 | Task GolfFoxtrotYankee(string name, string from); 65 | Task Give(string from); 66 | Task Horse(string from); 67 | Task FuckingOff(string name, string from); 68 | Task Keep(string name, string from); 69 | Task Look(string name, string from); 70 | Task Looking(string from); 71 | Task Maybe(string from); 72 | Task Me(string from); 73 | Task No(string from); 74 | Task OffWith(string behaviour, string from); 75 | Task Particular(string obj, string from); 76 | Task Problem(string name, string from); 77 | Task Pulp(string language, string from); 78 | Task Ridiculous(string from); 79 | Task ReadTheManual(string from); 80 | Task Sake(string from); 81 | Task Shit(string from); 82 | Task Single(string from); 83 | Task Think(string name, string from); 84 | Task Thinking(string name, string from); 85 | Task Too(string from); 86 | Task Zero(string from); 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /FOAASClient/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Resources; 2 | using System.Reflection; 3 | using System.Runtime.CompilerServices; 4 | using System.Runtime.InteropServices; 5 | 6 | // General Information about an assembly is controlled through the following 7 | // set of attributes. Change these attribute values to modify the information 8 | // associated with an assembly. 9 | [assembly: AssemblyTitle("FOAASClient")] 10 | [assembly: AssemblyDescription("")] 11 | [assembly: AssemblyConfiguration("")] 12 | [assembly: AssemblyCompany("")] 13 | [assembly: AssemblyProduct("FOAASClient")] 14 | [assembly: AssemblyCopyright("Copyright © 2015")] 15 | [assembly: AssemblyTrademark("")] 16 | [assembly: AssemblyCulture("")] 17 | [assembly: NeutralResourcesLanguage("en")] 18 | 19 | // Version information for an assembly consists of the following four values: 20 | // 21 | // Major Version 22 | // Minor Version 23 | // Build Number 24 | // Revision 25 | // 26 | // You can specify all the values or you can default the Build and Revision Numbers 27 | // by using the '*' as shown below: 28 | // [assembly: AssemblyVersion("1.0.*")] 29 | [assembly: AssemblyVersion("1.0.0.0")] 30 | [assembly: AssemblyFileVersion("1.0.0.0")] 31 | -------------------------------------------------------------------------------- /FOAASClient/Response.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace FOAASClient 8 | { 9 | public class Response 10 | { 11 | public string Message { get; set; } 12 | public string Subtitle { get; set; } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /FOAASClient/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /FOASSClient.Tests/FOASSClient.Tests.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Debug 5 | AnyCPU 6 | {2359C617-5FCC-44FD-B607-A461E88F141A} 7 | Library 8 | Properties 9 | FOASSClient.Tests 10 | FOASSClient.Tests 11 | v4.5 12 | 512 13 | {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 14 | 10.0 15 | $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) 16 | $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages 17 | False 18 | UnitTest 19 | 20 | 21 | 22 | 23 | true 24 | full 25 | false 26 | bin\Debug\ 27 | DEBUG;TRACE 28 | prompt 29 | 4 30 | 31 | 32 | pdbonly 33 | true 34 | bin\Release\ 35 | TRACE 36 | prompt 37 | 4 38 | 39 | 40 | 41 | 42 | 43 | ..\packages\Microsoft.Net.Http.2.2.29\lib\net45\System.Net.Http.Extensions.dll 44 | 45 | 46 | False 47 | ..\packages\Microsoft.Net.Http.2.2.29\lib\net45\System.Net.Http.Primitives.dll 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | {52eaeb62-3ee9-4921-8ec4-fe62337ca1dd} 70 | FOAASClient 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | False 82 | 83 | 84 | False 85 | 86 | 87 | False 88 | 89 | 90 | False 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. 106 | 107 | 108 | 109 | 116 | -------------------------------------------------------------------------------- /FOASSClient.Tests/FoassClientTests.cs: -------------------------------------------------------------------------------- 1 | using System.Threading; 2 | using System.Threading.Tasks; 3 | using FOAASClient; 4 | using Microsoft.VisualStudio.TestTools.UnitTesting; 5 | 6 | namespace FOASSClient.Tests 7 | { 8 | [TestClass] 9 | public class FoassClientTests 10 | { 11 | private readonly IFoaasClient _foaasClient; 12 | 13 | public FoassClientTests() 14 | { 15 | _foaasClient = new FoaasClient(); 16 | } 17 | 18 | [TestMethod] 19 | public async Task FuckingOffShouldWork() 20 | { 21 | var res = await _foaasClient.Off("Joker", "Batman"); 22 | Assert.IsNotNull(res); 23 | Assert.AreEqual("Fuck off, Joker.", res.Message); 24 | Assert.AreEqual("- Batman", res.Subtitle); 25 | } 26 | 27 | [TestMethod] 28 | public async Task FuckingYouShouldWork() 29 | { 30 | var res = await _foaasClient.You("Harpo", "Groucho"); 31 | Assert.IsNotNull(res); 32 | Assert.AreEqual("Fuck you, Harpo.", res.Message); 33 | Assert.AreEqual("- Groucho", res.Subtitle); 34 | } 35 | 36 | [TestMethod] 37 | public async Task FuckingThatShouldWork() 38 | { 39 | var res = await _foaasClient.That("Moses"); 40 | Assert.IsNotNull(res); 41 | Assert.AreEqual("Fuck that.", res.Message); 42 | Assert.AreEqual("- Moses", res.Subtitle); 43 | } 44 | 45 | [TestMethod] 46 | public async Task FuckingThisShouldWork() 47 | { 48 | var res = await _foaasClient.This("Jesus H. Christ"); 49 | Assert.IsNotNull(res); 50 | Assert.AreEqual("Fuck this.", res.Message); 51 | Assert.AreEqual("- Jesus H. Christ", res.Subtitle); 52 | } 53 | 54 | [TestMethod] 55 | public async Task FuckingEverythingShouldWork() 56 | { 57 | var res = await _foaasClient.Everything("John F. Kennedy"); 58 | Assert.IsNotNull(res); 59 | Assert.AreEqual("Fuck everything.", res.Message); 60 | Assert.AreEqual("- John F. Kennedy", res.Subtitle); 61 | } 62 | 63 | [TestMethod] 64 | public async Task FuckingEveryoneShouldWork() 65 | { 66 | var res = await _foaasClient.Everyone("Bumblebee"); 67 | Assert.IsNotNull(res); 68 | Assert.AreEqual("Everyone can go and fuck off.", res.Message); 69 | Assert.AreEqual("- Bumblebee", res.Subtitle); 70 | } 71 | 72 | [TestMethod] 73 | public async Task FuckingDonutShouldWork() 74 | { 75 | var res = await _foaasClient.Donut("Hillary", "Bill"); 76 | Assert.IsNotNull(res); 77 | Assert.AreEqual("Hillary, go and take a flying fuck at a rolling donut.", res.Message); 78 | Assert.AreEqual("- Bill", res.Subtitle); 79 | } 80 | 81 | [TestMethod] 82 | public async Task FuckingShakespeareShouldWork() 83 | { 84 | var res = await _foaasClient.Shakespeare("Wolverine", "Professor X"); 85 | Assert.IsNotNull(res); 86 | Assert.AreEqual( 87 | "Wolverine, Thou clay-brained guts, thou knotty-pated fool, thou whoreson obscene greasy tallow-catch!", 88 | res.Message); 89 | Assert.AreEqual("- Professor X", res.Subtitle); 90 | } 91 | 92 | [TestMethod] 93 | public async Task FuckingLinusShouldWork() 94 | { 95 | var res = await _foaasClient.Linus("Lucy", "Charlie Brown"); 96 | Assert.IsNotNull(res); 97 | Assert.AreEqual( 98 | "Lucy, there aren't enough swear-words in the English language, so now I'll have to call you perkeleen vittupää just to express my disgust and frustration with this crap.", 99 | res.Message); 100 | Assert.AreEqual("- Charlie Brown", res.Subtitle); 101 | } 102 | 103 | [TestMethod] 104 | public async Task FuckingKingShouldWork() 105 | { 106 | var res = await _foaasClient.King("Lucy", "Ricki"); 107 | Assert.IsNotNull(res); 108 | Assert.AreEqual( 109 | "Oh fuck off, just really fuck off you total dickface. Christ Lucy, you are fucking thick.", res.Message); 110 | Assert.AreEqual("- Ricki", res.Subtitle); 111 | } 112 | 113 | [TestMethod] 114 | public async Task FuckingPinkShouldWork() 115 | { 116 | var res = await _foaasClient.Pink("Simba"); 117 | Assert.IsNotNull(res); 118 | Assert.AreEqual("Well, fuck me pink.", res.Message); 119 | Assert.AreEqual("- Simba", res.Subtitle); 120 | } 121 | 122 | [TestMethod] 123 | public async Task FuckingLifeShouldWork() 124 | { 125 | var res = await _foaasClient.Life("Gandhi"); 126 | Assert.IsNotNull(res); 127 | Assert.AreEqual("Fuck my life.", res.Message); 128 | Assert.AreEqual("- Gandhi", res.Subtitle); 129 | } 130 | 131 | [TestMethod] 132 | public async Task FuckingChainsawShouldWork() 133 | { 134 | var res = await _foaasClient.Chainsaw("Jim", "Dr. McCoy"); 135 | Assert.IsNotNull(res); 136 | Assert.AreEqual("Fuck me gently with a chainsaw, Jim. Do I look like Mother Teresa?", res.Message); 137 | Assert.AreEqual("- Dr. McCoy", res.Subtitle); 138 | } 139 | 140 | [TestMethod] 141 | public async Task FuckingOutsideShouldWork() 142 | { 143 | var res = await _foaasClient.Outside("BigBrother", "TheWorld"); 144 | Assert.IsNotNull(res); 145 | Assert.AreEqual("BigBrother, why don't you go outside and play hide-and-go-fuck-yourself?", res.Message); 146 | Assert.AreEqual("- TheWorld", res.Subtitle); 147 | } 148 | 149 | [TestMethod] 150 | public async Task FuckingThingShouldWork() 151 | { 152 | var res = await _foaasClient.Thing("pineapples", "Chris"); 153 | Assert.IsNotNull(res); 154 | Assert.AreEqual("Fuck pineapples.", res.Message); 155 | Assert.AreEqual("- Chris", res.Subtitle); 156 | } 157 | 158 | [TestMethod] 159 | public async Task FuckingThanksShouldWork() 160 | { 161 | var res = await _foaasClient.Thanks("Abraham Lincoln"); 162 | Assert.IsNotNull(res); 163 | Assert.AreEqual("Fuck you very much.", res.Message); 164 | Assert.AreEqual("- Abraham Lincoln", res.Subtitle); 165 | } 166 | 167 | [TestMethod] 168 | public async Task FuckingFlyingShouldWork() 169 | { 170 | var res = await _foaasClient.Flying("Barack Obama"); 171 | Assert.IsNotNull(res); 172 | Assert.AreEqual("I don't give a flying fuck.", res.Message); 173 | Assert.AreEqual("- Barack Obama", res.Subtitle); 174 | } 175 | 176 | [TestMethod] 177 | public async Task FuckingFascinatingShouldWork() 178 | { 179 | var res = await _foaasClient.Fascinating("Marie Curie"); 180 | Assert.IsNotNull(res); 181 | Assert.AreEqual("Fascinating story, in what chapter do you shut the fuck up?", res.Message); 182 | Assert.AreEqual("- Marie Curie", res.Subtitle); 183 | } 184 | 185 | [TestMethod] 186 | public async Task FuckingMadisonShouldWork() 187 | { 188 | var res = await _foaasClient.Madison("Doctor", "Rose"); 189 | Assert.IsNotNull(res); 190 | Assert.AreEqual( 191 | "What you've just said is one of the most insanely idiotic things I have ever heard, Doctor. At no point in your rambling, incoherent response were you even close to anything that could be considered a rational thought. Everyone in this room is now dumber for having listened to it. I award you no points Doctor, and may God have mercy on your soul.", 192 | res.Message); 193 | Assert.AreEqual("- Rose", res.Subtitle); 194 | } 195 | 196 | [TestMethod] 197 | public async Task FuckingCoolShouldWork() 198 | { 199 | var res = await _foaasClient.Cool("Luke"); 200 | Assert.IsNotNull(res); 201 | Assert.AreEqual("Cool story, bro.", res.Message); 202 | Assert.AreEqual("- Luke", res.Subtitle); 203 | } 204 | 205 | [TestMethod] 206 | public async Task FuckingFieldShouldWork() 207 | { 208 | var res = await _foaasClient.Field("Yo Momma", "John", "A Book, Chapter 2."); 209 | Assert.IsNotNull(res); 210 | Assert.AreEqual( 211 | "And Yo Momma said unto John, 'Verily, cast thine eyes upon the field in which I grow my fucks', and John gave witness unto the field, and saw that it was barren.", 212 | res.Message); 213 | Assert.AreEqual("- A Book, Chapter 2.", res.Subtitle); 214 | } 215 | 216 | [TestMethod] 217 | public async Task FuckingNuggetShouldWork() 218 | { 219 | var res = await _foaasClient.Nugget("Bill", "Ben"); 220 | Assert.IsNotNull(res); 221 | Assert.AreEqual("Well Bill, aren't you a shining example of a rancid fuck-nugget.", res.Message); 222 | Assert.AreEqual("- Ben", res.Subtitle); 223 | } 224 | 225 | [TestMethod] 226 | public async Task FuckingYodaShouldWork() 227 | { 228 | var res = await _foaasClient.Yoda("Luke", "Yoda"); 229 | Assert.IsNotNull(res); 230 | Assert.AreEqual("Fuck off, you must, Luke.", res.Message); 231 | Assert.AreEqual("- Yoda", res.Subtitle); 232 | } 233 | 234 | [TestMethod] 235 | public async Task FuckingBallmerShouldWork() 236 | { 237 | var res = await _foaasClient.Ballmer("Someone", "Something", "Ballmer"); 238 | Assert.IsNotNull(res); 239 | Assert.AreEqual( 240 | "Fucking Someone is a fucking pussy. I'm going to fucking bury that guy, I have done it before, and I will do it again. I'm going to fucking kill Something.", 241 | res.Message); 242 | Assert.AreEqual("- Ballmer", res.Subtitle); 243 | } 244 | 245 | [TestMethod] 246 | public async Task FuckingWhatShouldWork() 247 | { 248 | var res = await _foaasClient.What("Frank"); 249 | Assert.IsNotNull(res); 250 | Assert.AreEqual("What the fuck‽", res.Message); 251 | Assert.AreEqual("- Frank", res.Subtitle); 252 | } 253 | 254 | [TestMethod] 255 | public async Task FuckingBecauseShouldWork() 256 | { 257 | var res = await _foaasClient.Because("Tina"); 258 | Assert.IsNotNull(res); 259 | Assert.AreEqual("Why? Because fuck you, that's why.", res.Message); 260 | Assert.AreEqual("- Tina", res.Subtitle); 261 | } 262 | 263 | [TestMethod] 264 | public async Task FuckingCaniuseShouldWork() 265 | { 266 | var res = await _foaasClient.Caniuse("Hammer", "Bob the Builder"); 267 | Assert.IsNotNull(res); 268 | Assert.AreEqual("Can you use Hammer? Fuck no!", res.Message); 269 | Assert.AreEqual("- Bob the Builder", res.Subtitle); 270 | } 271 | 272 | [TestMethod] 273 | public async Task FuckingByeShouldWork() 274 | { 275 | var res = await _foaasClient.Bye("Claire"); 276 | Assert.IsNotNull(res); 277 | Assert.AreEqual("Fuckity bye!", res.Message); 278 | Assert.AreEqual("- Claire", res.Subtitle); 279 | } 280 | 281 | [TestMethod] 282 | public async Task FuckingDiabetesShouldWork() 283 | { 284 | var res = await _foaasClient.Diabetes("Charley"); 285 | Assert.IsNotNull(res); 286 | Assert.AreEqual("I'd love to stop and chat to you but I'd rather have type 2 diabetes.", res.Message); 287 | Assert.AreEqual("- Charley", res.Subtitle); 288 | } 289 | 290 | [TestMethod] 291 | public async Task FuckingBusShouldWork() 292 | { 293 | var res = await _foaasClient.Bus("Laura", "James"); 294 | Assert.IsNotNull(res); 295 | Assert.AreEqual("Christ on a bendy-bus, Laura, don't be such a fucking faff-arse.", res.Message); 296 | Assert.AreEqual("- James", res.Subtitle); 297 | } 298 | 299 | [TestMethod] 300 | public async Task FuckingXmasShouldWork() 301 | { 302 | var res = await _foaasClient.Xmas("Clive", "Your Mother"); 303 | Assert.IsNotNull(res); 304 | Assert.AreEqual("Merry Fucking Christmas, Clive.", res.Message); 305 | Assert.AreEqual("- Your Mother", res.Subtitle); 306 | } 307 | 308 | [TestMethod] 309 | public async Task FuckingBdayShouldWork() 310 | { 311 | var res = await _foaasClient.Bday("Grant", "The Crew"); 312 | Assert.IsNotNull(res); 313 | Assert.AreEqual("Happy Fucking Birthday, Grant.", res.Message); 314 | Assert.AreEqual("- The Crew", res.Subtitle); 315 | } 316 | 317 | [TestMethod] 318 | public async Task FuckingAwesomeShouldWork() 319 | { 320 | var res = await _foaasClient.Awesome("Macklemore"); 321 | Assert.IsNotNull(res); 322 | Assert.AreEqual("This is Fucking Awesome.", res.Message); 323 | Assert.AreEqual("- Macklemore", res.Subtitle); 324 | } 325 | 326 | [TestMethod] 327 | public async Task FuckingTuckerShouldWork() 328 | { 329 | var res = await _foaasClient.Tucker("Malcolm Tucker"); 330 | Assert.IsNotNull(res); 331 | Assert.AreEqual("Come the fuck in or fuck the fuck off.", res.Message); 332 | Assert.AreEqual("- Malcolm Tucker", res.Subtitle); 333 | } 334 | 335 | [TestMethod] 336 | public async Task FuckingBucketShouldWork() 337 | { 338 | var res = await _foaasClient.Bucket("Richard Dickson"); 339 | Assert.IsNotNull(res); 340 | Assert.AreEqual("Please choke on a bucket of cocks.", res.Message); 341 | Assert.AreEqual("- Richard Dickson", res.Subtitle); 342 | } 343 | 344 | [TestMethod] 345 | public async Task FuckingFamilyShouldWork() 346 | { 347 | var res = await _foaasClient.Family("Jezza"); 348 | Assert.IsNotNull(res); 349 | Assert.AreEqual("Fuck you, your whole family, your pets, and your feces.", res.Message); 350 | Assert.AreEqual("- Jezza", res.Subtitle); 351 | } 352 | 353 | [TestMethod] 354 | public async Task FuckingShutupShouldWork() 355 | { 356 | var res = await _foaasClient.Shutup("Jeff", "Gary"); 357 | Assert.IsNotNull(res); 358 | Assert.AreEqual("Jeff, shut the fuck up.", res.Message); 359 | Assert.AreEqual("- Gary", res.Subtitle); 360 | } 361 | 362 | [TestMethod] 363 | public async Task FuckingZaynShouldWork() 364 | { 365 | var res = await _foaasClient.Zayn("Zayn"); 366 | Assert.IsNotNull(res); 367 | Assert.AreEqual("Ask me if I give a motherfuck ?!!", res.Message); 368 | Assert.AreEqual("- Zayn", res.Subtitle); 369 | } 370 | 371 | [TestMethod] 372 | public async Task FuckingKeepCalmShouldWork() 373 | { 374 | var res = await _foaasClient.KeepCalm("Cry me a fast flowing river", "Dustin Timberland"); 375 | Assert.IsNotNull(res); 376 | Assert.AreEqual("Keep the fuck calm and Cry me a fast flowing river!", res.Message); 377 | Assert.AreEqual("- Dustin Timberland", res.Subtitle); 378 | } 379 | 380 | [TestMethod] 381 | public async Task FuckingDoSomethingShouldWork() 382 | { 383 | var res = await _foaasClient.DoSomething("Get", "Washing", "Mother"); 384 | Assert.IsNotNull(res); 385 | Assert.AreEqual("Get the fucking Washing!", res.Message); 386 | Assert.AreEqual("- Mother", res.Subtitle); 387 | } 388 | 389 | [TestMethod] 390 | public async Task FuckingMorninShouldWork() 391 | { 392 | var res = await _foaasClient.Mornin("Monday"); 393 | Assert.IsNotNull(res); 394 | Assert.AreEqual("Happy fuckin' mornin'!", res.Message); 395 | Assert.AreEqual("- Monday", res.Subtitle); 396 | } 397 | 398 | [TestMethod] 399 | public async Task FuckingThumbsShouldWork() 400 | { 401 | var res = await _foaasClient.Thumbs("This Guy", "Me"); 402 | Assert.IsNotNull(res); 403 | Assert.AreEqual("Who has two thumbs and doesn't give a fuck? This Guy.", res.Message); 404 | Assert.AreEqual("- Me", res.Subtitle); 405 | } 406 | 407 | [TestMethod] 408 | public async Task FuckingRetardShouldWork() 409 | { 410 | var res = await _foaasClient.Retard("Josh"); 411 | Assert.IsNotNull(res); 412 | Assert.AreEqual("You Fucktard!", res.Message); 413 | Assert.AreEqual("- Josh", res.Subtitle); 414 | } 415 | 416 | [TestMethod] 417 | public async Task FuckingGreedShouldWork() 418 | { 419 | var res = await _foaasClient.Greed("Cash", "BigCat"); 420 | Assert.IsNotNull(res); 421 | Assert.AreEqual( 422 | "The point is, ladies and gentleman, that cash -- for lack of a better word -- is good. Cash is right. Cash works. Cash clarifies, cuts through, and captures the essence of the evolutionary spirit. Cash, in all of its forms -- Cash for life, for money, for love, knowledge -- has marked the upward surge of mankind.", 423 | res.Message); 424 | Assert.AreEqual("- BigCat", res.Subtitle); 425 | } 426 | 427 | [TestMethod] 428 | public async Task FuckingAnywayShouldWork() 429 | { 430 | var res = await _foaasClient.Anyway("Microsoft", "Someone Else"); 431 | Assert.IsNotNull(res); 432 | Assert.AreEqual("Who the fuck are you anyway, Microsoft, why are you stirring up so much trouble, and, who pays you?", res.Message); 433 | Assert.AreEqual("- Someone Else", res.Subtitle); 434 | } 435 | 436 | [TestMethod] 437 | public async Task FuckingBackShouldWork() 438 | { 439 | var res = await _foaasClient.Back("You", "Me"); 440 | Assert.IsNotNull(res); 441 | Assert.AreEqual("You, back the fuck off.", res.Message); 442 | Assert.AreEqual("- Me", res.Subtitle); 443 | } 444 | 445 | [TestMethod] 446 | public async Task FuckingBagShouldWork() 447 | { 448 | var res = await _foaasClient.Bag("Me"); 449 | Assert.IsNotNull(res); 450 | Assert.AreEqual("Eat a bag of fucking dicks.", res.Message); 451 | Assert.AreEqual("- Me", res.Subtitle); 452 | } 453 | 454 | [TestMethod] 455 | public async Task FuckingBlackadderShouldWork() 456 | { 457 | var res = await _foaasClient.Blackadder("You", "Me"); 458 | Assert.IsNotNull(res); 459 | Assert.AreEqual("You, your head is as empty as a eunuch’s underpants. Fuck off!", res.Message); 460 | Assert.AreEqual("- Me", res.Subtitle); 461 | } 462 | 463 | [TestMethod] 464 | public async Task FuckingBravoMikeShouldWork() 465 | { 466 | var res = await _foaasClient.BravoMike("Frank", "Me"); 467 | Assert.IsNotNull(res); 468 | Assert.AreEqual("Bravo mike, Frank.", res.Message); 469 | Assert.AreEqual("- Me", res.Subtitle); 470 | } 471 | 472 | [TestMethod] 473 | public async Task FuckingCocksplatShouldWork() 474 | { 475 | var res = await _foaasClient.Cocksplat("Frank", "Me"); 476 | Assert.IsNotNull(res); 477 | Assert.AreEqual("Fuck off Frank, you worthless cocksplat", res.Message); 478 | Assert.AreEqual("- Me", res.Subtitle); 479 | } 480 | 481 | [TestMethod] 482 | public async Task FuckingDaltonShouldWork() 483 | { 484 | var res = await _foaasClient.Dalton("You", "Me"); 485 | Assert.IsNotNull(res); 486 | Assert.AreEqual("You: A fucking problem solving super-hero.", res.Message); 487 | Assert.AreEqual("- Me", res.Subtitle); 488 | } 489 | 490 | [TestMethod] 491 | public async Task FuckingDeraadtShouldWork() 492 | { 493 | var res = await _foaasClient.Deraadt("Frank", "Me"); 494 | Assert.IsNotNull(res); 495 | Assert.AreEqual("Frank you are being the usual slimy hypocritical asshole... You may have had value ten years ago, but people will see that you don't anymore.", res.Message); 496 | Assert.AreEqual("- Me", res.Subtitle); 497 | } 498 | 499 | [TestMethod] 500 | public async Task FuckingGolfFoxtrotYankeeShouldWork() 501 | { 502 | var res = await _foaasClient.GolfFoxtrotYankee("Frank", "Me"); 503 | Assert.IsNotNull(res); 504 | Assert.AreEqual("Golf foxtrot yankee, Frank.", res.Message); 505 | Assert.AreEqual("- Me", res.Subtitle); 506 | } 507 | 508 | [TestMethod] 509 | public async Task FuckingGiveShouldWork() 510 | { 511 | var res = await _foaasClient.Give("Me"); 512 | Assert.IsNotNull(res); 513 | Assert.AreEqual("I give zero fucks.", res.Message); 514 | Assert.AreEqual("- Me", res.Subtitle); 515 | } 516 | 517 | [TestMethod] 518 | public async Task FuckingHorseShouldWork() 519 | { 520 | var res = await _foaasClient.Horse("Me"); 521 | Assert.IsNotNull(res); 522 | Assert.AreEqual("Fuck you and the horse you rode in on.", res.Message); 523 | Assert.AreEqual("- Me", res.Subtitle); 524 | } 525 | 526 | [TestMethod] 527 | public async Task FuckingFuckOffShouldWork() 528 | { 529 | var res = await _foaasClient.FuckingOff("Frank", "Me"); 530 | Assert.IsNotNull(res); 531 | Assert.AreEqual("Fucking fuck off, Frank.", res.Message); 532 | Assert.AreEqual("- Me", res.Subtitle); 533 | } 534 | 535 | [TestMethod] 536 | public async Task FuckingKeepShouldWork() 537 | { 538 | var res = await _foaasClient.Keep("Frank", "Me"); 539 | Assert.IsNotNull(res); 540 | Assert.AreEqual("Frank: Fuck off. And when you get there, fuck off from there too. Then fuck off some more. Keep fucking off until you get back here. Then fuck off again.", res.Message); 541 | Assert.AreEqual("- Me", res.Subtitle); 542 | } 543 | 544 | [TestMethod] 545 | public async Task FuckingLookShouldWork() 546 | { 547 | var res = await _foaasClient.Look("Frank", "Me"); 548 | Assert.IsNotNull(res); 549 | Assert.AreEqual("Frank, do I look like I give a fuck?", res.Message); 550 | Assert.AreEqual("- Me", res.Subtitle); 551 | } 552 | 553 | [TestMethod] 554 | public async Task FuckingLookingShouldWork() 555 | { 556 | var res = await _foaasClient.Looking("Me"); 557 | Assert.IsNotNull(res); 558 | Assert.AreEqual("Looking for a fuck to give.", res.Message); 559 | Assert.AreEqual("- Me", res.Subtitle); 560 | } 561 | 562 | [TestMethod] 563 | public async Task FuckingMaybeShouldWork() 564 | { 565 | var res = await _foaasClient.Maybe("Me"); 566 | Assert.IsNotNull(res); 567 | Assert.AreEqual("Maybe. Maybe not. Maybe fuck yourself.", res.Message); 568 | Assert.AreEqual("- Me", res.Subtitle); 569 | } 570 | 571 | [TestMethod] 572 | public async Task FuckingMeShouldWork() 573 | { 574 | var res = await _foaasClient.Me("Me"); 575 | Assert.IsNotNull(res); 576 | Assert.AreEqual("Fuck me.", res.Message); 577 | Assert.AreEqual("- Me", res.Subtitle); 578 | } 579 | 580 | [TestMethod] 581 | public async Task FuckingNoShouldWork() 582 | { 583 | var res = await _foaasClient.No("Me"); 584 | Assert.IsNotNull(res); 585 | Assert.AreEqual("No fucks given.", res.Message); 586 | Assert.AreEqual("- Me", res.Subtitle); 587 | } 588 | 589 | [TestMethod] 590 | public async Task FuckingOffWithShouldWork() 591 | { 592 | var res = await _foaasClient.OffWith("that", "Me"); 593 | Assert.IsNotNull(res); 594 | Assert.AreEqual("Fuck off with that", res.Message); 595 | Assert.AreEqual("- Me", res.Subtitle); 596 | } 597 | 598 | [TestMethod] 599 | public async Task FuckingParticularShouldWork() 600 | { 601 | var res = await _foaasClient.Particular("Sausage", "Me"); 602 | Assert.IsNotNull(res); 603 | Assert.AreEqual("Fuck this Sausage in particular.", res.Message); 604 | Assert.AreEqual("- Me", res.Subtitle); 605 | } 606 | 607 | [TestMethod] 608 | public async Task FuckingProblemShouldWork() 609 | { 610 | var res = await _foaasClient.Problem("Frank", "Me"); 611 | Assert.IsNotNull(res); 612 | Assert.AreEqual("What the fuck is your problem Frank?", res.Message); 613 | Assert.AreEqual("- Me", res.Subtitle); 614 | } 615 | 616 | [TestMethod] 617 | public async Task FuckingPulpShouldWork() 618 | { 619 | var res = await _foaasClient.Pulp("Japanese", "Me"); 620 | Assert.IsNotNull(res); 621 | Assert.AreEqual("Japanese, motherfucker, do you speak it?", res.Message); 622 | Assert.AreEqual("- Me", res.Subtitle); 623 | } 624 | 625 | [TestMethod] 626 | public async Task FuckingRidiculousShouldWork() 627 | { 628 | var res = await _foaasClient.Ridiculous("Me"); 629 | Assert.IsNotNull(res); 630 | Assert.AreEqual("That's fucking ridiculous", res.Message); 631 | Assert.AreEqual("- Me", res.Subtitle); 632 | } 633 | 634 | [TestMethod] 635 | public async Task ReadingTheFuckingManualShouldWork() 636 | { 637 | var res = await _foaasClient.ReadTheManual("Me"); 638 | Assert.IsNotNull(res); 639 | Assert.AreEqual("Read the fucking manual!", res.Message); 640 | Assert.AreEqual("- Me", res.Subtitle); 641 | } 642 | 643 | [TestMethod] 644 | public async Task FuckingSakeShouldWork() 645 | { 646 | var res = await _foaasClient.Sake("Me"); 647 | Assert.IsNotNull(res); 648 | Assert.AreEqual("For Fuck's sake!", res.Message); 649 | Assert.AreEqual("- Me", res.Subtitle); 650 | } 651 | 652 | [TestMethod] 653 | public async Task FuckingShitShouldWork() 654 | { 655 | var res = await _foaasClient.Shit("Me"); 656 | Assert.IsNotNull(res); 657 | Assert.AreEqual("Fuck this shit!", res.Message); 658 | Assert.AreEqual("- Me", res.Subtitle); 659 | } 660 | 661 | [TestMethod] 662 | public async Task FuckingSingleShouldWork() 663 | { 664 | var res = await _foaasClient.Single("Me"); 665 | Assert.IsNotNull(res); 666 | Assert.AreEqual("Not a single fuck was given.", res.Message); 667 | Assert.AreEqual("- Me", res.Subtitle); 668 | } 669 | 670 | [TestMethod] 671 | public async Task FuckingThinkShouldWork() 672 | { 673 | var res = await _foaasClient.Think("Frank", "Me"); 674 | Assert.IsNotNull(res); 675 | Assert.AreEqual("Frank, you think I give a fuck?", res.Message); 676 | Assert.AreEqual("- Me", res.Subtitle); 677 | } 678 | 679 | [TestMethod] 680 | public async Task FuckingThinkingShouldWork() 681 | { 682 | var res = await _foaasClient.Thinking("Frank","Me"); 683 | Assert.IsNotNull(res); 684 | Assert.AreEqual("Frank, what the fuck where you actually thinking?", res.Message); 685 | Assert.AreEqual("- Me", res.Subtitle); 686 | } 687 | 688 | [TestMethod] 689 | public async Task FuckingTooShouldWork() 690 | { 691 | var res = await _foaasClient.Too("Me"); 692 | Assert.IsNotNull(res); 693 | Assert.AreEqual("Thanks, fuck you too.", res.Message); 694 | Assert.AreEqual("- Me", res.Subtitle); 695 | } 696 | 697 | [TestMethod] 698 | public async Task FuckingZeroShouldWork() 699 | { 700 | var res = await _foaasClient.Zero("Me"); 701 | Assert.IsNotNull(res); 702 | Assert.AreEqual("Zero, thats the number of fucks I give.", res.Message); 703 | Assert.AreEqual("- Me", res.Subtitle); 704 | } 705 | } 706 | } 707 | -------------------------------------------------------------------------------- /FOASSClient.Tests/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("FOASSClient.Tests")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("FOASSClient.Tests")] 13 | [assembly: AssemblyCopyright("Copyright © 2015")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("fc308b2f-bf5e-48e1-93bf-f2e7c016017a")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /FOASSClient.Tests/app.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /FOASSClient.Tests/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Igor Kulman 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Portable FOAASClient for .NET 2 | 3 | [![Build status](https://ci.appveyor.com/api/projects/status/b0r9hf2p3gewnin6?svg=true)](https://ci.appveyor.com/project/igorkulman/foaasclient) 4 | 5 | Were you looking to leverage the cloud to tell someone to fuck themselves? Do you need to do it from .NET? Well fuck me! Look no further! 6 | 7 | This .NET portable library automates calls to [FOAAS](http://foaas.com). 8 | -------------------------------------------------------------------------------- /build.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | cls 3 | "tools\nuget\nuget.exe" "install" "FAKE" "-OutputDirectory" "tools" "-ExcludeVersion" 4 | "tools\FAKE\tools\Fake.exe" build.fsx 5 | pause -------------------------------------------------------------------------------- /build.fsx: -------------------------------------------------------------------------------- 1 | // include Fake lib 2 | #r @"tools\FAKE\tools\FakeLib.dll" 3 | open Fake 4 | 5 | RestorePackages() 6 | 7 | // Properties 8 | let buildDir = @".\build\" 9 | let testDir = @".\test\" 10 | let packagesDir = @".\packages" 11 | let packagingRoot = "./packaging/" 12 | let packagesVersion = "1.0.1.0" 13 | 14 | // Targets 15 | Target "Clean" (fun _ -> 16 | CleanDirs [buildDir; testDir; packagingRoot] 17 | ) 18 | 19 | Target "Build" (fun _ -> 20 | !! @"FOAASClient\FOAASClient.csproj" 21 | |> MSBuildRelease buildDir "Build" 22 | |> Log "AppBuild-Output: " 23 | ) 24 | 25 | Target "CreateNugetPackage" (fun _ -> 26 | NuGet (fun p -> 27 | {p with 28 | Project = "FOAASClient" 29 | OutputPath = packagingRoot 30 | WorkingDir = buildDir 31 | Version = packagesVersion 32 | Dependencies = 33 | ["Newtonsoft.Json", GetPackageVersion "./packages/" "Newtonsoft.Json" 34 | "Microsoft.Net.Http", GetPackageVersion "./packages/" "Microsoft.Net.Http"] 35 | Publish = true 36 | }) "FOAASClient.nuspec" 37 | ) 38 | 39 | Target "Default" (fun _ -> 40 | trace "Build completed" 41 | ) 42 | 43 | // Dependencies 44 | "Clean" 45 | ==> "Build" 46 | ==> "CreateNugetPackage" 47 | ==> "Default" 48 | 49 | // start build 50 | Run "Default" 51 | -------------------------------------------------------------------------------- /tools/NuGet/LICENSE.txt: -------------------------------------------------------------------------------- 1 | 2 | Apache License 3 | Version 2.0, January 2004 4 | http://www.apache.org/licenses/ 5 | 6 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 7 | 8 | 1. Definitions. 9 | 10 | "License" shall mean the terms and conditions for use, reproduction, 11 | and distribution as defined by Sections 1 through 9 of this document. 12 | 13 | "Licensor" shall mean the copyright owner or entity authorized by 14 | the copyright owner that is granting the License. 15 | 16 | "Legal Entity" shall mean the union of the acting entity and all 17 | other entities that control, are controlled by, or are under common 18 | control with that entity. For the purposes of this definition, 19 | "control" means (i) the power, direct or indirect, to cause the 20 | direction or management of such entity, whether by contract or 21 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 22 | outstanding shares, or (iii) beneficial ownership of such entity. 23 | 24 | "You" (or "Your") shall mean an individual or Legal Entity 25 | exercising permissions granted by this License. 26 | 27 | "Source" form shall mean the preferred form for making modifications, 28 | including but not limited to software source code, documentation 29 | source, and configuration files. 30 | 31 | "Object" form shall mean any form resulting from mechanical 32 | transformation or translation of a Source form, including but 33 | not limited to compiled object code, generated documentation, 34 | and conversions to other media types. 35 | 36 | "Work" shall mean the work of authorship, whether in Source or 37 | Object form, made available under the License, as indicated by a 38 | copyright notice that is included in or attached to the work 39 | (an example is provided in the Appendix below). 40 | 41 | "Derivative Works" shall mean any work, whether in Source or Object 42 | form, that is based on (or derived from) the Work and for which the 43 | editorial revisions, annotations, elaborations, or other modifications 44 | represent, as a whole, an original work of authorship. For the purposes 45 | of this License, Derivative Works shall not include works that remain 46 | separable from, or merely link (or bind by name) to the interfaces of, 47 | the Work and Derivative Works thereof. 48 | 49 | "Contribution" shall mean any work of authorship, including 50 | the original version of the Work and any modifications or additions 51 | to that Work or Derivative Works thereof, that is intentionally 52 | submitted to Licensor for inclusion in the Work by the copyright owner 53 | or by an individual or Legal Entity authorized to submit on behalf of 54 | the copyright owner. For the purposes of this definition, "submitted" 55 | means any form of electronic, verbal, or written communication sent 56 | to the Licensor or its representatives, including but not limited to 57 | communication on electronic mailing lists, source code control systems, 58 | and issue tracking systems that are managed by, or on behalf of, the 59 | Licensor for the purpose of discussing and improving the Work, but 60 | excluding communication that is conspicuously marked or otherwise 61 | designated in writing by the copyright owner as "Not a Contribution." 62 | 63 | "Contributor" shall mean Licensor and any individual or Legal Entity 64 | on behalf of whom a Contribution has been received by Licensor and 65 | subsequently incorporated within the Work. 66 | 67 | 2. Grant of Copyright License. Subject to the terms and conditions of 68 | this License, each Contributor hereby grants to You a perpetual, 69 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 70 | copyright license to reproduce, prepare Derivative Works of, 71 | publicly display, publicly perform, sublicense, and distribute the 72 | Work and such Derivative Works in Source or Object form. 73 | 74 | 3. Grant of Patent License. Subject to the terms and conditions of 75 | this License, each Contributor hereby grants to You a perpetual, 76 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 77 | (except as stated in this section) patent license to make, have made, 78 | use, offer to sell, sell, import, and otherwise transfer the Work, 79 | where such license applies only to those patent claims licensable 80 | by such Contributor that are necessarily infringed by their 81 | Contribution(s) alone or by combination of their Contribution(s) 82 | with the Work to which such Contribution(s) was submitted. If You 83 | institute patent litigation against any entity (including a 84 | cross-claim or counterclaim in a lawsuit) alleging that the Work 85 | or a Contribution incorporated within the Work constitutes direct 86 | or contributory patent infringement, then any patent licenses 87 | granted to You under this License for that Work shall terminate 88 | as of the date such litigation is filed. 89 | 90 | 4. Redistribution. You may reproduce and distribute copies of the 91 | Work or Derivative Works thereof in any medium, with or without 92 | modifications, and in Source or Object form, provided that You 93 | meet the following conditions: 94 | 95 | (a) You must give any other recipients of the Work or 96 | Derivative Works a copy of this License; and 97 | 98 | (b) You must cause any modified files to carry prominent notices 99 | stating that You changed the files; and 100 | 101 | (c) You must retain, in the Source form of any Derivative Works 102 | that You distribute, all copyright, patent, trademark, and 103 | attribution notices from the Source form of the Work, 104 | excluding those notices that do not pertain to any part of 105 | the Derivative Works; and 106 | 107 | (d) If the Work includes a "NOTICE" text file as part of its 108 | distribution, then any Derivative Works that You distribute must 109 | include a readable copy of the attribution notices contained 110 | within such NOTICE file, excluding those notices that do not 111 | pertain to any part of the Derivative Works, in at least one 112 | of the following places: within a NOTICE text file distributed 113 | as part of the Derivative Works; within the Source form or 114 | documentation, if provided along with the Derivative Works; or, 115 | within a display generated by the Derivative Works, if and 116 | wherever such third-party notices normally appear. The contents 117 | of the NOTICE file are for informational purposes only and 118 | do not modify the License. You may add Your own attribution 119 | notices within Derivative Works that You distribute, alongside 120 | or as an addendum to the NOTICE text from the Work, provided 121 | that such additional attribution notices cannot be construed 122 | as modifying the License. 123 | 124 | You may add Your own copyright statement to Your modifications and 125 | may provide additional or different license terms and conditions 126 | for use, reproduction, or distribution of Your modifications, or 127 | for any such Derivative Works as a whole, provided Your use, 128 | reproduction, and distribution of the Work otherwise complies with 129 | the conditions stated in this License. 130 | 131 | 5. Submission of Contributions. Unless You explicitly state otherwise, 132 | any Contribution intentionally submitted for inclusion in the Work 133 | by You to the Licensor shall be under the terms and conditions of 134 | this License, without any additional terms or conditions. 135 | Notwithstanding the above, nothing herein shall supersede or modify 136 | the terms of any separate license agreement you may have executed 137 | with Licensor regarding such Contributions. 138 | 139 | 6. Trademarks. This License does not grant permission to use the trade 140 | names, trademarks, service marks, or product names of the Licensor, 141 | except as required for reasonable and customary use in describing the 142 | origin of the Work and reproducing the content of the NOTICE file. 143 | 144 | 7. Disclaimer of Warranty. Unless required by applicable law or 145 | agreed to in writing, Licensor provides the Work (and each 146 | Contributor provides its Contributions) on an "AS IS" BASIS, 147 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 148 | implied, including, without limitation, any warranties or conditions 149 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 150 | PARTICULAR PURPOSE. You are solely responsible for determining the 151 | appropriateness of using or redistributing the Work and assume any 152 | risks associated with Your exercise of permissions under this License. 153 | 154 | 8. Limitation of Liability. In no event and under no legal theory, 155 | whether in tort (including negligence), contract, or otherwise, 156 | unless required by applicable law (such as deliberate and grossly 157 | negligent acts) or agreed to in writing, shall any Contributor be 158 | liable to You for damages, including any direct, indirect, special, 159 | incidental, or consequential damages of any character arising as a 160 | result of this License or out of the use or inability to use the 161 | Work (including but not limited to damages for loss of goodwill, 162 | work stoppage, computer failure or malfunction, or any and all 163 | other commercial damages or losses), even if such Contributor 164 | has been advised of the possibility of such damages. 165 | 166 | 9. Accepting Warranty or Additional Liability. While redistributing 167 | the Work or Derivative Works thereof, You may choose to offer, 168 | and charge a fee for, acceptance of support, warranty, indemnity, 169 | or other liability obligations and/or rights consistent with this 170 | License. However, in accepting such obligations, You may act only 171 | on Your own behalf and on Your sole responsibility, not on behalf 172 | of any other Contributor, and only if You agree to indemnify, 173 | defend, and hold each Contributor harmless for any liability 174 | incurred by, or claims asserted against, such Contributor by reason 175 | of your accepting any such warranty or additional liability. 176 | 177 | END OF TERMS AND CONDITIONS -------------------------------------------------------------------------------- /tools/NuGet/NuGet.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/igorkulman/FOAASClient/0cf3ff71ca15564e0d93ceb1c146a7a8093e1012/tools/NuGet/NuGet.exe --------------------------------------------------------------------------------