mygithug 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (442) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +8 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +18 -0
  5. data/Gemfile +4 -0
  6. data/LICENCE.txt +22 -0
  7. data/README.md +55 -0
  8. data/Rakefile +6 -0
  9. data/bin/mygithug +4 -0
  10. data/levels/add.rb +30 -0
  11. data/levels/alias_lg.rb +55 -0
  12. data/levels/alias_st.rb +22 -0
  13. data/levels/bisect/.githug/COMMIT_EDITMSG +1 -0
  14. data/levels/bisect/.githug/HEAD +1 -0
  15. data/levels/bisect/.githug/ORIG_HEAD +1 -0
  16. data/levels/bisect/.githug/config +7 -0
  17. data/levels/bisect/.githug/description +1 -0
  18. data/levels/bisect/.githug/gitk.cache +3 -0
  19. data/levels/bisect/.githug/hooks/applypatch-msg.sample +15 -0
  20. data/levels/bisect/.githug/hooks/commit-msg.sample +24 -0
  21. data/levels/bisect/.githug/hooks/post-commit.sample +8 -0
  22. data/levels/bisect/.githug/hooks/post-receive.sample +15 -0
  23. data/levels/bisect/.githug/hooks/post-update.sample +8 -0
  24. data/levels/bisect/.githug/hooks/pre-applypatch.sample +14 -0
  25. data/levels/bisect/.githug/hooks/pre-commit.sample +46 -0
  26. data/levels/bisect/.githug/hooks/pre-rebase.sample +172 -0
  27. data/levels/bisect/.githug/hooks/prepare-commit-msg.sample +36 -0
  28. data/levels/bisect/.githug/hooks/update.sample +128 -0
  29. data/levels/bisect/.githug/index +0 -0
  30. data/levels/bisect/.githug/info/exclude +6 -0
  31. data/levels/bisect/.githug/info/refs +9 -0
  32. data/levels/bisect/.githug/logs/HEAD +21 -0
  33. data/levels/bisect/.githug/logs/refs/heads/master +21 -0
  34. data/levels/bisect/.githug/objects/info/packs +2 -0
  35. data/levels/bisect/.githug/objects/pack/pack-59fab357f3158a9640633de6a3326ed79a2b4fe6.idx +0 -0
  36. data/levels/bisect/.githug/objects/pack/pack-59fab357f3158a9640633de6a3326ed79a2b4fe6.pack +0 -0
  37. data/levels/bisect/.githug/packed-refs +10 -0
  38. data/levels/bisect/makefile +2 -0
  39. data/levels/bisect/prog.rb +3 -0
  40. data/levels/bisect/test.rb +4 -0
  41. data/levels/bisect.rb +15 -0
  42. data/levels/blame/.githug/COMMIT_EDITMSG +1 -0
  43. data/levels/blame/.githug/HEAD +1 -0
  44. data/levels/blame/.githug/config +5 -0
  45. data/levels/blame/.githug/description +1 -0
  46. data/levels/blame/.githug/hooks/applypatch-msg.sample +15 -0
  47. data/levels/blame/.githug/hooks/commit-msg.sample +24 -0
  48. data/levels/blame/.githug/hooks/post-commit.sample +8 -0
  49. data/levels/blame/.githug/hooks/post-receive.sample +15 -0
  50. data/levels/blame/.githug/hooks/post-update.sample +8 -0
  51. data/levels/blame/.githug/hooks/pre-applypatch.sample +14 -0
  52. data/levels/blame/.githug/hooks/pre-commit.sample +46 -0
  53. data/levels/blame/.githug/hooks/pre-rebase.sample +169 -0
  54. data/levels/blame/.githug/hooks/prepare-commit-msg.sample +36 -0
  55. data/levels/blame/.githug/hooks/update.sample +128 -0
  56. data/levels/blame/.githug/index +0 -0
  57. data/levels/blame/.githug/info/exclude +6 -0
  58. data/levels/blame/.githug/logs/HEAD +5 -0
  59. data/levels/blame/.githug/logs/refs/heads/master +5 -0
  60. data/levels/blame/.githug/objects/00/d6bf5341b263ccaf32e7973be55126eb30a343 +0 -0
  61. data/levels/blame/.githug/objects/05/07c26fed4d111a8344763be9af68af90f0ecf2 +0 -0
  62. data/levels/blame/.githug/objects/09/4094808dc6dc336c93c8602190a9e5f7bd6a11 +2 -0
  63. data/levels/blame/.githug/objects/21/15d78864000292628872941b14521f90187eed +0 -0
  64. data/levels/blame/.githug/objects/31/11dda1f5b08d50ac44b99acabfa54f1e6e72b0 +2 -0
  65. data/levels/blame/.githug/objects/50/8db115ba34a0e4e8667653aebe0265bb4f7e80 +0 -0
  66. data/levels/blame/.githug/objects/5e/8863df752e3b7f2150df7c78f12bef6f1ff00e +0 -0
  67. data/levels/blame/.githug/objects/67/788a4b90180c7588d7bd0ad8032957b0f429ba +0 -0
  68. data/levels/blame/.githug/objects/70/d00535a3a25b0ac1736dd3d306d6271e5427ed +0 -0
  69. data/levels/blame/.githug/objects/97/bdd0cccf9f4b8730f78cb53a81a74f205dbcc2 +1 -0
  70. data/levels/blame/.githug/objects/ab/08819ba3ffaeba17d4f870dc3a458a904519f4 +0 -0
  71. data/levels/blame/.githug/objects/be/96fe46de646f6a5c728f90cc884aef96fa1d6f +0 -0
  72. data/levels/blame/.githug/objects/cd/9c6b9ab1a6f56cccc69b6aa661f1d67ba5fb46 +0 -0
  73. data/levels/blame/.githug/objects/dd/df1d8ebd60eec169c15a5b23cb49a58d2ed5a0 +4 -0
  74. data/levels/blame/.githug/objects/ff/d39c2dbfd94bdbca06d48686e0cbda642f3de7 +1 -0
  75. data/levels/blame/.githug/refs/heads/master +1 -0
  76. data/levels/blame/config.rb +16 -0
  77. data/levels/blame.rb +15 -0
  78. data/levels/branch.rb +18 -0
  79. data/levels/branch_at.rb +25 -0
  80. data/levels/checkout.rb +18 -0
  81. data/levels/checkout_file.rb +25 -0
  82. data/levels/checkout_tag.rb +39 -0
  83. data/levels/checkout_tag_over_branch.rb +46 -0
  84. data/levels/cherry-pick/.githug/COMMIT_EDITMSG +1 -0
  85. data/levels/cherry-pick/.githug/HEAD +1 -0
  86. data/levels/cherry-pick/.githug/config +6 -0
  87. data/levels/cherry-pick/.githug/description +1 -0
  88. data/levels/cherry-pick/.githug/hooks/applypatch-msg.sample +15 -0
  89. data/levels/cherry-pick/.githug/hooks/commit-msg.sample +24 -0
  90. data/levels/cherry-pick/.githug/hooks/post-update.sample +8 -0
  91. data/levels/cherry-pick/.githug/hooks/pre-applypatch.sample +14 -0
  92. data/levels/cherry-pick/.githug/hooks/pre-commit.sample +50 -0
  93. data/levels/cherry-pick/.githug/hooks/pre-rebase.sample +169 -0
  94. data/levels/cherry-pick/.githug/hooks/prepare-commit-msg.sample +36 -0
  95. data/levels/cherry-pick/.githug/hooks/update.sample +128 -0
  96. data/levels/cherry-pick/.githug/index +0 -0
  97. data/levels/cherry-pick/.githug/info/exclude +6 -0
  98. data/levels/cherry-pick/.githug/logs/HEAD +14 -0
  99. data/levels/cherry-pick/.githug/logs/refs/heads/master +4 -0
  100. data/levels/cherry-pick/.githug/logs/refs/heads/new-feature +6 -0
  101. data/levels/cherry-pick/.githug/objects/05/aa97588aff673dcf00e0e1b835d6ec6207a7d9 +0 -0
  102. data/levels/cherry-pick/.githug/objects/14/ad8f1413c40e0e5be6f6cbdec392a783c1d754 +0 -0
  103. data/levels/cherry-pick/.githug/objects/1b/912962174dd58fbbf1627ec816fa6672c70854 +0 -0
  104. data/levels/cherry-pick/.githug/objects/22/f99f3abfd02190a760388c8845c190247859fe +0 -0
  105. data/levels/cherry-pick/.githug/objects/23/2d266a78d5ef7196f1ede14972ccf7ee19e587 +0 -0
  106. data/levels/cherry-pick/.githug/objects/31/68bdc3ae7e0ab987dda238beab9c0582c7fc07 +0 -0
  107. data/levels/cherry-pick/.githug/objects/49/4fa3fc1c15986f9a950aba8607da591223614c +0 -0
  108. data/levels/cherry-pick/.githug/objects/4a/1961bce62840eaef9c4392fe5cc799e38c9b7b +0 -0
  109. data/levels/cherry-pick/.githug/objects/54/22c2405527c05c23b243b2535a97b6cefa1427 +0 -0
  110. data/levels/cherry-pick/.githug/objects/54/f3308533fd4400c94c4cd5827cd38036a67a76 +0 -0
  111. data/levels/cherry-pick/.githug/objects/58/a8c8edcfdd00c6d8cce9aada8f987a1677571f +0 -0
  112. data/levels/cherry-pick/.githug/objects/6e/dea632d9540e060bca97dda0897df2b7da0ec0 +2 -0
  113. data/levels/cherry-pick/.githug/objects/85/4e7ac38b3e8df02ea1480ec45aa9e7865f03d7 +0 -0
  114. data/levels/cherry-pick/.githug/objects/93/3a97260a11a5ee49bb8a4b7b097cb2fb38f85c +0 -0
  115. data/levels/cherry-pick/.githug/objects/9a/e59e88e6af362c069847e621b971bafff158ac +0 -0
  116. data/levels/cherry-pick/.githug/objects/a2/14badc644facc4722083aedf91d9339ffdffbf +0 -0
  117. data/levels/cherry-pick/.githug/objects/b3/0c6a965415df6aef5f2903f9892fa5481152fc +0 -0
  118. data/levels/cherry-pick/.githug/objects/c6/0c612734f25b9c989d954621491e9ca3c9e061 +0 -0
  119. data/levels/cherry-pick/.githug/objects/ca/32a6dac7b6f97975edbe19a4296c2ee7682f68 +0 -0
  120. data/levels/cherry-pick/.githug/objects/cf/d8ce38c22c5fe83cc04e23f94646464f20d990 +0 -0
  121. data/levels/cherry-pick/.githug/objects/d5/02e68bfe397140e4ac2a819b138545abca604e +0 -0
  122. data/levels/cherry-pick/.githug/objects/d5/123e58b37fd886dff2b96bfe5ec08a498192aa +0 -0
  123. data/levels/cherry-pick/.githug/objects/ea/2a47c19b85fc321e2737ddc49db3deeba3a1b5 +0 -0
  124. data/levels/cherry-pick/.githug/objects/ea/3dbcc5e2d2359698c3606b0ec44af9f76def54 +0 -0
  125. data/levels/cherry-pick/.githug/refs/heads/master +1 -0
  126. data/levels/cherry-pick/.githug/refs/heads/new-feature +1 -0
  127. data/levels/cherry-pick/README.md +2 -0
  128. data/levels/cherry-pick/hardcore-math.js +3 -0
  129. data/levels/cherry-pick/nokia.js +1 -0
  130. data/levels/cherry-pick.rb +19 -0
  131. data/levels/clone.rb +10 -0
  132. data/levels/clone_to_folder.rb +10 -0
  133. data/levels/commit.rb +17 -0
  134. data/levels/commit_amend.rb +23 -0
  135. data/levels/commit_in_future.rb +19 -0
  136. data/levels/config.rb +33 -0
  137. data/levels/conflict/.githug/COMMIT_EDITMSG +14 -0
  138. data/levels/conflict/.githug/HEAD +1 -0
  139. data/levels/conflict/.githug/config +5 -0
  140. data/levels/conflict/.githug/description +1 -0
  141. data/levels/conflict/.githug/hooks/applypatch-msg.sample +15 -0
  142. data/levels/conflict/.githug/hooks/commit-msg.sample +24 -0
  143. data/levels/conflict/.githug/hooks/post-update.sample +8 -0
  144. data/levels/conflict/.githug/hooks/pre-applypatch.sample +14 -0
  145. data/levels/conflict/.githug/hooks/pre-commit.sample +50 -0
  146. data/levels/conflict/.githug/hooks/pre-rebase.sample +169 -0
  147. data/levels/conflict/.githug/hooks/prepare-commit-msg.sample +36 -0
  148. data/levels/conflict/.githug/hooks/update.sample +128 -0
  149. data/levels/conflict/.githug/index +0 -0
  150. data/levels/conflict/.githug/info/exclude +6 -0
  151. data/levels/conflict/.githug/logs/HEAD +12 -0
  152. data/levels/conflict/.githug/logs/refs/heads/master +4 -0
  153. data/levels/conflict/.githug/logs/refs/heads/mybranch +5 -0
  154. data/levels/conflict/.githug/objects/1d/b9aa5013e47f1482ec90323d926171a99c28af +0 -0
  155. data/levels/conflict/.githug/objects/25/b3f9c339430b35ae5822b2ef90e763284dc007 +0 -0
  156. data/levels/conflict/.githug/objects/2d/0d90051e320215f54f357e746c9838490557e7 +1 -0
  157. data/levels/conflict/.githug/objects/30/6868e3258be1f35ae43db71e3a6d7edf42ffe7 +0 -0
  158. data/levels/conflict/.githug/objects/30/cc28e66966109bb5bfbe96d6c817c367d2050a +0 -0
  159. data/levels/conflict/.githug/objects/38/21e4362c5a76db1112b46b9210670cd5bab482 +0 -0
  160. data/levels/conflict/.githug/objects/3c/b65bef44ae724ddf9e89640e7e2754dea1a47f +0 -0
  161. data/levels/conflict/.githug/objects/3d/7aec017559be2b61cab850dafdcb2b6212f1c3 +1 -0
  162. data/levels/conflict/.githug/objects/40/e20a455ac2731ad25c297b03aa543d7eedf6ab +0 -0
  163. data/levels/conflict/.githug/objects/44/30fd3f45c832e685350417600a9862c94d20f1 +0 -0
  164. data/levels/conflict/.githug/objects/46/677964e679f3e727356d0860c643a12a87902b +0 -0
  165. data/levels/conflict/.githug/objects/50/a127cb066eb903a6fa59d71802c10cb442fb3b +0 -0
  166. data/levels/conflict/.githug/objects/55/ad5af2a93afa778971e3d04faf20f6c368b6ba +0 -0
  167. data/levels/conflict/.githug/objects/6b/0c0b32bdca3af9beb831744cb755d6fdc7c7c0 +2 -0
  168. data/levels/conflict/.githug/objects/75/179304f4fab00613f08a9412b6cb0965bfa564 +2 -0
  169. data/levels/conflict/.githug/objects/7c/36daf29660ae4a2f09345427ef76f1d38f902f +0 -0
  170. data/levels/conflict/.githug/objects/88/e0473c9da347c6311f5f8eca8d256bf25402b6 +2 -0
  171. data/levels/conflict/.githug/objects/bd/c7bec8acae9b3eabf0a15b223a48211b7a89a1 +2 -0
  172. data/levels/conflict/.githug/objects/c7/97f979cf24ba148bf10d5e26f5d7402dd5f2e1 +0 -0
  173. data/levels/conflict/.githug/objects/da/ae380200ed6eeaafd926177018e8ff3009b988 +0 -0
  174. data/levels/conflict/.githug/refs/heads/master +1 -0
  175. data/levels/conflict/.githug/refs/heads/mybranch +1 -0
  176. data/levels/conflict/poem.txt +5 -0
  177. data/levels/conflict.rb +23 -0
  178. data/levels/congratulation.rb +10 -0
  179. data/levels/contribute.rb +25 -0
  180. data/levels/delete_branch/.githug/COMMIT_EDITMSG +1 -0
  181. data/levels/delete_branch/.githug/HEAD +1 -0
  182. data/levels/delete_branch/.githug/config +7 -0
  183. data/levels/delete_branch/.githug/description +1 -0
  184. data/levels/delete_branch/.githug/hooks/applypatch-msg.sample +15 -0
  185. data/levels/delete_branch/.githug/hooks/commit-msg.sample +24 -0
  186. data/levels/delete_branch/.githug/hooks/post-update.sample +8 -0
  187. data/levels/delete_branch/.githug/hooks/pre-applypatch.sample +14 -0
  188. data/levels/delete_branch/.githug/hooks/pre-commit.sample +49 -0
  189. data/levels/delete_branch/.githug/hooks/pre-push.sample +53 -0
  190. data/levels/delete_branch/.githug/hooks/pre-rebase.sample +169 -0
  191. data/levels/delete_branch/.githug/hooks/prepare-commit-msg.sample +36 -0
  192. data/levels/delete_branch/.githug/hooks/update.sample +128 -0
  193. data/levels/delete_branch/.githug/index +0 -0
  194. data/levels/delete_branch/.githug/info/exclude +6 -0
  195. data/levels/delete_branch/.githug/logs/HEAD +4 -0
  196. data/levels/delete_branch/.githug/logs/refs/heads/delete_me +1 -0
  197. data/levels/delete_branch/.githug/logs/refs/heads/master +1 -0
  198. data/levels/delete_branch/.githug/objects/b6/0afe294eb3c200d646995c9e0234470157c1b0 +2 -0
  199. data/levels/delete_branch/.githug/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 +0 -0
  200. data/levels/delete_branch/.githug/objects/e8/0ad49ace82167de62e498622d70377d913c79e +0 -0
  201. data/levels/delete_branch/.githug/refs/heads/delete_me +1 -0
  202. data/levels/delete_branch/.githug/refs/heads/master +1 -0
  203. data/levels/delete_branch/readme +0 -0
  204. data/levels/delete_branch.rb +15 -0
  205. data/levels/diff/.githug/COMMIT_EDITMSG +1 -0
  206. data/levels/diff/.githug/HEAD +1 -0
  207. data/levels/diff/.githug/config +5 -0
  208. data/levels/diff/.githug/description +1 -0
  209. data/levels/diff/.githug/hooks/applypatch-msg.sample +15 -0
  210. data/levels/diff/.githug/hooks/commit-msg.sample +24 -0
  211. data/levels/diff/.githug/hooks/post-commit.sample +8 -0
  212. data/levels/diff/.githug/hooks/post-receive.sample +15 -0
  213. data/levels/diff/.githug/hooks/post-update.sample +8 -0
  214. data/levels/diff/.githug/hooks/pre-applypatch.sample +14 -0
  215. data/levels/diff/.githug/hooks/pre-commit.sample +46 -0
  216. data/levels/diff/.githug/hooks/pre-rebase.sample +169 -0
  217. data/levels/diff/.githug/hooks/prepare-commit-msg.sample +36 -0
  218. data/levels/diff/.githug/hooks/update.sample +128 -0
  219. data/levels/diff/.githug/index +0 -0
  220. data/levels/diff/.githug/info/exclude +6 -0
  221. data/levels/diff/.githug/logs/HEAD +1 -0
  222. data/levels/diff/.githug/logs/refs/heads/master +1 -0
  223. data/levels/diff/.githug/objects/1b/6582364621c92707b587409cedbc4f77fc0cee +0 -0
  224. data/levels/diff/.githug/objects/4f/703ca9bd25781b6758eeb3c42ed5348610ba6d +2 -0
  225. data/levels/diff/.githug/objects/dc/aa55e97af34402e84d5336da37abcccc23cba6 +3 -0
  226. data/levels/diff/.githug/refs/heads/master +1 -0
  227. data/levels/diff/app.rb +42 -0
  228. data/levels/diff.rb +16 -0
  229. data/levels/fetch.rb +71 -0
  230. data/levels/find_old_branch/.githug/COMMIT_EDITMSG +1 -0
  231. data/levels/find_old_branch/.githug/HEAD +1 -0
  232. data/levels/find_old_branch/.githug/ORIG_HEAD +1 -0
  233. data/levels/find_old_branch/.githug/config +6 -0
  234. data/levels/find_old_branch/.githug/description +1 -0
  235. data/levels/find_old_branch/.githug/hooks/applypatch-msg.sample +15 -0
  236. data/levels/find_old_branch/.githug/hooks/commit-msg.sample +24 -0
  237. data/levels/find_old_branch/.githug/hooks/post-commit.sample +8 -0
  238. data/levels/find_old_branch/.githug/hooks/post-receive.sample +15 -0
  239. data/levels/find_old_branch/.githug/hooks/post-update.sample +8 -0
  240. data/levels/find_old_branch/.githug/hooks/pre-applypatch.sample +14 -0
  241. data/levels/find_old_branch/.githug/hooks/pre-commit.sample +50 -0
  242. data/levels/find_old_branch/.githug/hooks/pre-rebase.sample +169 -0
  243. data/levels/find_old_branch/.githug/hooks/prepare-commit-msg.sample +36 -0
  244. data/levels/find_old_branch/.githug/hooks/update.sample +128 -0
  245. data/levels/find_old_branch/.githug/index +0 -0
  246. data/levels/find_old_branch/.githug/info/exclude +7 -0
  247. data/levels/find_old_branch/.githug/logs/HEAD +7 -0
  248. data/levels/find_old_branch/.githug/logs/refs/heads/blowup_sun_for_ransom +1 -0
  249. data/levels/find_old_branch/.githug/logs/refs/heads/cure_common_cold +2 -0
  250. data/levels/find_old_branch/.githug/logs/refs/heads/kill_the_batman +4 -0
  251. data/levels/find_old_branch/.githug/logs/refs/heads/solve_world_hunger +2 -0
  252. data/levels/find_old_branch/.githug/objects/05/e9c01bd3c9264761dd0cde477400a2c3104642 +0 -0
  253. data/levels/find_old_branch/.githug/objects/1f/0a136ddd98f61934d15eb00444df32d8e8254b +0 -0
  254. data/levels/find_old_branch/.githug/objects/32/4336a8401afc8ca384eaafe6615c84d552dd2c +0 -0
  255. data/levels/find_old_branch/.githug/objects/50/72aab6bd73accec89ad3aa077f43aab8a5e507 +0 -0
  256. data/levels/find_old_branch/.githug/objects/5d/130caf89f1a4bba6a1fffe72c484f3ab659e08 +0 -0
  257. data/levels/find_old_branch/.githug/objects/68/76e5b41fb693190df76b1baef6ef98623b4f1a +0 -0
  258. data/levels/find_old_branch/.githug/objects/6a/7702145d1eb91c9f79583eabb984027b12e60c +0 -0
  259. data/levels/find_old_branch/.githug/objects/89/4a16d6f1a48224e9006b4a6f0fe3846da19bec +0 -0
  260. data/levels/find_old_branch/.githug/objects/b8/c67b45e5fe9e4b39ac7ade725673f7c90bdfc3 +0 -0
  261. data/levels/find_old_branch/.githug/objects/bf/76434bc7e7346c6fef5a98aee0f7cfc0788f34 +0 -0
  262. data/levels/find_old_branch/.githug/refs/heads/blowup_sun_for_ransom +1 -0
  263. data/levels/find_old_branch/.githug/refs/heads/cure_common_cold +1 -0
  264. data/levels/find_old_branch/.githug/refs/heads/kill_the_batman +1 -0
  265. data/levels/find_old_branch/.githug/refs/heads/solve_world_hunger +1 -0
  266. data/levels/find_old_branch/TODO +1 -0
  267. data/levels/find_old_branch/myfile.txt +1 -0
  268. data/levels/find_old_branch.rb +15 -0
  269. data/levels/grep/.githug/COMMIT_EDITMSG +1 -0
  270. data/levels/grep/.githug/HEAD +1 -0
  271. data/levels/grep/.githug/config +6 -0
  272. data/levels/grep/.githug/description +1 -0
  273. data/levels/grep/.githug/hooks/applypatch-msg.sample +15 -0
  274. data/levels/grep/.githug/hooks/commit-msg.sample +24 -0
  275. data/levels/grep/.githug/hooks/post-commit.sample +8 -0
  276. data/levels/grep/.githug/hooks/post-receive.sample +15 -0
  277. data/levels/grep/.githug/hooks/post-update.sample +8 -0
  278. data/levels/grep/.githug/hooks/pre-applypatch.sample +14 -0
  279. data/levels/grep/.githug/hooks/pre-commit.sample +46 -0
  280. data/levels/grep/.githug/hooks/pre-rebase.sample +169 -0
  281. data/levels/grep/.githug/hooks/prepare-commit-msg.sample +36 -0
  282. data/levels/grep/.githug/hooks/update.sample +128 -0
  283. data/levels/grep/.githug/index +0 -0
  284. data/levels/grep/.githug/info/exclude +6 -0
  285. data/levels/grep/.githug/logs/HEAD +1 -0
  286. data/levels/grep/.githug/logs/refs/heads/master +1 -0
  287. data/levels/grep/.githug/objects/12/c702f8b25b6b528cf904670b854dba3eba0f45 +3 -0
  288. data/levels/grep/.githug/objects/6f/45753f4a16b69f5b2215f2dbe8245f073353cc +1 -0
  289. data/levels/grep/.githug/objects/a4/1fe0c342be5c9930328cbb4315acebbd9c94b2 +0 -0
  290. data/levels/grep/.githug/objects/d3/f53e82aa015d1eea3b06c3b62dfbacee83bbe1 +0 -0
  291. data/levels/grep/.githug/refs/heads/master +1 -0
  292. data/levels/grep/app.rb +45 -0
  293. data/levels/grep/config.rb +17 -0
  294. data/levels/grep.rb +14 -0
  295. data/levels/ignore.rb +42 -0
  296. data/levels/include.rb +21 -0
  297. data/levels/init.rb +10 -0
  298. data/levels/log.rb +22 -0
  299. data/levels/merge/.githug/COMMIT_EDITMSG +1 -0
  300. data/levels/merge/.githug/HEAD +1 -0
  301. data/levels/merge/.githug/config +6 -0
  302. data/levels/merge/.githug/description +1 -0
  303. data/levels/merge/.githug/hooks/applypatch-msg.sample +15 -0
  304. data/levels/merge/.githug/hooks/commit-msg.sample +24 -0
  305. data/levels/merge/.githug/hooks/post-commit.sample +8 -0
  306. data/levels/merge/.githug/hooks/post-receive.sample +15 -0
  307. data/levels/merge/.githug/hooks/post-update.sample +8 -0
  308. data/levels/merge/.githug/hooks/pre-applypatch.sample +14 -0
  309. data/levels/merge/.githug/hooks/pre-commit.sample +46 -0
  310. data/levels/merge/.githug/hooks/pre-rebase.sample +169 -0
  311. data/levels/merge/.githug/hooks/prepare-commit-msg.sample +36 -0
  312. data/levels/merge/.githug/hooks/update.sample +128 -0
  313. data/levels/merge/.githug/index +0 -0
  314. data/levels/merge/.githug/info/exclude +6 -0
  315. data/levels/merge/.githug/logs/HEAD +4 -0
  316. data/levels/merge/.githug/logs/refs/heads/feature +2 -0
  317. data/levels/merge/.githug/logs/refs/heads/master +1 -0
  318. data/levels/merge/.githug/objects/ad/24149d789e59d4b5f9ce41cda90110ca0f98b7 +0 -0
  319. data/levels/merge/.githug/objects/ae/fde3a01f6e10d72fd4899ce14c8b2654d3eb45 +0 -0
  320. data/levels/merge/.githug/objects/cc/8ea5a233df119d025eb240b9470e1ca76a151c +0 -0
  321. data/levels/merge/.githug/objects/e1/2277fe88657a072f1c4eb7d9320e4e6a74ba95 +0 -0
  322. data/levels/merge/.githug/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 +0 -0
  323. data/levels/merge/.githug/refs/heads/feature +1 -0
  324. data/levels/merge/.githug/refs/heads/master +1 -0
  325. data/levels/merge/file1 +0 -0
  326. data/levels/merge.rb +16 -0
  327. data/levels/merge_squash.rb +49 -0
  328. data/levels/number_of_files_committed.rb +51 -0
  329. data/levels/pull.rb +16 -0
  330. data/levels/pull_rebase.rb +49 -0
  331. data/levels/push.rb +67 -0
  332. data/levels/push_branch.rb +88 -0
  333. data/levels/push_tags.rb +63 -0
  334. data/levels/rebase/.githug/COMMIT_EDITMSG +1 -0
  335. data/levels/rebase/.githug/HEAD +1 -0
  336. data/levels/rebase/.githug/ORIG_HEAD +1 -0
  337. data/levels/rebase/.githug/config +7 -0
  338. data/levels/rebase/.githug/index +0 -0
  339. data/levels/rebase/.githug/logs/HEAD +13 -0
  340. data/levels/rebase/.githug/logs/refs/heads/feature +4 -0
  341. data/levels/rebase/.githug/logs/refs/heads/master +2 -0
  342. data/levels/rebase/.githug/objects/0c/d212c5b28da2e65ed4900712dd36c8adce48ad +0 -0
  343. data/levels/rebase/.githug/objects/44/19b972c0cd1b346ac90332aa7c5cc949589f78 +0 -0
  344. data/levels/rebase/.githug/objects/54/3b9bebdc6bd5c4b22136034a95dd097a57d3dd +0 -0
  345. data/levels/rebase/.githug/objects/81/78c76d627cade75005b40711b92f4177bc6cfc +0 -0
  346. data/levels/rebase/.githug/objects/98/205e9faf10cf33d2ef7c0f66e402540c62613a +2 -0
  347. data/levels/rebase/.githug/objects/a7/8bcab6232e9382a86436cdfcb2ed0391b1f0ac +4 -0
  348. data/levels/rebase/.githug/objects/b7/7313d7be366609dd2e77aa96d7fd73f4e27853 +0 -0
  349. data/levels/rebase/.githug/objects/b9/2d5d55d379cfb90b750e6472fc983f32ad9a71 +0 -0
  350. data/levels/rebase/.githug/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 +0 -0
  351. data/levels/rebase/.githug/objects/ed/0fdcf366b21b8984fb37ea34106978a2e5c5ba +0 -0
  352. data/levels/rebase/.githug/refs/heads/feature +1 -0
  353. data/levels/rebase/.githug/refs/heads/master +1 -0
  354. data/levels/rebase/README +1 -0
  355. data/levels/rebase.rb +16 -0
  356. data/levels/rebase_conflict.rb +55 -0
  357. data/levels/rebase_onto.rb +45 -0
  358. data/levels/remote.rb +16 -0
  359. data/levels/remote_add.rb +16 -0
  360. data/levels/remote_url.rb +17 -0
  361. data/levels/rename.rb +18 -0
  362. data/levels/rename_commit.rb +25 -0
  363. data/levels/reorder.rb +30 -0
  364. data/levels/repack.rb +19 -0
  365. data/levels/reset.rb +22 -0
  366. data/levels/reset_soft.rb +22 -0
  367. data/levels/restore.rb +28 -0
  368. data/levels/restructure.rb +40 -0
  369. data/levels/revert.rb +30 -0
  370. data/levels/rm.rb +20 -0
  371. data/levels/rm_cached.rb +18 -0
  372. data/levels/squash.rb +29 -0
  373. data/levels/stage_lines.rb +29 -0
  374. data/levels/stash/.githug/COMMIT_EDITMSG +1 -0
  375. data/levels/stash/.githug/HEAD +1 -0
  376. data/levels/stash/.githug/config +7 -0
  377. data/levels/stash/.githug/description +1 -0
  378. data/levels/stash/.githug/hooks/applypatch-msg.sample +15 -0
  379. data/levels/stash/.githug/hooks/commit-msg.sample +24 -0
  380. data/levels/stash/.githug/hooks/post-update.sample +8 -0
  381. data/levels/stash/.githug/hooks/pre-applypatch.sample +14 -0
  382. data/levels/stash/.githug/hooks/pre-commit.sample +50 -0
  383. data/levels/stash/.githug/hooks/pre-rebase.sample +169 -0
  384. data/levels/stash/.githug/hooks/prepare-commit-msg.sample +36 -0
  385. data/levels/stash/.githug/hooks/update.sample +128 -0
  386. data/levels/stash/.githug/index +0 -0
  387. data/levels/stash/.githug/info/exclude +6 -0
  388. data/levels/stash/.githug/logs/HEAD +1 -0
  389. data/levels/stash/.githug/logs/refs/heads/master +1 -0
  390. data/levels/stash/.githug/objects/02/060592b31c9e12ffe1b282addf9537c5ef8e1f +0 -0
  391. data/levels/stash/.githug/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904 +0 -0
  392. data/levels/stash/.githug/objects/7f/82d7e4fba66980af16da540e18d8955518cdc2 +0 -0
  393. data/levels/stash/.githug/objects/85/e560abcd7e3255dcd91982476e432f4d3d1b51 +0 -0
  394. data/levels/stash/.githug/refs/heads/master +1 -0
  395. data/levels/stash/lyrics.txt +13 -0
  396. data/levels/stash.rb +17 -0
  397. data/levels/status.rb +26 -0
  398. data/levels/submodule.rb +20 -0
  399. data/levels/tag.rb +18 -0
  400. data/levels/unstash/.githug/COMMIT_EDITMSG +1 -0
  401. data/levels/unstash/.githug/HEAD +1 -0
  402. data/levels/unstash/.githug/config +7 -0
  403. data/levels/unstash/.githug/description +1 -0
  404. data/levels/unstash/.githug/hooks/applypatch-msg.sample +15 -0
  405. data/levels/unstash/.githug/hooks/commit-msg.sample +24 -0
  406. data/levels/unstash/.githug/hooks/post-update.sample +8 -0
  407. data/levels/unstash/.githug/hooks/pre-applypatch.sample +14 -0
  408. data/levels/unstash/.githug/hooks/pre-commit.sample +50 -0
  409. data/levels/unstash/.githug/hooks/pre-rebase.sample +169 -0
  410. data/levels/unstash/.githug/hooks/prepare-commit-msg.sample +36 -0
  411. data/levels/unstash/.githug/hooks/update.sample +128 -0
  412. data/levels/unstash/.githug/index +0 -0
  413. data/levels/unstash/.githug/info/exclude +6 -0
  414. data/levels/unstash/.githug/logs/HEAD +1 -0
  415. data/levels/unstash/.githug/logs/refs/heads/master +1 -0
  416. data/levels/unstash/.githug/objects/02/060592b31c9e12ffe1b282addf9537c5ef8e1f +0 -0
  417. data/levels/unstash/.githug/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904 +0 -0
  418. data/levels/unstash/.githug/objects/7f/82d7e4fba66980af16da540e18d8955518cdc2 +0 -0
  419. data/levels/unstash/.githug/objects/85/e560abcd7e3255dcd91982476e432f4d3d1b51 +0 -0
  420. data/levels/unstash/.githug/refs/heads/master +1 -0
  421. data/levels/unstash/lyrics.txt +13 -0
  422. data/levels/unstash.rb +22 -0
  423. data/lib/githug/cli.rb +121 -0
  424. data/lib/githug/extensions/grit/ruby1.9.rb +21 -0
  425. data/lib/githug/game.rb +57 -0
  426. data/lib/githug/level.rb +135 -0
  427. data/lib/githug/profile.rb +80 -0
  428. data/lib/githug/repository.rb +48 -0
  429. data/lib/githug/ui.rb +59 -0
  430. data/lib/githug/version.rb +3 -0
  431. data/lib/githug.rb +16 -0
  432. data/mygithug.gemspec +27 -0
  433. data/spec/githug/cli_spec.rb +133 -0
  434. data/spec/githug/game_spec.rb +96 -0
  435. data/spec/githug/level_spec.rb +159 -0
  436. data/spec/githug/profile_spec.rb +89 -0
  437. data/spec/githug/repository_spec.rb +97 -0
  438. data/spec/githug/ui_spec.rb +112 -0
  439. data/spec/githug_spec.rb +316 -0
  440. data/spec/spec_helper.rb +1 -0
  441. data/spec/support/files/test_level.rb +16 -0
  442. metadata +549 -0
@@ -0,0 +1,96 @@
1
+ require 'spec_helper'
2
+
3
+ describe Githug::Game do
4
+
5
+ let(:profile) { mock(:level => 1,
6
+ :current_attempts => 0).as_null_object }
7
+ let(:game) { Githug::Game.new }
8
+ let(:level) { mock(:full_description => nil, :setup_level => nil) }
9
+
10
+ before(:each) do
11
+ Githug::Profile.stub(:new).and_return(profile)
12
+ profile.stub(:save)
13
+ profile.stub(:level_bump)
14
+
15
+ Githug::UI.stub(:puts)
16
+
17
+ Githug::Level.stub(:load).and_return(level)
18
+ end
19
+
20
+ it "has a profile" do
21
+ game.profile.should eql(profile)
22
+ end
23
+
24
+ it "shows a description if the level is 0" do
25
+ level.should_not_receive(:solve)
26
+ profile.stub(:level).and_return(nil)
27
+ profile.should_receive(:level_bump)
28
+ Githug::UI.should_receive(:puts).with("Welcome to Githug!")
29
+ game.play_level
30
+ end
31
+
32
+ describe "play_level" do
33
+
34
+ it "outputs congratulations if the level is solved" do
35
+ level.stub(:solve).and_return(true)
36
+ profile.should_receive(:level_bump)
37
+ Githug::UI.should_receive(:success).with("Congratulations, you have solved the level!")
38
+ game.play_level
39
+ end
40
+
41
+ it "outputs a message if the solution is not right" do
42
+ level.stub(:solve).and_return(false)
43
+ Githug::UI.should_receive(:error).with("Sorry, this solution is not quite right!")
44
+ game.play_level
45
+ end
46
+
47
+ it "increments the number of failed attempts" do
48
+ level.stub(:solve).and_return(false)
49
+ profile.should_receive(:current_attempts=).with(1)
50
+ profile.should_receive(:save)
51
+ game.play_level
52
+ end
53
+
54
+ it "prompts for a hint if the user has failed 3 times." do
55
+ profile.stub(:current_attempts).and_return(3)
56
+ level.stub(:solve).and_return(false)
57
+ Githug::UI.should_receive(:error).with("Sorry, this solution is not quite right!")
58
+ Githug::UI.should_receive(:error).with("Don't forget you can type `githug hint` for a hint and `githug reset` to reset the current level.")
59
+ game.play_level
60
+ end
61
+
62
+ end
63
+
64
+
65
+ describe "test_level" do
66
+ it "outputs Valid solution if the solution is valid" do
67
+ level.stub(:solve).and_return(true)
68
+ Githug::UI.should_receive(:success).with("Valid solution")
69
+ game.test_level(level)
70
+ end
71
+
72
+ it "outputs Invalid solution if the solution is invalid" do
73
+ level.stub(:solve).and_return(false)
74
+ Githug::UI.should_receive(:error).with("Invalid solution")
75
+ game.test_level(level)
76
+ end
77
+
78
+ it "calls test when errors is true" do
79
+ level.should_receive(:test)
80
+ game.test_level(level, true)
81
+ end
82
+ end
83
+
84
+ it "outputs the description of the next level" do
85
+ level.should_receive(:full_description)
86
+ profile.stub(:level=)
87
+ game.level_bump
88
+ end
89
+
90
+ it "calls setup_level for the next level" do
91
+ level.should_receive(:setup_level)
92
+ profile.stub(:level=)
93
+ game.level_bump
94
+ end
95
+
96
+ end
@@ -0,0 +1,159 @@
1
+ require 'spec_helper'
2
+ require 'grit'
3
+
4
+ describe Githug::Level do
5
+
6
+ let(:subject) { Githug::Level.load_from_file(File.expand_path("spec/support/files/test_level.rb")) }
7
+ let(:repo) { mock(:reset) }
8
+
9
+ before(:each) do
10
+ Githug::Repository.stub(:new).and_return(repo)
11
+ Githug::UI.stub(:puts)
12
+ Githug::UI.stub(:print)
13
+ end
14
+
15
+ it "should mixin UI" do
16
+ Githug::Level.ancestors.should include(Githug::UI)
17
+ end
18
+
19
+ describe ".load" do
20
+
21
+ it "loads the level" do
22
+ File.stub(:dirname).and_return("")
23
+ Githug::Level.should_receive(:setup).with("/../../levels/init.rb")
24
+ Githug::Level.load("init")
25
+ end
26
+
27
+ it "returns false if the level does not exist" do
28
+ File.stub(:exists?).and_return(false)
29
+ Githug::Level.load(1).should eql(false)
30
+ end
31
+
32
+ end
33
+
34
+ describe ".list" do
35
+ it "lists the levels without nil" do
36
+ Githug::Level.list.should eql(Githug::Level::LEVELS - [nil])
37
+ end
38
+ end
39
+
40
+ describe ".load_from_file" do
41
+ it "loads the level" do
42
+ subject.instance_variable_get("@difficulty").should eql(1)
43
+ subject.instance_variable_get("@description").should eql("A test description")
44
+ end
45
+
46
+ it "return false if the level does not exist" do
47
+ File.stub(:exists?).and_return(false)
48
+ Githug::Level.load_from_file("/foo/bar/test/level.rb").should eql(false)
49
+ end
50
+ end
51
+
52
+ describe ".setup" do
53
+
54
+ it "returns false if the level does not exist" do
55
+ File.stub(:exists?).and_return(false)
56
+ Githug::Level.setup("/foo/bar/test/level.rb").should eql(false)
57
+ end
58
+
59
+ end
60
+
61
+
62
+ describe "#solve" do
63
+
64
+ it "returns false if the level requirements have not been met" do
65
+ subject.solve.should eql(false)
66
+ end
67
+
68
+ it "returns true if the level requirements have been met" do
69
+ Grit::Repo.stub(:new).and_return(true)
70
+ subject.solve.should eql(true)
71
+ end
72
+
73
+ end
74
+
75
+ describe "#test" do
76
+ it "calls solve" do
77
+ subject.should_receive(:_solution)
78
+ subject.test
79
+ end
80
+ end
81
+
82
+
83
+ describe "#full_description" do
84
+
85
+ it "displays a full description" do
86
+ Githug::UI.stub(:puts)
87
+ Githug::UI.should_receive(:puts).with("Level: 1")
88
+ Githug::UI.should_receive(:puts).with("Difficulty: *")
89
+ Githug::UI.should_receive(:puts).with("A test description")
90
+ subject.full_description
91
+ end
92
+
93
+ end
94
+
95
+ describe "#setup" do
96
+
97
+ it "calls setup" do
98
+ repo.should_receive(:reset)
99
+ subject.setup_level.should eql("test")
100
+ end
101
+
102
+ it "does not call the setup if none exists" do
103
+ subject.instance_variable_set("@setup", nil)
104
+ lambda {subject.setup_level}.should_not raise_error(NoMethodError)
105
+ end
106
+
107
+ end
108
+
109
+
110
+ describe "#repo" do
111
+
112
+ it "initializes a repository when repo is called" do
113
+ subject.repo.should equal(repo)
114
+ Githug::Repository.should_not_receive(:new)
115
+ subject.repo.should equal(repo)
116
+ end
117
+
118
+ end
119
+
120
+ describe "#hint" do
121
+
122
+ let(:profile) { mock.as_null_object }
123
+
124
+ before(:each) do
125
+ profile.stub(:current_hint_index).and_return(0,0,1,0)
126
+ Githug::Profile.stub(:load).and_return(profile)
127
+ end
128
+
129
+ it "returns sequential hint if there are multiple" do
130
+ subject.should_receive(:puts).ordered.with("this is hint 1")
131
+ subject.show_hint
132
+
133
+ subject.should_receive(:puts).ordered.with("this is hint 2")
134
+ subject.show_hint
135
+
136
+ subject.should_receive(:puts).ordered.with("this is hint 1")
137
+ subject.show_hint
138
+ end
139
+
140
+ it "displays a hint if there are not multiple" do
141
+ subject.instance_variable_set("@hints", nil)
142
+ subject.should_receive(:puts).with("this is a hint")
143
+ subject.show_hint
144
+ end
145
+
146
+ it "does not call the hint if none exist" do
147
+ subject.instance_variable_set("@hint", nil)
148
+ lambda {subject.show_hint}.should_not raise_error(NoMethodError)
149
+ end
150
+ end
151
+
152
+ describe "#init_from_level" do
153
+ it "copies the files from the level folder" do
154
+ FileUtils.should_receive(:cp_r).with("#{subject.level_path}/.", ".")
155
+ FileUtils.should_receive(:mv).with(".githug", ".git")
156
+ subject.init_from_level
157
+ end
158
+ end
159
+ end
@@ -0,0 +1,89 @@
1
+ require 'spec_helper'
2
+
3
+ describe Githug::Profile do
4
+
5
+ describe ".load" do
6
+ it "loads the profile" do
7
+ settings = {:level => 1, :current_attempts => 0, :current_hint_index => 0, :current_levels => [], :completed_levels => []}
8
+ File.should_receive(:exists?).with(Githug::Profile::PROFILE_FILE).and_return(true)
9
+ File.should_receive(:open).with(Githug::Profile::PROFILE_FILE).and_return("settings")
10
+ YAML.should_receive(:load).with("settings").and_return(settings)
11
+ Githug::Profile.should_receive(:new).with(settings)
12
+ Githug::Profile.load
13
+ end
14
+
15
+ it "loads the defaults if the file does not exist" do
16
+ defaults = {:level => nil, :current_attempts => 0, :current_hint_index => 0, :current_levels => [], :completed_levels => []}
17
+ File.should_receive(:exists?).with(Githug::Profile::PROFILE_FILE).and_return(false)
18
+ Githug::Profile.should_receive(:new).with(defaults)
19
+ Githug::Profile.load
20
+ end
21
+ end
22
+
23
+ it "allows method access to getters and setters" do
24
+ profile = Githug::Profile.load
25
+ profile.level.should eql(nil)
26
+ profile.level = 1
27
+ profile.level.should eql(1)
28
+ end
29
+
30
+ describe ".save" do
31
+
32
+ it "saves the file" do
33
+ profile = Githug::Profile.load
34
+ File.should_receive(:open).with(Githug::Profile::PROFILE_FILE, "w")
35
+ profile.save
36
+ end
37
+
38
+ end
39
+
40
+ describe "level methods" do
41
+
42
+ let(:profile) { Githug::Profile.load }
43
+
44
+ before(:each) do
45
+ profile.stub(:save)
46
+ @levels = Githug::Level::LEVELS
47
+ Githug::Level::LEVELS = ["init", "add", "rm", "rm_cached", "diff"]
48
+ profile.level = "init"
49
+ end
50
+
51
+ after(:each) do
52
+ Githug::Level::LEVELS = @levels
53
+ end
54
+
55
+ describe "#level_bump" do
56
+
57
+ it "bumps the level" do
58
+ profile.should_receive(:set_level).with("add")
59
+ profile.level_bump
60
+ end
61
+
62
+ it "resets the current_attempts" do
63
+ profile.current_attempts = 1
64
+ profile.level_bump
65
+ profile.current_attempts.should eql(0)
66
+ end
67
+
68
+ it "sets the level to the first incomplete level" do
69
+ profile.level = "rm_cached"
70
+ profile.completed_levels = ["init", "add"]
71
+ profile.level_bump
72
+ profile.level.should eql("rm")
73
+ end
74
+ end
75
+
76
+ describe "#set_level" do
77
+
78
+ it "sets the level" do
79
+ profile.should_receive(:save)
80
+ profile.should_receive(:reset!)
81
+ profile.set_level("rm")
82
+ profile.settings[:level].should eql("rm")
83
+ end
84
+
85
+ end
86
+
87
+ end
88
+
89
+ end
@@ -0,0 +1,97 @@
1
+ require 'spec_helper'
2
+
3
+ describe Githug::Repository do
4
+
5
+ let(:grit) { mock }
6
+
7
+ before(:each) do
8
+ Grit::Repo.stub(:new).and_return(grit)
9
+ subject.stub(:create_gitignore)
10
+ end
11
+
12
+ describe "#initialize" do
13
+
14
+ it "calls grit on initialize" do
15
+ Grit::Repo.should_receive(:new).with(".").and_return(grit)
16
+ repo = Githug::Repository.new
17
+ repo.grit.should equal(grit)
18
+ end
19
+
20
+ it "contains a nil grit if the repo is invalid" do
21
+ Grit::Repo.should_receive(:new).and_raise(Grit::InvalidGitRepositoryError)
22
+ repo = Githug::Repository.new
23
+ repo.grit.should equal(nil)
24
+ end
25
+
26
+ it "initializes with a location" do
27
+ Grit::Repo.should_receive(:new).with("test").and_return(grit)
28
+ repo = Githug::Repository.new("test")
29
+ end
30
+
31
+ end
32
+
33
+ describe "#reset" do
34
+
35
+ before(:each) do
36
+ FileUtils.stub(:rm_rf)
37
+ end
38
+
39
+ it "does nothing if the current directory isn't git_hug" do
40
+ Dir.stub(:pwd).and_return("/tmp/foo")
41
+ FileUtils.should_not_receive(:rm_rf)
42
+ subject.reset
43
+ end
44
+
45
+ it "removes all the files except .gitignore and .profile.yml" do
46
+ Dir.stub(:pwd).and_return("/tmp/git_hug")
47
+ Dir.stub(:entries).and_return([".profile.yml", ".gitignore", "..", ".", "README", ".git"])
48
+ FileUtils.should_receive(:rm_rf).with("README")
49
+ FileUtils.should_receive(:rm_rf).with(".git")
50
+ subject.reset
51
+ end
52
+ end
53
+
54
+
55
+ describe "#create_gitignore" do
56
+ it "creates a gitignore" do
57
+ subject.unstub(:create_gitignore)
58
+ File.stub(:exists?).and_return(true)
59
+ Dir.should_receive(:chdir).with("git_hug")
60
+ File.should_receive(:open).with(".gitignore", "w")
61
+ subject.create_gitignore
62
+ end
63
+ end
64
+
65
+ describe "#valid?" do
66
+ it "is valid if grit exists" do
67
+ subject.should be_valid
68
+ end
69
+
70
+ it "is not valid if grit does not exist" do
71
+ subject.instance_variable_set("@grit", nil)
72
+ subject.should_not be_valid
73
+ end
74
+ end
75
+
76
+ describe "#init" do
77
+ it "does not add and commit gitignore if prompted" do
78
+ Grit::Repo.should_receive(:init).with(".")
79
+ subject.init
80
+ end
81
+ end
82
+
83
+ describe "#method_missing" do
84
+ it "deletegates to grit if the method exists" do
85
+ grit.should_receive(:respond_to?).with(:valid_method).and_return(true)
86
+ grit.should_receive(:valid_method)
87
+ subject.valid_method
88
+ end
89
+
90
+ it "should not deletegate to grit if the method does not exist" do
91
+ grit.should_receive(:respond_to?).with(:invalid_method).and_return(false)
92
+ lambda { subject.invalid_method }.should raise_error(NoMethodError)
93
+ end
94
+ end
95
+
96
+
97
+ end
@@ -0,0 +1,112 @@
1
+ require 'spec_helper'
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Githug::UI do
6
+
7
+ let(:ui_out) { StringIO.new }
8
+ let(:ui_in) { StringIO.new }
9
+
10
+ before(:each) do
11
+ subject.out_stream = ui_out
12
+ subject.in_stream = ui_in
13
+ end
14
+
15
+ it "puts to the stream" do
16
+ subject.puts("hello")
17
+ ui_out.string.should eql("hello\n")
18
+ end
19
+
20
+ it "prints an empty line with no arguments" do
21
+ subject.puts
22
+ ui_out.string.should eql("\n")
23
+ end
24
+
25
+ it "prints without a new line" do
26
+ subject.print("hello")
27
+ ui_out.string.should eql("hello")
28
+ end
29
+
30
+ it "fetches gets from input stream" do
31
+ ui_in.puts "bar"
32
+ ui_in.rewind
33
+ subject.gets.should == "bar\n"
34
+ end
35
+
36
+ it "makes a wordbox" do
37
+ word_box = <<-eof
38
+ ********************************************************************************
39
+ * Githug *
40
+ ********************************************************************************
41
+ eof
42
+ subject.word_box("Githug")
43
+ ui_out.string.should eql(word_box)
44
+ end
45
+
46
+ it "prints a correct wordbox for uneven msg length" do
47
+ subject.word_box("odd",80)
48
+ printed = ui_out.string.lines
49
+ first_size = printed.first.chomp.length
50
+
51
+ printed.map{ |line| line.chomp.length.should eq(first_size) }
52
+ end
53
+
54
+ it "requests text input" do
55
+ ui_in.puts "bar"
56
+ ui_in.rewind
57
+ subject.request("foo").should == "bar"
58
+ ui_out.string.should == "foo "
59
+ end
60
+
61
+ it "asks for yes/no and return true when yes" do
62
+ subject.should_receive(:request).with('foo? [yn] ').and_return('y')
63
+ subject.ask("foo?").should be_true
64
+ end
65
+
66
+ it "asks for yes/no and return false when no" do
67
+ subject.stub(:request).and_return('n')
68
+ subject.ask("foo?").should be_false
69
+ end
70
+
71
+ it "asks for yes/no and return false for any input" do
72
+ subject.stub(:request).and_return('aklhasdf')
73
+ subject.ask("foo?").should be_false
74
+ end
75
+
76
+ describe "Non Windows Platform" do
77
+ before(:each) do
78
+ ENV.stub(:[]).with("OS").and_return(nil)
79
+ end
80
+
81
+ it "prints out a success message in green" do
82
+ subject.success("success")
83
+ ui_out.string.should eql("\033[32msuccess\033[0m\n")
84
+ end
85
+
86
+ it "prints out a error message in red" do
87
+ subject.error("error")
88
+ ui_out.string.should eql("\033[31merror\033[0m\n")
89
+ end
90
+
91
+ end
92
+
93
+ describe "Windows Platform" do
94
+
95
+ before(:each) do
96
+ ENV.stub(:[]).with("OS").and_return("Windows_NT")
97
+ end
98
+
99
+ it "prints out a success message in white" do
100
+ subject.success("success")
101
+ ui_out.string.should eql("success\n")
102
+ end
103
+
104
+ it "prints out a error message in white" do
105
+ subject.error("error")
106
+ ui_out.string.should eql("error\n")
107
+ end
108
+
109
+ end
110
+
111
+
112
+ end