rkoans 0.0.1 → 0.1.0

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 (460) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +13 -0
  3. data/CURRICULUM.md +86 -0
  4. data/README.md +77 -0
  5. data/THIRD_PARTY_NOTICES.md +30 -0
  6. data/exercises/about-array-assignment/about_array_assignment.rb +45 -0
  7. data/exercises/about-array-assignment/brief.md +11 -0
  8. data/exercises/about-array-assignment/hint.md +11 -0
  9. data/exercises/about-arrays/about_arrays.rb +77 -0
  10. data/exercises/about-arrays/brief.md +16 -0
  11. data/exercises/about-arrays/hint.md +13 -0
  12. data/exercises/about-asserts/about_asserts.rb +22 -0
  13. data/exercises/about-asserts/brief.md +22 -0
  14. data/exercises/about-asserts/hint.md +10 -0
  15. data/exercises/about-blocks/about_blocks.rb +76 -0
  16. data/exercises/about-blocks/brief.md +44 -0
  17. data/exercises/about-blocks/hint.md +7 -0
  18. data/exercises/about-class-methods/about_class_methods.rb +105 -0
  19. data/exercises/about-class-methods/brief.md +73 -0
  20. data/exercises/about-class-methods/hint.md +8 -0
  21. data/exercises/about-classes/about_classes.rb +131 -0
  22. data/exercises/about-classes/brief.md +73 -0
  23. data/exercises/about-classes/hint.md +7 -0
  24. data/exercises/about-constants/about_constants.rb +49 -0
  25. data/exercises/about-constants/brief.md +51 -0
  26. data/exercises/about-constants/hint.md +7 -0
  27. data/exercises/about-control-statements/about_control_statements.rb +152 -0
  28. data/exercises/about-control-statements/brief.md +9 -0
  29. data/exercises/about-control-statements/hint.md +7 -0
  30. data/exercises/about-dice-project/about_dice_project.rb +27 -0
  31. data/exercises/about-dice-project/brief.md +12 -0
  32. data/exercises/about-dice-project/hint.md +5 -0
  33. data/exercises/about-exceptions/about_exceptions.rb +84 -0
  34. data/exercises/about-exceptions/brief.md +19 -0
  35. data/exercises/about-exceptions/hint.md +8 -0
  36. data/exercises/about-extra-credit/about_extra_credit.rb +117 -0
  37. data/exercises/about-extra-credit/brief.md +28 -0
  38. data/exercises/about-extra-credit/hint.md +5 -0
  39. data/exercises/about-hashes/about_hashes.rb +160 -0
  40. data/exercises/about-hashes/brief.md +9 -0
  41. data/exercises/about-hashes/hint.md +8 -0
  42. data/exercises/about-inheritance/about_inheritance.rb +63 -0
  43. data/exercises/about-inheritance/brief.md +50 -0
  44. data/exercises/about-inheritance/hint.md +8 -0
  45. data/exercises/about-iteration/about_iteration.rb +96 -0
  46. data/exercises/about-iteration/brief.md +26 -0
  47. data/exercises/about-iteration/hint.md +6 -0
  48. data/exercises/about-keyword-arguments/about_keyword_arguments.rb +56 -0
  49. data/exercises/about-keyword-arguments/brief.md +28 -0
  50. data/exercises/about-keyword-arguments/hint.md +7 -0
  51. data/exercises/about-message-passing/about_message_passing.rb +112 -0
  52. data/exercises/about-message-passing/brief.md +59 -0
  53. data/exercises/about-message-passing/hint.md +8 -0
  54. data/exercises/about-methods/about_methods.rb +104 -0
  55. data/exercises/about-methods/brief.md +55 -0
  56. data/exercises/about-methods/hint.md +8 -0
  57. data/exercises/about-modules/about_modules.rb +43 -0
  58. data/exercises/about-modules/brief.md +44 -0
  59. data/exercises/about-modules/hint.md +8 -0
  60. data/exercises/about-nil/about_nil.rb +29 -0
  61. data/exercises/about-nil/brief.md +12 -0
  62. data/exercises/about-nil/hint.md +11 -0
  63. data/exercises/about-objects/about_objects.rb +51 -0
  64. data/exercises/about-objects/brief.md +14 -0
  65. data/exercises/about-objects/hint.md +12 -0
  66. data/exercises/about-open-classes/about_open_classes.rb +38 -0
  67. data/exercises/about-open-classes/brief.md +34 -0
  68. data/exercises/about-open-classes/hint.md +7 -0
  69. data/exercises/about-pattern-matching/about_pattern_matching.rb +106 -0
  70. data/exercises/about-pattern-matching/brief.md +124 -0
  71. data/exercises/about-pattern-matching/hint.md +8 -0
  72. data/exercises/about-proxy-object-project/about_proxy_object_project.rb +43 -0
  73. data/exercises/about-proxy-object-project/brief.md +10 -0
  74. data/exercises/about-proxy-object-project/hint.md +5 -0
  75. data/exercises/about-regular-expressions/about_regular_expressions.rb +174 -0
  76. data/exercises/about-regular-expressions/brief.md +9 -0
  77. data/exercises/about-regular-expressions/hint.md +8 -0
  78. data/exercises/about-sandwich-code/about_sandwich_code.rb +58 -0
  79. data/exercises/about-sandwich-code/brief.md +14 -0
  80. data/exercises/about-sandwich-code/hint.md +5 -0
  81. data/exercises/about-scope/about_scope.rb +76 -0
  82. data/exercises/about-scope/brief.md +35 -0
  83. data/exercises/about-scope/hint.md +8 -0
  84. data/exercises/about-scoring-project/about_scoring_project.rb +16 -0
  85. data/exercises/about-scoring-project/brief.md +10 -0
  86. data/exercises/about-scoring-project/hint.md +5 -0
  87. data/exercises/about-strings/about_strings.rb +142 -0
  88. data/exercises/about-strings/brief.md +22 -0
  89. data/exercises/about-strings/hint.md +11 -0
  90. data/exercises/about-symbols/about_symbols.rb +53 -0
  91. data/exercises/about-symbols/brief.md +21 -0
  92. data/exercises/about-symbols/hint.md +12 -0
  93. data/exercises/about-to-str/about_to_str.rb +49 -0
  94. data/exercises/about-to-str/brief.md +37 -0
  95. data/exercises/about-to-str/hint.md +7 -0
  96. data/exercises/about-triangle-project/about_triangle_project.rb +15 -0
  97. data/exercises/about-triangle-project/brief.md +11 -0
  98. data/exercises/about-triangle-project/hint.md +5 -0
  99. data/exercises/about-triangle-project-two/about_triangle_project_two.rb +22 -0
  100. data/exercises/about-triangle-project-two/brief.md +10 -0
  101. data/exercises/about-triangle-project-two/hint.md +5 -0
  102. data/exercises/about-true-and-false/about_true_and_false.rb +26 -0
  103. data/exercises/about-true-and-false/brief.md +22 -0
  104. data/exercises/about-true-and-false/hint.md +7 -0
  105. data/exercises/blocks-and-methods/blocks_and_methods.rb +14 -0
  106. data/exercises/blocks-and-methods/brief.md +8 -0
  107. data/exercises/blocks-and-methods/hint.md +6 -0
  108. data/exercises/catalog.json +61 -0
  109. data/exercises/class-state/brief.md +8 -0
  110. data/exercises/class-state/class_state.rb +39 -0
  111. data/exercises/class-state/hint.md +5 -0
  112. data/exercises/closure-capture/brief.md +8 -0
  113. data/exercises/closure-capture/closure_capture.rb +21 -0
  114. data/exercises/closure-capture/hint.md +5 -0
  115. data/exercises/collection-basics/brief.md +8 -0
  116. data/exercises/collection-basics/collection_basics.rb +16 -0
  117. data/exercises/collection-basics/hint.md +6 -0
  118. data/exercises/constant-scope/brief.md +8 -0
  119. data/exercises/constant-scope/constant_scope.rb +18 -0
  120. data/exercises/constant-scope/hint.md +5 -0
  121. data/exercises/core-protocols/brief.md +8 -0
  122. data/exercises/core-protocols/core_protocols.rb +43 -0
  123. data/exercises/core-protocols/hint.md +5 -0
  124. data/exercises/delegation/brief.md +8 -0
  125. data/exercises/delegation/delegation.rb +20 -0
  126. data/exercises/delegation/hint.md +5 -0
  127. data/exercises/dynamic-methods/brief.md +8 -0
  128. data/exercises/dynamic-methods/dynamic_methods.rb +33 -0
  129. data/exercises/dynamic-methods/hint.md +5 -0
  130. data/exercises/exception-flow/brief.md +8 -0
  131. data/exercises/exception-flow/exception_flow.rb +27 -0
  132. data/exercises/exception-flow/hint.md +5 -0
  133. data/exercises/heredoc-layout/brief.md +14 -0
  134. data/exercises/heredoc-layout/heredoc_layout.rb +25 -0
  135. data/exercises/heredoc-layout/hint.md +9 -0
  136. data/exercises/keyword-forwarding/brief.md +8 -0
  137. data/exercises/keyword-forwarding/hint.md +5 -0
  138. data/exercises/keyword-forwarding/keyword_forwarding.rb +27 -0
  139. data/exercises/lazy-enumeration/brief.md +8 -0
  140. data/exercises/lazy-enumeration/hint.md +5 -0
  141. data/exercises/lazy-enumeration/lazy_enumeration.rb +16 -0
  142. data/exercises/literals-and-operators/brief.md +20 -0
  143. data/exercises/literals-and-operators/hint.md +5 -0
  144. data/exercises/literals-and-operators/literals_and_operators.rb +15 -0
  145. data/exercises/method-contracts/brief.md +8 -0
  146. data/exercises/method-contracts/hint.md +5 -0
  147. data/exercises/method-contracts/method_contracts.rb +22 -0
  148. data/exercises/method-lookup/brief.md +8 -0
  149. data/exercises/method-lookup/hint.md +5 -0
  150. data/exercises/method-lookup/method_lookup.rb +26 -0
  151. data/exercises/nonlocal-exit/brief.md +8 -0
  152. data/exercises/nonlocal-exit/hint.md +5 -0
  153. data/exercises/nonlocal-exit/nonlocal_exit.rb +29 -0
  154. data/exercises/numbered-parameters/brief.md +18 -0
  155. data/exercises/numbered-parameters/hint.md +5 -0
  156. data/exercises/numbered-parameters/numbered_parameters.rb +18 -0
  157. data/exercises/numeric-precision/brief.md +8 -0
  158. data/exercises/numeric-precision/hint.md +5 -0
  159. data/exercises/numeric-precision/numeric_precision.rb +17 -0
  160. data/exercises/pattern-matching/brief.md +8 -0
  161. data/exercises/pattern-matching/hint.md +5 -0
  162. data/exercises/pattern-matching/pattern_matching.rb +22 -0
  163. data/exercises/refinement-scope/brief.md +8 -0
  164. data/exercises/refinement-scope/hint.md +5 -0
  165. data/exercises/refinement-scope/refinement_scope.rb +33 -0
  166. data/exercises/regexp-captures/brief.md +8 -0
  167. data/exercises/regexp-captures/hint.md +5 -0
  168. data/exercises/regexp-captures/regexp_captures.rb +25 -0
  169. data/exercises/runtime-context/brief.md +20 -0
  170. data/exercises/runtime-context/hint.md +8 -0
  171. data/exercises/runtime-context/runtime_context.rb +11 -0
  172. data/exercises/shared-rows/brief.md +8 -0
  173. data/exercises/shared-rows/hint.md +7 -0
  174. data/exercises/shared-rows/shared_rows.rb +13 -0
  175. data/exercises/singleton-pattern/brief.md +8 -0
  176. data/exercises/singleton-pattern/hint.md +5 -0
  177. data/exercises/singleton-pattern/singleton_pattern.rb +20 -0
  178. data/exercises/time-and-date/brief.md +8 -0
  179. data/exercises/time-and-date/hint.md +5 -0
  180. data/exercises/time-and-date/time_and_date.rb +21 -0
  181. data/exercises/visibility/brief.md +8 -0
  182. data/exercises/visibility/hint.md +5 -0
  183. data/exercises/visibility/visibility.rb +32 -0
  184. data/lib/rkoans/catalog.rb +31 -0
  185. data/lib/rkoans/checker.rb +62 -0
  186. data/lib/rkoans/cli.rb +79 -0
  187. data/lib/rkoans/error.rb +6 -0
  188. data/lib/rkoans/exercise.rb +50 -0
  189. data/lib/rkoans/keyboard.rb +51 -0
  190. data/lib/rkoans/progress.rb +39 -0
  191. data/lib/rkoans/selection.rb +31 -0
  192. data/lib/rkoans/session.rb +127 -0
  193. data/lib/rkoans/terminal_view.rb +99 -0
  194. data/lib/rkoans/version.rb +1 -1
  195. data/lib/rkoans/watcher.rb +58 -0
  196. data/lib/rkoans.rb +13 -3
  197. data/sig/about_array_assignment_acceptance_test.rbs +3 -0
  198. data/sig/about_arrays_acceptance_test.rbs +3 -0
  199. data/sig/about_asserts_command_test.rbs +4 -0
  200. data/sig/about_blocks_acceptance_test.rbs +3 -0
  201. data/sig/about_class_methods_acceptance_test.rbs +3 -0
  202. data/sig/about_classes_acceptance_test.rbs +3 -0
  203. data/sig/about_constants_acceptance_test.rbs +3 -0
  204. data/sig/about_control_statements_acceptance_test.rbs +3 -0
  205. data/sig/about_dice_project_acceptance_test.rbs +3 -0
  206. data/sig/about_exceptions_acceptance_test.rbs +3 -0
  207. data/sig/about_extra_credit_acceptance_test.rbs +5 -0
  208. data/sig/about_hashes_acceptance_test.rbs +3 -0
  209. data/sig/about_inheritance_acceptance_test.rbs +3 -0
  210. data/sig/about_iteration_acceptance_test.rbs +3 -0
  211. data/sig/about_keyword_arguments_acceptance_test.rbs +3 -0
  212. data/sig/about_message_passing_acceptance_test.rbs +3 -0
  213. data/sig/about_methods_acceptance_test.rbs +3 -0
  214. data/sig/about_modules_acceptance_test.rbs +3 -0
  215. data/sig/about_nil_acceptance_test.rbs +3 -0
  216. data/sig/about_objects_acceptance_test.rbs +3 -0
  217. data/sig/about_open_classes_acceptance_test.rbs +3 -0
  218. data/sig/about_pattern_matching_acceptance_test.rbs +3 -0
  219. data/sig/about_proxy_object_project_acceptance_test.rbs +3 -0
  220. data/sig/about_regular_expressions_acceptance_test.rbs +3 -0
  221. data/sig/about_sandwich_code_acceptance_test.rbs +3 -0
  222. data/sig/about_scope_acceptance_test.rbs +3 -0
  223. data/sig/about_scoring_project_acceptance_test.rbs +3 -0
  224. data/sig/about_strings_acceptance_test.rbs +3 -0
  225. data/sig/about_symbols_acceptance_test.rbs +3 -0
  226. data/sig/about_to_str_acceptance_test.rbs +3 -0
  227. data/sig/about_triangle_project_acceptance_test.rbs +3 -0
  228. data/sig/about_triangle_project_two_acceptance_test.rbs +3 -0
  229. data/sig/about_true_and_false_command_test.rbs +4 -0
  230. data/sig/catalog_error_command_test.rbs +4 -0
  231. data/sig/checker_test.rbs +9 -0
  232. data/sig/class_state_acceptance_test.rbs +3 -0
  233. data/sig/closure_capture_acceptance_test.rbs +3 -0
  234. data/sig/command_support.rbs +18 -0
  235. data/sig/command_test.rbs +5 -0
  236. data/sig/constant_scope_acceptance_test.rbs +3 -0
  237. data/sig/core_protocols_acceptance_test.rbs +3 -0
  238. data/sig/curriculum_cop_test.rbs +9 -0
  239. data/sig/delegation_acceptance_test.rbs +3 -0
  240. data/sig/dynamic_methods_acceptance_test.rbs +3 -0
  241. data/sig/exception_flow_acceptance_test.rbs +3 -0
  242. data/sig/exercise_test.rbs +3 -0
  243. data/sig/exercises/about_array_assignment.rbs +36 -0
  244. data/sig/exercises/about_arrays.rbs +51 -0
  245. data/sig/exercises/about_asserts.rbs +23 -0
  246. data/sig/exercises/about_blocks.rbs +40 -0
  247. data/sig/exercises/about_class_methods.rbs +62 -0
  248. data/sig/exercises/about_classes.rbs +88 -0
  249. data/sig/exercises/about_constants.rbs +53 -0
  250. data/sig/exercises/about_control_statements.rbs +46 -0
  251. data/sig/exercises/about_dice_project.rbs +16 -0
  252. data/sig/exercises/about_exceptions.rbs +36 -0
  253. data/sig/exercises/about_extra_credit.rbs +36 -0
  254. data/sig/exercises/about_hashes.rbs +62 -0
  255. data/sig/exercises/about_inheritance.rbs +50 -0
  256. data/sig/exercises/about_iteration.rbs +37 -0
  257. data/sig/exercises/about_keyword_arguments.rbs +33 -0
  258. data/sig/exercises/about_message_passing.rbs +68 -0
  259. data/sig/exercises/about_methods.rbs +68 -0
  260. data/sig/exercises/about_modules.rbs +38 -0
  261. data/sig/exercises/about_nil.rbs +23 -0
  262. data/sig/exercises/about_objects.rbs +38 -0
  263. data/sig/exercises/about_open_classes.rbs +31 -0
  264. data/sig/exercises/about_pattern_matching.rbs +65 -0
  265. data/sig/exercises/about_proxy_object_project.rbs +31 -0
  266. data/sig/exercises/about_regular_expressions.rbs +83 -0
  267. data/sig/exercises/about_sandwich_code.rbs +17 -0
  268. data/sig/exercises/about_scope.rbs +59 -0
  269. data/sig/exercises/about_scoring_project.rbs +16 -0
  270. data/sig/exercises/about_strings.rbs +85 -0
  271. data/sig/exercises/about_symbols.rbs +46 -0
  272. data/sig/exercises/about_to_str.rbs +36 -0
  273. data/sig/exercises/about_triangle_project.rbs +11 -0
  274. data/sig/exercises/about_triangle_project_two.rbs +12 -0
  275. data/sig/exercises/about_true_and_false.rbs +27 -0
  276. data/sig/exercises/blocks_and_methods.rbs +11 -0
  277. data/sig/exercises/class_state.rbs +19 -0
  278. data/sig/exercises/closure_capture.rbs +10 -0
  279. data/sig/exercises/collection_basics.rbs +6 -0
  280. data/sig/exercises/collection_basics_test.rbs +4 -0
  281. data/sig/exercises/constant_scope.rbs +11 -0
  282. data/sig/exercises/core_protocols.rbs +20 -0
  283. data/sig/exercises/delegation.rbs +14 -0
  284. data/sig/exercises/dynamic_methods.rbs +13 -0
  285. data/sig/exercises/exception_flow.rbs +11 -0
  286. data/sig/exercises/heredoc_layout.rbs +11 -0
  287. data/sig/exercises/keyword_forwarding.rbs +12 -0
  288. data/sig/exercises/lazy_enumeration.rbs +10 -0
  289. data/sig/exercises/literals_and_operators.rbs +12 -0
  290. data/sig/exercises/method_contracts.rbs +11 -0
  291. data/sig/exercises/method_lookup.rbs +16 -0
  292. data/sig/exercises/nonlocal_exit.rbs +14 -0
  293. data/sig/exercises/numbered_parameters.rbs +11 -0
  294. data/sig/exercises/numeric_precision.rbs +11 -0
  295. data/sig/exercises/pattern_matching.rbs +10 -0
  296. data/sig/exercises/refinement_scope.rbs +18 -0
  297. data/sig/exercises/regexp_captures.rbs +11 -0
  298. data/sig/exercises/runtime_context.rbs +23 -0
  299. data/sig/exercises/shared_rows.rbs +11 -0
  300. data/sig/exercises/singleton_pattern.rbs +14 -0
  301. data/sig/exercises/time_and_date.rbs +11 -0
  302. data/sig/exercises/visibility.rbs +18 -0
  303. data/sig/fixture_support.rbs +11 -0
  304. data/sig/help_hint_command_test.rbs +8 -0
  305. data/sig/heredoc_layout_acceptance_test.rbs +3 -0
  306. data/sig/keyboard_session_test.rbs +9 -0
  307. data/sig/keyword_forwarding_acceptance_test.rbs +3 -0
  308. data/sig/lazy_enumeration_acceptance_test.rbs +3 -0
  309. data/sig/literals_and_operators_acceptance_test.rbs +3 -0
  310. data/sig/method_contracts_acceptance_test.rbs +3 -0
  311. data/sig/method_lookup_acceptance_test.rbs +3 -0
  312. data/sig/nonlocal_exit_acceptance_test.rbs +3 -0
  313. data/sig/numbered_parameters_acceptance_test.rbs +3 -0
  314. data/sig/numeric_precision_acceptance_test.rbs +4 -0
  315. data/sig/packaging_test.rbs +3 -0
  316. data/sig/pattern_matching_acceptance_test.rbs +3 -0
  317. data/sig/reference_solutions_test.rbs +3 -0
  318. data/sig/refinement_scope_acceptance_test.rbs +3 -0
  319. data/sig/regexp_captures_acceptance_test.rbs +4 -0
  320. data/sig/rkoans/catalog.rbs +11 -0
  321. data/sig/rkoans/checker.rbs +22 -0
  322. data/sig/rkoans/cli.rbs +21 -0
  323. data/sig/rkoans/exercise.rbs +18 -0
  324. data/sig/rkoans/keyboard.rbs +13 -0
  325. data/sig/rkoans/progress.rbs +9 -0
  326. data/sig/rkoans/selection.rbs +9 -0
  327. data/sig/rkoans/session.rbs +30 -0
  328. data/sig/rkoans/terminal_view.rbs +24 -0
  329. data/sig/rkoans/watcher.rbs +18 -0
  330. data/sig/rkoans.rbs +2 -0
  331. data/sig/runtime_context_command_test.rbs +4 -0
  332. data/sig/selection_command_test.rbs +5 -0
  333. data/sig/session_command_test.rbs +12 -0
  334. data/sig/session_edge_cases_test.rbs +4 -0
  335. data/sig/shared_rows_acceptance_test.rbs +3 -0
  336. data/sig/singleton_pattern_acceptance_test.rbs +3 -0
  337. data/sig/time_and_date_acceptance_test.rbs +4 -0
  338. data/sig/visibility_acceptance_test.rbs +4 -0
  339. data/sig/watcher_test.rbs +3 -0
  340. data/solutions/about-array-assignment/about_array_assignment.rb +36 -0
  341. data/solutions/about-arrays/about_arrays.rb +53 -0
  342. data/solutions/about-asserts/about_asserts.rb +22 -0
  343. data/solutions/about-blocks/about_blocks.rb +30 -0
  344. data/solutions/about-class-methods/about_class_methods.rb +36 -0
  345. data/solutions/about-classes/about_classes.rb +40 -0
  346. data/solutions/about-constants/about_constants.rb +26 -0
  347. data/solutions/about-control-statements/about_control_statements.rb +35 -0
  348. data/solutions/about-dice-project/about_dice_project.rb +27 -0
  349. data/solutions/about-exceptions/about_exceptions.rb +30 -0
  350. data/solutions/about-extra-credit/about_extra_credit.rb +114 -0
  351. data/solutions/about-hashes/about_hashes.rb +52 -0
  352. data/solutions/about-inheritance/about_inheritance.rb +27 -0
  353. data/solutions/about-iteration/about_iteration.rb +31 -0
  354. data/solutions/about-keyword-arguments/about_keyword_arguments.rb +28 -0
  355. data/solutions/about-message-passing/about_message_passing.rb +38 -0
  356. data/solutions/about-methods/about_methods.rb +39 -0
  357. data/solutions/about-modules/about_modules.rb +23 -0
  358. data/solutions/about-nil/about_nil.rb +23 -0
  359. data/solutions/about-objects/about_objects.rb +34 -0
  360. data/solutions/about-open-classes/about_open_classes.rb +23 -0
  361. data/solutions/about-pattern-matching/about_pattern_matching.rb +39 -0
  362. data/solutions/about-proxy-object-project/about_proxy_object_project.rb +44 -0
  363. data/solutions/about-regular-expressions/about_regular_expressions.rb +60 -0
  364. data/solutions/about-sandwich-code/about_sandwich_code.rb +60 -0
  365. data/solutions/about-scope/about_scope.rb +33 -0
  366. data/solutions/about-scoring-project/about_scoring_project.rb +19 -0
  367. data/solutions/about-strings/about_strings.rb +56 -0
  368. data/solutions/about-symbols/about_symbols.rb +35 -0
  369. data/solutions/about-to-str/about_to_str.rb +24 -0
  370. data/solutions/about-triangle-project/about_triangle_project.rb +19 -0
  371. data/solutions/about-triangle-project-two/about_triangle_project_two.rb +25 -0
  372. data/solutions/about-true-and-false/about_true_and_false.rb +25 -0
  373. data/solutions/blocks-and-methods/blocks_and_methods.rb +14 -0
  374. data/solutions/class-state/class_state.rb +33 -0
  375. data/solutions/closure-capture/closure_capture.rb +12 -0
  376. data/solutions/collection-basics/collection_basics.rb +14 -0
  377. data/solutions/constant-scope/constant_scope.rb +18 -0
  378. data/solutions/core-protocols/core_protocols.rb +44 -0
  379. data/solutions/delegation/delegation.rb +17 -0
  380. data/solutions/dynamic-methods/dynamic_methods.rb +32 -0
  381. data/solutions/exception-flow/exception_flow.rb +34 -0
  382. data/solutions/heredoc-layout/heredoc_layout.rb +24 -0
  383. data/solutions/keyword-forwarding/keyword_forwarding.rb +26 -0
  384. data/solutions/lazy-enumeration/lazy_enumeration.rb +11 -0
  385. data/solutions/literals-and-operators/literals_and_operators.rb +22 -0
  386. data/solutions/method-contracts/method_contracts.rb +18 -0
  387. data/solutions/method-lookup/method_lookup.rb +26 -0
  388. data/solutions/nonlocal-exit/nonlocal_exit.rb +46 -0
  389. data/solutions/numbered-parameters/numbered_parameters.rb +18 -0
  390. data/solutions/numeric-precision/numeric_precision.rb +17 -0
  391. data/solutions/pattern-matching/pattern_matching.rb +17 -0
  392. data/solutions/refinement-scope/refinement_scope.rb +34 -0
  393. data/solutions/regexp-captures/regexp_captures.rb +24 -0
  394. data/solutions/runtime-context/runtime_context.rb +19 -0
  395. data/solutions/shared-rows/shared_rows.rb +13 -0
  396. data/solutions/singleton-pattern/singleton_pattern.rb +19 -0
  397. data/solutions/time-and-date/time_and_date.rb +16 -0
  398. data/solutions/visibility/visibility.rb +34 -0
  399. data/test/exercises/about_array_assignment_test.rb +87 -0
  400. data/test/exercises/about_arrays_test.rb +119 -0
  401. data/test/exercises/about_asserts_test.rb +41 -0
  402. data/test/exercises/about_blocks_test.rb +140 -0
  403. data/test/exercises/about_class_methods_test.rb +232 -0
  404. data/test/exercises/about_classes_test.rb +261 -0
  405. data/test/exercises/about_constants_test.rb +111 -0
  406. data/test/exercises/about_control_statements_test.rb +188 -0
  407. data/test/exercises/about_dice_project_test.rb +40 -0
  408. data/test/exercises/about_exceptions_test.rb +98 -0
  409. data/test/exercises/about_extra_credit_test.rb +74 -0
  410. data/test/exercises/about_hashes_test.rb +163 -0
  411. data/test/exercises/about_inheritance_test.rb +121 -0
  412. data/test/exercises/about_iteration_test.rb +148 -0
  413. data/test/exercises/about_keyword_arguments_test.rb +80 -0
  414. data/test/exercises/about_message_passing_test.rb +230 -0
  415. data/test/exercises/about_methods_test.rb +208 -0
  416. data/test/exercises/about_modules_test.rb +98 -0
  417. data/test/exercises/about_nil_test.rb +35 -0
  418. data/test/exercises/about_objects_test.rb +74 -0
  419. data/test/exercises/about_open_classes_test.rb +60 -0
  420. data/test/exercises/about_pattern_matching_test.rb +257 -0
  421. data/test/exercises/about_proxy_object_project_test.rb +75 -0
  422. data/test/exercises/about_regular_expressions_test.rb +243 -0
  423. data/test/exercises/about_sandwich_code_test.rb +82 -0
  424. data/test/exercises/about_scope_test.rb +123 -0
  425. data/test/exercises/about_scoring_project_test.rb +62 -0
  426. data/test/exercises/about_strings_test.rb +255 -0
  427. data/test/exercises/about_symbols_test.rb +120 -0
  428. data/test/exercises/about_to_str_test.rb +89 -0
  429. data/test/exercises/about_triangle_project_test.rb +29 -0
  430. data/test/exercises/about_triangle_project_two_test.rb +28 -0
  431. data/test/exercises/about_true_and_false_test.rb +43 -0
  432. data/test/exercises/blocks_and_methods_test.rb +22 -0
  433. data/test/exercises/class_state_test.rb +29 -0
  434. data/test/exercises/closure_capture_test.rb +29 -0
  435. data/test/exercises/collection_basics_test.rb +18 -0
  436. data/test/exercises/constant_scope_test.rb +18 -0
  437. data/test/exercises/core_protocols_test.rb +28 -0
  438. data/test/exercises/delegation_test.rb +23 -0
  439. data/test/exercises/dynamic_methods_test.rb +28 -0
  440. data/test/exercises/exception_flow_test.rb +17 -0
  441. data/test/exercises/heredoc_layout_test.rb +18 -0
  442. data/test/exercises/keyword_forwarding_test.rb +22 -0
  443. data/test/exercises/lazy_enumeration_test.rb +15 -0
  444. data/test/exercises/literals_and_operators_test.rb +25 -0
  445. data/test/exercises/method_contracts_test.rb +28 -0
  446. data/test/exercises/method_lookup_test.rb +14 -0
  447. data/test/exercises/nonlocal_exit_test.rb +22 -0
  448. data/test/exercises/numbered_parameters_test.rb +15 -0
  449. data/test/exercises/numeric_precision_test.rb +24 -0
  450. data/test/exercises/pattern_matching_test.rb +18 -0
  451. data/test/exercises/refinement_scope_test.rb +14 -0
  452. data/test/exercises/regexp_captures_test.rb +20 -0
  453. data/test/exercises/runtime_context_test.rb +59 -0
  454. data/test/exercises/shared_rows_test.rb +34 -0
  455. data/test/exercises/singleton_pattern_test.rb +16 -0
  456. data/test/exercises/time_and_date_test.rb +22 -0
  457. data/test/exercises/visibility_test.rb +22 -0
  458. metadata +471 -4
  459. data/Rakefile +0 -12
  460. data/sig/test_rkoans.rbs +0 -3
@@ -0,0 +1,10 @@
1
+ module Exercises
2
+ class ClosureCapture
3
+ def self.multipliers: (Array[Integer] numbers) -> Array[^(Integer value) -> Integer]
4
+ end
5
+ end
6
+
7
+ class ClosureCaptureTest
8
+ def test_separate_captures: -> void
9
+ def test_lambda_contract: -> void
10
+ end
@@ -0,0 +1,6 @@
1
+ module Exercises
2
+ class CollectionBasics
3
+ def self.koans: -> { mapped: Array[Integer]?, selected: Array[Integer]? }
4
+ def self.double_odds: (Array[Integer]) -> Array[Integer]
5
+ end
6
+ end
@@ -0,0 +1,4 @@
1
+ class CollectionBasicsTest
2
+ def test_collection_koans: -> void
3
+ def test_double_odds: -> void
4
+ end
@@ -0,0 +1,11 @@
1
+ module Exercises
2
+ class ConstantScope
3
+ def self.predictions: -> { lexical_label: String, shared_class_count: Integer, new_block_local_visible: bool }
4
+ def self.counter: -> ^() -> Integer
5
+ end
6
+ end
7
+
8
+ class ConstantScopeTest
9
+ def test_scope_predictions: -> void
10
+ def test_local_closure_state: -> void
11
+ end
@@ -0,0 +1,20 @@
1
+ module Exercises
2
+ class CoreProtocols
3
+ class Packet
4
+ include Enumerable[Integer]
5
+ include Comparable
6
+ def initialize: (Array[Integer] values) -> void
7
+ def each: -> Enumerator[Integer, untyped]
8
+ | { (Integer) -> void } -> untyped
9
+ def total: -> Integer
10
+ def <=>: (Packet other) -> Integer
11
+ def to_s: -> String
12
+ end
13
+ def self.protocol: (Packet packet) -> [bool, bool]
14
+ end
15
+ end
16
+
17
+ class CoreProtocolsTest
18
+ def test_enumerable_protocol: -> void
19
+ def test_comparable_and_conversion: -> void
20
+ end
@@ -0,0 +1,14 @@
1
+ module Exercises
2
+ class Delegation
3
+ class Mailbox[A]
4
+ def initialize: (Array[A] items) -> void
5
+ def push: (*A items) -> Array[A]
6
+ def size: -> Integer
7
+ end
8
+ end
9
+ end
10
+
11
+ class DelegationTest
12
+ def test_delegation_receiver: -> void
13
+ def test_live_receiver: -> void
14
+ end
@@ -0,0 +1,13 @@
1
+ module Exercises
2
+ class DynamicMethods
3
+ def self.readers: (Array[Symbol] names) -> Class
4
+ def self.evaluate: (Integer factor) -> Integer
5
+ def self.instance_value: (Object object, Symbol name) -> untyped
6
+ def self.class_value: (Class klass) -> Class
7
+ end
8
+ end
9
+
10
+ class DynamicMethodsTest
11
+ def test_defined_reader_closures: -> void
12
+ def test_eval_binding_and_reflection: -> void
13
+ end
@@ -0,0 +1,11 @@
1
+ module Exercises
2
+ class ExceptionFlow
3
+ def self.trace: (fail: bool) -> Array[String]
4
+ def self.reraises: -> bot
5
+ end
6
+ end
7
+
8
+ class ExceptionFlowTest
9
+ def test_ensure_and_else: -> void
10
+ def test_reraise: -> void
11
+ end
@@ -0,0 +1,11 @@
1
+ module Exercises
2
+ class HeredocLayout
3
+ def self.render: (String name) -> String
4
+ def self.literal: -> String
5
+ end
6
+ end
7
+
8
+ class HeredocLayoutTest
9
+ def test_squiggly_indentation: -> void
10
+ def test_quoted_heredoc: -> void
11
+ end
@@ -0,0 +1,12 @@
1
+ module Exercises
2
+ class KeywordForwarding
3
+ type payload = String | Hash[Symbol, String]
4
+ def self.target: (payload, ?suffix: String) ?{ (payload) -> String } -> String
5
+ def self.forward: (*payload args, **String keywords) ?{ (payload) -> String } -> String
6
+ end
7
+ end
8
+
9
+ class KeywordForwardingTest
10
+ def test_keyword_and_block: -> void
11
+ def test_positional_hash: -> void
12
+ end
@@ -0,0 +1,10 @@
1
+ module Exercises
2
+ class LazyEnumeration
3
+ def self.first_multiples: (Integer limit) -> Array[Integer]
4
+ end
5
+ end
6
+
7
+ class LazyEnumerationTest
8
+ def test_lazy_limit: -> void
9
+ def test_empty_limit: -> void
10
+ end
@@ -0,0 +1,12 @@
1
+ module Exercises
2
+ class LiteralsAndOperators
3
+ type predictions = { zero_truthy: bool, integer_division: Integer, float_division: Float, precedence: Integer, not_nil: bool, words: Array[String], range: Array[Integer] }
4
+ def self.predictions: -> predictions
5
+ def self.default_for_nil: [A] (A? value) -> (A | String)
6
+ end
7
+ end
8
+
9
+ class LiteralsAndOperatorsTest
10
+ def test_literals_and_precedence: -> void
11
+ def test_short_circuit_default: -> void
12
+ end
@@ -0,0 +1,11 @@
1
+ module Exercises
2
+ class MethodContracts
3
+ def self.format_order: (String name, ?Integer quantity, *Symbol extras, unit: String, **String options) ?{ (String) -> String } -> String
4
+ def self.parameters: -> Array[[Symbol, Symbol]]
5
+ end
6
+ end
7
+
8
+ class MethodContractsTest
9
+ def test_method_defaults_and_block: -> void
10
+ def test_parameter_metadata: -> void
11
+ end
@@ -0,0 +1,16 @@
1
+ module Exercises
2
+ class MethodLookup
3
+ module Wrapper
4
+ def call: -> String
5
+ end
6
+ class Presenter
7
+ def call: -> String
8
+ end
9
+ def self.lookup: -> Array[String]
10
+ end
11
+ end
12
+
13
+ class MethodLookupTest
14
+ def test_prepend_wrapper: -> void
15
+ def test_ancestor_order: -> void
16
+ end
@@ -0,0 +1,14 @@
1
+ module Exercises
2
+ class NonlocalExit
3
+ def self.lambda_trace: -> Array[String]
4
+ def self.escaped_proc: -> ^() -> bot
5
+ def self.find_even: (Array[Array[Integer]] groups) -> Integer?
6
+ def self.skip_odds: (Array[Integer] values) -> Array[Integer]
7
+ end
8
+ end
9
+
10
+ class NonlocalExitTest
11
+ def test_lambda_return_scope: -> void
12
+ def test_proc_nonlocal_return: -> void
13
+ def test_catch_throw_and_next: -> void
14
+ end
@@ -0,0 +1,11 @@
1
+ module Exercises
2
+ class NumberedParameters
3
+ def self.pair_sums: (Array[[Integer, Integer]] pairs) -> Array[Integer]
4
+ def self.predictions: -> { explicit_and_numbered: bool, numbered_pair: bool }
5
+ end
6
+ end
7
+
8
+ class NumberedParametersTest
9
+ def test_numbered_pair_input: -> void
10
+ def test_numbered_syntax: -> void
11
+ end
@@ -0,0 +1,11 @@
1
+ module Exercises
2
+ class NumericPrecision
3
+ def self.ratios: (Integer a, Integer b) -> { integer: Integer, floating: Float, rational: Rational }
4
+ def self.imaginary_product: (Integer a, Integer b) -> Complex
5
+ end
6
+ end
7
+
8
+ class NumericPrecisionTest
9
+ def test_numeric_division: -> void
10
+ def test_complex_product: -> void
11
+ end
@@ -0,0 +1,10 @@
1
+ module Exercises
2
+ class PatternMatching
3
+ def self.amount: (Hash[Symbol, untyped] payload, String kind) -> Integer?
4
+ end
5
+ end
6
+
7
+ class PatternMatchingTest
8
+ def test_pinned_kind: -> void
9
+ def test_pattern_guard: -> void
10
+ end
@@ -0,0 +1,18 @@
1
+ module Exercises
2
+ class RefinementScope
3
+ class Speaker
4
+ def say: -> String
5
+ end
6
+ module Voice
7
+ end
8
+ module Local
9
+ def self.call: -> String
10
+ end
11
+ def self.outside: -> String
12
+ end
13
+ end
14
+
15
+ class RefinementScopeTest
16
+ def test_lexical_refinement: -> void
17
+ def test_outside_unchanged: -> void
18
+ end
@@ -0,0 +1,11 @@
1
+ module Exercises
2
+ class RegexpCaptures
3
+ def self.parse: (String text) -> { name: String, id: Integer }?
4
+ def self.probe: (String text) -> [String?, bool]
5
+ end
6
+ end
7
+
8
+ class RegexpCapturesTest
9
+ def test_whole_string_and_captures: -> void
10
+ def test_match_without_global_capture_change: -> void
11
+ end
@@ -0,0 +1,23 @@
1
+ module Exercises
2
+ class RuntimeContext
3
+ type context = {
4
+ arguments: Array[String],
5
+ greeting: String?,
6
+ program: String,
7
+ file: String,
8
+ encoding: String,
9
+ ruby: String
10
+ }
11
+ def self.context: -> context
12
+ end
13
+ end
14
+
15
+ class RuntimeContextTest
16
+ @arguments: Array[String]
17
+ @greeting: String?
18
+ def setup: -> void
19
+ def teardown: -> void
20
+ def test_runtime_globals: -> void
21
+ def test_runtime_constants: -> void
22
+ def test_empty_arguments_and_missing_or_empty_greeting: -> void
23
+ end
@@ -0,0 +1,11 @@
1
+ module Exercises
2
+ class SharedRows
3
+ def self.rows: (Integer count) -> Array[Array[untyped]]
4
+ end
5
+ end
6
+
7
+ class SharedRowsTest
8
+ def test_independent_rows: -> void
9
+ def test_empty_rows: -> void
10
+ def test_fresh_rows_on_each_call: -> void
11
+ end
@@ -0,0 +1,14 @@
1
+ module Exercises
2
+ class SingletonPattern
3
+ class Configuration
4
+ attr_accessor mode: String
5
+ def initialize: -> void
6
+ def self.instance: -> Configuration
7
+ end
8
+ end
9
+ end
10
+
11
+ class SingletonPatternTest
12
+ def test_singleton_identity: -> void
13
+ def test_private_constructor: -> void
14
+ end
@@ -0,0 +1,11 @@
1
+ module Exercises
2
+ class TimeAndDate
3
+ def self.utc: (String text) -> String
4
+ def self.days_between: (String first, String last) -> Integer
5
+ end
6
+ end
7
+
8
+ class TimeAndDateTest
9
+ def test_time_offset: -> void
10
+ def test_calendar_days: -> void
11
+ end
@@ -0,0 +1,18 @@
1
+ module Exercises
2
+ class Visibility
3
+ class Wallet
4
+ def initialize: (Integer balance) -> void
5
+ def balance: -> Integer
6
+ private
7
+ def normalize: (Integer value) -> Integer
8
+ public
9
+ def deposit: (Integer value) -> Integer
10
+ def compare: (Wallet other) -> Integer
11
+ end
12
+ end
13
+ end
14
+
15
+ class VisibilityTest
16
+ def test_protected_peer_calls: -> void
17
+ def test_private_normalization: -> void
18
+ end
@@ -0,0 +1,11 @@
1
+ module FixtureSupport
2
+ include CommandSupport
3
+ FIXTURE_ROOT: String
4
+ FIXTURE_COMMAND: Array[String]
5
+
6
+ private
7
+
8
+ def command: -> Array[String]
9
+ def reference_source: (?String id) -> String
10
+ def solution: (String directory) -> String
11
+ end
@@ -0,0 +1,8 @@
1
+ class HelpHintCommandTest
2
+ include FixtureSupport
3
+ def test_help_is_always_available_and_hints_are_limited_to_unfinished_current_exercises: -> void
4
+
5
+ private
6
+
7
+ def with_session: (String directory) { (IO input, IO output) -> untyped } -> untyped
8
+ end
@@ -0,0 +1,3 @@
1
+ class HeredocLayoutAcceptanceTest
2
+ def test_incorrect_delimiters_are_rejected: -> void
3
+ end
@@ -0,0 +1,9 @@
1
+ class KeyboardSessionTest
2
+ include FixtureSupport
3
+ def test_list_and_show_are_immediate_but_next_and_quit_require_enter: -> void
4
+
5
+ private
6
+
7
+ def confirm_next_and_quit: (IO input, IO output, Integer pid, String directory) -> void
8
+ def stop_child: (Integer pid) -> void
9
+ end
@@ -0,0 +1,3 @@
1
+ class KeywordForwardingAcceptanceTest
2
+ def test_incorrect_fix_is_rejected: -> void
3
+ end
@@ -0,0 +1,3 @@
1
+ class LazyEnumerationAcceptanceTest
2
+ def test_incorrect_fix_is_rejected: -> void
3
+ end
@@ -0,0 +1,3 @@
1
+ class LiteralsAndOperatorsAcceptanceTest
2
+ def test_incorrect_fix_is_rejected: -> void
3
+ end
@@ -0,0 +1,3 @@
1
+ class MethodContractsAcceptanceTest
2
+ def test_incorrect_fix_is_rejected: -> void
3
+ end
@@ -0,0 +1,3 @@
1
+ class MethodLookupAcceptanceTest
2
+ def test_incorrect_fix_is_rejected: -> void
3
+ end
@@ -0,0 +1,3 @@
1
+ class NonlocalExitAcceptanceTest
2
+ def test_incorrect_fix_is_rejected: -> void
3
+ end
@@ -0,0 +1,3 @@
1
+ class NumberedParametersAcceptanceTest
2
+ def test_incorrect_fix_is_rejected: -> void
3
+ end
@@ -0,0 +1,4 @@
1
+ class NumericPrecisionAcceptanceTest
2
+ def test_incorrect_fix_is_rejected: -> void
3
+ def test_integer_complex_product_is_rejected: -> void
4
+ end
@@ -0,0 +1,3 @@
1
+ class PackagingTest
2
+ def test_package_includes_signatures_and_checks_but_not_learner_edits: -> void
3
+ end
@@ -0,0 +1,3 @@
1
+ class PatternMatchingAcceptanceTest
2
+ def test_incorrect_fix_is_rejected: -> void
3
+ end
@@ -0,0 +1,3 @@
1
+ class ReferenceSolutionsTest
2
+ def test_each_reference_passes_its_exercise_checks: -> void
3
+ end
@@ -0,0 +1,3 @@
1
+ class RefinementScopeAcceptanceTest
2
+ def test_incorrect_fix_is_rejected: -> void
3
+ end
@@ -0,0 +1,4 @@
1
+ class RegexpCapturesAcceptanceTest
2
+ def test_incorrect_fix_is_rejected: -> void
3
+ def test_float_identifier_is_rejected: -> void
4
+ end
@@ -0,0 +1,11 @@
1
+ module Rkoans
2
+ class Catalog
3
+ @root: String
4
+ @ids: Array[String]
5
+ attr_reader root: String
6
+ attr_reader ids: Array[String]
7
+ def initialize: (?root: String) -> void
8
+ private
9
+ def valid_ids?: -> bool
10
+ end
11
+ end
@@ -0,0 +1,22 @@
1
+ module Rkoans
2
+ class Checker
3
+ class Result < Data
4
+ attr_reader output: String
5
+ attr_reader exit_code: Integer
6
+
7
+ def self.new: (String output, Integer exit_code) -> Result
8
+ | (output: String, exit_code: Integer) -> Result
9
+ end
10
+
11
+ MAX_KB: Integer
12
+ @timeout: Integer | Float
13
+
14
+ def initialize: (?timeout: Integer | Float) -> void
15
+ def run: (Exercise exercise) -> Result
16
+
17
+ private
18
+
19
+ def stop_group: (pid: Integer) -> Integer?
20
+ def reap_exited_child: (Integer pid) -> Integer?
21
+ end
22
+ end
@@ -0,0 +1,21 @@
1
+ module Rkoans
2
+ class CLI
3
+ @err: IO
4
+ @out: IO
5
+ @session: Session?
6
+ @directory: String
7
+ @input: IO
8
+
9
+ @catalog: Catalog?
10
+ def initialize: (?out: IO, ?err: IO, ?input: IO, ?directory: String, ?catalog: Catalog?) -> void
11
+ def run: (Array[String] arguments) -> Integer
12
+
13
+ private
14
+
15
+ def catalog: -> Catalog
16
+ def session: -> Session
17
+ def dispatch: (String command, String? id) -> Integer
18
+ def help: -> Integer
19
+ def usage_error: -> Integer
20
+ end
21
+ end
@@ -0,0 +1,18 @@
1
+ module Rkoans
2
+ class Exercise
3
+ @id: String
4
+ @solution: String
5
+ @source: String
6
+ @root: String
7
+
8
+ attr_reader solution: String
9
+ attr_reader id: String
10
+
11
+ def initialize: (?directory: String, ?id: String, ?catalog: Catalog) -> void
12
+ def prepare: -> Integer?
13
+ def instructions: -> String
14
+ def checks: -> String
15
+ def reference: -> String
16
+ def hint: -> String
17
+ end
18
+ end
@@ -0,0 +1,13 @@
1
+ module Rkoans
2
+ class Keyboard
3
+ @input: IO?
4
+ @pending: String?
5
+ def initialize: (input: IO?) -> void
6
+ def with_terminal: [T] () { () -> T } -> T
7
+ def read: (Float interval) -> String?
8
+
9
+ private
10
+
11
+ def decode: (String key) -> String?
12
+ end
13
+ end
@@ -0,0 +1,9 @@
1
+ module Rkoans
2
+ class Progress
3
+ @path: String
4
+ @catalog: Catalog
5
+ def initialize: (directory: String, ?catalog: Catalog) -> void
6
+ def completed: -> Array[String]
7
+ def mark_done: (String id) -> Integer?
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Rkoans
2
+ class Selection
3
+ @path: String
4
+ @catalog: Catalog
5
+ def initialize: (directory: String, ?catalog: Catalog) -> void
6
+ def read: -> String
7
+ def write: (String id) -> Integer
8
+ end
9
+ end
@@ -0,0 +1,30 @@
1
+ module Rkoans
2
+ class Session
3
+ @directory: String
4
+ @input: IO
5
+ @selection: Selection
6
+ @checker: Checker
7
+ @progress: Progress
8
+ @view: TerminalView
9
+ @exercise: Exercise
10
+ @passed: bool
11
+ @listing: bool
12
+
13
+ @catalog: Catalog
14
+ def initialize: (directory: String, out: IO, input: IO, ?catalog: Catalog) -> void
15
+ def start: (String? id) -> Integer
16
+ def check: -> Integer
17
+
18
+ private
19
+
20
+ def activate: (String id) -> void
21
+ def watch: -> (String | :quit)
22
+ def handle_command: (String command) -> void
23
+ def advance: -> void
24
+ def show_checks: (watching: bool) -> Integer
25
+ def check_result: -> Checker::Result
26
+ def render: (Checker::Result result, watching: bool, ?message: String?) -> Integer
27
+ def show_message: (String message, ?watching: bool) -> void
28
+ def show_hint: -> void
29
+ end
30
+ end
@@ -0,0 +1,24 @@
1
+ module Rkoans
2
+ class TerminalView
3
+ HELP: String
4
+ @out: IO
5
+ @catalog: Catalog
6
+ def initialize: (out: IO, ?catalog: Catalog) -> void
7
+ def render: (exercise: Exercise, result: Checker::Result, completed: Array[String], watching: bool,
8
+ ?message: String?) -> void
9
+ def show_message: (String message, exercise: Exercise, completed: Array[String], passed: bool,
10
+ ?mode: (:current | :list | :quit)) -> void
11
+ def show_list: (exercise: Exercise, completed: Array[String], passed: bool) -> void
12
+ def footer: (Exercise exercise, Array[String] completed, bool passed, ?listing: bool) -> void
13
+
14
+ private
15
+
16
+ def clear: -> void
17
+
18
+ def show_completed: (Exercise exercise) -> void
19
+ def show_checks: (Exercise exercise, Checker::Result result) -> void
20
+ def colorize: (String text, Integer code) -> String
21
+ def progress_line: (Integer count) -> String
22
+ def commands: (bool passed, listing: bool) -> String
23
+ end
24
+ end
@@ -0,0 +1,18 @@
1
+ module Rkoans
2
+ class Watcher
3
+ @path: String
4
+ @interval: Float
5
+ @debounce: Float
6
+ @previous: String?
7
+ @changed_at: Float?
8
+
9
+ def initialize: (String path, ?interval: Float, ?debounce: Float) -> void
10
+ def run: (?input: IO?) { (String?) -> untyped } -> bot
11
+
12
+ private
13
+
14
+ def fingerprint: -> String?
15
+ def changed?: -> bool
16
+ def monotonic_time: -> Float
17
+ end
18
+ end
data/sig/rkoans.rbs CHANGED
@@ -1,4 +1,6 @@
1
1
  module Rkoans
2
+ class Error < StandardError
3
+ end
2
4
  VERSION: String
3
5
  # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
6
  end