From 959808ca05044124d1d30db01221f547b3389fec Mon Sep 17 00:00:00 2001 From: Paddy O'Brien Date: Fri, 20 Jul 2012 18:46:21 -0400 Subject: [PATCH] Initial commit --- Gister.app/Contents/Info.plist | 52 + Gister.app/Contents/MacOS/Gister | Bin 0 -> 181644 bytes Gister.app/Contents/PkgInfo | 1 + .../Contents/Resources/en.lproj/Credits.rtf | 29 + .../Resources/en.lproj/InfoPlist.strings | Bin 0 -> 92 bytes .../Contents/Resources/en.lproj/MainMenu.nib | Bin 0 -> 26656 bytes Gister.app/Contents/Resources/octo.png | Bin 0 -> 22984 bytes .../contents.xcworkspacedata | 7 + .../UserInterfaceState.xcuserstate | Bin 0 -> 8076 bytes .../xcschemes/Gister.xcscheme | 85 + .../xcschemes/xcschememanagement.plist | 22 + Gister.xcworkspace/contents.xcworkspacedata | 10 + .../UserInterfaceState.xcuserstate | Bin 0 -> 55237 bytes .../xcdebugger/Breakpoints.xcbkptlist | 42 + Podfile | 2 + Podfile.lock | 5 + .../UAGithubEngine/NSArray+Utilities.h | 1 + Pods/Headers/UAGithubEngine/NSData+Base64.h | 1 + .../UAGithubEngine/NSInvocation+Blocks.h | 1 + .../NSString+UAGithubEngineUtilities.h | 1 + Pods/Headers/UAGithubEngine/NSString+UUID.h | 1 + Pods/Headers/UAGithubEngine/UAGithubEngine.h | 1 + .../UAGithubEngine/UAGithubEngineConstants.h | 1 + .../UAGithubEngineRequestTypes.h | 1 + .../UAGithubEngine/UAGithubJSONParser.h | 1 + .../UAGithubEngine/UAGithubURLConnection.h | 1 + Pods/Headers/UAGithubEngine/UAReachability.h | 1 + Pods/Pods-Acknowledgements.markdown | 35 + Pods/Pods-Acknowledgements.plist | 65 + Pods/Pods-prefix.pch | 3 + Pods/Pods-resources.sh | 19 + Pods/Pods.xcconfig | 4 + Pods/Pods.xcodeproj/project.pbxproj | 423 +++++ .../paddy.xcuserdatad/xcschemes/Pods.xcscheme | 58 + .../xcschemes/xcschememanagement.plist | 22 + Pods/PodsDummy_Pods.m | 4 + Pods/UAGithubEngine/License.rtf | 29 + Pods/UAGithubEngine/README.md | 45 + .../UAGithubEngine/NSArray+Utilities.h | 17 + .../UAGithubEngine/NSArray+Utilities.m | 31 + .../UAGithubEngine/NSData+Base64.h | 33 + .../UAGithubEngine/NSData+Base64.m | 298 ++++ .../UAGithubEngine/NSInvocation+Blocks.h | 19 + .../UAGithubEngine/NSInvocation+Blocks.m | 47 + .../NSString+UAGithubEngineUtilities.h | 18 + .../NSString+UAGithubEngineUtilities.m | 43 + .../UAGithubEngine/NSString+UUID.h | 14 + .../UAGithubEngine/NSString+UUID.m | 27 + .../UAGithubEngine/UAGithubEngine.h | 363 ++++ .../UAGithubEngine/UAGithubEngine.m | 1538 +++++++++++++++++ .../UAGithubEngine/UAGithubEngineConstants.h | 18 + .../UAGithubEngine/UAGithubEngineConstants.m | 14 + .../UAGithubEngineRequestTypes.h | 232 +++ .../UAGithubEngine/UAGithubJSONParser.h | 20 + .../UAGithubEngine/UAGithubJSONParser.m | 53 + .../UAGithubEngine/UAGithubURLConnection.h | 29 + .../UAGithubEngine/UAGithubURLConnection.m | 64 + .../UAGithubEngine/UAReachability.h | 27 + .../UAGithubEngine/UAReachability.m | 59 + 59 files changed, 3937 insertions(+) create mode 100644 Gister.app/Contents/Info.plist create mode 100755 Gister.app/Contents/MacOS/Gister create mode 100644 Gister.app/Contents/PkgInfo create mode 100644 Gister.app/Contents/Resources/en.lproj/Credits.rtf create mode 100644 Gister.app/Contents/Resources/en.lproj/InfoPlist.strings create mode 100644 Gister.app/Contents/Resources/en.lproj/MainMenu.nib create mode 100644 Gister.app/Contents/Resources/octo.png create mode 100644 Gister.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 Gister.xcodeproj/project.xcworkspace/xcuserdata/paddy.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 Gister.xcodeproj/xcuserdata/paddy.xcuserdatad/xcschemes/Gister.xcscheme create mode 100644 Gister.xcodeproj/xcuserdata/paddy.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 Gister.xcworkspace/contents.xcworkspacedata create mode 100644 Gister.xcworkspace/xcuserdata/paddy.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 Gister.xcworkspace/xcuserdata/paddy.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist create mode 100644 Podfile create mode 100644 Podfile.lock create mode 120000 Pods/Headers/UAGithubEngine/NSArray+Utilities.h create mode 120000 Pods/Headers/UAGithubEngine/NSData+Base64.h create mode 120000 Pods/Headers/UAGithubEngine/NSInvocation+Blocks.h create mode 120000 Pods/Headers/UAGithubEngine/NSString+UAGithubEngineUtilities.h create mode 120000 Pods/Headers/UAGithubEngine/NSString+UUID.h create mode 120000 Pods/Headers/UAGithubEngine/UAGithubEngine.h create mode 120000 Pods/Headers/UAGithubEngine/UAGithubEngineConstants.h create mode 120000 Pods/Headers/UAGithubEngine/UAGithubEngineRequestTypes.h create mode 120000 Pods/Headers/UAGithubEngine/UAGithubJSONParser.h create mode 120000 Pods/Headers/UAGithubEngine/UAGithubURLConnection.h create mode 120000 Pods/Headers/UAGithubEngine/UAReachability.h create mode 100644 Pods/Pods-Acknowledgements.markdown create mode 100644 Pods/Pods-Acknowledgements.plist create mode 100644 Pods/Pods-prefix.pch create mode 100755 Pods/Pods-resources.sh create mode 100644 Pods/Pods.xcconfig create mode 100644 Pods/Pods.xcodeproj/project.pbxproj create mode 100644 Pods/Pods.xcodeproj/xcuserdata/paddy.xcuserdatad/xcschemes/Pods.xcscheme create mode 100644 Pods/Pods.xcodeproj/xcuserdata/paddy.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 Pods/PodsDummy_Pods.m create mode 100644 Pods/UAGithubEngine/License.rtf create mode 100644 Pods/UAGithubEngine/README.md create mode 100644 Pods/UAGithubEngine/UAGithubEngine/NSArray+Utilities.h create mode 100644 Pods/UAGithubEngine/UAGithubEngine/NSArray+Utilities.m create mode 100644 Pods/UAGithubEngine/UAGithubEngine/NSData+Base64.h create mode 100644 Pods/UAGithubEngine/UAGithubEngine/NSData+Base64.m create mode 100755 Pods/UAGithubEngine/UAGithubEngine/NSInvocation+Blocks.h create mode 100755 Pods/UAGithubEngine/UAGithubEngine/NSInvocation+Blocks.m create mode 100644 Pods/UAGithubEngine/UAGithubEngine/NSString+UAGithubEngineUtilities.h create mode 100644 Pods/UAGithubEngine/UAGithubEngine/NSString+UAGithubEngineUtilities.m create mode 100755 Pods/UAGithubEngine/UAGithubEngine/NSString+UUID.h create mode 100644 Pods/UAGithubEngine/UAGithubEngine/NSString+UUID.m create mode 100644 Pods/UAGithubEngine/UAGithubEngine/UAGithubEngine.h create mode 100644 Pods/UAGithubEngine/UAGithubEngine/UAGithubEngine.m create mode 100644 Pods/UAGithubEngine/UAGithubEngine/UAGithubEngineConstants.h create mode 100644 Pods/UAGithubEngine/UAGithubEngine/UAGithubEngineConstants.m create mode 100644 Pods/UAGithubEngine/UAGithubEngine/UAGithubEngineRequestTypes.h create mode 100644 Pods/UAGithubEngine/UAGithubEngine/UAGithubJSONParser.h create mode 100644 Pods/UAGithubEngine/UAGithubEngine/UAGithubJSONParser.m create mode 100644 Pods/UAGithubEngine/UAGithubEngine/UAGithubURLConnection.h create mode 100644 Pods/UAGithubEngine/UAGithubEngine/UAGithubURLConnection.m create mode 100644 Pods/UAGithubEngine/UAGithubEngine/UAReachability.h create mode 100644 Pods/UAGithubEngine/UAGithubEngine/UAReachability.m diff --git a/Gister.app/Contents/Info.plist b/Gister.app/Contents/Info.plist new file mode 100644 index 0000000..94d290c --- /dev/null +++ b/Gister.app/Contents/Info.plist @@ -0,0 +1,52 @@ + + + + + BuildMachineOSBuild + 11E53 + CFBundleDevelopmentRegion + en + CFBundleExecutable + Gister + CFBundleIconFile + octo + CFBundleIdentifier + com.500px.Gister + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + Gister + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + DTCompiler + com.apple.compilers.llvm.clang.1_0 + DTPlatformBuild + 4G78z + DTPlatformVersion + GM + DTSDKBuild + 12A237 + DTSDKName + macosx10.8 + DTXcode + 0450 + DTXcodeBuild + 4G78z + LSApplicationCategoryType + public.app-category.developer-tools + LSMinimumSystemVersion + 10.7 + NSHumanReadableCopyright + Copyright © 2012 __MyCompanyName__. All rights reserved. + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/Gister.app/Contents/MacOS/Gister b/Gister.app/Contents/MacOS/Gister new file mode 100755 index 0000000000000000000000000000000000000000..f1a3d0aa7a5f0423aae4d24bcf04f4ea84719ff1 GIT binary patch literal 181644 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 B@y-AM literal 0 HcmV?d00001 diff --git a/Gister.app/Contents/PkgInfo b/Gister.app/Contents/PkgInfo new file mode 100644 index 0000000..bd04210 --- /dev/null +++ b/Gister.app/Contents/PkgInfo @@ -0,0 +1 @@ +APPL???? \ No newline at end of file diff --git a/Gister.app/Contents/Resources/en.lproj/Credits.rtf b/Gister.app/Contents/Resources/en.lproj/Credits.rtf new file mode 100644 index 0000000..46576ef --- /dev/null +++ b/Gister.app/Contents/Resources/en.lproj/Credits.rtf @@ -0,0 +1,29 @@ +{\rtf0\ansi{\fonttbl\f0\fswiss Helvetica;} +{\colortbl;\red255\green255\blue255;} +\paperw9840\paperh8400 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural + +\f0\b\fs24 \cf0 Engineering: +\b0 \ + Some people\ +\ + +\b Human Interface Design: +\b0 \ + Some other people\ +\ + +\b Testing: +\b0 \ + Hopefully not nobody\ +\ + +\b Documentation: +\b0 \ + Whoever\ +\ + +\b With special thanks to: +\b0 \ + Mom\ +} diff --git a/Gister.app/Contents/Resources/en.lproj/InfoPlist.strings b/Gister.app/Contents/Resources/en.lproj/InfoPlist.strings new file mode 100644 index 0000000000000000000000000000000000000000..5e45963c382ba690b781b953a00585212b898ac5 GIT binary patch literal 92 zcmW-XQ3`+{5C!MkQ~2$No+IcIkqMDxWCV8j>LCj|yTg2Mz+o9F%uHlf9u}h9EuK`F a!Y*1dX%G66ZqL#C$|bw0ZoP5@jOGW1ArT7z literal 0 HcmV?d00001 diff --git a/Gister.app/Contents/Resources/en.lproj/MainMenu.nib b/Gister.app/Contents/Resources/en.lproj/MainMenu.nib new file mode 100644 index 0000000000000000000000000000000000000000..f3cfe8ce87435b0dde66edc8988f49c6d0be4e92 GIT binary patch literal 26656 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 pUU^Uo!LmB*Et2%|G)t|3A?4Bz*t? literal 0 HcmV?d00001 diff --git a/Gister.app/Contents/Resources/octo.png b/Gister.app/Contents/Resources/octo.png new file mode 100644 index 0000000000000000000000000000000000000000..14ad3428cfea22e6a906825364efe94bfed285cf GIT binary patch literal 22984 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 literal 0 HcmV?d00001 diff --git a/Gister.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Gister.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..cb325f2 --- /dev/null +++ b/Gister.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Gister.xcodeproj/project.xcworkspace/xcuserdata/paddy.xcuserdatad/UserInterfaceState.xcuserstate b/Gister.xcodeproj/project.xcworkspace/xcuserdata/paddy.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..f11c8a0aadfbc247fab12fff5ca7c188a24000ea GIT binary patch literal 8076 zcmb_hd3+Pq_P_TwNoSg*nM^X1Nk!}eLZvG$P(Y=nEmCPqAB9p%A*RjH20~J@Kr8Y% zxS+TpvI(frg0d)x3m}UuBI1gOxIGn7c|JED&!5kyPetFIOp`Rc`uq9EkA6rd_nv#s zx%Zs&J?GqMYV)`Q!MwcF2qS_LkOpayj(knNsqZ&e_6OWPZ+$;s(@eQJ7?{$}>2Gdz z)8UEzg1$B$;l&%C;7+4N#2^c@A^~NhtI!~ng|bl&%0+o79}PxB(bec0^d~d{)uM@L z5~@R!Q9YW18qieKh?-C{YDH~m4)UV_3Zi*vAp&#@T8!>ROVNF(3vEQ3&?D$kv>9zd zThTVO6FrIcpl8uubO;?oucH&_G?H{&gM2Yw3g!n^SvydNLOFX5N*EBICXCVmH>!5`zl;V4)K!!nNMya3&?V^f~+K~$ZGNcSwq&6b>u*3#yW7^# zzY8TJ6A(z~LT1E+26j2Pex*ap^Gi$fin0gi7vyIb=9Ly^7Y!bqmz_U4ue_+Vq_C{0 zbeMy)R+N=b_W5T8+MLaDnXfrCTlNMcf<?+SOi3;SZn`4H?REL)jqy8Y%MLD$4vhD^WWVf+ zN}uR#D)o7TexJufz1hLpql+rMW9V@Nn*Flut@63(`mCO6tDIwNCwbj-LUM(R?!-OA zE&CnZwLQt>-H)L?3gS&z< zC}|GTfa+b{p4v|I`8-Wde?_3q9dI{!sJ2pcCsg+6xGCHG`Pq3{sf7!&Qs)mIGL$~% z7v>i(Sa6EkUXKb;A(%Q*A7D?RVWT{}Ju z0!++|qtIBzjK!z~jYg%Y43(oX=sMuR0#*<}1RF?T--0Tr@y4M_RE4VPQw^k0=0g4!B#qy>L(zQu({( zz%;6Ys+Fr#mh8E`KOvZgyuF@*Os}d^ZC3^KecfPjf{!uKsQ|?=Fe2jfQ({aY7Zuh(9P4U zYpX&*C-uj$t87Gz6lYOo+=^~nO$fJx)TOLRu{Sx-2+*W zO^>Hm_Rz#5yP{TeaH;jmx#rMwALkC{L??1;gZ@x+Fyxmb+Yr(HXf0%JM$6F(v=XgC ztI-2!4dg&B#<15q*L_MV~<_l*4tA1qSpv`ZCV%%h1;p#>z5^+ls?}AEUg0 z{wI#|I`mJl!eNBIl72xFl_MWZN=DCqHDVnj@^o%2bE9-)i54v;7>4N3pQXQh1LqpVKe4Y2GoK~p*028z~itTxCT!cP*pDwsne*C z70!Cp|GX}z-=!d#0&VJ4Lk|khLZ`~)8P1R=SSB}xT2$yv?H;O8szi!--rxiZcXEI} zI2Bl-$<`buZ;|~`jHBCDgha*_PN(tZxG!Sy6*v{A;dGoqQ(K$gJ)6Rks)Uk*<@R88 zI7i!BWUo6E=w*iY`+Pw)b0`~C$YCNNaDnq3+#g?w2jGEJOeVexO~DyB3uogr3Ma1a z@}wkO+A2XDzm2IrzdN#}x;CeuK2L2{H1Y-~cC^X$v>^7l=qOAACx@XK(Azi<=i|Xt zRsk-=L-0^M4AWrZB5_>lYYrdK^cZBoA_< zGF1p)^g1M6d)Dv^toGw>K zZVk=5O3RX~0#o-_EGOrxd#c3~Dau82l)9gdxE4ZiJfA+zjfhh3cEi{AMe{~)VG!Y*|>?G9-{8p6fw4}7&{dv zs!FwDw}Tr%m5O>tT=f$lM_qWPqSGHGS0#AxYzLR|2PAZ1ufqM0kVXJl#B*?fVmtQ3 zj7}Vc76;c~g@o?X@%KO}#-JVFs4(b&)=oSh+!L#4s6=KBcp<(8`ftR57vY;>Cd>lQ zMtmy;*u^lL!s==Vml-EcN#b%Xtx~-$;m2sPLrX*lC&bfs*EE-oUnl!!%Rzrf#9ntR z_PPh6N{RSB`~a|<7{j5$ZA~XD8(`j+Mf8i6>kgU=XSUW+QV=+KXN`hmGgNLl=BLM z*E7%nH+Cad?^{@_pWxl1TNr-Dohdyqm-rH(jDBeu+W@1 z(Y2wrHlIJ3qi!OiNIVVYNDRbCl5rJIn@V$`U-r;Cf?gib=O$-BhE*^P)CQ06#4@S6 zmWEjuv7(XcWB2(J8$Ev_!2`7M?$HqB6)M*R1qDU1jzA=RNIGObLM|tL$rU7(q`_KP z2M@wS@bDufgY+Z)>E{4g4;!G1er}?iz*r{Ap|SN= z7Opl#itLz(Ysjcbh>&7{N!k6Y70ZiJ`d8MPJcS+!>rHy(~#E0Tp| z31n_1Ko*gk$t~noavNDpZYOuZZrB6Q!d}=1`{4jQ2M4#J400E$Aoq}a$x?Ek(tOi~ z`w-2nufQ8{3f@v0aN0PJrtQJ3HlN!Y4218=Xp*HJc1m~Sp>86arUGMpe(LNLA#JLX zG!d&8c%$W3nwEX^y3VRzwM__l>D5lq?G4x9jp|@+bE~Y}Aethfr!J=aB((>R56o^+ zC2ehCN3ZZ!xxMbFU@9u^cejlrh7rlbWCOJ#ei&ACl1?}ro7hAiRs8l5IMPWr!%;e+ zMm*Vu(`a-*uS9pa7$!UZA4=eu+$YIy$m}fZ_9K}^|oMQP)Q7j*_DJJ(N@@h{kC$CW~e;MxURZeWxo8&ZIMNW~o;8l37i@Z(V zf!E;#Emgv3GS^MBa(9bGYpm#4xZDZS`hwmO(YqYi+@Oo5-c&kfr5;kdglKkAu2@~6;Wgz4ac1hM*B>6#j}P#*0Kly}(A_8uXFz#6iRz6;nvc9N&aGh{b4;6Cy)IiJ8L z6eV;dtV`IFa4O-Ogzpo6Ncbt?7mZfKY3!Ob&6S#5O`hf&%_vQcW`bs-rcP6@Y0xxk zrfY7{%+UliAYUgS@ zwDYw~wGU|5YS(K!wHviNwNGjHX!mOOYY%Im*S?@VrTwe+bL|D~k21s}pZXoR_#NabMz>3}%uUj{W!_4c<8_Y@OP38=9midhNEAs{O74seQJ@X6mD@y~HHL+$^WF#irvL4pU2G|fgkG+#!&Te44*r(ZD>>hS6 zyPtiIJ;WYikFuxPci8vXzpx*&XV|msr|dcQLK2fCCZ#0}OKM2+CM`<3KWTf?@uUxv z&Lo{p`ZVcW(nWo$K1*MqAEh6wzg}Oduh!S-C+J)BH|m$@AJjjq-={yIKd3*fe_sDj z{YCw624c_{j0VY&V(4SYFk~6V8EOnZL%ZQN!&1XK!$XGkhEBsa!!w56h98W`$Q$j( zbmJgniE)gv(I^}5Gp;lqHokBC!1$5zW8){ruZ-UqFBrcy{*>G=IWxI7xiR_XkbEflNb(EGFDCyz`RC+|CS)QettruDFxgF)nbJ-DOjnu)nsQC~rUKItlhf2; zT4q{ndeF4q)M?sb+G#puI$}C%I%Ya2=eGrZc9qrcX`hOrM*+FnwkEf#bQp z++ePn^Kk9l{oH15EB6?;oqK|NlH11};0|#|xL3H>xD(vl+!^j`?mTya`1#5`E&CZ=C94?&Hpn0XufFvjmLa4&+!6p zE5AY$roxhR4i(kpF=GXA+_=osM`KS3^ z{678we~>@QALEbnC-}GdulR5IpDZbsG)swPvc+YYVQI0nT6~tRmfe=;Ew5N!vz)M; zw7hTm*mBPDmE}9j_m&?mKUpo-RBO65+nQ_5w-#83Sch3hTg$9ttYfX$TPv;8t*zEJ z>wN19Yo~Ri^-=2<>tojK)>o|WTHm*RXgy>7#QK@_2SFp~1Xj=s$pRBtkuXBIS||}pg>s=*XcXMSETK*C3qhenm@h04mI(I?>xE9COV}vv6rK`x344Tn z!U5r!a9nszI3b)AJ`z3_&Iz9jUkK-g3&OX;&!R>&ixyE5Q^Y=EnwTN>7l(<(VwE^v zY!Y4K46#+5DSAY&*e3eLpm@8uM7&G9M_ei{6PJrC#ns{(ai{pY_&4!ao8ET0t;jaP z=C;kXwcF;~7TCacvu&wunQet_m2Hh}oo$P4o9%Ji4%;5vUfWMnqQpwPWR*lol2W7$ zslPNp%9I94#ZrYdPO6q_B&XCY$x@5tmi*E}X_2&8x}mEKd!D_(KEz&RA7LMBA8)U>H`u4y9rjlHO#5uR&%VgM*nW4o RU_yj+e_v3)BcJwr{{v2@*J%I% literal 0 HcmV?d00001 diff --git a/Gister.xcodeproj/xcuserdata/paddy.xcuserdatad/xcschemes/Gister.xcscheme b/Gister.xcodeproj/xcuserdata/paddy.xcuserdatad/xcschemes/Gister.xcscheme new file mode 100644 index 0000000..87f6304 --- /dev/null +++ b/Gister.xcodeproj/xcuserdata/paddy.xcuserdatad/xcschemes/Gister.xcscheme @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Gister.xcodeproj/xcuserdata/paddy.xcuserdatad/xcschemes/xcschememanagement.plist b/Gister.xcodeproj/xcuserdata/paddy.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..2ab3763 --- /dev/null +++ b/Gister.xcodeproj/xcuserdata/paddy.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + Gister.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 03F1C12A15B99B94000EE7EB + + primary + + + + + diff --git a/Gister.xcworkspace/contents.xcworkspacedata b/Gister.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..bf601ef --- /dev/null +++ b/Gister.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/Gister.xcworkspace/xcuserdata/paddy.xcuserdatad/UserInterfaceState.xcuserstate b/Gister.xcworkspace/xcuserdata/paddy.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..efba7a682f98ee4a6caa46a239311a9fc836df5a GIT binary patch literal 55237 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 vbjEhZVa933e|C=^L|C|4R&XoTjHNFdt literal 0 HcmV?d00001 diff --git a/Gister.xcworkspace/xcuserdata/paddy.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist b/Gister.xcworkspace/xcuserdata/paddy.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist new file mode 100644 index 0000000..781902b --- /dev/null +++ b/Gister.xcworkspace/xcuserdata/paddy.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist @@ -0,0 +1,42 @@ + + + + + + + + + + + + + diff --git a/Podfile b/Podfile new file mode 100644 index 0000000..213715e --- /dev/null +++ b/Podfile @@ -0,0 +1,2 @@ +platform :osx +dependency 'UAGithubEngine', '~>2.3' \ No newline at end of file diff --git a/Podfile.lock b/Podfile.lock new file mode 100644 index 0000000..05e128c --- /dev/null +++ b/Podfile.lock @@ -0,0 +1,5 @@ +PODS: + - UAGithubEngine (2.3) + +DEPENDENCIES: + - UAGithubEngine (~> 2.3) diff --git a/Pods/Headers/UAGithubEngine/NSArray+Utilities.h b/Pods/Headers/UAGithubEngine/NSArray+Utilities.h new file mode 120000 index 0000000..f52f45d --- /dev/null +++ b/Pods/Headers/UAGithubEngine/NSArray+Utilities.h @@ -0,0 +1 @@ +../../UAGithubEngine/UAGithubEngine/NSArray+Utilities.h \ No newline at end of file diff --git a/Pods/Headers/UAGithubEngine/NSData+Base64.h b/Pods/Headers/UAGithubEngine/NSData+Base64.h new file mode 120000 index 0000000..11b6582 --- /dev/null +++ b/Pods/Headers/UAGithubEngine/NSData+Base64.h @@ -0,0 +1 @@ +../../UAGithubEngine/UAGithubEngine/NSData+Base64.h \ No newline at end of file diff --git a/Pods/Headers/UAGithubEngine/NSInvocation+Blocks.h b/Pods/Headers/UAGithubEngine/NSInvocation+Blocks.h new file mode 120000 index 0000000..f2b7b0f --- /dev/null +++ b/Pods/Headers/UAGithubEngine/NSInvocation+Blocks.h @@ -0,0 +1 @@ +../../UAGithubEngine/UAGithubEngine/NSInvocation+Blocks.h \ No newline at end of file diff --git a/Pods/Headers/UAGithubEngine/NSString+UAGithubEngineUtilities.h b/Pods/Headers/UAGithubEngine/NSString+UAGithubEngineUtilities.h new file mode 120000 index 0000000..35047c7 --- /dev/null +++ b/Pods/Headers/UAGithubEngine/NSString+UAGithubEngineUtilities.h @@ -0,0 +1 @@ +../../UAGithubEngine/UAGithubEngine/NSString+UAGithubEngineUtilities.h \ No newline at end of file diff --git a/Pods/Headers/UAGithubEngine/NSString+UUID.h b/Pods/Headers/UAGithubEngine/NSString+UUID.h new file mode 120000 index 0000000..7caa7be --- /dev/null +++ b/Pods/Headers/UAGithubEngine/NSString+UUID.h @@ -0,0 +1 @@ +../../UAGithubEngine/UAGithubEngine/NSString+UUID.h \ No newline at end of file diff --git a/Pods/Headers/UAGithubEngine/UAGithubEngine.h b/Pods/Headers/UAGithubEngine/UAGithubEngine.h new file mode 120000 index 0000000..2fd6245 --- /dev/null +++ b/Pods/Headers/UAGithubEngine/UAGithubEngine.h @@ -0,0 +1 @@ +../../UAGithubEngine/UAGithubEngine/UAGithubEngine.h \ No newline at end of file diff --git a/Pods/Headers/UAGithubEngine/UAGithubEngineConstants.h b/Pods/Headers/UAGithubEngine/UAGithubEngineConstants.h new file mode 120000 index 0000000..b2657c8 --- /dev/null +++ b/Pods/Headers/UAGithubEngine/UAGithubEngineConstants.h @@ -0,0 +1 @@ +../../UAGithubEngine/UAGithubEngine/UAGithubEngineConstants.h \ No newline at end of file diff --git a/Pods/Headers/UAGithubEngine/UAGithubEngineRequestTypes.h b/Pods/Headers/UAGithubEngine/UAGithubEngineRequestTypes.h new file mode 120000 index 0000000..beb4fde --- /dev/null +++ b/Pods/Headers/UAGithubEngine/UAGithubEngineRequestTypes.h @@ -0,0 +1 @@ +../../UAGithubEngine/UAGithubEngine/UAGithubEngineRequestTypes.h \ No newline at end of file diff --git a/Pods/Headers/UAGithubEngine/UAGithubJSONParser.h b/Pods/Headers/UAGithubEngine/UAGithubJSONParser.h new file mode 120000 index 0000000..f0ca177 --- /dev/null +++ b/Pods/Headers/UAGithubEngine/UAGithubJSONParser.h @@ -0,0 +1 @@ +../../UAGithubEngine/UAGithubEngine/UAGithubJSONParser.h \ No newline at end of file diff --git a/Pods/Headers/UAGithubEngine/UAGithubURLConnection.h b/Pods/Headers/UAGithubEngine/UAGithubURLConnection.h new file mode 120000 index 0000000..dcc8e74 --- /dev/null +++ b/Pods/Headers/UAGithubEngine/UAGithubURLConnection.h @@ -0,0 +1 @@ +../../UAGithubEngine/UAGithubEngine/UAGithubURLConnection.h \ No newline at end of file diff --git a/Pods/Headers/UAGithubEngine/UAReachability.h b/Pods/Headers/UAGithubEngine/UAReachability.h new file mode 120000 index 0000000..2ff875a --- /dev/null +++ b/Pods/Headers/UAGithubEngine/UAReachability.h @@ -0,0 +1 @@ +../../UAGithubEngine/UAGithubEngine/UAReachability.h \ No newline at end of file diff --git a/Pods/Pods-Acknowledgements.markdown b/Pods/Pods-Acknowledgements.markdown new file mode 100644 index 0000000..e8875ff --- /dev/null +++ b/Pods/Pods-Acknowledgements.markdown @@ -0,0 +1,35 @@ +# Acknowledgements +This application makes use of the following third party libraries: + +## UAGithubEngine + +{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf320 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\paperw11905\paperh16837\margl1440\margr1440\vieww20460\viewh13960\viewkind0 +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural + +\f0\b\fs24 \cf0 UAGithubEngine License +\b0 \ +Copyright (c) 2010, Owain R Hunt. All rights reserved.\ +\ + +\b The Short Version\ + +\b0 Use the code however you like, pass it around, change it, tweak it, build on it, release it, just make sure you include the line +\b Includes UAGithubEngine by Owain R Hunt +\b0 , preferably in your app's About box or equivalent.\ +\ + +\b The Full Legalese +\b0 \ +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\ + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\ + * Redistributions in binary form must include the following notice, preferably in the software's About box or suitable equivalent:\ + +\b Includes UAGithubEngine by Owain R Hunt +\b0 \ + * Neither the name Owain R Hunt nor the names of contributors to the code may be used to endorse or promote products derived from this software without specific prior written permission.\ +\ +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL OWAIN R HUNT BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.} +Generated by CocoaPods - http://cocoapods.org diff --git a/Pods/Pods-Acknowledgements.plist b/Pods/Pods-Acknowledgements.plist new file mode 100644 index 0000000..d85b1be --- /dev/null +++ b/Pods/Pods-Acknowledgements.plist @@ -0,0 +1,65 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + {\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf320 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\paperw11905\paperh16837\margl1440\margr1440\vieww20460\viewh13960\viewkind0 +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural + +\f0\b\fs24 \cf0 UAGithubEngine License +\b0 \ +Copyright (c) 2010, Owain R Hunt. All rights reserved.\ +\ + +\b The Short Version\ + +\b0 Use the code however you like, pass it around, change it, tweak it, build on it, release it, just make sure you include the line +\b Includes UAGithubEngine by Owain R Hunt +\b0 , preferably in your app's About box or equivalent.\ +\ + +\b The Full Legalese +\b0 \ +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\ + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\ + * Redistributions in binary form must include the following notice, preferably in the software's About box or suitable equivalent:\ + +\b Includes UAGithubEngine by Owain R Hunt +\b0 \ + * Neither the name Owain R Hunt nor the names of contributors to the code may be used to endorse or promote products derived from this software without specific prior written permission.\ +\ +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL OWAIN R HUNT BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.} + Title + UAGithubEngine + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - http://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/Pods/Pods-prefix.pch b/Pods/Pods-prefix.pch new file mode 100644 index 0000000..00e8847 --- /dev/null +++ b/Pods/Pods-prefix.pch @@ -0,0 +1,3 @@ +#ifdef __OBJC__ +#import +#endif diff --git a/Pods/Pods-resources.sh b/Pods/Pods-resources.sh new file mode 100755 index 0000000..70fc22f --- /dev/null +++ b/Pods/Pods-resources.sh @@ -0,0 +1,19 @@ +#!/bin/sh + +install_resource() +{ + case $1 in + *.storyboard) + echo "ibtool --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename $1 .storyboard`.storyboardc ${PODS_ROOT}/$1 --sdk ${SDKROOT}" + ibtool --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename $1 .storyboard`.storyboardc" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" + ;; + *.xib) + echo "ibtool --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename $1 .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}" + ibtool --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename $1 .xib`.nib" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" + ;; + *) + echo "cp -R ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + cp -R "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + ;; + esac +} diff --git a/Pods/Pods.xcconfig b/Pods/Pods.xcconfig new file mode 100644 index 0000000..4679f56 --- /dev/null +++ b/Pods/Pods.xcconfig @@ -0,0 +1,4 @@ +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/UAGithubEngine" +ALWAYS_SEARCH_USER_PATHS = YES +PODS_ROOT = ${SRCROOT}/Pods +OTHER_LDFLAGS = -ObjC -framework SystemConfiguration \ No newline at end of file diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj new file mode 100644 index 0000000..496284b --- /dev/null +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -0,0 +1,423 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 019C96CDCCBB4B8583F6F866 /* UAGithubEngine.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = A37DB50F5D49458D9192DF15 /* UAGithubEngine.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0C8FFFEDE9CE420DB1D3821B /* NSData+Base64.m in Sources */ = {isa = PBXBuildFile; fileRef = BD3D6FDD95D749FA92459CFA /* NSData+Base64.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; + 0D5B06A6BD794C499AD12B8D /* NSString+UAGithubEngineUtilities.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 93888C7EAA5349DBBBC3B412 /* NSString+UAGithubEngineUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1341A250DCD04253A2C43589 /* UAGithubEngineConstants.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 408677757E0F4B489A7F11FD /* UAGithubEngineConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 20AE748AD18745CFA61560C8 /* NSString+UAGithubEngineUtilities.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 93888C7EAA5349DBBBC3B412 /* NSString+UAGithubEngineUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 27A0B7D11D9B4A9F9AD8D2DD /* UAGithubEngineRequestTypes.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 07C4CF7B718D45AA8AD0A5F2 /* UAGithubEngineRequestTypes.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2874080EE86444A8945C4A96 /* UAReachability.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 25429A09DAEC4E03A300EECC /* UAReachability.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2CEEA3D0FF4142949B115287 /* NSArray+Utilities.m in Sources */ = {isa = PBXBuildFile; fileRef = D7E37CD5D47048E08D07E407 /* NSArray+Utilities.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; + 2F5B497D538D46C79398E0B1 /* UAGithubJSONParser.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = D8DDE8EAD83E4000BD99E0C8 /* UAGithubJSONParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 30E736BA36B74BD7B3023DA9 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2710F48DEC214BFF969114A4 /* Cocoa.framework */; }; + 35B2E64385CE4690AC671F17 /* UAGithubEngine.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = A37DB50F5D49458D9192DF15 /* UAGithubEngine.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3AE879A01C3C48FAA6F5C0C9 /* NSInvocation+Blocks.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 94DDB5DDEE4E49C690089682 /* NSInvocation+Blocks.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4655D0C711F1486EA5D0D5BC /* NSInvocation+Blocks.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 94DDB5DDEE4E49C690089682 /* NSInvocation+Blocks.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 49C08FDDC519497384363463 /* UAGithubEngineConstants.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 408677757E0F4B489A7F11FD /* UAGithubEngineConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 553FF891FE6346B0B23AA673 /* UAGithubURLConnection.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = FB090980108C47A99AE653D2 /* UAGithubURLConnection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5BA6C5077249470BBAEB26BE /* NSString+UUID.m in Sources */ = {isa = PBXBuildFile; fileRef = BC46420EE0614C629630C574 /* NSString+UUID.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; + 5F60AEAE9F2049EF9C87F41B /* NSString+UAGithubEngineUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = E433288BC4F74C77B874C864 /* NSString+UAGithubEngineUtilities.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; + 6906C50CE1D6493E9D58D48C /* UAGithubJSONParser.m in Sources */ = {isa = PBXBuildFile; fileRef = A846831E12B04473AB71EE26 /* UAGithubJSONParser.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; + 6CA90BC8086C407993733AB3 /* UAReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 194BC9AC46F140898A43A28D /* UAReachability.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; + 73C671FCE9A341919C2D06A6 /* UAReachability.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 25429A09DAEC4E03A300EECC /* UAReachability.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 864437B5DE2740AE9BC25304 /* NSString+UUID.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8C1CA348FD0A405C8BDF6346 /* NSString+UUID.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8DCB89F30DE84A3D80127450 /* NSArray+Utilities.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = E0E2308B08854A4B971DA07C /* NSArray+Utilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9176C34DFBE94873AEECDEDE /* NSString+UUID.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8C1CA348FD0A405C8BDF6346 /* NSString+UUID.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9450BDFE7C1446C1BE7829D0 /* NSInvocation+Blocks.m in Sources */ = {isa = PBXBuildFile; fileRef = 79F4D8577E2A4B7CADB943EF /* NSInvocation+Blocks.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; + 9D1C8BEA21284BC6AF94D437 /* UAGithubEngineConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = C5DBAE78A68041DE984A49B9 /* UAGithubEngineConstants.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; + 9E8F1EB1D17F431FA8DF4EB9 /* NSArray+Utilities.m in Sources */ = {isa = PBXBuildFile; fileRef = D7E37CD5D47048E08D07E407 /* NSArray+Utilities.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; + A10B187EF47C4E98A1CF324E /* UAReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 194BC9AC46F140898A43A28D /* UAReachability.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; + A21C674C173C4282BA1105FB /* NSString+UUID.m in Sources */ = {isa = PBXBuildFile; fileRef = BC46420EE0614C629630C574 /* NSString+UUID.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; + A39DCB3094D4483F8CE1DDE4 /* NSData+Base64.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4DBD6F3FDF544074B111519C /* NSData+Base64.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A7ADBDC15D454F49A766F555 /* UAGithubEngineRequestTypes.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 07C4CF7B718D45AA8AD0A5F2 /* UAGithubEngineRequestTypes.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AD598EE8DA0B4FED9220B1E2 /* NSArray+Utilities.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = E0E2308B08854A4B971DA07C /* NSArray+Utilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B87E88E23DC44F6AA5CEB509 /* UAGithubEngineConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = C5DBAE78A68041DE984A49B9 /* UAGithubEngineConstants.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; + C29B56AD710E4FD1AC3D6273 /* UAGithubURLConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DB8AEFB256F433E910D9FD1 /* UAGithubURLConnection.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; + D98A0E54DD3B48EFB7D64F3B /* UAGithubJSONParser.m in Sources */ = {isa = PBXBuildFile; fileRef = A846831E12B04473AB71EE26 /* UAGithubJSONParser.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; + DD139A967479488393EC7E04 /* UAGithubURLConnection.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = FB090980108C47A99AE653D2 /* UAGithubURLConnection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DD5F648E49BA4F3E80A0E3BC /* UAGithubJSONParser.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = D8DDE8EAD83E4000BD99E0C8 /* UAGithubJSONParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E8CCD4967CA54F25A10C2D78 /* NSData+Base64.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4DBD6F3FDF544074B111519C /* NSData+Base64.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EC41C2A016BE4C1CA02C4577 /* UAGithubEngine.m in Sources */ = {isa = PBXBuildFile; fileRef = B92A60E16ADC4E4788D6FF87 /* UAGithubEngine.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; + EEFCC88ECE874BC9A601D444 /* UAGithubURLConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DB8AEFB256F433E910D9FD1 /* UAGithubURLConnection.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; + F75632447DD44C909E0566F2 /* UAGithubEngine.m in Sources */ = {isa = PBXBuildFile; fileRef = B92A60E16ADC4E4788D6FF87 /* UAGithubEngine.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; + F75BA592CC13441D80A037A1 /* NSInvocation+Blocks.m in Sources */ = {isa = PBXBuildFile; fileRef = 79F4D8577E2A4B7CADB943EF /* NSInvocation+Blocks.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; + F99CA5D298A6411A9D7B052C /* PodsDummy_Pods.m in Sources */ = {isa = PBXBuildFile; fileRef = 8ACA79ED1242464C93F00EAF /* PodsDummy_Pods.m */; }; + FBE8B52D3DE442538BD7DEA4 /* NSString+UAGithubEngineUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = E433288BC4F74C77B874C864 /* NSString+UAGithubEngineUtilities.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; + FE0863CE164243949811FDF7 /* NSData+Base64.m in Sources */ = {isa = PBXBuildFile; fileRef = BD3D6FDD95D749FA92459CFA /* NSData+Base64.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 5BC2FE66D56A4D17A3B2160E /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "$(PRODUCT_NAME)"; + dstSubfolderSpec = 16; + files = ( + 8DCB89F30DE84A3D80127450 /* NSArray+Utilities.h in CopyFiles */, + E8CCD4967CA54F25A10C2D78 /* NSData+Base64.h in CopyFiles */, + 3AE879A01C3C48FAA6F5C0C9 /* NSInvocation+Blocks.h in CopyFiles */, + 20AE748AD18745CFA61560C8 /* NSString+UAGithubEngineUtilities.h in CopyFiles */, + 9176C34DFBE94873AEECDEDE /* NSString+UUID.h in CopyFiles */, + 019C96CDCCBB4B8583F6F866 /* UAGithubEngine.h in CopyFiles */, + 49C08FDDC519497384363463 /* UAGithubEngineConstants.h in CopyFiles */, + A7ADBDC15D454F49A766F555 /* UAGithubEngineRequestTypes.h in CopyFiles */, + DD5F648E49BA4F3E80A0E3BC /* UAGithubJSONParser.h in CopyFiles */, + DD139A967479488393EC7E04 /* UAGithubURLConnection.h in CopyFiles */, + 2874080EE86444A8945C4A96 /* UAReachability.h in CopyFiles */, + AD598EE8DA0B4FED9220B1E2 /* NSArray+Utilities.h in CopyFiles */, + A39DCB3094D4483F8CE1DDE4 /* NSData+Base64.h in CopyFiles */, + 4655D0C711F1486EA5D0D5BC /* NSInvocation+Blocks.h in CopyFiles */, + 0D5B06A6BD794C499AD12B8D /* NSString+UAGithubEngineUtilities.h in CopyFiles */, + 864437B5DE2740AE9BC25304 /* NSString+UUID.h in CopyFiles */, + 35B2E64385CE4690AC671F17 /* UAGithubEngine.h in CopyFiles */, + 1341A250DCD04253A2C43589 /* UAGithubEngineConstants.h in CopyFiles */, + 27A0B7D11D9B4A9F9AD8D2DD /* UAGithubEngineRequestTypes.h in CopyFiles */, + 2F5B497D538D46C79398E0B1 /* UAGithubJSONParser.h in CopyFiles */, + 553FF891FE6346B0B23AA673 /* UAGithubURLConnection.h in CopyFiles */, + 73C671FCE9A341919C2D06A6 /* UAReachability.h in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 07C4CF7B718D45AA8AD0A5F2 /* UAGithubEngineRequestTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UAGithubEngineRequestTypes.h; path = UAGithubEngine/UAGithubEngine/UAGithubEngineRequestTypes.h; sourceTree = SOURCE_ROOT; }; + 0D07A696F0D6411BA1E69687 /* NSString+UUID.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+UUID.m"; path = "UAGithubEngine/UAGithubEngine/NSString+UUID.m"; sourceTree = SOURCE_ROOT; }; + 194BC9AC46F140898A43A28D /* UAReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UAReachability.m; path = UAGithubEngine/UAGithubEngine/UAReachability.m; sourceTree = SOURCE_ROOT; }; + 200A871011754C7BA101358F /* NSArray+Utilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+Utilities.h"; path = "UAGithubEngine/UAGithubEngine/NSArray+Utilities.h"; sourceTree = SOURCE_ROOT; }; + 25429A09DAEC4E03A300EECC /* UAReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UAReachability.h; path = UAGithubEngine/UAGithubEngine/UAReachability.h; sourceTree = SOURCE_ROOT; }; + 2710F48DEC214BFF969114A4 /* Cocoa.framework */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; + 31BA4CA42EA346EFA9DC92CC /* UAReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UAReachability.h; path = UAGithubEngine/UAGithubEngine/UAReachability.h; sourceTree = SOURCE_ROOT; }; + 3A3ED5974EC64035A948B119 /* Pods.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.xcconfig; sourceTree = SOURCE_ROOT; }; + 3EE3AC25BAD74A24AEEB6332 /* NSInvocation+Blocks.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSInvocation+Blocks.h"; path = "UAGithubEngine/UAGithubEngine/NSInvocation+Blocks.h"; sourceTree = SOURCE_ROOT; }; + 408677757E0F4B489A7F11FD /* UAGithubEngineConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UAGithubEngineConstants.h; path = UAGithubEngine/UAGithubEngine/UAGithubEngineConstants.h; sourceTree = SOURCE_ROOT; }; + 4DB8AEFB256F433E910D9FD1 /* UAGithubURLConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UAGithubURLConnection.m; path = UAGithubEngine/UAGithubEngine/UAGithubURLConnection.m; sourceTree = SOURCE_ROOT; }; + 4DBD6F3FDF544074B111519C /* NSData+Base64.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+Base64.h"; path = "UAGithubEngine/UAGithubEngine/NSData+Base64.h"; sourceTree = SOURCE_ROOT; }; + 5104486EC9074ECA86472F40 /* UAGithubURLConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UAGithubURLConnection.m; path = UAGithubEngine/UAGithubEngine/UAGithubURLConnection.m; sourceTree = SOURCE_ROOT; }; + 63F2821A24384CB5B1624CBD /* UAGithubEngineConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UAGithubEngineConstants.h; path = UAGithubEngine/UAGithubEngine/UAGithubEngineConstants.h; sourceTree = SOURCE_ROOT; }; + 64E35A0E75DD4BC68B99064D /* NSString+UAGithubEngineUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+UAGithubEngineUtilities.h"; path = "UAGithubEngine/UAGithubEngine/NSString+UAGithubEngineUtilities.h"; sourceTree = SOURCE_ROOT; }; + 6769465C6D2940BCA361E449 /* UAGithubURLConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UAGithubURLConnection.h; path = UAGithubEngine/UAGithubEngine/UAGithubURLConnection.h; sourceTree = SOURCE_ROOT; }; + 693BD19947AF497393D3D079 /* Pods-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-prefix.pch"; sourceTree = SOURCE_ROOT; }; + 6DAE02C5FCA54799B04EB0A1 /* UAReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UAReachability.m; path = UAGithubEngine/UAGithubEngine/UAReachability.m; sourceTree = SOURCE_ROOT; }; + 79F4D8577E2A4B7CADB943EF /* NSInvocation+Blocks.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSInvocation+Blocks.m"; path = "UAGithubEngine/UAGithubEngine/NSInvocation+Blocks.m"; sourceTree = SOURCE_ROOT; }; + 8ACA79ED1242464C93F00EAF /* PodsDummy_Pods.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = PodsDummy_Pods.m; sourceTree = SOURCE_ROOT; }; + 8C1CA348FD0A405C8BDF6346 /* NSString+UUID.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+UUID.h"; path = "UAGithubEngine/UAGithubEngine/NSString+UUID.h"; sourceTree = SOURCE_ROOT; }; + 8DC2FD42D9374D1496BAA96F /* UAGithubEngineConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UAGithubEngineConstants.m; path = UAGithubEngine/UAGithubEngine/UAGithubEngineConstants.m; sourceTree = SOURCE_ROOT; }; + 923876F672024443B7C766CE /* NSString+UAGithubEngineUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+UAGithubEngineUtilities.m"; path = "UAGithubEngine/UAGithubEngine/NSString+UAGithubEngineUtilities.m"; sourceTree = SOURCE_ROOT; }; + 93888C7EAA5349DBBBC3B412 /* NSString+UAGithubEngineUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+UAGithubEngineUtilities.h"; path = "UAGithubEngine/UAGithubEngine/NSString+UAGithubEngineUtilities.h"; sourceTree = SOURCE_ROOT; }; + 94DDB5DDEE4E49C690089682 /* NSInvocation+Blocks.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSInvocation+Blocks.h"; path = "UAGithubEngine/UAGithubEngine/NSInvocation+Blocks.h"; sourceTree = SOURCE_ROOT; }; + 9C9F2AE2D42D4542895DC992 /* NSArray+Utilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+Utilities.m"; path = "UAGithubEngine/UAGithubEngine/NSArray+Utilities.m"; sourceTree = SOURCE_ROOT; }; + A0141FE6DDF841ED8127465A /* UAGithubEngine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UAGithubEngine.h; path = UAGithubEngine/UAGithubEngine/UAGithubEngine.h; sourceTree = SOURCE_ROOT; }; + A0E801F452A94C01BA5E59CF /* UAGithubEngineRequestTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UAGithubEngineRequestTypes.h; path = UAGithubEngine/UAGithubEngine/UAGithubEngineRequestTypes.h; sourceTree = SOURCE_ROOT; }; + A37DB50F5D49458D9192DF15 /* UAGithubEngine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UAGithubEngine.h; path = UAGithubEngine/UAGithubEngine/UAGithubEngine.h; sourceTree = SOURCE_ROOT; }; + A846831E12B04473AB71EE26 /* UAGithubJSONParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UAGithubJSONParser.m; path = UAGithubEngine/UAGithubEngine/UAGithubJSONParser.m; sourceTree = SOURCE_ROOT; }; + AB58F1E8A25042A4A7F288DE /* NSString+UUID.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+UUID.h"; path = "UAGithubEngine/UAGithubEngine/NSString+UUID.h"; sourceTree = SOURCE_ROOT; }; + AD3D84191D6E45CFA8E8EFEA /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; + B6BEC26D9D4F4757B56C50FB /* Pods-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-resources.sh"; sourceTree = SOURCE_ROOT; }; + B6CA5B8104C540CA815DF5F6 /* NSInvocation+Blocks.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSInvocation+Blocks.m"; path = "UAGithubEngine/UAGithubEngine/NSInvocation+Blocks.m"; sourceTree = SOURCE_ROOT; }; + B92A60E16ADC4E4788D6FF87 /* UAGithubEngine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UAGithubEngine.m; path = UAGithubEngine/UAGithubEngine/UAGithubEngine.m; sourceTree = SOURCE_ROOT; }; + BC46420EE0614C629630C574 /* NSString+UUID.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+UUID.m"; path = "UAGithubEngine/UAGithubEngine/NSString+UUID.m"; sourceTree = SOURCE_ROOT; }; + BD3D6FDD95D749FA92459CFA /* NSData+Base64.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+Base64.m"; path = "UAGithubEngine/UAGithubEngine/NSData+Base64.m"; sourceTree = SOURCE_ROOT; }; + C571371067C84788A667ED42 /* UAGithubJSONParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UAGithubJSONParser.h; path = UAGithubEngine/UAGithubEngine/UAGithubJSONParser.h; sourceTree = SOURCE_ROOT; }; + C5DBAE78A68041DE984A49B9 /* UAGithubEngineConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UAGithubEngineConstants.m; path = UAGithubEngine/UAGithubEngine/UAGithubEngineConstants.m; sourceTree = SOURCE_ROOT; }; + CF1C79AA37CC4CD3BE3C5B73 /* UAGithubEngine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UAGithubEngine.m; path = UAGithubEngine/UAGithubEngine/UAGithubEngine.m; sourceTree = SOURCE_ROOT; }; + D5A9092DCB154A84958C1DBB /* NSData+Base64.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+Base64.h"; path = "UAGithubEngine/UAGithubEngine/NSData+Base64.h"; sourceTree = SOURCE_ROOT; }; + D7E37CD5D47048E08D07E407 /* NSArray+Utilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+Utilities.m"; path = "UAGithubEngine/UAGithubEngine/NSArray+Utilities.m"; sourceTree = SOURCE_ROOT; }; + D8DDE8EAD83E4000BD99E0C8 /* UAGithubJSONParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UAGithubJSONParser.h; path = UAGithubEngine/UAGithubEngine/UAGithubJSONParser.h; sourceTree = SOURCE_ROOT; }; + E0E2308B08854A4B971DA07C /* NSArray+Utilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+Utilities.h"; path = "UAGithubEngine/UAGithubEngine/NSArray+Utilities.h"; sourceTree = SOURCE_ROOT; }; + E433288BC4F74C77B874C864 /* NSString+UAGithubEngineUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+UAGithubEngineUtilities.m"; path = "UAGithubEngine/UAGithubEngine/NSString+UAGithubEngineUtilities.m"; sourceTree = SOURCE_ROOT; }; + EAA9FED9E1B946B6B2057542 /* NSData+Base64.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+Base64.m"; path = "UAGithubEngine/UAGithubEngine/NSData+Base64.m"; sourceTree = SOURCE_ROOT; }; + FB090980108C47A99AE653D2 /* UAGithubURLConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UAGithubURLConnection.h; path = UAGithubEngine/UAGithubEngine/UAGithubURLConnection.h; sourceTree = SOURCE_ROOT; }; + FB427B6075294EC0BF365A9F /* UAGithubJSONParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UAGithubJSONParser.m; path = UAGithubEngine/UAGithubEngine/UAGithubJSONParser.m; sourceTree = SOURCE_ROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + D788B6F78AAB4416A608799D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 30E736BA36B74BD7B3023DA9 /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 51D090CC67C24A0390580D6F /* Targets Support Files */ = { + isa = PBXGroup; + children = ( + 7423FC76945946AF8B6E23C0 /* Pods */, + 8ACA79ED1242464C93F00EAF /* PodsDummy_Pods.m */, + ); + name = "Targets Support Files"; + sourceTree = ""; + }; + 7423FC76945946AF8B6E23C0 /* Pods */ = { + isa = PBXGroup; + children = ( + B6BEC26D9D4F4757B56C50FB /* Pods-resources.sh */, + 693BD19947AF497393D3D079 /* Pods-prefix.pch */, + 3A3ED5974EC64035A948B119 /* Pods.xcconfig */, + ); + name = Pods; + sourceTree = ""; + }; + 8C6AB5FAF7A149279485E5E0 /* Pods */ = { + isa = PBXGroup; + children = ( + C1334999CDDB41F3B365A71D /* UAGithubEngine */, + ); + name = Pods; + sourceTree = ""; + }; + C10F3D4A761540748A697BCA = { + isa = PBXGroup; + children = ( + D14E14A34C9C446A9942043C /* Products */, + 8C6AB5FAF7A149279485E5E0 /* Pods */, + 51D090CC67C24A0390580D6F /* Targets Support Files */, + C7741726721540BCACF8670C /* Frameworks */, + ); + sourceTree = ""; + }; + C1334999CDDB41F3B365A71D /* UAGithubEngine */ = { + isa = PBXGroup; + children = ( + E0E2308B08854A4B971DA07C /* NSArray+Utilities.h */, + D5A9092DCB154A84958C1DBB /* NSData+Base64.h */, + 3EE3AC25BAD74A24AEEB6332 /* NSInvocation+Blocks.h */, + 64E35A0E75DD4BC68B99064D /* NSString+UAGithubEngineUtilities.h */, + 8C1CA348FD0A405C8BDF6346 /* NSString+UUID.h */, + A37DB50F5D49458D9192DF15 /* UAGithubEngine.h */, + 408677757E0F4B489A7F11FD /* UAGithubEngineConstants.h */, + A0E801F452A94C01BA5E59CF /* UAGithubEngineRequestTypes.h */, + C571371067C84788A667ED42 /* UAGithubJSONParser.h */, + FB090980108C47A99AE653D2 /* UAGithubURLConnection.h */, + 25429A09DAEC4E03A300EECC /* UAReachability.h */, + D7E37CD5D47048E08D07E407 /* NSArray+Utilities.m */, + EAA9FED9E1B946B6B2057542 /* NSData+Base64.m */, + B6CA5B8104C540CA815DF5F6 /* NSInvocation+Blocks.m */, + 923876F672024443B7C766CE /* NSString+UAGithubEngineUtilities.m */, + 0D07A696F0D6411BA1E69687 /* NSString+UUID.m */, + CF1C79AA37CC4CD3BE3C5B73 /* UAGithubEngine.m */, + C5DBAE78A68041DE984A49B9 /* UAGithubEngineConstants.m */, + FB427B6075294EC0BF365A9F /* UAGithubJSONParser.m */, + 5104486EC9074ECA86472F40 /* UAGithubURLConnection.m */, + 194BC9AC46F140898A43A28D /* UAReachability.m */, + 200A871011754C7BA101358F /* NSArray+Utilities.h */, + 4DBD6F3FDF544074B111519C /* NSData+Base64.h */, + 94DDB5DDEE4E49C690089682 /* NSInvocation+Blocks.h */, + 93888C7EAA5349DBBBC3B412 /* NSString+UAGithubEngineUtilities.h */, + AB58F1E8A25042A4A7F288DE /* NSString+UUID.h */, + A0141FE6DDF841ED8127465A /* UAGithubEngine.h */, + 63F2821A24384CB5B1624CBD /* UAGithubEngineConstants.h */, + 07C4CF7B718D45AA8AD0A5F2 /* UAGithubEngineRequestTypes.h */, + D8DDE8EAD83E4000BD99E0C8 /* UAGithubJSONParser.h */, + 6769465C6D2940BCA361E449 /* UAGithubURLConnection.h */, + 31BA4CA42EA346EFA9DC92CC /* UAReachability.h */, + 9C9F2AE2D42D4542895DC992 /* NSArray+Utilities.m */, + BD3D6FDD95D749FA92459CFA /* NSData+Base64.m */, + 79F4D8577E2A4B7CADB943EF /* NSInvocation+Blocks.m */, + E433288BC4F74C77B874C864 /* NSString+UAGithubEngineUtilities.m */, + BC46420EE0614C629630C574 /* NSString+UUID.m */, + B92A60E16ADC4E4788D6FF87 /* UAGithubEngine.m */, + 8DC2FD42D9374D1496BAA96F /* UAGithubEngineConstants.m */, + A846831E12B04473AB71EE26 /* UAGithubJSONParser.m */, + 4DB8AEFB256F433E910D9FD1 /* UAGithubURLConnection.m */, + 6DAE02C5FCA54799B04EB0A1 /* UAReachability.m */, + ); + name = UAGithubEngine; + sourceTree = ""; + }; + C7741726721540BCACF8670C /* Frameworks */ = { + isa = PBXGroup; + children = ( + 2710F48DEC214BFF969114A4 /* Cocoa.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + D14E14A34C9C446A9942043C /* Products */ = { + isa = PBXGroup; + children = ( + AD3D84191D6E45CFA8E8EFEA /* libPods.a */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + C1DE079654E842EEA6C6EEC4 /* Pods */ = { + isa = PBXNativeTarget; + buildConfigurationList = 61C7EF72AF0A419D88F126A6 /* Build configuration list for PBXNativeTarget "Pods" */; + buildPhases = ( + 693193DC593446D9AB7140DC /* Sources */, + 5BC2FE66D56A4D17A3B2160E /* CopyFiles */, + D788B6F78AAB4416A608799D /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Pods; + productName = Pods; + productReference = AD3D84191D6E45CFA8E8EFEA /* libPods.a */; + productType = "com.apple.product-type.library.static"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 3CE052DFA3784AAF827E421B /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0420; + }; + buildConfigurationList = 15C330C1ACAD4F4C9416516F /* Build configuration list for PBXProject "Pods" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = C10F3D4A761540748A697BCA; + productRefGroup = D14E14A34C9C446A9942043C /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + C1DE079654E842EEA6C6EEC4 /* Pods */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 693193DC593446D9AB7140DC /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9E8F1EB1D17F431FA8DF4EB9 /* NSArray+Utilities.m in Sources */, + 0C8FFFEDE9CE420DB1D3821B /* NSData+Base64.m in Sources */, + 9450BDFE7C1446C1BE7829D0 /* NSInvocation+Blocks.m in Sources */, + 5F60AEAE9F2049EF9C87F41B /* NSString+UAGithubEngineUtilities.m in Sources */, + A21C674C173C4282BA1105FB /* NSString+UUID.m in Sources */, + F75632447DD44C909E0566F2 /* UAGithubEngine.m in Sources */, + B87E88E23DC44F6AA5CEB509 /* UAGithubEngineConstants.m in Sources */, + 6906C50CE1D6493E9D58D48C /* UAGithubJSONParser.m in Sources */, + EEFCC88ECE874BC9A601D444 /* UAGithubURLConnection.m in Sources */, + A10B187EF47C4E98A1CF324E /* UAReachability.m in Sources */, + 2CEEA3D0FF4142949B115287 /* NSArray+Utilities.m in Sources */, + FE0863CE164243949811FDF7 /* NSData+Base64.m in Sources */, + F75BA592CC13441D80A037A1 /* NSInvocation+Blocks.m in Sources */, + FBE8B52D3DE442538BD7DEA4 /* NSString+UAGithubEngineUtilities.m in Sources */, + 5BA6C5077249470BBAEB26BE /* NSString+UUID.m in Sources */, + EC41C2A016BE4C1CA02C4577 /* UAGithubEngine.m in Sources */, + 9D1C8BEA21284BC6AF94D437 /* UAGithubEngineConstants.m in Sources */, + D98A0E54DD3B48EFB7D64F3B /* UAGithubJSONParser.m in Sources */, + C29B56AD710E4FD1AC3D6273 /* UAGithubURLConnection.m in Sources */, + 6CA90BC8086C407993733AB3 /* UAReachability.m in Sources */, + F99CA5D298A6411A9D7B052C /* PodsDummy_Pods.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 1E025C13EB2E419D8D516D1B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + }; + name = Debug; + }; + 2E6E382E55B04DF3B6AD4836 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3A3ED5974EC64035A948B119 /* Pods.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DSTROOT = /tmp/xcodeproj.dst; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Pods-prefix.pch"; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; + MACOSX_DEPLOYMENT_TARGET = 10.7; + OTHER_LDFLAGS = ""; + PODS_ROOT = "${SRCROOT}"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + }; + name = Release; + }; + 50EEAA462F7341739C4DA738 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + }; + name = Release; + }; + FCBE05E0BCAA459992F0E3D9 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3A3ED5974EC64035A948B119 /* Pods.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + COPY_PHASE_STRIP = NO; + DSTROOT = /tmp/xcodeproj.dst; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Pods-prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; + MACOSX_DEPLOYMENT_TARGET = 10.7; + ONLY_ACTIVE_ARCH = YES; + OTHER_LDFLAGS = ""; + PODS_ROOT = "${SRCROOT}"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 15C330C1ACAD4F4C9416516F /* Build configuration list for PBXProject "Pods" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1E025C13EB2E419D8D516D1B /* Debug */, + 50EEAA462F7341739C4DA738 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 61C7EF72AF0A419D88F126A6 /* Build configuration list for PBXNativeTarget "Pods" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + FCBE05E0BCAA459992F0E3D9 /* Debug */, + 2E6E382E55B04DF3B6AD4836 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 3CE052DFA3784AAF827E421B /* Project object */; +} diff --git a/Pods/Pods.xcodeproj/xcuserdata/paddy.xcuserdatad/xcschemes/Pods.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/paddy.xcuserdatad/xcschemes/Pods.xcscheme new file mode 100644 index 0000000..a385b95 --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/paddy.xcuserdatad/xcschemes/Pods.xcscheme @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcuserdata/paddy.xcuserdatad/xcschemes/xcschememanagement.plist b/Pods/Pods.xcodeproj/xcuserdata/paddy.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..774f852 --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/paddy.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + Pods.xcscheme + + orderHint + 1 + + + SuppressBuildableAutocreation + + C1DE079654E842EEA6C6EEC4 + + primary + + + + + diff --git a/Pods/PodsDummy_Pods.m b/Pods/PodsDummy_Pods.m new file mode 100644 index 0000000..99f3235 --- /dev/null +++ b/Pods/PodsDummy_Pods.m @@ -0,0 +1,4 @@ +@interface PodsDummy_Pods : NSObject +@end +@implementation PodsDummy_Pods +@end diff --git a/Pods/UAGithubEngine/License.rtf b/Pods/UAGithubEngine/License.rtf new file mode 100644 index 0000000..bb5f825 --- /dev/null +++ b/Pods/UAGithubEngine/License.rtf @@ -0,0 +1,29 @@ +{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf320 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\paperw11905\paperh16837\margl1440\margr1440\vieww20460\viewh13960\viewkind0 +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural + +\f0\b\fs24 \cf0 UAGithubEngine License +\b0 \ +Copyright (c) 2010, Owain R Hunt. All rights reserved.\ +\ + +\b The Short Version\ + +\b0 Use the code however you like, pass it around, change it, tweak it, build on it, release it, just make sure you include the line +\b Includes UAGithubEngine by Owain R Hunt +\b0 , preferably in your app's About box or equivalent.\ +\ + +\b The Full Legalese +\b0 \ +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\ + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\ + * Redistributions in binary form must include the following notice, preferably in the software's About box or suitable equivalent:\ + +\b Includes UAGithubEngine by Owain R Hunt +\b0 \ + * Neither the name Owain R Hunt nor the names of contributors to the code may be used to endorse or promote products derived from this software without specific prior written permission.\ +\ +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL OWAIN R HUNT BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.} \ No newline at end of file diff --git a/Pods/UAGithubEngine/README.md b/Pods/UAGithubEngine/README.md new file mode 100644 index 0000000..7e923a9 --- /dev/null +++ b/Pods/UAGithubEngine/README.md @@ -0,0 +1,45 @@ +# UAGithubEngine +by [Owain R Hunt](http://owainrhunt.com) + +UAGithubEngine is a wrapper around the Github API. Check out the [API documentation](http://developer.github.com/) for full details of what the API can do. + +UAGithubEngine is compatible with Mac OS X 10.7 and above, and iOS 5.0. + +## Note + +The `master` branch is built on version 3 of the API, and uses up-to-date technologies such as blocks and ARC. Version 1 of UAGE, found in the branch `v1`, was built on version 2 of the API, and may be more suited to your uses if you need to support earlier versions of OS X or iOS. This branch is no longer under active development. + +## How do I use it? + +* UAGithubEngine is available from [CocoaPods](http://cocoapods.org). Just add the following to your Podfile: + + `dependency 'UAGithubEngine'` + + Then run `pod install`. + +* The easiest way to use the engine is with the framework - build and link against the `UAGithubEngine` framework, and `#import ` where you want to use the framework. + +* If you don't fancy using CocoaPods or the framework, either copy across all the files in the 'UAGithubEngine' group from the UAGithubEngine project into your app's project, or add the entire project to your workspace. Use `#import "UAGithubEngine.h"` where you want to use the engine. + +* Instantiate an engine, passing a username and password. If you want to receive notifications when reachability status changes (`UAGithubReachabilityStatusDidChangeNotification`), pass `YES` as the final argument. + +* Call some methods. + +## Code speaks louder than words. +```objective-c +UAGithubEngine *engine = [[UAGithubEngine alloc] initWithUsername:@"aUser" password:@"aPassword" withReachability:YES]; + +[engine repositoriesWithSuccess:^(id response) { + NSLog(@"Got an array of repos: %@", obj); + } failure:^(NSError *error) { + NSLog(@"Oops: %@", error); + }]; + +[engine user:@"this_guy" isCollaboratorForRepository:@"UAGithubEngine" success:^(BOOL collaborates) { + NSLog(@"%d", collaborates); + } failure:^(NSError *error){ + NSLog(@"D'oh: %@", error); + }]; +``` + +Any questions, comments, improvements and so on, either open an issue, find me on Twitter (@orhunt) or send me an email (owain@underscoreapps.com). diff --git a/Pods/UAGithubEngine/UAGithubEngine/NSArray+Utilities.h b/Pods/UAGithubEngine/UAGithubEngine/NSArray+Utilities.h new file mode 100644 index 0000000..d623e6c --- /dev/null +++ b/Pods/UAGithubEngine/UAGithubEngine/NSArray+Utilities.h @@ -0,0 +1,17 @@ +// +// NSArray+Utilities.h +// UAGithubEngine +// +// Created by Owain Hunt on 27/07/2010. +// Copyright 2010 Owain R Hunt. All rights reserved. +// + +#import + +@interface NSArray (Utilities) + +- (id)firstObject; +- (NSArray *)sortedWithKey:(NSString *)theKey ascending:(BOOL)ascending; + + +@end diff --git a/Pods/UAGithubEngine/UAGithubEngine/NSArray+Utilities.m b/Pods/UAGithubEngine/UAGithubEngine/NSArray+Utilities.m new file mode 100644 index 0000000..5c51f08 --- /dev/null +++ b/Pods/UAGithubEngine/UAGithubEngine/NSArray+Utilities.m @@ -0,0 +1,31 @@ +// +// NSArray+Utilities.m +// UAGithubEngine +// +// Created by Owain Hunt on 27/07/2010. +// Copyright 2010 Owain R Hunt. All rights reserved. +// +// Credit: http://troybrant.net/blog/2010/02/adding-firstobject-to-nsarray/ + +#import "NSArray+Utilities.h" + + +@implementation NSArray (Utilities) + +- (id)firstObject +{ + if ([self count] > 0) + { + return [self objectAtIndex:0]; + } + return nil; +} + + +- (NSArray *)sortedWithKey:(NSString *)theKey ascending:(BOOL)ascending +{ + return [self sortedArrayUsingDescriptors:[NSArray arrayWithObject:[[NSSortDescriptor alloc] initWithKey:theKey ascending:ascending selector:@selector(caseInsensitiveCompare:)]]]; +} + + +@end \ No newline at end of file diff --git a/Pods/UAGithubEngine/UAGithubEngine/NSData+Base64.h b/Pods/UAGithubEngine/UAGithubEngine/NSData+Base64.h new file mode 100644 index 0000000..eb1ff48 --- /dev/null +++ b/Pods/UAGithubEngine/UAGithubEngine/NSData+Base64.h @@ -0,0 +1,33 @@ +// +// NSData+Base64.h +// base64 +// +// Created by Matt Gallagher on 2009/06/03. +// Copyright 2009 Matt Gallagher. All rights reserved. +// +// Permission is given to use this source code file, free of charge, in any +// project, commercial or otherwise, entirely at your risk, with the condition +// that any redistribution (in part or whole) of source code must retain +// this copyright and permission notice. Attribution in compiled projects is +// appreciated but not required. +// + +#import + +void *NewBase64Decode( + const char *inputBuffer, + size_t length, + size_t *outputLength); + +char *NewBase64Encode( + const void *inputBuffer, + size_t length, + bool separateLines, + size_t *outputLength); + +@interface NSData (Base64) + ++ (NSData *)dataFromBase64String:(NSString *)aString; +- (NSString *)base64EncodedString; + +@end diff --git a/Pods/UAGithubEngine/UAGithubEngine/NSData+Base64.m b/Pods/UAGithubEngine/UAGithubEngine/NSData+Base64.m new file mode 100644 index 0000000..bdfdb69 --- /dev/null +++ b/Pods/UAGithubEngine/UAGithubEngine/NSData+Base64.m @@ -0,0 +1,298 @@ +// +// NSData+Base64.m +// base64 +// +// Created by Matt Gallagher on 2009/06/03. +// Copyright 2009 Matt Gallagher. All rights reserved. +// +// Permission is given to use this source code file, free of charge, in any +// project, commercial or otherwise, entirely at your risk, with the condition +// that any redistribution (in part or whole) of source code must retain +// this copyright and permission notice. Attribution in compiled projects is +// appreciated but not required. +// + +#import "NSData+Base64.h" + +// +// Mapping from 6 bit pattern to ASCII character. +// +static unsigned char base64EncodeLookup[65] = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + +// +// Definition for "masked-out" areas of the base64DecodeLookup mapping +// +#define xx 65 + +// +// Mapping from ASCII character to 6 bit pattern. +// +static unsigned char base64DecodeLookup[256] = +{ + xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, + xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, + xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, 62, xx, xx, xx, 63, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, xx, xx, xx, xx, xx, xx, + xx, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, xx, xx, xx, xx, xx, + xx, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, xx, xx, xx, xx, xx, + xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, + xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, + xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, + xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, + xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, + xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, + xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, + xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, +}; + +// +// Fundamental sizes of the binary and base64 encode/decode units in bytes +// +#define BINARY_UNIT_SIZE 3 +#define BASE64_UNIT_SIZE 4 + +// +// NewBase64Decode +// +// Decodes the base64 ASCII string in the inputBuffer to a newly malloced +// output buffer. +// +// inputBuffer - the source ASCII string for the decode +// length - the length of the string or -1 (to specify strlen should be used) +// outputLength - if not-NULL, on output will contain the decoded length +// +// returns the decoded buffer. Must be free'd by caller. Length is given by +// outputLength. +// +void *NewBase64Decode( + const char *inputBuffer, + size_t length, + size_t *outputLength) +{ + if (length == -1) + { + length = strlen(inputBuffer); + } + + size_t outputBufferSize = + ((length+BASE64_UNIT_SIZE-1) / BASE64_UNIT_SIZE) * BINARY_UNIT_SIZE; + unsigned char *outputBuffer = (unsigned char *)malloc(outputBufferSize); + + size_t i = 0; + size_t j = 0; + while (i < length) + { + // + // Accumulate 4 valid characters (ignore everything else) + // + unsigned char accumulated[BASE64_UNIT_SIZE]; + size_t accumulateIndex = 0; + while (i < length) + { + unsigned char decode = base64DecodeLookup[inputBuffer[i++]]; + if (decode != xx) + { + accumulated[accumulateIndex] = decode; + accumulateIndex++; + + if (accumulateIndex == BASE64_UNIT_SIZE) + { + break; + } + } + } + + // + // Store the 6 bits from each of the 4 characters as 3 bytes + // + outputBuffer[j] = (accumulated[0] << 2) | (accumulated[1] >> 4); + outputBuffer[j + 1] = (accumulated[1] << 4) | (accumulated[2] >> 2); + outputBuffer[j + 2] = (accumulated[2] << 6) | accumulated[3]; + j += accumulateIndex - 1; + } + + if (outputLength) + { + *outputLength = j; + } + return outputBuffer; +} + +// +// NewBase64Decode +// +// Encodes the arbitrary data in the inputBuffer as base64 into a newly malloced +// output buffer. +// +// inputBuffer - the source data for the encode +// length - the length of the input in bytes +// separateLines - if zero, no CR/LF characters will be added. Otherwise +// a CR/LF pair will be added every 64 encoded chars. +// outputLength - if not-NULL, on output will contain the encoded length +// (not including terminating 0 char) +// +// returns the encoded buffer. Must be free'd by caller. Length is given by +// outputLength. +// +char *NewBase64Encode( + const void *buffer, + size_t length, + bool separateLines, + size_t *outputLength) +{ + const unsigned char *inputBuffer = (const unsigned char *)buffer; + + #define MAX_NUM_PADDING_CHARS 2 + #define OUTPUT_LINE_LENGTH 64 + #define INPUT_LINE_LENGTH ((OUTPUT_LINE_LENGTH / BASE64_UNIT_SIZE) * BINARY_UNIT_SIZE) + #define CR_LF_SIZE 2 + + // + // Byte accurate calculation of final buffer size + // + size_t outputBufferSize = + ((length / BINARY_UNIT_SIZE) + + ((length % BINARY_UNIT_SIZE) ? 1 : 0)) + * BASE64_UNIT_SIZE; + if (separateLines) + { + outputBufferSize += + (outputBufferSize / OUTPUT_LINE_LENGTH) * CR_LF_SIZE; + } + + // + // Include space for a terminating zero + // + outputBufferSize += 1; + + // + // Allocate the output buffer + // + char *outputBuffer = (char *)malloc(outputBufferSize); + if (!outputBuffer) + { + return NULL; + } + + size_t i = 0; + size_t j = 0; + const size_t lineLength = separateLines ? INPUT_LINE_LENGTH : length; + size_t lineEnd = lineLength; + + while (true) + { + if (lineEnd > length) + { + lineEnd = length; + } + + for (; i + BINARY_UNIT_SIZE - 1 < lineEnd; i += BINARY_UNIT_SIZE) + { + // + // Inner loop: turn 48 bytes into 64 base64 characters + // + outputBuffer[j++] = base64EncodeLookup[(inputBuffer[i] & 0xFC) >> 2]; + outputBuffer[j++] = base64EncodeLookup[((inputBuffer[i] & 0x03) << 4) + | ((inputBuffer[i + 1] & 0xF0) >> 4)]; + outputBuffer[j++] = base64EncodeLookup[((inputBuffer[i + 1] & 0x0F) << 2) + | ((inputBuffer[i + 2] & 0xC0) >> 6)]; + outputBuffer[j++] = base64EncodeLookup[inputBuffer[i + 2] & 0x3F]; + } + + if (lineEnd == length) + { + break; + } + + // + // Add the newline + // + outputBuffer[j++] = '\r'; + outputBuffer[j++] = '\n'; + lineEnd += lineLength; + } + + if (i + 1 < length) + { + // + // Handle the single '=' case + // + outputBuffer[j++] = base64EncodeLookup[(inputBuffer[i] & 0xFC) >> 2]; + outputBuffer[j++] = base64EncodeLookup[((inputBuffer[i] & 0x03) << 4) + | ((inputBuffer[i + 1] & 0xF0) >> 4)]; + outputBuffer[j++] = base64EncodeLookup[(inputBuffer[i + 1] & 0x0F) << 2]; + outputBuffer[j++] = '='; + } + else if (i < length) + { + // + // Handle the double '=' case + // + outputBuffer[j++] = base64EncodeLookup[(inputBuffer[i] & 0xFC) >> 2]; + outputBuffer[j++] = base64EncodeLookup[(inputBuffer[i] & 0x03) << 4]; + outputBuffer[j++] = '='; + outputBuffer[j++] = '='; + } + outputBuffer[j] = 0; + + // + // Set the output length and return the buffer + // + if (outputLength) + { + *outputLength = j; + } + return outputBuffer; +} + +@implementation NSData (Base64) + +// +// dataFromBase64String: +// +// Creates an NSData object containing the base64 decoded representation of +// the base64 string 'aString' +// +// Parameters: +// aString - the base64 string to decode +// +// returns the autoreleased NSData representation of the base64 string +// ++ (NSData *)dataFromBase64String:(NSString *)aString +{ + NSData *data = [aString dataUsingEncoding:NSASCIIStringEncoding]; + size_t outputLength; + void *outputBuffer = NewBase64Decode([data bytes], [data length], &outputLength); + NSData *result = [NSData dataWithBytes:outputBuffer length:outputLength]; + free(outputBuffer); + return result; +} + +// +// base64EncodedString +// +// Creates an NSString object that contains the base 64 encoding of the +// receiver's data. Lines are broken at 64 characters long. +// +// returns an autoreleased NSString being the base 64 representation of the +// receiver. +// +- (NSString *)base64EncodedString +{ + size_t outputLength; + char *outputBuffer = + NewBase64Encode([self bytes], [self length], true, &outputLength); + + NSString *result = + [[NSString alloc] + initWithBytes:outputBuffer + length:outputLength + encoding:NSASCIIStringEncoding]; + free(outputBuffer); + return result; +} + +@end diff --git a/Pods/UAGithubEngine/UAGithubEngine/NSInvocation+Blocks.h b/Pods/UAGithubEngine/UAGithubEngine/NSInvocation+Blocks.h new file mode 100755 index 0000000..5444ad7 --- /dev/null +++ b/Pods/UAGithubEngine/UAGithubEngine/NSInvocation+Blocks.h @@ -0,0 +1,19 @@ +// NSInvocation+Blocks.h - http://github.com/rentzsch/NSInvocation-blocks +// Copyright (c) 2010 Jonathan 'Wolf' Rentzsch: http://rentzsch.com +// Some rights reserved: http://opensource.org/licenses/mit-license.php + +#import + +@interface NSInvocation (Blocks) + +/* + Usage example: + + NSInvocation *invocation = [NSInvocation jr_invocationWithTarget:myObject block:^(id myObject){ + [myObject someMethodWithArg:42.0]; + }]; + */ + ++ (id)jr_invocationWithTarget:(id)target block:(void (^)(id target))block; + +@end diff --git a/Pods/UAGithubEngine/UAGithubEngine/NSInvocation+Blocks.m b/Pods/UAGithubEngine/UAGithubEngine/NSInvocation+Blocks.m new file mode 100755 index 0000000..c613b74 --- /dev/null +++ b/Pods/UAGithubEngine/UAGithubEngine/NSInvocation+Blocks.m @@ -0,0 +1,47 @@ +// NSInvocation+Blocks.m - http://github.com/rentzsch/NSInvocation-blocks +// Copyright (c) 2010 Jonathan 'Wolf' Rentzsch: http://rentzsch.com +// Some rights reserved: http://opensource.org/licenses/mit-license.php + +#import "NSInvocation+Blocks.h" + +@interface JRInvocationGrabber : NSProxy { + id target; + NSInvocation *invocation; +} +@property (retain) id target; +@property (retain) NSInvocation *invocation; +@end + +@implementation JRInvocationGrabber +@synthesize target, invocation; + +- (id)initWithTarget:(id)target_ { + self.target = target_; + return self; +} + +- (NSMethodSignature*)methodSignatureForSelector:(SEL)selector_ { + return [self.target methodSignatureForSelector:selector_]; +} + +- (void)forwardInvocation:(NSInvocation*)invocation_ { + [invocation_ setTarget:self.target]; + self.invocation = invocation_; +} + +- (void)dealloc { + self.target = nil; + self.invocation = nil; +} +@end + + +@implementation NSInvocation (jr_block) + ++ (id)jr_invocationWithTarget:(id)target_ block:(void (^)(id target))block_ { + JRInvocationGrabber *grabber = [[JRInvocationGrabber alloc] initWithTarget:target_]; + block_(grabber); + return grabber.invocation; +} + +@end \ No newline at end of file diff --git a/Pods/UAGithubEngine/UAGithubEngine/NSString+UAGithubEngineUtilities.h b/Pods/UAGithubEngine/UAGithubEngine/NSString+UAGithubEngineUtilities.h new file mode 100644 index 0000000..13fda5c --- /dev/null +++ b/Pods/UAGithubEngine/UAGithubEngine/NSString+UAGithubEngineUtilities.h @@ -0,0 +1,18 @@ +// +// NSString+UAGithubEngineUtilities.h +// UAGithubEngine +// +// Created by Owain Hunt on 08/04/2010. +// Copyright 2010 Owain R Hunt. All rights reserved. +// + +#import + + + +@interface NSString(UAGithubEngineUtilities) + +- (NSDate *)dateFromGithubDateString; +- (NSString *)encodedString; + +@end diff --git a/Pods/UAGithubEngine/UAGithubEngine/NSString+UAGithubEngineUtilities.m b/Pods/UAGithubEngine/UAGithubEngine/NSString+UAGithubEngineUtilities.m new file mode 100644 index 0000000..8c0c55e --- /dev/null +++ b/Pods/UAGithubEngine/UAGithubEngine/NSString+UAGithubEngineUtilities.m @@ -0,0 +1,43 @@ +// +// NSString+UAGithubEngineUtilities.m +// UAGithubEngine +// +// Created by Owain Hunt on 08/04/2010. +// Copyright 2010 Owain R Hunt. All rights reserved. +// + +#import "NSString+UAGithubEngineUtilities.h" + + +@implementation NSString(UAGithubEngineUtilities) + +- (NSDate *)dateFromGithubDateString { + + NSDateFormatter *df = [[NSDateFormatter alloc] init]; + NSString *dateString = self; + + if (![[self substringWithRange:NSMakeRange([self length] - 1, 1)] isEqualToString:@"Z"]) + { + NSMutableString *newDate = [self mutableCopy]; + [newDate deleteCharactersInRange:NSMakeRange(19, 1)]; + [df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZ"]; + dateString = newDate; + } + else + { + [df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"]; + } + + return [df dateFromString:dateString]; + +} + + +- (NSString *)encodedString +{ + return (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(NULL, (__bridge CFStringRef)self, NULL, (CFStringRef)@";/?:@&=$+{}<>,", kCFStringEncodingUTF8); + +} + + +@end diff --git a/Pods/UAGithubEngine/UAGithubEngine/NSString+UUID.h b/Pods/UAGithubEngine/UAGithubEngine/NSString+UUID.h new file mode 100755 index 0000000..a6bdd26 --- /dev/null +++ b/Pods/UAGithubEngine/UAGithubEngine/NSString+UUID.h @@ -0,0 +1,14 @@ +// +// NSString+UUID.h +// MGTwitterEngine +// +// Created by Matt Gemmell on 16/09/2007. +// Copyright 2008 Instinctive Code. +// + + +@interface NSString (UUID) + ++ (NSString*)stringWithNewUUID; + +@end diff --git a/Pods/UAGithubEngine/UAGithubEngine/NSString+UUID.m b/Pods/UAGithubEngine/UAGithubEngine/NSString+UUID.m new file mode 100644 index 0000000..2345c29 --- /dev/null +++ b/Pods/UAGithubEngine/UAGithubEngine/NSString+UUID.m @@ -0,0 +1,27 @@ +// +// NSString+UUID.m +// MGTwitterEngine +// +// Created by Matt Gemmell on 16/09/2007. +// Copyright 2008 Instinctive Code. +// + +#import "NSString+UUID.h" + + +@implementation NSString (UUID) + + ++ (NSString*)stringWithNewUUID +{ + // Create a new UUID + CFUUIDRef uuidObj = CFUUIDCreate(nil); + + // Get the string representation of the UUID + NSString *newUUID = (__bridge_transfer NSString*)CFUUIDCreateString(nil, uuidObj); + CFRelease(uuidObj); + return newUUID; +} + + +@end diff --git a/Pods/UAGithubEngine/UAGithubEngine/UAGithubEngine.h b/Pods/UAGithubEngine/UAGithubEngine/UAGithubEngine.h new file mode 100644 index 0000000..8cb41e3 --- /dev/null +++ b/Pods/UAGithubEngine/UAGithubEngine/UAGithubEngine.h @@ -0,0 +1,363 @@ +// +// UAGithubEngine.h +// UAGithubEngine +// +// Created by Owain Hunt on 02/04/2010. +// Copyright 2010 Owain R Hunt. All rights reserved. +// + +#import +@class UAReachability; + +typedef void (^UAGithubEngineSuccessBlock)(id); +typedef void (^UAGithubEngineBooleanSuccessBlock)(BOOL); +typedef void (^UAGithubEngineFailureBlock)(NSError *); + +@interface UAGithubEngine : NSObject + +@property (strong) NSString *username; +@property (nonatomic, strong) NSString *password; +@property (nonatomic, strong) UAReachability *reachability; +@property (nonatomic, assign, readonly) BOOL isReachable; + +- (id)initWithUsername:(NSString *)aUsername password:(NSString *)aPassword withReachability:(BOOL)withReach; + +/* + Where methods take a 'whateverPath' argument, supply the full path to 'whatever'. + For example, if the method calls for 'repositoryPath', supply @"username/repository". + + Where methods take a 'whateverName' argument, supply just the name of 'whatever'. The username used will be that set in the engine instance. + + For methods that take an NSDictionary as an argument, this should contain the relevant keys and values for the required API call. + See the documentation for more details on updating repositories, and adding and editing issues. +*/ + +#pragma mark +#pragma mark Gists +#pragma mark + +- (void)gistsForUser:(NSString *)user success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)gistsWithSuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)publicGistsWithSuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)starredGistsWithSuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)gist:(NSString *)gistId success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)createGist:(NSDictionary *)gistDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)editGist:(NSString *)gistId withDictionary:(NSDictionary *)gistDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)starGist:(NSString *)gistId success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)unstarGist:(NSString *)gistId success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)gistIsStarred:(NSString *)gistId success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)forkGist:(NSString *)gistId success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)deleteGist:(NSString *)gistId success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; + + +#pragma mark Comments + +- (void)commentsForGist:(NSString *)gistId success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)gistComment:(NSInteger)commentId success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)addCommitComment:(NSDictionary *)commentDictionary forGist:(NSString *)gistId success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)editGistComment:(NSInteger)commentId withDictionary:(NSDictionary *)commentDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)deleteGistComment:(NSInteger)commentId success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; + + +#pragma mark +#pragma mark Issues +#pragma mark + +- (void)assignedIssuesWithState:(NSString *)state success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)createdIssuesWithState:(NSString *)state success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)subscribedIssuesWithState:(NSString *)state success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)mentionedIssuesWithState:(NSString *)state success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)openIssuesForRepository:(NSString *)repositoryPath withParameters:(NSDictionary *)parameters success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)closedIssuesForRepository:(NSString *)repositoryPath withParameters:(NSDictionary *)parameters success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)issue:(NSInteger)issueNumber inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)editIssue:(NSInteger)issueNumber inRepository:(NSString *)repositoryPath withDictionary:(NSDictionary *)issueDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)addIssueForRepository:(NSString *)repositoryPath withDictionary:(NSDictionary *)issueDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)closeIssue:(NSInteger)issueNumber inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)reopenIssue:(NSInteger)issueNumber inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)deleteIssue:(NSInteger)issueNumber inRepository:(NSString *)repositoryPath success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; + + +#pragma mark Comments + +- (void)commentsForIssue:(NSInteger)issueNumber forRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)issueComment:(NSInteger)commentNumber forRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)addComment:(NSString *)comment toIssue:(NSInteger)issueNumber forRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)editComment:(NSInteger)commentNumber forRepository:(NSString *)repositoryPath withBody:(NSString *)commentBody success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)deleteComment:(NSInteger)commentNumber forRepository:(NSString *)repositoryPath success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; + + +#pragma mark Events + +- (void)eventsForIssue:(NSInteger)issueId forRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)issueEventsForRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)issueEvent:(NSInteger)eventId forRepository:(NSString*)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; + + +#pragma mark Labels + +// NOTE where it says ':id' in the documentation for a label, it actually should say ':name' +- (void)labelsForRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)label:(NSString *)labelName inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)addLabelToRepository:(NSString *)repositoryPath withDictionary:(NSDictionary *)labelDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)editLabel:(NSString *)labelName inRepository:(NSString *)repositoryPath withDictionary:(NSDictionary *)labelDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)removeLabel:(NSString *)labelName fromRepository:(NSString *)repositoryPath success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)labelsForIssue:(NSInteger)issueId inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +// Note labels supplied to the following method must already exist within the repository (-addLabelToRepository:...) +- (void)addLabels:(NSArray *)labels toIssue:(NSInteger)issueId inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)removeLabel:(NSString *)labelNamed fromIssue:(NSInteger)issueNumber inRepository:(NSString *)repositoryPath success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)removeLabelsFromIssue:(NSInteger)issueNumber inRepository:(NSString *)repositoryPath success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)replaceAllLabelsForIssue:(NSInteger)issueId inRepository:(NSString *)repositoryPath withLabels:(NSArray *)labels success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)labelsForIssueInMilestone:(NSInteger)milestoneId inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; + + +#pragma mark Milestones + +- (void)milestonesForRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)milestone:(NSInteger)milestoneNumber forRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)createMilestoneWithInfo:(NSDictionary *)infoDictionary forRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)updateMilestone:(NSInteger)milestoneNumber forRepository:(NSString *)repositoryPath withInfo:(NSDictionary *)infoDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)deleteMilestone:(NSInteger)milestoneNumber forRepository:(NSString *)repositoryPath success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)addIssue:(NSInteger)issueId toMilestone:(NSInteger)milestoneId inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; + + +#pragma mark +#pragma mark Organisations +#pragma mark + +- (void)organizationsForUser:(NSString *)user success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)organizationsWithSuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)organization:(NSString *)org withSuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)updateOrganization:(NSString *)org withDictionary:(NSDictionary *)orgDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; + + +#pragma mark Members + +- (void)membersOfOrganization:(NSString *)org withSuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)user:(NSString *)user isMemberOfOrganization:(NSString *)org withSuccess:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)removeUser:(NSString *)user fromOrganization:(NSString *)org withSuccess:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)publicMembersOfOrganization:(NSString *)org withSuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)user:(NSString *)user isPublicMemberOfOrganization:(NSString *)org withSuccess:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)publicizeMembershipOfUser:(NSString *)user inOrganization:(NSString *)org withSuccess:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)concealMembershipOfUser:(NSString *)user inOrganization:(NSString *)org withSuccess:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; + + +#pragma mark Teams + +- (void)teamsInOrganization:(NSString *)org withSuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)team:(NSInteger)teamId withSuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)createTeam:(NSDictionary *)teamDictionary inOrganization:(NSString *)org withSuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)editTeam:(NSInteger)teamId withDictionary:(NSDictionary *)teamDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)deleteTeam:(NSInteger)teamId withSuccess:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)membersOfTeam:(NSInteger)teamId withSuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)user:(NSString *)user isMemberOfTeam:(NSInteger)teamId withSuccess:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)addUser:(NSString *)user toTeam:(NSInteger)teamId withSuccess:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)removeUser:(NSString *)user fromTeam:(NSInteger)teamId withSuccess:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)repositoriesForTeam:(NSInteger)teamId withSuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)repository:(NSString *)repositoryPath isManagedByTeam:(NSInteger)teamId withSuccess:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)addRepository:(NSString *)repositoryPath toTeam:(NSInteger)teamId withSuccess:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)removeRepository:(NSString *)repositoryPath fromTeam:(NSInteger)teamId withSuccess:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; + + +#pragma mark +#pragma mark Pull Requests +#pragma mark + +- (void)pullRequestsForRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)pullRequest:(NSInteger)pullRequestId forRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)createPullRequest:(NSDictionary *)pullRequestDictionary forRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)updatePullRequest:(NSInteger)pullRequestId forRepository:(NSString *)repositoryPath withDictionary:(NSDictionary *)pullRequestDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)commitsInPullRequest:(NSInteger)pullRequestId forRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)filesInPullRequest:(NSInteger)pullRequestId forRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)pullRequest:(NSInteger)pullRequestId isMergedForRepository:(NSString *)repositoryPath success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)mergePullRequest:(NSInteger)pullRequestId forRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; + + +#pragma mark Comments + +- (void)commentsForPullRequest:(NSInteger)pullRequestId forRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)pullRequestComment:(NSInteger)commentId forRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)createPullRequestComment:(NSDictionary *)commentDictionary forPullRequest:(NSInteger)pullRequestId forRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)editPullRequestComment:(NSInteger)commentId forRepository:(NSString *)repositoryPath withDictionary:(NSDictionary *)commentDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)deletePullRequestComment:(NSInteger)commentId forRepository:(NSString *)repositoryPath success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; + + +#pragma mark +#pragma mark Repositories +#pragma mark + +- (void)repositoriesForUser:(NSString *)aUser includeWatched:(BOOL)watched success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)repositoriesForUser:(NSString *)aUser includeWatched:(BOOL)watched page:(int)page success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)repositoriesWithSuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)createRepositoryWithInfo:(NSDictionary *)infoDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)repository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)updateRepository:(NSString *)repositoryPath withInfo:(NSDictionary *)infoDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)contributorsForRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)languageBreakdownForRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)teamsForRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)annotatedTagsForRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)branchesForRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; + + +#pragma mark Collaborators + +- (void)collaboratorsForRepository:(NSString *)repositoryName success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)user:(NSString *)user isCollaboratorForRepository:(NSString *)repositoryPath success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)addCollaborator:(NSString *)collaborator toRepository:(NSString *)repositoryPath success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)removeCollaborator:(NSString *)collaborator fromRepository:(NSString *)repositoryPath success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; + + +#pragma mark Commits + +- (void)commitsForRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)commit:(NSString *)commitSha inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; + + +#pragma mark Commit Comments + +- (void)commitCommentsForRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)commitCommentsForCommit:(NSString *)sha inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)addCommitComment:(NSDictionary *)commentDictionary forCommit:(NSString *)sha inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)commitComment:(NSInteger)commentId inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)editCommitComment:(NSInteger)commentId inRepository:(NSString *)repositoryPath withDictionary:(NSDictionary *)infoDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)deleteCommitComment:(NSInteger)commentId inRepository:(NSString *)repositoryPath success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; + + +#pragma mark Downloads + +- (void)downloadsForRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)download:(NSInteger)downloadId inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +// See http://developer.github.com/v3/repos/downloads for more information: this is a two-part process. +- (void)addDownloadToRepository:(NSString *)repositoryPath withDictionary:(NSDictionary *)downloadDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)deleteDownload:(NSInteger)downloadId fromRepository:(NSString *)repositoryPath success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; + + +#pragma mark Forks + +- (void)forksForRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)forkRepository:(NSString *)repositoryPath inOrganization:(NSString *)org success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)forkRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; + + +#pragma mark Keys + +- (void)deployKeysForRepository:(NSString *)repositoryName success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)deployKey:(NSInteger)keyId forRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)addDeployKey:(NSString *)keyData withTitle:(NSString *)keyTitle ToRepository:(NSString *)repositoryName success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)editDeployKey:(NSInteger)keyId inRepository:(NSString *)repositoryPath withDictionary:(NSDictionary *)keyDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)deleteDeployKey:(NSInteger)keyId fromRepository:(NSString *)repositoryName success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; + + +#pragma mark Watching + +- (void)watchersForRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)watchedRepositoriesForUser:(NSString *)user success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)watchedRepositoriessuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)repositoryIsWatched:(NSString *)repositoryPath success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)watchRepository:(NSString *)repositoryPath success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)unwatchRepository:(NSString *)repositoryPath success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; + + +#pragma mark Hooks + +- (void)hooksForRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)hook:(NSInteger)hookId forRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)addHook:(NSDictionary *)hookDictionary forRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)editHook:(NSInteger)hookId forRepository:(NSString *)repositoryPath withDictionary:(NSDictionary *)hookDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)testHook:(NSInteger)hookId forRepository:(NSString *)repositoryPath success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)deleteHook:(NSInteger)hookId fromRepository:(NSString *)repositoryPath success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; + + +#pragma mark +#pragma mark Users +#pragma mark + +- (void)user:(NSString *)user success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)userWithSuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)editUser:(NSDictionary *)userDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; + + +#pragma mark Emails + +- (void)emailAddressessuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)addEmailAddresses:(NSArray *)emails success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)deleteEmailAddresses:(NSArray *)emails success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; + + +#pragma mark Followers + +- (void)followers:(NSString *)user success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)followersWithSuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)following:(NSString *)user success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)follows:(NSString *)user success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)follow:(NSString *)user success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)unfollow:(NSString *)user success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; + + +#pragma mark Keys + +- (void)publicKeysWithSuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)publicKey:(NSInteger)keyId success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)addPublicKey:(NSDictionary *)keyDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)updatePublicKey:(NSInteger)keyId withInfo:(NSDictionary *)keyDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)deletePublicKey:(NSInteger)keyId success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; + + +#pragma mark +#pragma mark Events +#pragma mark + +- (void)eventsWithSuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)eventsForRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)eventsForNetwork:(NSString *)networkPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)eventsReceivedByUser:(NSString *)user success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)eventsPerformedByUser:(NSString *)user success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)publicEventsPerformedByUser:(NSString *)user success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)eventsForOrganization:(NSString *)organization user:(NSString *)user success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)publicEventsForOrganization:(NSString *)organization success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; + + +#pragma mark - +#pragma mark Git Database API +#pragma mark - + +// The following methods access the Git Database API. +// See http://developer.github.com/v3/git/ for more information. + +#pragma mark Trees + +- (void)tree:(NSString *)sha inRepository:(NSString *)repositoryPath recursive:(BOOL)recursive success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)createTree:(NSDictionary *)treeDictionary inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; + + +#pragma mark Blobs + +- (void)blobForSHA:(NSString *)sha inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)createBlob:(NSDictionary *)blobDictionary inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +/* +- (void)blob:(NSString *)blobPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)rawBlob:(NSString *)blobPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; + */ + + +#pragma mark References + +- (void)reference:(NSString *)reference inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)referencesInRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)tagsForRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)createReference:(NSDictionary *)refDictionary inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)updateReference:(NSString *)reference inRepository:(NSString *)repositoryPath withDictionary:(NSDictionary *)referenceDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; + + +#pragma mark Tags + +- (void)tag:(NSString *)sha inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)createTagObject:(NSDictionary *)tagDictionary inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; + + +#pragma mark Raw Commits + +- (void)rawCommit:(NSString *)commit inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; +- (void)createRawCommit:(NSDictionary *)commitDictionary inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock; + + +@end diff --git a/Pods/UAGithubEngine/UAGithubEngine/UAGithubEngine.m b/Pods/UAGithubEngine/UAGithubEngine/UAGithubEngine.m new file mode 100644 index 0000000..31452d0 --- /dev/null +++ b/Pods/UAGithubEngine/UAGithubEngine/UAGithubEngine.m @@ -0,0 +1,1538 @@ +// +// UAGithubEngine.m +// UAGithubEngine +// +// Created by Owain Hunt on 02/04/2010. +// Copyright 2010 Owain R Hunt. All rights reserved. +// + +#import "UAGithubEngine.h" +#import "UAReachability.h" + +#import "UAGithubJSONParser.h" +#import "UAGithubEngineConstants.h" +#import "UAGithubEngineRequestTypes.h" +#import "UAGithubURLConnection.h" + +#import "NSString+UAGithubEngineUtilities.h" +#import "NSData+Base64.h" +#import "NSString+UUID.h" + +#import "NSInvocation+Blocks.h" + +#define API_PROTOCOL @"https://" +#define API_DOMAIN @"api.github.com" + + +@interface UAGithubEngine (Private) + +- (id)sendRequest:(NSString *)path requestType:(UAGithubRequestType)requestType responseType:(UAGithubResponseType)responseType error:(NSError **)error; +- (id)sendRequest:(NSString *)path requestType:(UAGithubRequestType)requestType responseType:(UAGithubResponseType)responseType page:(NSInteger)page error:(NSError **)error; +- (id)sendRequest:(NSString *)path requestType:(UAGithubRequestType)requestType responseType:(UAGithubResponseType)responseType withParameters:(id)params error:(NSError **)error; +- (id)sendRequest:(NSString *)path requestType:(UAGithubRequestType)requestType responseType:(UAGithubResponseType)responseType withParameters:(id)params page:(NSInteger)page error:(NSError **)error; + +@end + + +@implementation UAGithubEngine + +@synthesize username, password, reachability, isReachable; + +#pragma mark +#pragma mark Setup & Teardown +#pragma mark + +- (id)initWithUsername:(NSString *)aUsername password:(NSString *)aPassword withReachability:(BOOL)withReach +{ + self = [super init]; + if (self) + { + username = aUsername; + password = aPassword; + if (withReach) + { + reachability = [[UAReachability alloc] init]; + } + } + + + return self; + +} + + +#pragma mark +#pragma mark Reachability +#pragma mark + +- (BOOL)isReachable +{ + return [self.reachability currentReachabilityStatus]; +} + + +- (UAReachability *)reachability +{ + if (!reachability) + { + reachability = [[UAReachability alloc] init]; + } + + return reachability; +} + + +#pragma mark +#pragma mark Request Management +#pragma mark + +- (id)sendRequest:(NSString *)path requestType:(UAGithubRequestType)requestType responseType:(UAGithubResponseType)responseType withParameters:(id)params page:(NSInteger)page error:(NSError * __strong *)error +{ + + NSMutableString *urlString = [NSMutableString stringWithFormat:@"%@%@/%@", API_PROTOCOL, API_DOMAIN, path]; + NSData *jsonData = nil; + NSError *serializationError = nil; + + if ([params count] > 0) + { + jsonData = [NSJSONSerialization dataWithJSONObject:params options:0 error:&serializationError]; + + if (serializationError) + { + *error = serializationError; + return nil; + } + } + + + NSMutableString *querystring = nil; + + if (!jsonData && [params count] > 0) + { + // Is the querystring already present (ie a question mark is present in the path)? Create it if not. + if ([path rangeOfString:@"?"].location == NSNotFound) + { + querystring = [NSMutableString stringWithString:@"?"]; + } + + for (NSString *key in [params allKeys]) + { + [querystring appendFormat:@"%@%@=%@", [querystring length] <= 1 ? @"" : @"&", key, [[params valueForKey:key] encodedString]]; + } + } + + if (page > 0) + { + if (querystring) + { + [querystring appendFormat:@"&page=%ld", page]; + } + else + { + querystring = [NSString stringWithFormat:@"?page=%ld", page]; + } + } + + if ([querystring length] > 0) + { + [urlString appendString:querystring]; + } + + NSURL *theURL = [NSURL URLWithString:urlString]; + + NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:theURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:30]; + if (self.username && self.password) + { + NSData *data = [NSData dataWithData:[[NSString stringWithFormat:@"%@:%@", self.username, self.password] dataUsingEncoding:NSUTF8StringEncoding]]; + NSString *headerval = [data base64EncodedString]; + [urlRequest setValue:[NSString stringWithFormat:@"Basic %@", headerval] forHTTPHeaderField:@"Authorization"]; + } + + if (jsonData) + { + [urlRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; + [urlRequest setHTTPBody:jsonData]; + } + + switch (requestType) + { + case UAGithubIssueAddRequest: + case UAGithubRepositoryCreateRequest: + case UAGithubRepositoryDeleteConfirmationRequest: + case UAGithubMilestoneCreateRequest: + case UAGithubDeployKeyAddRequest: + case UAGithubDeployKeyDeleteRequest: + case UAGithubIssueCommentAddRequest: + case UAGithubPublicKeyAddRequest: + case UAGithubRepositoryLabelAddRequest: + case UAGithubIssueLabelAddRequest: + case UAGithubTreeCreateRequest: + case UAGithubBlobCreateRequest: + case UAGithubReferenceCreateRequest: + case UAGithubRawCommitCreateRequest: + case UAGithubGistCreateRequest: + case UAGithubGistCommentCreateRequest: + case UAGithubGistForkRequest: + case UAGithubPullRequestCreateRequest: + case UAGithubPullRequestCommentCreateRequest: + case UAGithubEmailAddRequest: + case UAGithubTeamCreateRequest: + { + [urlRequest setHTTPMethod:@"POST"]; + } + break; + + case UAGithubCollaboratorAddRequest: + case UAGithubIssueLabelReplaceRequest: + case UAGithubFollowRequest: + case UAGithubGistStarRequest: + case UAGithubPullRequestMergeRequest: + case UAGithubOrganizationMembershipPublicizeRequest: + case UAGithubTeamMemberAddRequest: + case UAGithubTeamRepositoryManagershipAddRequest: + { + [urlRequest setHTTPMethod:@"PUT"]; + } + break; + + case UAGithubRepositoryUpdateRequest: + case UAGithubMilestoneUpdateRequest: + case UAGithubIssueEditRequest: + case UAGithubIssueCommentEditRequest: + case UAGithubPublicKeyEditRequest: + case UAGithubUserEditRequest: + case UAGithubRepositoryLabelEditRequest: + case UAGithubReferenceUpdateRequest: + case UAGithubGistUpdateRequest: + case UAGithubGistCommentUpdateRequest: + case UAGithubPullRequestUpdateRequest: + case UAGithubPullRequestCommentUpdateRequest: + case UAGithubOrganizationUpdateRequest: + case UAGithubTeamUpdateRequest: + { + [urlRequest setHTTPMethod:@"PATCH"]; + } + break; + + case UAGithubMilestoneDeleteRequest: + case UAGithubIssueDeleteRequest: + case UAGithubIssueCommentDeleteRequest: + case UAGithubUnfollowRequest: + case UAGithubPublicKeyDeleteRequest: + case UAGithubCollaboratorRemoveRequest: + case UAGithubRepositoryLabelRemoveRequest: + case UAGithubIssueLabelRemoveRequest: + case UAGithubGistUnstarRequest: + case UAGithubGistDeleteRequest: + case UAGithubGistCommentDeleteRequest: + case UAGithubPullRequestCommentDeleteRequest: + case UAGithubEmailDeleteRequest: + case UAGithubOrganizationMemberRemoveRequest: + case UAGithubOrganizationMembershipConcealRequest: + case UAGithubTeamDeleteRequest: + case UAGithubTeamMemberRemoveRequest: + case UAGithubTeamRepositoryManagershipRemoveRequest: + { + [urlRequest setHTTPMethod:@"DELETE"]; + } + break; + + default: + break; + } + + NSError __block __strong *blockError = nil; + NSError *connectionError = nil; + + id returnValue = [UAGithubURLConnection asyncRequest:urlRequest + success:^(NSData *data, NSURLResponse *response) + { + NSHTTPURLResponse *resp = (NSHTTPURLResponse *)response; + NSInteger statusCode = resp.statusCode; + + + if ([[[resp allHeaderFields] allKeys] containsObject:@"X-Ratelimit-Remaining"] && [[[resp allHeaderFields] valueForKey:@"X-Ratelimit-Remaining"] isEqualToString:@"1"]) + { + blockError = [NSError errorWithDomain:UAGithubAPILimitReached code:statusCode userInfo:[NSDictionary dictionaryWithObject:urlRequest forKey:@"request"]]; + return (id)[NSNull null]; + } + + if (statusCode >= 400) + { + if (statusCode == 404) + { + switch (requestType) + { + case UAGithubFollowingRequest: + case UAGithubGistStarStatusRequest: + case UAGithubOrganizationMembershipStatusRequest: + case UAGithubTeamMembershipStatusRequest: + case UAGithubTeamRepositoryManagershipStatusRequest: + { + return (id)[NSNumber numberWithBool:NO]; + } + break; + default: + break; + } + } + + blockError = [NSError errorWithDomain:@"HTTP" code:statusCode userInfo:[NSDictionary dictionaryWithObject:urlRequest forKey:@"request"]]; + + return (id)[NSNull null]; + + } + + else if (statusCode == 204) + { + return (id)[NSNumber numberWithBool:YES]; + } + + else + { + return [UAGithubJSONParser parseJSON:data error:&blockError]; + } + + } + error:&connectionError]; + + if (blockError) + { + *error = blockError; + return nil; + } + else if (connectionError) + { + *error = connectionError; + return nil; + } + + // If returnValue is of class NSArray, it contains an array of NSDictionary objects. + // If it's an NSNumber YES, then we're looking at a successful call that expects a No Content response. + // If it's an NSNumber NO then that's a successful call to a method that returns an expected 404 response. + + return returnValue; +} + + +- (id)sendRequest:(NSString *)path requestType:(UAGithubRequestType)requestType responseType:(UAGithubResponseType)responseType withParameters:(id)params error:(NSError **)error +{ + return [self sendRequest:path requestType:requestType responseType:responseType withParameters:params page:0 error:error]; +} + + +- (id)sendRequest:(NSString *)path requestType:(UAGithubRequestType)requestType responseType:(UAGithubResponseType)responseType page:(NSInteger)page error:(NSError **)error +{ + return [self sendRequest:path requestType:requestType responseType:responseType withParameters:nil page:page error:error]; +} + + +- (id)sendRequest:(NSString *)path requestType:(UAGithubRequestType)requestType responseType:(UAGithubResponseType)responseType error:(NSError **)error +{ + return [self sendRequest:path requestType:requestType responseType:responseType withParameters:nil page:0 error:error]; +} + + +- (void)invoke:(void (^)(id obj))invocationBlock success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + NSError __unsafe_unretained *error = nil; + NSError * __unsafe_unretained *errorPointer = &error; + id __unsafe_unretained result; + + NSInvocation *invocation = [NSInvocation jr_invocationWithTarget:self block:invocationBlock]; + // Method signatures differ between invocations, but the last argument is always where the NSError lives + [invocation setArgument:&errorPointer atIndex:[[invocation methodSignature] numberOfArguments] - 1]; + [invocation invoke]; + [invocation getReturnValue:&result]; + + if (error) + { + failureBlock(error); + return; + } + + successBlock(result); +} + + +- (void)invoke:(void (^)(id obj))invocationBlock booleanSuccess:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + + NSError __unsafe_unretained *error = nil; + NSError * __unsafe_unretained *errorPointer = &error; + BOOL result; + + NSInvocation *invocation = [NSInvocation jr_invocationWithTarget:self block:invocationBlock]; + [invocation setArgument:&errorPointer atIndex:[[invocation methodSignature] numberOfArguments] - 1]; + [invocation invoke]; + [invocation getReturnValue:&result]; + + if (error) + { + failureBlock(error); + return; + } + + successBlock(result); +} + + +#pragma mark +#pragma mark Gists +#pragma mark + +- (void)gistsForUser:(NSString *)user success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"users/%@/gists", user] requestType:UAGithubGistsRequest responseType:UAGithubGistsResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)gistsWithSuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:@"gists" requestType:UAGithubGistsRequest responseType:UAGithubGistsResponse error:nil];} success:successBlock failure:failureBlock]; + +} + +- (void)publicGistsWithSuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:@"gists/public" requestType:UAGithubGistsRequest responseType:UAGithubGistsResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)starredGistsWithSuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:@"gists/starred" requestType:UAGithubGistsRequest responseType:UAGithubGistsResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)gist:(NSString *)gistId success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"gists/%@", gistId] requestType:UAGithubGistRequest responseType:UAGithubGistResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)createGist:(NSDictionary *)gistDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:@"gists" requestType:UAGithubGistCreateRequest responseType:UAGithubGistResponse withParameters:gistDictionary error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)editGist:(NSString *)gistId withDictionary:(NSDictionary *)gistDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"gists/%@", gistId] requestType:UAGithubGistUpdateRequest responseType:UAGithubGistResponse withParameters:gistDictionary error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)starGist:(NSString *)gistId success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"gists/%@/star", gistId] requestType:UAGithubGistStarRequest responseType:UAGithubNoContentResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + + +- (void)unstarGist:(NSString *)gistId success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"gists/%@/star", gistId] requestType:UAGithubGistUnstarRequest responseType:UAGithubNoContentResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + + +- (void)gistIsStarred:(NSString *)gistId success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"gists/%@/star", gistId] requestType:UAGithubGistStarStatusRequest responseType:UAGithubNoContentResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + + +- (void)forkGist:(NSString *)gistId success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"gists/%@/fork", gistId] requestType:UAGithubGistForkRequest responseType:UAGithubGistResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)deleteGist:(NSString *)gistId success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"gists/%@", gistId] requestType:UAGithubGistDeleteRequest responseType:UAGithubNoContentResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + + +#pragma mark Comments + +- (void)commentsForGist:(NSString *)gistId success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"gists/%@/comments", gistId] requestType:UAGithubGistCommentsRequest responseType:UAGithubGistCommentsResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)gistComment:(NSInteger)commentId success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"gists/comments/%ld", commentId] requestType:UAGithubGistCommentRequest responseType:UAGithubGistCommentResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)addCommitComment:(NSDictionary *)commentDictionary forGist:(NSString *)gistId success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"gists/%@/comments", gistId] requestType:UAGithubGistCommentCreateRequest responseType:UAGithubGistCommentResponse withParameters:commentDictionary error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)editGistComment:(NSInteger)commentId withDictionary:(NSDictionary *)commentDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"gists/comments/%ld", commentId] requestType:UAGithubGistCommentUpdateRequest responseType:UAGithubGistCommentResponse withParameters:commentDictionary error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)deleteGistComment:(NSInteger)commentId success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"gists/comments/%ld", commentId] requestType:UAGithubGistCommentDeleteRequest responseType:UAGithubNoContentResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + + +#pragma mark +#pragma mark Issues +#pragma mark + +- (void)assignedIssuesWithState:(NSString *)state success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"issues?state=%@", state] requestType:UAGithubIssuesOpenRequest responseType:UAGithubIssuesResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)createdIssuesWithState:(NSString *)state success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"issues?filter=created&state=%@", state] requestType:UAGithubIssuesOpenRequest responseType:UAGithubIssuesResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)subscribedIssuesWithState:(NSString *)state success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"issues?filter=subscribed&state=%@", state] requestType:UAGithubIssuesOpenRequest responseType:UAGithubIssuesResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)mentionedIssuesWithState:(NSString *)state success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"issues?filter=mentioned&state=%@", state] requestType:UAGithubIssuesOpenRequest responseType:UAGithubIssuesResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)openIssuesForRepository:(NSString *)repositoryPath withParameters:(NSDictionary *)parameters success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/issues", repositoryPath] requestType:UAGithubIssuesOpenRequest responseType:UAGithubIssuesResponse withParameters:parameters error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)closedIssuesForRepository:(NSString *)repositoryPath withParameters:(NSDictionary *)parameters success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/issues?state=closed", repositoryPath] requestType:UAGithubIssuesClosedRequest responseType:UAGithubIssuesResponse withParameters:parameters error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)issue:(NSInteger)issueNumber inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/issues/%ld", repositoryPath, issueNumber] requestType:UAGithubIssueRequest responseType:UAGithubIssueResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)editIssue:(NSInteger)issueNumber inRepository:(NSString *)repositoryPath withDictionary:(NSDictionary *)issueDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/issues/%ld", repositoryPath, issueNumber] requestType:UAGithubIssueEditRequest responseType:UAGithubIssueResponse withParameters:issueDictionary error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)addIssueForRepository:(NSString *)repositoryPath withDictionary:(NSDictionary *)issueDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/issues", repositoryPath] requestType:UAGithubIssueAddRequest responseType:UAGithubIssueResponse withParameters:issueDictionary error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)closeIssue:(NSInteger)issueNumber inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + NSDictionary *paramsDictionary = @{ @"state" : @"closed" }; + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/issues/%ld", repositoryPath, issueNumber] requestType:UAGithubIssueEditRequest responseType:UAGithubIssueResponse withParameters:paramsDictionary error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)reopenIssue:(NSInteger)issueNumber inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + NSDictionary *paramsDictionary = @{ @"state" : @"open" }; + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/issues/%ld", repositoryPath, issueNumber] requestType:UAGithubIssueEditRequest responseType:UAGithubIssueResponse withParameters:paramsDictionary error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)deleteIssue:(NSInteger)issueNumber inRepository:(NSString *)repositoryPath success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/issues/%ld", repositoryPath, issueNumber] requestType:UAGithubIssueRequest responseType:UAGithubIssueResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + + +#pragma mark Comments + +- (void)commentsForIssue:(NSInteger)issueNumber forRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/issues/%ld/comments", repositoryPath, issueNumber] requestType:UAGithubIssueCommentsRequest responseType:UAGithubIssueCommentsResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)issueComment:(NSInteger)commentNumber forRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/issues/comments/%ld", repositoryPath, commentNumber] requestType:UAGithubIssueCommentRequest responseType:UAGithubIssueCommentResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)addComment:(NSString *)comment toIssue:(NSInteger)issueNumber forRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + NSDictionary *commentDictionary = [NSDictionary dictionaryWithObject:comment forKey:@"body"]; + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/issues/%ld/comments", repositoryPath, issueNumber] requestType:UAGithubIssueCommentAddRequest responseType:UAGithubIssueCommentResponse withParameters:commentDictionary error:nil];} success:successBlock failure:failureBlock]; + +} + + +- (void)editComment:(NSInteger)commentNumber forRepository:(NSString *)repositoryPath withBody:(NSString *)commentBody success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + NSDictionary *commentDictionary = [NSDictionary dictionaryWithObject:commentBody forKey:@"body"]; + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/issues/comments/%ld", repositoryPath, commentNumber] requestType:UAGithubIssueCommentEditRequest responseType:UAGithubIssueCommentResponse withParameters:commentDictionary error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)deleteComment:(NSInteger)commentNumber forRepository:(NSString *)repositoryPath success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/issues/comments/%ld", repositoryPath, commentNumber] requestType:UAGithubIssueCommentDeleteRequest responseType:UAGithubIssueCommentResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + + +#pragma mark Events + +- (void)eventsForIssue:(NSInteger)issueId forRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/issues/%ld/events", repositoryPath, issueId] requestType:UAGithubIssueEventsRequest responseType:UAGithubIssueEventsResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)issueEventsForRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/issues/events", repositoryPath] requestType:UAGithubIssueEventsRequest responseType:UAGithubIssueEventsResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)issueEvent:(NSInteger)eventId forRepository:(NSString*)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/issues/events/%ld", repositoryPath, eventId] requestType:UAGithubIssueEventRequest responseType:UAGithubIssueEventResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +#pragma mark Labels + +- (void)labelsForRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/labels", repositoryPath] requestType:UAGithubRepositoryLabelsRequest responseType:UAGithubRepositoryLabelsResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)label:(NSString *)labelName inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/labels/%@", repositoryPath, labelName] requestType:UAGithubIssueLabelRequest responseType:UAGithubIssueLabelResponse error:nil];} success:successBlock failure:failureBlock]; +} + +- (void)addLabelToRepository:(NSString *)repositoryPath withDictionary:(NSDictionary *)labelDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/labels", repositoryPath] requestType:UAGithubRepositoryLabelAddRequest responseType:UAGithubIssueLabelsResponse withParameters:labelDictionary error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)editLabel:(NSString *)labelName inRepository:(NSString *)repositoryPath withDictionary:(NSDictionary *)labelDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/labels/%@", repositoryPath, labelName] requestType:UAGithubRepositoryLabelEditRequest responseType:UAGithubRepositoryLabelResponse withParameters:labelDictionary error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)removeLabel:(NSString *)labelName fromRepository:(NSString *)repositoryPath success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/labels/%@", repositoryPath, labelName] requestType:UAGithubRepositoryLabelRemoveRequest responseType:UAGithubNoContentResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + + +- (void)addLabels:(NSArray *)labels toIssue:(NSInteger)issueId inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/issues/%ld/labels", repositoryPath, issueId] requestType:UAGithubIssueLabelAddRequest responseType:UAGithubIssueLabelsResponse withParameters:labels error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)removeLabel:(NSString *)labelName fromIssue:(NSInteger)issueNumber inRepository:(NSString *)repositoryPath success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/issues/%ld/labels/%@", repositoryPath, issueNumber, labelName] requestType:UAGithubIssueLabelRemoveRequest responseType:UAGithubIssueLabelsResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + + +- (void)removeLabelsFromIssue:(NSInteger)issueNumber inRepository:(NSString *)repositoryPath success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/issues/%ld/labels", repositoryPath, issueNumber] requestType:UAGithubIssueLabelRemoveRequest responseType:UAGithubNoContentResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + + +- (void)replaceAllLabelsForIssue:(NSInteger)issueId inRepository:(NSString *)repositoryPath withLabels:(NSArray *)labels success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/issues/%ld/labels", repositoryPath, issueId] requestType:UAGithubIssueLabelReplaceRequest responseType:UAGithubIssueLabelsResponse withParameters:labels error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)labelsForIssue:(NSInteger)issueId inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/issues/%ld/labels", repositoryPath, issueId] requestType:UAGithubIssueLabelsRequest responseType:UAGithubIssueLabelsResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)labelsForIssueInMilestone:(NSInteger)milestoneId inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/milestones/%ld/labels", repositoryPath, milestoneId] requestType:UAGithubIssueLabelsRequest responseType:UAGithubIssueLabelsResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +#pragma mark Milestones + +- (void)milestonesForRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/milestones", repositoryPath] requestType:UAGithubMilestonesRequest responseType:UAGithubMilestonesResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)milestone:(NSInteger)milestoneNumber forRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/milestones/%ld", repositoryPath, milestoneNumber] requestType:UAGithubMilestoneRequest responseType:UAGithubMilestoneResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)createMilestoneWithInfo:(NSDictionary *)infoDictionary forRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/milestones", repositoryPath] requestType:UAGithubMilestoneCreateRequest responseType:UAGithubMilestoneResponse withParameters:infoDictionary error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)updateMilestone:(NSInteger)milestoneNumber forRepository:(NSString *)repositoryPath withInfo:(NSDictionary *)infoDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/milestones/%ld", repositoryPath, milestoneNumber] requestType:UAGithubMilestoneUpdateRequest responseType:UAGithubMilestoneResponse withParameters:infoDictionary error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)deleteMilestone:(NSInteger)milestoneNumber forRepository:(NSString *)repositoryPath success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/milestones/%ld", repositoryPath, milestoneNumber] requestType:UAGithubMilestoneDeleteRequest responseType:UAGithubMilestoneResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + + +- (void)addIssue:(NSInteger)issueNumber toMilestone:(NSInteger)milestoneNumber inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + NSDictionary *params = @{ @"milestone" : [NSString stringWithFormat:@"%ld", milestoneNumber] }; + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/issues/%ld", repositoryPath, issueNumber] requestType:UAGithubIssueEditRequest responseType:UAGithubIssueResponse withParameters:params error:nil];} success:successBlock failure:failureBlock]; + +} + + + +#pragma mark +#pragma mark Organizations +#pragma mark + +- (void)organizationsForUser:(NSString *)user success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"users/%@/orgs", user] requestType:UAGithubOrganizationsRequest responseType:UAGithubOrganizationsResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)organizationsWithSuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:@"user/orgs" requestType:UAGithubOrganizationsRequest responseType:UAGithubOrganizationsResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)organization:(NSString *)org withSuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"orgs/%@", org] requestType:UAGithubOrganizationRequest responseType:UAGithubOrganizationResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)updateOrganization:(NSString *)org withDictionary:(NSDictionary *)orgDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"orgs/%@", org] requestType:UAGithubOrganizationUpdateRequest responseType:UAGithubOrganizationResponse withParameters:orgDictionary error:nil];} success:successBlock failure:failureBlock]; +} + + +#pragma mark Members + +- (void)membersOfOrganization:(NSString *)org withSuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"orgs/%@/members", org] requestType:UAGithubOrganizationMembersRequest responseType:UAGithubUsersResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)user:(NSString *)user isMemberOfOrganization:(NSString *)org withSuccess:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"orgs/%@/members/%@", org, user] requestType:UAGithubOrganizationMembershipStatusRequest responseType:UAGithubNoContentResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + + +- (void)removeUser:(NSString *)user fromOrganization:(NSString *)org withSuccess:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"orgs/%@/members/%@", org, user] requestType:UAGithubOrganizationMemberRemoveRequest responseType:UAGithubNoContentResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + + +- (void)publicMembersOfOrganization:(NSString *)org withSuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"orgs/%@/public_members", org] requestType:UAGithubOrganizationMembersRequest responseType:UAGithubUsersResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)user:(NSString *)user isPublicMemberOfOrganization:(NSString *)org withSuccess:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"orgs/%@/public_members/%@", org, user] requestType:UAGithubOrganizationMembershipStatusRequest responseType:UAGithubNoContentResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + + +- (void)publicizeMembershipOfUser:(NSString *)user inOrganization:(NSString *)org withSuccess:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"orgs/%@/public_members/%@", org, user] requestType:UAGithubOrganizationMembershipPublicizeRequest responseType:UAGithubNoContentResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + + +- (void)concealMembershipOfUser:(NSString *)user inOrganization:(NSString *)org withSuccess:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"orgs/%@/public_members/%@", org, user] requestType:UAGithubOrganizationMembershipConcealRequest responseType:UAGithubNoContentResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + + +#pragma mark Teams + +- (void)teamsInOrganization:(NSString *)org withSuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"orgs/%@/teams", org] requestType:UAGithubTeamsRequest responseType:UAGithubTeamsResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)team:(NSInteger)teamId withSuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"teams/%ld", teamId] requestType:UAGithubTeamRequest responseType:UAGithubTeamResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)createTeam:(NSDictionary *)teamDictionary inOrganization:(NSString *)org withSuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"orgs/%@/teams", org] requestType:UAGithubTeamCreateRequest responseType:UAGithubTeamResponse withParameters:teamDictionary error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)editTeam:(NSInteger)teamId withDictionary:(NSDictionary *)teamDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"teams/%ld", teamId] requestType:UAGithubTeamUpdateRequest responseType:UAGithubTeamResponse withParameters:teamDictionary error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)deleteTeam:(NSInteger)teamId withSuccess:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"teams/%ld", teamId] requestType:UAGithubTeamDeleteRequest responseType:UAGithubNoContentResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + + +- (void)membersOfTeam:(NSInteger)teamId withSuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"teams/%ld/members", teamId] requestType:UAGithubTeamMembersRequest responseType:UAGithubUsersResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)user:(NSString *)user isMemberOfTeam:(NSInteger)teamId withSuccess:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"teams/%ld/members/%@", teamId, user] requestType:UAGithubTeamMembershipStatusRequest responseType:UAGithubNoContentResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + + +- (void)addUser:(NSString *)user toTeam:(NSInteger)teamId withSuccess:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"teams/%ld/members/%@", teamId, user] requestType:UAGithubTeamMemberAddRequest responseType:UAGithubNoContentResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + + +- (void)removeUser:(NSString *)user fromTeam:(NSInteger)teamId withSuccess:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"teams/%ld/members/%@", teamId, user] requestType:UAGithubTeamMemberRemoveRequest responseType:UAGithubNoContentResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + + +- (void)repositoriesForTeam:(NSInteger)teamId withSuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"teams/%ld/repos", teamId] requestType:UAGithubRepositoriesRequest responseType:UAGithubRepositoriesResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)repository:(NSString *)repositoryPath isManagedByTeam:(NSInteger)teamId withSuccess:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"teams/%ld/repos/%@", teamId, repositoryPath] requestType:UAGithubTeamRepositoryManagershipStatusRequest responseType:UAGithubNoContentResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + + +- (void)addRepository:(NSString *)repositoryPath toTeam:(NSInteger)teamId withSuccess:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"teams/%ld/repos/%@", teamId, repositoryPath] requestType:UAGithubTeamRepositoryManagershipAddRequest responseType:UAGithubNoContentResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + + +- (void)removeRepository:(NSString *)repositoryPath fromTeam:(NSInteger)teamId withSuccess:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"teams/%ld/repos/%@", teamId, repositoryPath] requestType:UAGithubTeamRepositoryManagershipRemoveRequest responseType:UAGithubNoContentResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + + +#pragma mark +#pragma mark Pull Requests +#pragma mark + +- (void)pullRequestsForRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/pulls", repositoryPath] requestType:UAGithubPullRequestsRequest responseType:UAGithubPullRequestsResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)pullRequest:(NSInteger)pullRequestId forRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/pulls/%ld", repositoryPath, pullRequestId] requestType:UAGithubPullRequestRequest responseType:UAGithubPullRequestResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)createPullRequest:(NSDictionary *)pullRequestDictionary forRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/pulls", repositoryPath] requestType:UAGithubPullRequestCreateRequest responseType:UAGithubPullRequestResponse withParameters:pullRequestDictionary error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)updatePullRequest:(NSInteger)pullRequestId forRepository:(NSString *)repositoryPath withDictionary:(NSDictionary *)pullRequestDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/pulls/%ld", repositoryPath, pullRequestId] requestType:UAGithubPullRequestUpdateRequest responseType:UAGithubPullRequestResponse withParameters:pullRequestDictionary error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)commitsInPullRequest:(NSInteger)pullRequestId forRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/pulls/%ld/commits", repositoryPath, pullRequestId] requestType:UAGithubPullRequestCommitsRequest responseType:UAGithubPullRequestCommitsResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)filesInPullRequest:(NSInteger)pullRequestId forRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/pulls/%ld/files", repositoryPath, pullRequestId] requestType:UAGithubPullRequestFilesRequest responseType:UAGithubPullRequestFilesResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)pullRequest:(NSInteger)pullRequestId isMergedForRepository:(NSString *)repositoryPath success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/pulls/%ld/merge", repositoryPath, pullRequestId] requestType:UAGithubPullRequestMergeStatusRequest responseType:UAGithubNoContentResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + + +- (void)mergePullRequest:(NSInteger)pullRequestId forRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/pulls/%ld/merge", repositoryPath, pullRequestId] requestType:UAGithubPullRequestMergeRequest responseType:UAGithubPullRequestMergeSuccessStatusResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +#pragma mark Comments + +- (void)commentsForPullRequest:(NSInteger)pullRequestId forRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/pulls/%ld/comments", repositoryPath, pullRequestId] requestType:UAGithubPullRequestCommentsRequest responseType:UAGithubPullRequestCommentsResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)pullRequestComment:(NSInteger)commentId forRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/pulls/comments/%ld", repositoryPath, commentId] requestType:UAGithubPullRequestCommentRequest responseType:UAGithubPullRequestCommentResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)createPullRequestComment:(NSDictionary *)commentDictionary forPullRequest:(NSInteger)pullRequestId forRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/pulls/%ld/comments", repositoryPath, pullRequestId] requestType:UAGithubPullRequestCommentCreateRequest responseType:UAGithubPullRequestCommentResponse withParameters:commentDictionary error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)editPullRequestComment:(NSInteger)commentId forRepository:(NSString *)repositoryPath withDictionary:(NSDictionary *)commentDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/pulls/comments/%ld", repositoryPath, commentId] requestType:UAGithubPullRequestCommentUpdateRequest responseType:UAGithubPullRequestCommentResponse withParameters:commentDictionary error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)deletePullRequestComment:(NSInteger)commentId forRepository:(NSString *)repositoryPath success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/pulls/comments/%ld", repositoryPath, commentId] requestType:UAGithubPullRequestCommentDeleteRequest responseType:UAGithubPullRequestCommentResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + + +#pragma mark +#pragma mark Repositories +#pragma mark + +- (void)repositoriesForUser:(NSString *)aUser includeWatched:(BOOL)watched success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self repositoriesForUser:aUser includeWatched:watched page:1 success:successBlock failure:failureBlock]; +} + +#pragma mark TODO watched repos? +- (void)repositoriesForUser:(NSString *)aUser includeWatched:(BOOL)watched page:(int)page success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"users/%@/repos", aUser] requestType:UAGithubRepositoriesRequest responseType:UAGithubRepositoriesResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)repositoriesWithSuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:@"user/repos" requestType:UAGithubRepositoriesRequest responseType:UAGithubRepositoriesResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)createRepositoryWithInfo:(NSDictionary *)infoDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:@"user/repos" requestType:UAGithubRepositoryCreateRequest responseType:UAGithubRepositoryResponse withParameters:infoDictionary error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)repository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@", repositoryPath] requestType:UAGithubRepositoryRequest responseType:UAGithubRepositoryResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)updateRepository:(NSString *)repositoryPath withInfo:(NSDictionary *)infoDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@", repositoryPath] requestType:UAGithubRepositoryUpdateRequest responseType:UAGithubRepositoryResponse withParameters:infoDictionary error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)contributorsForRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/contributitors", repositoryPath] requestType:UAGithubRepositoryContributorsRequest responseType:UAGithubUsersResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)languageBreakdownForRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/languages", repositoryPath] requestType:UAGithubRepositoryLanguageBreakdownRequest responseType:UAGithubRepositoryLanguageBreakdownResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)teamsForRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/teams", repositoryPath] requestType:UAGithubRepositoryTeamsRequest responseType:UAGithubRepositoryTeamsResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)annotatedTagsForRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/tags", repositoryPath] requestType:UAGithubTagsRequest responseType:UAGithubTagsResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)branchesForRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/branches", repositoryPath] requestType:UAGithubBranchesRequest responseType:UAGithubBranchesResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +#pragma mark Collaborators + +- (void)collaboratorsForRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/collaborators", repositoryPath] requestType:UAGithubCollaboratorsRequest responseType:UAGithubCollaboratorsResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)user:(NSString *)user isCollaboratorForRepository:(NSString *)repositoryPath success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/collaborators/%@", repositoryPath, user] requestType:UAGithubCollaboratorsRequest responseType:UAGithubNoContentResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + + +- (void)addCollaborator:(NSString *)collaborator toRepository:(NSString *)repositoryPath success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/collaborators/%@", repositoryPath, collaborator] requestType:UAGithubCollaboratorAddRequest responseType:UAGithubCollaboratorsResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + + +- (void)removeCollaborator:(NSString *)collaborator fromRepository:(NSString *)repositoryPath success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/collaborators/%@", repositoryPath, collaborator] requestType:UAGithubCollaboratorRemoveRequest responseType:UAGithubCollaboratorsResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + + +#pragma mark Commits + +- (void)commitsForRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/commits", repositoryPath] requestType:UAGithubCommitsRequest responseType:UAGithubCommitsResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)commit:(NSString *)commitSha inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/commits/%@", repositoryPath, commitSha] requestType:UAGithubCommitRequest responseType:UAGithubCommitResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +#pragma mark Commit Comments + +- (void)commitCommentsForRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/comments", repositoryPath] requestType:UAGithubCommitCommentsRequest responseType:UAGithubCommitCommentsResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)commitCommentsForCommit:(NSString *)sha inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/commits/%@/comments", repositoryPath, sha] requestType:UAGithubCommitCommentRequest responseType:UAGithubCommitCommentsResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)addCommitComment:(NSDictionary *)commentDictionary forCommit:(NSString *)sha inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/commits/%@/comments", repositoryPath, sha] requestType:UAGithubCommitCommentAddRequest responseType:UAGithubCommitCommentResponse withParameters:commentDictionary error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)commitComment:(NSInteger)commentId inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/comments/%ld", repositoryPath, commentId] requestType:UAGithubCommitCommentRequest responseType:UAGithubCommitCommentResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)editCommitComment:(NSInteger)commentId inRepository:(NSString *)repositoryPath withDictionary:(NSDictionary *)infoDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/comments/%ld", repositoryPath, commentId] requestType:UAGithubCommitCommentEditRequest responseType:UAGithubCommitCommentResponse withParameters:infoDictionary error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)deleteCommitComment:(NSInteger)commentId inRepository:(NSString *)repositoryPath success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/comments/%ld", repositoryPath, commentId] requestType:UAGithubCommitCommentDeleteRequest responseType:UAGithubNoContentResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + + +#pragma mark Downloads + +- (void)downloadsForRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/downloads", repositoryPath] requestType:UAGithubDownloadsRequest responseType:UAGithubDownloadsResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)download:(NSInteger)downloadId inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/downloads/%ld", repositoryPath, downloadId] requestType:UAGithubDownloadRequest responseType:UAGithubDownloadResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)addDownloadToRepository:(NSString *)repositoryPath withDictionary:(NSDictionary *)downloadDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/downloads", repositoryPath] requestType:UAGithubDownloadAddRequest responseType:UAGithubDownloadResponse withParameters:downloadDictionary error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)deleteDownload:(NSInteger)downloadId fromRepository:(NSString *)repositoryPath success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/downloads/%ld", repositoryPath, downloadId] requestType:UAGithubDownloadDeleteRequest responseType:UAGithubNoContentResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + + +#pragma mark Forks + +- (void)forksForRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/forks", repositoryPath] requestType:UAGithubRepositoryForksRequest responseType:UAGithubRepositoriesResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)forkRepository:(NSString *)repositoryPath inOrganization:(NSString *)org success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + if (org) + { + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/forks", repositoryPath] requestType:UAGithubRepositoryForkRequest responseType:UAGithubRepositoryResponse withParameters:[NSDictionary dictionaryWithObject:org forKey:@"org"] error:nil];} success:successBlock failure:failureBlock]; + } + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/forks", repositoryPath] requestType:UAGithubRepositoryForkRequest responseType:UAGithubRepositoryResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)forkRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self forkRepository:repositoryPath inOrganization:nil success:successBlock failure:failureBlock]; +} + + +#pragma mark Keys + +- (void)deployKeysForRepository:(NSString *)repositoryName success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/keys", repositoryName] requestType:UAGithubDeployKeysRequest responseType:UAGithubDeployKeysResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)deployKey:(NSInteger)keyId forRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/keys/%ld", repositoryPath, keyId] requestType:UAGithubDeployKeyRequest responseType:UAGithubDeployKeyResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)addDeployKey:(NSString *)keyData withTitle:(NSString *)keyTitle ToRepository:(NSString *)repositoryName success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:keyData, @"key", keyTitle, @"title", nil]; + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/keys", repositoryName] requestType:UAGithubDeployKeyAddRequest responseType:UAGithubDeployKeysResponse withParameters:params error:nil];} success:successBlock failure:failureBlock]; + +} + + +- (void)editDeployKey:(NSInteger)keyId inRepository:(NSString *)repositoryPath withDictionary:(NSDictionary *)keyDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/keys/%ld", repositoryPath, keyId] requestType:UAGithubDeployKeyEditRequest responseType:UAGithubDeployKeyResponse withParameters:keyDictionary error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)deleteDeployKey:(NSInteger)keyId fromRepository:(NSString *)repositoryName success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/keys/%ld", repositoryName, keyId] requestType:UAGithubDeployKeyDeleteRequest responseType:UAGithubNoContentResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; + +} + + +#pragma mark Watching + +- (void)watchersForRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/watchers", repositoryPath] requestType:UAGithubUsersRequest responseType:UAGithubUsersResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)watchedRepositoriesForUser:(NSString *)user success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"users/%@/watched", user] requestType:UAGithubRepositoriesRequest responseType:UAGithubRepositoriesResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)watchedRepositoriessuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:@"user/watched" requestType:UAGithubRepositoriesRequest responseType:UAGithubRepositoriesResponse error:nil];} success:successBlock failure:failureBlock]; +} + + + +- (void)repositoryIsWatched:(NSString *)repositoryPath success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"user/watched/%@", repositoryPath] requestType:UAGithubRepositoryWatchingRequest responseType:UAGithubNoContentResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + + +- (void)watchRepository:(NSString *)repositoryPath success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"user/watched/%@", repositoryPath] requestType:UAGithubRepositoryWatchRequest responseType:UAGithubNoContentResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + + +- (void)unwatchRepository:(NSString *)repositoryPath success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"user/watched/%@", repositoryPath] requestType:UAGithubRepositoryUnwatchRequest responseType:UAGithubNoContentResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + + +#pragma mark Hooks + +- (void)hooksForRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/hooks", repositoryPath] requestType:UAGithubRepositoryHooksRequest responseType:UAGithubRepositoryHooksResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)hook:(NSInteger)hookId forRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/hooks/%ld", repositoryPath, hookId] requestType:UAGithubRepositoryHookRequest responseType:UAGithubRepositoryHookResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)addHook:(NSDictionary *)hookDictionary forRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/hooks", repositoryPath] requestType:UAGithubRepositoryHookAddRequest responseType:UAGithubRepositoryHookResponse withParameters:hookDictionary error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)editHook:(NSInteger)hookId forRepository:(NSString *)repositoryPath withDictionary:(NSDictionary *)hookDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/hooks/%ld", repositoryPath, hookId] requestType:UAGithubRepositoryHookEditRequest responseType:UAGithubRepositoryHookResponse withParameters:hookDictionary error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)testHook:(NSInteger)hookId forRepository:(NSString *)repositoryPath success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/hooks/%ld", repositoryPath, hookId] requestType:UAGithubRepositoryHookTestRequest responseType:UAGithubNoContentResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + + +- (void)deleteHook:(NSInteger)hookId fromRepository:(NSString *)repositoryPath success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/hooks/%ld", repositoryPath, hookId] requestType:UAGithubRepositoryHookDeleteRequest responseType:UAGithubNoContentResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + + +#pragma mark +#pragma mark Users +#pragma mark + +- (void)user:(NSString *)user success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"users/%@", user] requestType:UAGithubUserRequest responseType:UAGithubUserResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)userWithSuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:@"user" requestType:UAGithubUserRequest responseType:UAGithubUserResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)editUser:(NSDictionary *)userDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:@"user" requestType:UAGithubUserEditRequest responseType:UAGithubUserResponse withParameters:userDictionary error:nil];} success:successBlock failure:failureBlock]; +} + + +#pragma mark Emails + +- (void)emailAddressessuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:@"user/emails" requestType:UAGithubEmailsRequest responseType:UAGithubEmailsResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)addEmailAddresses:(NSArray *)emails success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:@"user/emails" requestType:UAGithubEmailAddRequest responseType:UAGithubEmailsResponse withParameters:emails error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)deleteEmailAddresses:(NSArray *)emails success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:@"user/emails" requestType:UAGithubEmailDeleteRequest responseType:UAGithubNoContentResponse withParameters:emails error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + + +#pragma mark Followers +// List a user's followers +- (void)followers:(NSString *)user success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"users/%@/followers", user] requestType:UAGithubUserRequest responseType:UAGithubFollowersResponse error:nil];} success:successBlock failure:failureBlock]; + +} + +// List the authenticated user's followers +- (void)followersWithSuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:@"user/followers" requestType:UAGithubUsersRequest responseType:UAGithubFollowersResponse error:nil];} success:successBlock failure:failureBlock]; +} + +// List who a user is following +- (void)following:(NSString *)user success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"users/%@/following", user] requestType:UAGithubUserRequest responseType:UAGithubFollowingResponse error:nil];} success:successBlock failure:failureBlock]; +} + +// List who the authenticated user is following +- (void)followingWithSuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:@"user/following" requestType:UAGithubUsersRequest responseType:UAGithubUsersResponse error:nil];} success:successBlock failure:failureBlock]; +} + +// Check if the authenticated user follows another user +- (void)follows:(NSString *)user success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"user/following/%@", user] requestType:UAGithubFollowingRequest responseType:UAGithubNoContentResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + +// Follow a user +- (void)follow:(NSString *)user success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"user/following/%@", user] requestType:UAGithubFollowRequest responseType:UAGithubNoContentResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; + +} + +// Unfollow a user +- (void)unfollow:(NSString *)user success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"user/following/%@", user] requestType:UAGithubUnfollowRequest responseType:UAGithubNoContentResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + + +#pragma mark Keys + +- (void)publicKeysWithSuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:@"user/keys" requestType:UAGithubPublicKeysRequest responseType:UAGithubPublicKeysResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)publicKey:(NSInteger)keyId success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"user/keys/%ld", keyId] requestType:UAGithubPublicKeyRequest responseType:UAGithubPublicKeyResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)addPublicKey:(NSDictionary *)keyDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:@"user/keys" requestType:UAGithubPublicKeyAddRequest responseType:UAGithubPublicKeyResponse withParameters:keyDictionary error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)updatePublicKey:(NSInteger)keyId withInfo:(NSDictionary *)keyDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"user/keys/%ld", keyId] requestType:UAGithubPublicKeyEditRequest responseType:UAGithubPublicKeyResponse withParameters:keyDictionary error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)deletePublicKey:(NSInteger)keyId success:(UAGithubEngineBooleanSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"user/keys/%ld", keyId] requestType:UAGithubPublicKeyDeleteRequest responseType:UAGithubNoContentResponse error:nil];} booleanSuccess:successBlock failure:failureBlock]; +} + + +- (void)createTagObject:(NSDictionary *)tagDictionary inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/git/tags", repositoryPath] requestType:UAGithubTagObjectCreateRequest responseType:UAGithubAnnotatedTagResponse withParameters:tagDictionary error:nil];} success:successBlock failure:failureBlock]; +} + + +#pragma mark +#pragma mark Events +#pragma mark + +- (void)eventsWithSuccess:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:@"events" requestType:UAGithubEventsRequest responseType:UAGithubEventsResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)eventsForRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/events", repositoryPath] requestType:UAGithubEventsRequest responseType:UAGithubEventsResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)eventsForNetwork:(NSString *)networkPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"networks/%@/events", networkPath] requestType:UAGithubEventsRequest responseType:UAGithubEventsResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)eventsReceivedByUser:(NSString *)user success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"users/%@/received_events", user] requestType:UAGithubEventsRequest responseType:UAGithubEventsResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)eventsPerformedByUser:(NSString *)user success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"users/%@/events", user] requestType:UAGithubEventsRequest responseType:UAGithubEventsResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)publicEventsPerformedByUser:(NSString *)user success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"users/%@/events/public", user] requestType:UAGithubEventsRequest responseType:UAGithubEventsResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)eventsForOrganization:(NSString *)organization user:(NSString *)user success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"users/%@/events/orgs/%@", user, organization] requestType:UAGithubEventsRequest responseType:UAGithubEventsResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)publicEventsForOrganization:(NSString *)organization success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"orgs/%@/events", organization] requestType:UAGithubEventsRequest responseType:UAGithubEventsResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +#pragma mark - +#pragma mark Git Database API +#pragma mark - + +#pragma mark Trees + +- (void)tree:(NSString *)sha inRepository:(NSString *)repositoryPath recursive:(BOOL)recursive success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/git/trees/%@%@", repositoryPath, sha, recursive ? @"?recursive=1" : @""] requestType:UAGithubTreeRequest responseType:UAGithubTreeResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)createTree:(NSDictionary *)treeDictionary inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/git/trees", repositoryPath] requestType:UAGithubTreeCreateRequest responseType:UAGithubTreeResponse withParameters:treeDictionary error:nil];} success:successBlock failure:failureBlock]; +} + + +#pragma mark Blobs + +- (void)blobForSHA:(NSString *)sha inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/git/blobs/%@", repositoryPath, sha] requestType:UAGithubBlobRequest responseType:UAGithubBlobResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)createBlob:(NSDictionary *)blobDictionary inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/git/blobs", repositoryPath] requestType:UAGithubBlobCreateRequest responseType:UAGithubSHAResponse withParameters:blobDictionary error:nil];} success:successBlock failure:failureBlock]; +} + + +#pragma mark References + +- (void)reference:(NSString *)reference inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/git/refs/%@", repositoryPath, reference] requestType:UAGithubReferenceRequest responseType:UAGithubReferenceResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)referencesInRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/git/refs", repositoryPath] requestType:UAGithubReferencesRequest responseType:UAGithubReferencesResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)tagsForRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/git/refs/tags", repositoryPath] requestType:UAGithubReferencesRequest responseType:UAGithubReferencesResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)createReference:(NSDictionary *)refDictionary inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/git/refs", repositoryPath] requestType:UAGithubReferenceCreateRequest responseType:UAGithubReferenceResponse withParameters:refDictionary error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)updateReference:(NSString *)reference inRepository:(NSString *)repositoryPath withDictionary:(NSDictionary *)referenceDictionary success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/git/refs/%@", repositoryPath, reference] requestType:UAGithubReferenceUpdateRequest responseType:UAGithubReferenceResponse withParameters:referenceDictionary error:nil];} success:successBlock failure:failureBlock]; +} + + +#pragma mark Tags + +- (void)tag:(NSString *)sha inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/git/tags/%@", repositoryPath, sha] requestType:UAGithubTagObjectRequest responseType:UAGithubAnnotatedTagResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +#pragma mark Raw Commits + +- (void)rawCommit:(NSString *)commit inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/git/commits/%@", repositoryPath, commit] requestType:UAGithubRawCommitRequest responseType:UAGithubRawCommitResponse error:nil];} success:successBlock failure:failureBlock]; +} + + +- (void)createRawCommit:(NSDictionary *)commitDictionary inRepository:(NSString *)repositoryPath success:(UAGithubEngineSuccessBlock)successBlock failure:(UAGithubEngineFailureBlock)failureBlock +{ + [self invoke:^(id self){[self sendRequest:[NSString stringWithFormat:@"repos/%@/git/commits", repositoryPath] requestType:UAGithubRawCommitCreateRequest responseType:UAGithubRawCommitResponse withParameters:commitDictionary error:nil];} success:successBlock failure:failureBlock]; +} + +@end diff --git a/Pods/UAGithubEngine/UAGithubEngine/UAGithubEngineConstants.h b/Pods/UAGithubEngine/UAGithubEngine/UAGithubEngineConstants.h new file mode 100644 index 0000000..038d900 --- /dev/null +++ b/Pods/UAGithubEngine/UAGithubEngine/UAGithubEngineConstants.h @@ -0,0 +1,18 @@ +// +// UAGithubEngineConstants.h +// IssuesHub +// +// Created by Owain Hunt on 11/11/2010. +// Copyright 2010 Owain R Hunt. All rights reserved. +// + +#import + + +extern NSString * const UAGithubAPILimitReached; + +#define UAGithubReachabilityStatusDidChangeNotification @"UAGithubReachabilityStatusDidChangeNotification" + +#define UAGithubIssueClosedState @"closed" +#define UAGithubIssueOpenState @"open" + diff --git a/Pods/UAGithubEngine/UAGithubEngine/UAGithubEngineConstants.m b/Pods/UAGithubEngine/UAGithubEngine/UAGithubEngineConstants.m new file mode 100644 index 0000000..6fe9fed --- /dev/null +++ b/Pods/UAGithubEngine/UAGithubEngine/UAGithubEngineConstants.m @@ -0,0 +1,14 @@ +// +// UAGithubEngineConstants.m +// IssuesHub +// +// Created by Owain Hunt on 11/11/2010. +// Copyright 2010 Owain R Hunt. All rights reserved. +// + +#import "UAGithubEngineConstants.h" + + +NSString * const UAGithubAPILimitReached = @"UAGithubAPILimitReached"; + + diff --git a/Pods/UAGithubEngine/UAGithubEngine/UAGithubEngineRequestTypes.h b/Pods/UAGithubEngine/UAGithubEngine/UAGithubEngineRequestTypes.h new file mode 100644 index 0000000..9def2ae --- /dev/null +++ b/Pods/UAGithubEngine/UAGithubEngine/UAGithubEngineRequestTypes.h @@ -0,0 +1,232 @@ +// +// UAGithubEngineRequestTypes.h +// UAGithubEngine +// +// Created by Owain Hunt on 05/04/2010. +// Copyright 2010 Owain R Hunt. All rights reserved. +// + + + +typedef enum UAGithubRequestType +{ + UAGithubUsersRequest = 0, // Get more than one non-specific user + UAGithubUserRequest, // Get exactly one specific user + UAGithubUserEditRequest, // Edit the authenticated user + UAGithubEmailsRequest, // Get one or more email addresses + UAGithubEmailAddRequest, // Add one or more email addresses + UAGithubEmailDeleteRequest, // Delete one or more email addresses + UAGithubRepositoriesRequest, // Get more than one non-specific repository + UAGithubRepositoryRequest, // Get exactly one specific repository + UAGithubRepositoryUpdateRequest, // Update repository metadata + UAGithubRepositoryWatchingRequest, // Auth'd user watching a specific repository? + UAGithubRepositoryWatchRequest, // Watch a repository + UAGithubRepositoryUnwatchRequest, // Unwatch a repository + UAGithubRepositoryForksRequest, // Get one or more forks + UAGithubRepositoryForkRequest, // Fork a repository + UAGithubRepositoryCreateRequest, // Create a repository + UAGithubRepositoryPrivatiseRequest, // Make a repository private + UAGithubRepositoryPubliciseRequest, // Make a repository public + UAGithubRepositoryDeleteRequest, // Delete a repository + UAGithubRepositoryDeleteConfirmationRequest, // Confirm deletion of a repository + UAGithubDeployKeysRequest, // Get repository-specific deploy keys + UAGithubDeployKeyRequest, // Get exactly one specific deploy key + UAGithubDeployKeyAddRequest, // Add a repository-specific deploy key + UAGithubDeployKeyEditRequest, // Edit a deploy key + UAGithubDeployKeyDeleteRequest, // Delete a repository-specific deploy key + UAGithubRepositoryLanguageBreakdownRequest, // Get the language breakdown for a repository + UAGithubRepositoryContributorsRequest, // Get one or more contributors + UAGithubRepositoryTeamsRequest, // Get one or more teams + UAGithubTagsRequest, // Tags for a repository + UAGithubBranchesRequest, // Branches for a repository + UAGithubCollaboratorsRequest, // Collaborators for a repository + UAGithubCollaboratorAddRequest, // Add a collaborator + UAGithubCollaboratorRemoveRequest, // Remove a collaborator + UAGithubDownloadsRequest, // Get one or more downloads + UAGithubDownloadRequest, // Get exactly one specific download + UAGithubDownloadAddRequest, // Add a download + UAGithubDownloadDeleteRequest, // Delete a download + UAGithubRepositoryHooksRequest, // Get one or more repository hooks + UAGithubRepositoryHookRequest, // Get one specific repository hook + UAGithubRepositoryHookAddRequest, // Add a repository hook + UAGithubRepositoryHookEditRequest, // Edit a repository hook + UAGithubRepositoryHookTestRequest, // Test a repository hook + UAGithubRepositoryHookDeleteRequest, // Delete a repository hook + UAGithubCommitsRequest, // Get more than one non-specific commit + UAGithubCommitRequest, // Get exactly one specific commit + UAGithubCommitCommentsRequest, // Get one or more commit comments + UAGithubCommitCommentRequest, // Get exactly one commit comment + UAGithubCommitCommentAddRequest, // Add a commit comment + UAGithubCommitCommentEditRequest, // Edit a commit comment + UAGithubCommitCommentDeleteRequest, // Delete a commit comment + UAGithubIssuesOpenRequest, // Get open issues + UAGithubIssuesClosedRequest, // Get closed issues + UAGithubIssuesRequest, // Get all issues + UAGithubIssueRequest, // Get exactly one specific issue + UAGithubIssueAddRequest, // Add an issue + UAGithubIssueEditRequest, // Edit an issue + UAGithubIssueCloseRequest, // Close an issue + UAGithubIssueReopenRequest, // Reopen a closed issue + UAGithubIssueDeleteRequest, // Delete an issue + UAGithubRepositoryLabelsRequest, // Get repository-wide issue labels + UAGithubRepositoryLabelAddRequest, // Add a repository-wide issue label + UAGithubRepositoryLabelEditRequest, // Edit a repository-wide issue label + UAGithubRepositoryLabelRemoveRequest, // Remove a repository-wide issue label + UAGithubIssueLabelsRequest, // Get one or more issue labels + UAGithubIssueLabelRequest, // Get exactly one specific issue label + UAGithubIssueLabelAddRequest, // Add a label to a specific issue + UAGithubIssueLabelRemoveRequest, // Remove a label from a specific issue + UAGithubIssueLabelReplaceRequest, // Replace all labels on a specific issue + UAGithubIssueCommentsRequest, // Get more than one non-specific issue comment + UAGithubIssueCommentRequest, // Get exactly one specific issue comment + UAGithubIssueCommentAddRequest, // Add a comment to an issue + UAGithubIssueCommentEditRequest, // Edit an issue comment + UAGithubIssueCommentDeleteRequest, // Delete an issue comment + UAGithubFollowingRequest, // Following + UAGithubFollowersRequest, // Followers + UAGithubFollowRequest, // Follow a User + UAGithubUnfollowRequest, // Unfollow a user + UAGithubMilestonesRequest, // Get one or more milestones + UAGithubMilestoneRequest, // Get exactly one specific milestone + UAGithubMilestoneCreateRequest, // Create a new milestone + UAGithubMilestoneUpdateRequest, // Edit an existing milestone + UAGithubMilestoneDeleteRequest, // Delete a milestone + UAGithubPublicKeysRequest, // Get one or more public keys + UAGithubPublicKeyRequest, // Get exactly one public key + UAGithubPublicKeyAddRequest, // Add a public key + UAGithubPublicKeyEditRequest, // Edit a public key + UAGithubPublicKeyDeleteRequest, // Delete a public key + UAGithubTreeRequest, // Get the listing of a tree by SHA + UAGithubTreeCreateRequest, // Create a new tree + UAGithubBlobsRequest, // Get the names and SHAs of all blobs for a specific tree SHA + UAGithubBlobRequest, // Get data about a single blob by tree SHA and path + UAGithubBlobCreateRequest, // Create a new blob + UAGithubRawBlobRequest, // Get the raw data for a blob + UAGithubReferencesRequest, // Get one or more references + UAGithubReferenceRequest, // Get exactly one reference + UAGithubReferenceCreateRequest, // Create a new reference + UAGithubReferenceUpdateRequest, // Edit an existing reference + UAGithubTagObjectRequest, // Get exactly one annotated tag object + UAGithubTagObjectCreateRequest, // Create a new annotated tag object + UAGithubRawCommitRequest, // Get exactly one raw commit + UAGithubRawCommitCreateRequest, // Create a new raw commit + UAGithubGistsRequest, // Get one or more gists + UAGithubGistRequest, // Get exactly one gist + UAGithubGistCreateRequest, // Create a new gist + UAGithubGistUpdateRequest, // Edit a gist + UAGithubGistStarRequest, // Star a gist + UAGithubGistUnstarRequest, // Unstar a gist + UAGithubGistStarStatusRequest, // Get star status of a gist + UAGithubGistForkRequest, // Fork a gist + UAGithubGistDeleteRequest, // Delete a gist + UAGithubGistCommentsRequest, // Get one or more gist comments + UAGithubGistCommentRequest, // Get exactly one gist comment + UAGithubGistCommentCreateRequest, // Create a new gist comment + UAGithubGistCommentUpdateRequest, // Edit a gist comment + UAGithubGistCommentDeleteRequest, // Delete a gist comment + UAGithubIssueEventsRequest, // Get one or more issue events + UAGithubIssueEventRequest, // Get exactly one issue event + UAGithubPullRequestsRequest, // Get one or more pull requests + UAGithubPullRequestRequest, // Get exactly one pull request + UAGithubPullRequestCreateRequest, // Create a pull request + UAGithubPullRequestUpdateRequest, // Edit a pull request + UAGithubPullRequestCommitsRequest, // Get commits in a pull request + UAGithubPullRequestFilesRequest, // Get files in a pull request + UAGithubPullRequestMergeStatusRequest, // Get the merge status of a pull request + UAGithubPullRequestMergeRequest, // Merge a pull request + UAGithubPullRequestCommentsRequest, // Get one or more pull request comments + UAGithubPullRequestCommentRequest, // Get exactly one pull request comments + UAGithubPullRequestCommentCreateRequest, // Create a pull request comment + UAGithubPullRequestCommentUpdateRequest, // Update a pull request comment + UAGithubPullRequestCommentDeleteRequest, // Delete a pull request comment + UAGithubEventsRequest, // Get one or more events of unspecified type + UAGithubOrganizationsRequest, // Get one or more organizations + UAGithubOrganizationRequest, // Get exactly one organization + UAGithubOrganizationUpdateRequest, // Update an existing organization + UAGithubOrganizationMembersRequest, // Get one or more organization members + UAGithubOrganizationMembershipStatusRequest, // Get whether user is member of a specified organization + UAGithubOrganizationMemberRemoveRequest, // Remove a user from am organization + UAGithubOrganizationMembershipPublicizeRequest, // Publicize user's membership of organization + UAGithubOrganizationMembershipConcealRequest, // Concel user's membership of organization + UAGithubTeamsRequest, // Get one or more organization teams + UAGithubTeamRequest, // Get exactly one organization team + UAGithubTeamCreateRequest, // Create a new team + UAGithubTeamUpdateRequest, // Update an existing team + UAGithubTeamDeleteRequest, // Delete an existing team + UAGithubTeamMembersRequest, // Get one or more team members + UAGithubTeamMembershipStatusRequest, + UAGithubTeamMemberAddRequest, + UAGithubTeamMemberRemoveRequest, // Remove a user from a team + UAGithubTeamRepositoryManagershipStatusRequest, // Get whether a team manages a specific repository + UAGithubTeamRepositoryManagershipAddRequest, // Add a specific repository to a team + UAGithubTeamRepositoryManagershipRemoveRequest, // Remove a specific repository from a team +} UAGithubRequestType; + + +typedef enum UAGithubResponseType +{ + UAGithubNoContentResponse = 0, // No content expected + UAGithubUsersResponse, // One or more users + UAGithubUserResponse, // Exactly one user + UAGithubEmailsResponse, // One or more email addresses + UAGithubRepositoriesResponse, // One or more repositories + UAGithubRepositoryResponse, // Exactly one repository + UAGithubRepositoryTeamsResponse, // One or more teams + UAGithubDeployKeysResponse, // One or more deploy keys + UAGithubDeployKeyResponse, // Exactly one deploy key + UAGithubDownloadsResponse, // One or more downloads + UAGithubDownloadResponse, // Exactly one download + UAGithubRepositoryLanguageBreakdownResponse, // Breakdown in language-bytes pairs + UAGithubBranchesResponse, // One or more branches + UAGithubCollaboratorsResponse, // One or more users + UAGithubRepositoryHooksResponse, // One or more repository hooks + UAGithubRepositoryHookResponse, // Exactly one repository hook + UAGithubCommitsResponse, // One or more commits + UAGithubCommitResponse, // Exactly one commit + UAGithubCommitCommentsResponse, // One or more commit comments + UAGithubCommitCommentResponse, // Exactly one commit comment + UAGithubIssuesResponse, // One or more issues + UAGithubIssueResponse, // Exactly one issue + UAGithubIssueCommentsResponse, // One or more issue comments + UAGithubIssueCommentResponse, // Exactly one issue comment + UAGithubIssueLabelsResponse, // One or more issue labels + UAGithubIssueLabelResponse, // Exactly one issue label + UAGithubRepositoryLabelsResponse, // One or more repository-wide issue labels + UAGithubRepositoryLabelResponse, // Exactly one repository-wide issue label + UAGithubBlobsResponse, // Name and SHA for all files in given tree SHA + UAGithubBlobResponse, // Metadata and file data for given tree SHA and path + UAGithubFollowingResponse, // Following + UAGithubFollowersResponse, // Followers + UAGithubFollowedResponse, // User was followed + UAGithubUnfollowedResponse, // User was unfollowed + UAGithubMilestonesResponse, // One or more milestones + UAGithubMilestoneResponse, // Exactly one milestone + UAGithubPublicKeysResponse, // One or more public keys + UAGithubPublicKeyResponse, // Exactly one public key + UAGithubSHAResponse, // SHA + UAGithubTreeResponse, // Metadata for all files in given commit + UAGithubReferencesResponse, // One or more references + UAGithubReferenceResponse, // Exactly one reference + UAGithubAnnotatedTagsResponse, // One or more annotated tag objects + UAGithubAnnotatedTagResponse, // Exactly one annotated tag object + UAGithubRawCommitResponse, // Exactly one raw commit + UAGithubGistsResponse, // One or more gists + UAGithubGistResponse, // Exactly one gist + UAGithubGistCommentsResponse, // One or more gist comments + UAGithubGistCommentResponse, // Exactly one gist comment + UAGithubIssueEventsResponse, // One or more issue events + UAGithubIssueEventResponse, // Exactly one issue event + UAGithubPullRequestsResponse, // One or more pull requests + UAGithubPullRequestResponse, // Exactly one pull request + UAGithubPullRequestMergeSuccessStatusResponse, // Success or failure of merge attempt + UAGithubPullRequestCommitsResponse, // One or more pull request commits + UAGithubPullRequestFilesResponse, // One or more pull request files + UAGithubPullRequestCommentsResponse, // One or more pull request comments + UAGithubPullRequestCommentResponse, // Exactly one pull request comment + UAGithubTagsResponse, // Tags in name-SHA pairs + UAGithubEventsResponse, // One or more events of unspecified type + UAGithubOrganizationsResponse, // One or more organizations + UAGithubOrganizationResponse, // Exactly one organization + UAGithubTeamsResponse, // One or more organization teams + UAGithubTeamResponse, // Exactly one team +} UAGithubResponseType; diff --git a/Pods/UAGithubEngine/UAGithubEngine/UAGithubJSONParser.h b/Pods/UAGithubEngine/UAGithubEngine/UAGithubJSONParser.h new file mode 100644 index 0000000..a0efa27 --- /dev/null +++ b/Pods/UAGithubEngine/UAGithubEngine/UAGithubJSONParser.h @@ -0,0 +1,20 @@ +// +// UAGithubJSONParser.h +// UAGithubEngine +// +// Created by Owain Hunt on 27/07/2010. +// Copyright 2010 Owain R Hunt. All rights reserved. +// + +#import + +#import "UAGithubEngineRequestTypes.h" + +@interface UAGithubJSONParser : NSObject +{ + +} + ++ (id)parseJSON:(NSData *)theJSON error:(NSError **)error; + +@end diff --git a/Pods/UAGithubEngine/UAGithubEngine/UAGithubJSONParser.m b/Pods/UAGithubEngine/UAGithubEngine/UAGithubJSONParser.m new file mode 100644 index 0000000..70e93ac --- /dev/null +++ b/Pods/UAGithubEngine/UAGithubEngine/UAGithubJSONParser.m @@ -0,0 +1,53 @@ +// +// UAGithubJSONParser.m +// UAGithubEngine +// +// Created by Owain Hunt on 27/07/2010. +// Copyright 2010 Owain R Hunt. All rights reserved. +// + +#import "UAGithubJSONParser.h" +#import "NSArray+Utilities.h" +#import "NSString+UAGithubEngineUtilities.h" + +@implementation UAGithubJSONParser + ++ (id)parseJSON:(NSData *)theJSON error:(NSError **)error; +{ + NSArray *dateElements = [NSArray arrayWithObjects:@"created_at", @"updated_at", @"closed_at", @"due_on", @"pushed_at", @"committed_at", @"merged_at", @"date", @"expirationdate", nil]; + NSMutableArray *jsonArray; + id jsonObj = [NSJSONSerialization JSONObjectWithData:theJSON options:NSJSONReadingMutableLeaves|NSJSONReadingMutableContainers|NSJSONReadingAllowFragments error:error]; + + jsonArray = ([jsonObj isKindOfClass:[NSDictionary class]]) ? [NSMutableArray arrayWithObject:jsonObj] : [jsonObj mutableCopy]; + + if (!error) + { + if ([[[jsonArray firstObject] allKeys] containsObject:@"error"]) + { + NSDictionary *dictionary = [jsonArray firstObject]; + *error = [NSError errorWithDomain:@"UAGithubEngineGithubError" code:0 userInfo:[NSDictionary dictionaryWithObject:[dictionary objectForKey:@"error"] forKey:@"errorMessage"]]; + NSLog(@"Error: %@", *error); + } + + for (NSMutableDictionary *theDictionary in jsonArray) + { + NSArray *keys = [theDictionary allKeys]; + for (NSString *keyString in dateElements) + { + if ([keys containsObject:keyString]) { + NSDate *date = [[theDictionary objectForKey:keyString] dateFromGithubDateString]; + if (date != nil) + { + [theDictionary setObject:date forKey:keyString]; + } + } + } + } + + } + + return jsonArray; +} + + +@end diff --git a/Pods/UAGithubEngine/UAGithubEngine/UAGithubURLConnection.h b/Pods/UAGithubEngine/UAGithubEngine/UAGithubURLConnection.h new file mode 100644 index 0000000..9eebdac --- /dev/null +++ b/Pods/UAGithubEngine/UAGithubEngine/UAGithubURLConnection.h @@ -0,0 +1,29 @@ +// +// UAGithubURLConnection.h +// UAGithubEngine +// +// Created by Owain Hunt on 26/04/2010. +// Copyright 2010 Owain R Hunt. All rights reserved. +// + +#import +#import "UAGithubEngineRequestTypes.h" + +@interface UAGithubURLConnection : NSURLConnection +{ + NSMutableData *data; + UAGithubRequestType requestType; + UAGithubResponseType responseType; + NSString *identifier; +} + + +@property (nonatomic, strong) NSMutableData *data; +@property (nonatomic, assign) UAGithubRequestType requestType; +@property (nonatomic, assign) UAGithubResponseType responseType; +@property (nonatomic, strong) NSString *identifier; + ++ (id)asyncRequest:(NSURLRequest *)request success:(id(^)(NSData *, NSURLResponse *))successBlock failure:(id(^)(NSError *))failureBlock_; ++ (id)asyncRequest:(NSURLRequest *)request success:(id(^)(NSData *, NSURLResponse *))successBlock error:(NSError *__strong *)error; + +@end diff --git a/Pods/UAGithubEngine/UAGithubEngine/UAGithubURLConnection.m b/Pods/UAGithubEngine/UAGithubEngine/UAGithubURLConnection.m new file mode 100644 index 0000000..d7cbcd4 --- /dev/null +++ b/Pods/UAGithubEngine/UAGithubEngine/UAGithubURLConnection.m @@ -0,0 +1,64 @@ +// +// UAGithubURLConnection.m +// UAGithubEngine +// +// Created by Owain Hunt on 26/04/2010. +// Copyright 2010 Owain R Hunt. All rights reserved. +// + +#import "UAGithubURLConnection.h" +#import "NSString+UUID.h" + + +@implementation UAGithubURLConnection + +@synthesize data, requestType, responseType, identifier; + ++ (id)asyncRequest:(NSURLRequest *)request success:(id(^)(NSData *, NSURLResponse *))successBlock failure:(id(^)(NSError *))failureBlock_ +{ + // This has to be dispatch_sync rather than _async, otherwise our successBlock executes before the request is done and we're all bass-ackwards. + //dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + + @autoreleasepool + { + NSLog(@"New %@ connection: %@", request.HTTPMethod, request); + + NSURLResponse *response = nil; + NSError *error = nil; + NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; + + if (error) { + return failureBlock_(error); + } else { + return successBlock(data,response); + } + } + + //}); +} + ++ (id)asyncRequest:(NSURLRequest *)request success:(id(^)(NSData *, NSURLResponse *))successBlock error:(NSError *__strong *)error +{ + // This has to be dispatch_sync rather than _async, otherwise our successBlock executes before the request is done and we're all bass-ackwards. + //dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + + @autoreleasepool + { + NSLog(@"New %@ connection: %@", request.HTTPMethod, request); + + NSURLResponse *response = nil; + NSError *connectionError = nil; + NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&connectionError]; + + if (connectionError) { + *error = connectionError; + return nil; + } else { + return successBlock(data,response); + } + } + + //}); +} + +@end diff --git a/Pods/UAGithubEngine/UAGithubEngine/UAReachability.h b/Pods/UAGithubEngine/UAGithubEngine/UAReachability.h new file mode 100644 index 0000000..5b7c965 --- /dev/null +++ b/Pods/UAGithubEngine/UAGithubEngine/UAReachability.h @@ -0,0 +1,27 @@ +// +// UAReachability.h +// ReachTest +// +// Created by Owain Hunt on 10/01/2011. +// Copyright 2011 Owain R Hunt. All rights reserved. +// + +#import +#import + +typedef enum { + NotReachable = 0, + Reachable, +} NetworkStatus; + + +@interface UAReachability : NSObject { + SCNetworkReachabilityRef reachabilityRef; +} + + +- (NetworkStatus)networkStatusForFlags:(SCNetworkReachabilityFlags)flags; +- (NetworkStatus)currentReachabilityStatus; + + +@end diff --git a/Pods/UAGithubEngine/UAGithubEngine/UAReachability.m b/Pods/UAGithubEngine/UAGithubEngine/UAReachability.m new file mode 100644 index 0000000..b6af2e1 --- /dev/null +++ b/Pods/UAGithubEngine/UAGithubEngine/UAReachability.m @@ -0,0 +1,59 @@ +// +// UAReachability.m +// ReachTest +// +// Created by Owain Hunt on 10/01/2011. +// Copyright 2011 Owain R Hunt. All rights reserved. +// + +#import "UAReachability.h" +#import "UAGithubEngineConstants.h" +#import + +@implementation UAReachability + +// http://www.cocoabuilder.com/archive/cocoa/166350-detecting-internet-code-part-1.html#166364 + +static void reachabilityCallback(SCNetworkReachabilityRef target, SCNetworkReachabilityFlags flags, void* info) +{ + [[NSNotificationCenter defaultCenter] postNotificationName:UAGithubReachabilityStatusDidChangeNotification object:(__bridge NSDictionary *)info]; +} + + +- (void)dealloc +{ + if (reachabilityRef != NULL) + { + CFRelease(reachabilityRef); + } +} + + +- (id)init +{ + if ((self = [super init])) + { + reachabilityRef = SCNetworkReachabilityCreateWithName(NULL, [@"www.github.com" UTF8String]); + SCNetworkReachabilityContext context = {0, (__bridge void *)(self), CFRetain, CFRelease, NULL}; + SCNetworkReachabilitySetCallback(reachabilityRef, reachabilityCallback, &context); + SCNetworkReachabilityScheduleWithRunLoop(reachabilityRef, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode); + } + + return self; +} + + +- (NetworkStatus)currentReachabilityStatus +{ + SCNetworkReachabilityFlags flags; + return (SCNetworkReachabilityGetFlags(reachabilityRef, &flags) && (flags & kSCNetworkReachabilityFlagsReachable) && !(flags & kSCNetworkReachabilityFlagsConnectionRequired)); +} + + +- (NetworkStatus)networkStatusForFlags:(SCNetworkReachabilityFlags)flags +{ + return (flags & kSCNetworkReachabilityFlagsReachable) && !(flags & kSCNetworkReachabilityFlagsConnectionRequired); +} + + +@end