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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -0
- data/CURRICULUM.md +86 -0
- data/README.md +77 -0
- data/THIRD_PARTY_NOTICES.md +30 -0
- data/exercises/about-array-assignment/about_array_assignment.rb +45 -0
- data/exercises/about-array-assignment/brief.md +11 -0
- data/exercises/about-array-assignment/hint.md +11 -0
- data/exercises/about-arrays/about_arrays.rb +77 -0
- data/exercises/about-arrays/brief.md +16 -0
- data/exercises/about-arrays/hint.md +13 -0
- data/exercises/about-asserts/about_asserts.rb +22 -0
- data/exercises/about-asserts/brief.md +22 -0
- data/exercises/about-asserts/hint.md +10 -0
- data/exercises/about-blocks/about_blocks.rb +76 -0
- data/exercises/about-blocks/brief.md +44 -0
- data/exercises/about-blocks/hint.md +7 -0
- data/exercises/about-class-methods/about_class_methods.rb +105 -0
- data/exercises/about-class-methods/brief.md +73 -0
- data/exercises/about-class-methods/hint.md +8 -0
- data/exercises/about-classes/about_classes.rb +131 -0
- data/exercises/about-classes/brief.md +73 -0
- data/exercises/about-classes/hint.md +7 -0
- data/exercises/about-constants/about_constants.rb +49 -0
- data/exercises/about-constants/brief.md +51 -0
- data/exercises/about-constants/hint.md +7 -0
- data/exercises/about-control-statements/about_control_statements.rb +152 -0
- data/exercises/about-control-statements/brief.md +9 -0
- data/exercises/about-control-statements/hint.md +7 -0
- data/exercises/about-dice-project/about_dice_project.rb +27 -0
- data/exercises/about-dice-project/brief.md +12 -0
- data/exercises/about-dice-project/hint.md +5 -0
- data/exercises/about-exceptions/about_exceptions.rb +84 -0
- data/exercises/about-exceptions/brief.md +19 -0
- data/exercises/about-exceptions/hint.md +8 -0
- data/exercises/about-extra-credit/about_extra_credit.rb +117 -0
- data/exercises/about-extra-credit/brief.md +28 -0
- data/exercises/about-extra-credit/hint.md +5 -0
- data/exercises/about-hashes/about_hashes.rb +160 -0
- data/exercises/about-hashes/brief.md +9 -0
- data/exercises/about-hashes/hint.md +8 -0
- data/exercises/about-inheritance/about_inheritance.rb +63 -0
- data/exercises/about-inheritance/brief.md +50 -0
- data/exercises/about-inheritance/hint.md +8 -0
- data/exercises/about-iteration/about_iteration.rb +96 -0
- data/exercises/about-iteration/brief.md +26 -0
- data/exercises/about-iteration/hint.md +6 -0
- data/exercises/about-keyword-arguments/about_keyword_arguments.rb +56 -0
- data/exercises/about-keyword-arguments/brief.md +28 -0
- data/exercises/about-keyword-arguments/hint.md +7 -0
- data/exercises/about-message-passing/about_message_passing.rb +112 -0
- data/exercises/about-message-passing/brief.md +59 -0
- data/exercises/about-message-passing/hint.md +8 -0
- data/exercises/about-methods/about_methods.rb +104 -0
- data/exercises/about-methods/brief.md +55 -0
- data/exercises/about-methods/hint.md +8 -0
- data/exercises/about-modules/about_modules.rb +43 -0
- data/exercises/about-modules/brief.md +44 -0
- data/exercises/about-modules/hint.md +8 -0
- data/exercises/about-nil/about_nil.rb +29 -0
- data/exercises/about-nil/brief.md +12 -0
- data/exercises/about-nil/hint.md +11 -0
- data/exercises/about-objects/about_objects.rb +51 -0
- data/exercises/about-objects/brief.md +14 -0
- data/exercises/about-objects/hint.md +12 -0
- data/exercises/about-open-classes/about_open_classes.rb +38 -0
- data/exercises/about-open-classes/brief.md +34 -0
- data/exercises/about-open-classes/hint.md +7 -0
- data/exercises/about-pattern-matching/about_pattern_matching.rb +106 -0
- data/exercises/about-pattern-matching/brief.md +124 -0
- data/exercises/about-pattern-matching/hint.md +8 -0
- data/exercises/about-proxy-object-project/about_proxy_object_project.rb +43 -0
- data/exercises/about-proxy-object-project/brief.md +10 -0
- data/exercises/about-proxy-object-project/hint.md +5 -0
- data/exercises/about-regular-expressions/about_regular_expressions.rb +174 -0
- data/exercises/about-regular-expressions/brief.md +9 -0
- data/exercises/about-regular-expressions/hint.md +8 -0
- data/exercises/about-sandwich-code/about_sandwich_code.rb +58 -0
- data/exercises/about-sandwich-code/brief.md +14 -0
- data/exercises/about-sandwich-code/hint.md +5 -0
- data/exercises/about-scope/about_scope.rb +76 -0
- data/exercises/about-scope/brief.md +35 -0
- data/exercises/about-scope/hint.md +8 -0
- data/exercises/about-scoring-project/about_scoring_project.rb +16 -0
- data/exercises/about-scoring-project/brief.md +10 -0
- data/exercises/about-scoring-project/hint.md +5 -0
- data/exercises/about-strings/about_strings.rb +142 -0
- data/exercises/about-strings/brief.md +22 -0
- data/exercises/about-strings/hint.md +11 -0
- data/exercises/about-symbols/about_symbols.rb +53 -0
- data/exercises/about-symbols/brief.md +21 -0
- data/exercises/about-symbols/hint.md +12 -0
- data/exercises/about-to-str/about_to_str.rb +49 -0
- data/exercises/about-to-str/brief.md +37 -0
- data/exercises/about-to-str/hint.md +7 -0
- data/exercises/about-triangle-project/about_triangle_project.rb +15 -0
- data/exercises/about-triangle-project/brief.md +11 -0
- data/exercises/about-triangle-project/hint.md +5 -0
- data/exercises/about-triangle-project-two/about_triangle_project_two.rb +22 -0
- data/exercises/about-triangle-project-two/brief.md +10 -0
- data/exercises/about-triangle-project-two/hint.md +5 -0
- data/exercises/about-true-and-false/about_true_and_false.rb +26 -0
- data/exercises/about-true-and-false/brief.md +22 -0
- data/exercises/about-true-and-false/hint.md +7 -0
- data/exercises/blocks-and-methods/blocks_and_methods.rb +14 -0
- data/exercises/blocks-and-methods/brief.md +8 -0
- data/exercises/blocks-and-methods/hint.md +6 -0
- data/exercises/catalog.json +61 -0
- data/exercises/class-state/brief.md +8 -0
- data/exercises/class-state/class_state.rb +39 -0
- data/exercises/class-state/hint.md +5 -0
- data/exercises/closure-capture/brief.md +8 -0
- data/exercises/closure-capture/closure_capture.rb +21 -0
- data/exercises/closure-capture/hint.md +5 -0
- data/exercises/collection-basics/brief.md +8 -0
- data/exercises/collection-basics/collection_basics.rb +16 -0
- data/exercises/collection-basics/hint.md +6 -0
- data/exercises/constant-scope/brief.md +8 -0
- data/exercises/constant-scope/constant_scope.rb +18 -0
- data/exercises/constant-scope/hint.md +5 -0
- data/exercises/core-protocols/brief.md +8 -0
- data/exercises/core-protocols/core_protocols.rb +43 -0
- data/exercises/core-protocols/hint.md +5 -0
- data/exercises/delegation/brief.md +8 -0
- data/exercises/delegation/delegation.rb +20 -0
- data/exercises/delegation/hint.md +5 -0
- data/exercises/dynamic-methods/brief.md +8 -0
- data/exercises/dynamic-methods/dynamic_methods.rb +33 -0
- data/exercises/dynamic-methods/hint.md +5 -0
- data/exercises/exception-flow/brief.md +8 -0
- data/exercises/exception-flow/exception_flow.rb +27 -0
- data/exercises/exception-flow/hint.md +5 -0
- data/exercises/heredoc-layout/brief.md +14 -0
- data/exercises/heredoc-layout/heredoc_layout.rb +25 -0
- data/exercises/heredoc-layout/hint.md +9 -0
- data/exercises/keyword-forwarding/brief.md +8 -0
- data/exercises/keyword-forwarding/hint.md +5 -0
- data/exercises/keyword-forwarding/keyword_forwarding.rb +27 -0
- data/exercises/lazy-enumeration/brief.md +8 -0
- data/exercises/lazy-enumeration/hint.md +5 -0
- data/exercises/lazy-enumeration/lazy_enumeration.rb +16 -0
- data/exercises/literals-and-operators/brief.md +20 -0
- data/exercises/literals-and-operators/hint.md +5 -0
- data/exercises/literals-and-operators/literals_and_operators.rb +15 -0
- data/exercises/method-contracts/brief.md +8 -0
- data/exercises/method-contracts/hint.md +5 -0
- data/exercises/method-contracts/method_contracts.rb +22 -0
- data/exercises/method-lookup/brief.md +8 -0
- data/exercises/method-lookup/hint.md +5 -0
- data/exercises/method-lookup/method_lookup.rb +26 -0
- data/exercises/nonlocal-exit/brief.md +8 -0
- data/exercises/nonlocal-exit/hint.md +5 -0
- data/exercises/nonlocal-exit/nonlocal_exit.rb +29 -0
- data/exercises/numbered-parameters/brief.md +18 -0
- data/exercises/numbered-parameters/hint.md +5 -0
- data/exercises/numbered-parameters/numbered_parameters.rb +18 -0
- data/exercises/numeric-precision/brief.md +8 -0
- data/exercises/numeric-precision/hint.md +5 -0
- data/exercises/numeric-precision/numeric_precision.rb +17 -0
- data/exercises/pattern-matching/brief.md +8 -0
- data/exercises/pattern-matching/hint.md +5 -0
- data/exercises/pattern-matching/pattern_matching.rb +22 -0
- data/exercises/refinement-scope/brief.md +8 -0
- data/exercises/refinement-scope/hint.md +5 -0
- data/exercises/refinement-scope/refinement_scope.rb +33 -0
- data/exercises/regexp-captures/brief.md +8 -0
- data/exercises/regexp-captures/hint.md +5 -0
- data/exercises/regexp-captures/regexp_captures.rb +25 -0
- data/exercises/runtime-context/brief.md +20 -0
- data/exercises/runtime-context/hint.md +8 -0
- data/exercises/runtime-context/runtime_context.rb +11 -0
- data/exercises/shared-rows/brief.md +8 -0
- data/exercises/shared-rows/hint.md +7 -0
- data/exercises/shared-rows/shared_rows.rb +13 -0
- data/exercises/singleton-pattern/brief.md +8 -0
- data/exercises/singleton-pattern/hint.md +5 -0
- data/exercises/singleton-pattern/singleton_pattern.rb +20 -0
- data/exercises/time-and-date/brief.md +8 -0
- data/exercises/time-and-date/hint.md +5 -0
- data/exercises/time-and-date/time_and_date.rb +21 -0
- data/exercises/visibility/brief.md +8 -0
- data/exercises/visibility/hint.md +5 -0
- data/exercises/visibility/visibility.rb +32 -0
- data/lib/rkoans/catalog.rb +31 -0
- data/lib/rkoans/checker.rb +62 -0
- data/lib/rkoans/cli.rb +79 -0
- data/lib/rkoans/error.rb +6 -0
- data/lib/rkoans/exercise.rb +50 -0
- data/lib/rkoans/keyboard.rb +51 -0
- data/lib/rkoans/progress.rb +39 -0
- data/lib/rkoans/selection.rb +31 -0
- data/lib/rkoans/session.rb +127 -0
- data/lib/rkoans/terminal_view.rb +99 -0
- data/lib/rkoans/version.rb +1 -1
- data/lib/rkoans/watcher.rb +58 -0
- data/lib/rkoans.rb +13 -3
- data/sig/about_array_assignment_acceptance_test.rbs +3 -0
- data/sig/about_arrays_acceptance_test.rbs +3 -0
- data/sig/about_asserts_command_test.rbs +4 -0
- data/sig/about_blocks_acceptance_test.rbs +3 -0
- data/sig/about_class_methods_acceptance_test.rbs +3 -0
- data/sig/about_classes_acceptance_test.rbs +3 -0
- data/sig/about_constants_acceptance_test.rbs +3 -0
- data/sig/about_control_statements_acceptance_test.rbs +3 -0
- data/sig/about_dice_project_acceptance_test.rbs +3 -0
- data/sig/about_exceptions_acceptance_test.rbs +3 -0
- data/sig/about_extra_credit_acceptance_test.rbs +5 -0
- data/sig/about_hashes_acceptance_test.rbs +3 -0
- data/sig/about_inheritance_acceptance_test.rbs +3 -0
- data/sig/about_iteration_acceptance_test.rbs +3 -0
- data/sig/about_keyword_arguments_acceptance_test.rbs +3 -0
- data/sig/about_message_passing_acceptance_test.rbs +3 -0
- data/sig/about_methods_acceptance_test.rbs +3 -0
- data/sig/about_modules_acceptance_test.rbs +3 -0
- data/sig/about_nil_acceptance_test.rbs +3 -0
- data/sig/about_objects_acceptance_test.rbs +3 -0
- data/sig/about_open_classes_acceptance_test.rbs +3 -0
- data/sig/about_pattern_matching_acceptance_test.rbs +3 -0
- data/sig/about_proxy_object_project_acceptance_test.rbs +3 -0
- data/sig/about_regular_expressions_acceptance_test.rbs +3 -0
- data/sig/about_sandwich_code_acceptance_test.rbs +3 -0
- data/sig/about_scope_acceptance_test.rbs +3 -0
- data/sig/about_scoring_project_acceptance_test.rbs +3 -0
- data/sig/about_strings_acceptance_test.rbs +3 -0
- data/sig/about_symbols_acceptance_test.rbs +3 -0
- data/sig/about_to_str_acceptance_test.rbs +3 -0
- data/sig/about_triangle_project_acceptance_test.rbs +3 -0
- data/sig/about_triangle_project_two_acceptance_test.rbs +3 -0
- data/sig/about_true_and_false_command_test.rbs +4 -0
- data/sig/catalog_error_command_test.rbs +4 -0
- data/sig/checker_test.rbs +9 -0
- data/sig/class_state_acceptance_test.rbs +3 -0
- data/sig/closure_capture_acceptance_test.rbs +3 -0
- data/sig/command_support.rbs +18 -0
- data/sig/command_test.rbs +5 -0
- data/sig/constant_scope_acceptance_test.rbs +3 -0
- data/sig/core_protocols_acceptance_test.rbs +3 -0
- data/sig/curriculum_cop_test.rbs +9 -0
- data/sig/delegation_acceptance_test.rbs +3 -0
- data/sig/dynamic_methods_acceptance_test.rbs +3 -0
- data/sig/exception_flow_acceptance_test.rbs +3 -0
- data/sig/exercise_test.rbs +3 -0
- data/sig/exercises/about_array_assignment.rbs +36 -0
- data/sig/exercises/about_arrays.rbs +51 -0
- data/sig/exercises/about_asserts.rbs +23 -0
- data/sig/exercises/about_blocks.rbs +40 -0
- data/sig/exercises/about_class_methods.rbs +62 -0
- data/sig/exercises/about_classes.rbs +88 -0
- data/sig/exercises/about_constants.rbs +53 -0
- data/sig/exercises/about_control_statements.rbs +46 -0
- data/sig/exercises/about_dice_project.rbs +16 -0
- data/sig/exercises/about_exceptions.rbs +36 -0
- data/sig/exercises/about_extra_credit.rbs +36 -0
- data/sig/exercises/about_hashes.rbs +62 -0
- data/sig/exercises/about_inheritance.rbs +50 -0
- data/sig/exercises/about_iteration.rbs +37 -0
- data/sig/exercises/about_keyword_arguments.rbs +33 -0
- data/sig/exercises/about_message_passing.rbs +68 -0
- data/sig/exercises/about_methods.rbs +68 -0
- data/sig/exercises/about_modules.rbs +38 -0
- data/sig/exercises/about_nil.rbs +23 -0
- data/sig/exercises/about_objects.rbs +38 -0
- data/sig/exercises/about_open_classes.rbs +31 -0
- data/sig/exercises/about_pattern_matching.rbs +65 -0
- data/sig/exercises/about_proxy_object_project.rbs +31 -0
- data/sig/exercises/about_regular_expressions.rbs +83 -0
- data/sig/exercises/about_sandwich_code.rbs +17 -0
- data/sig/exercises/about_scope.rbs +59 -0
- data/sig/exercises/about_scoring_project.rbs +16 -0
- data/sig/exercises/about_strings.rbs +85 -0
- data/sig/exercises/about_symbols.rbs +46 -0
- data/sig/exercises/about_to_str.rbs +36 -0
- data/sig/exercises/about_triangle_project.rbs +11 -0
- data/sig/exercises/about_triangle_project_two.rbs +12 -0
- data/sig/exercises/about_true_and_false.rbs +27 -0
- data/sig/exercises/blocks_and_methods.rbs +11 -0
- data/sig/exercises/class_state.rbs +19 -0
- data/sig/exercises/closure_capture.rbs +10 -0
- data/sig/exercises/collection_basics.rbs +6 -0
- data/sig/exercises/collection_basics_test.rbs +4 -0
- data/sig/exercises/constant_scope.rbs +11 -0
- data/sig/exercises/core_protocols.rbs +20 -0
- data/sig/exercises/delegation.rbs +14 -0
- data/sig/exercises/dynamic_methods.rbs +13 -0
- data/sig/exercises/exception_flow.rbs +11 -0
- data/sig/exercises/heredoc_layout.rbs +11 -0
- data/sig/exercises/keyword_forwarding.rbs +12 -0
- data/sig/exercises/lazy_enumeration.rbs +10 -0
- data/sig/exercises/literals_and_operators.rbs +12 -0
- data/sig/exercises/method_contracts.rbs +11 -0
- data/sig/exercises/method_lookup.rbs +16 -0
- data/sig/exercises/nonlocal_exit.rbs +14 -0
- data/sig/exercises/numbered_parameters.rbs +11 -0
- data/sig/exercises/numeric_precision.rbs +11 -0
- data/sig/exercises/pattern_matching.rbs +10 -0
- data/sig/exercises/refinement_scope.rbs +18 -0
- data/sig/exercises/regexp_captures.rbs +11 -0
- data/sig/exercises/runtime_context.rbs +23 -0
- data/sig/exercises/shared_rows.rbs +11 -0
- data/sig/exercises/singleton_pattern.rbs +14 -0
- data/sig/exercises/time_and_date.rbs +11 -0
- data/sig/exercises/visibility.rbs +18 -0
- data/sig/fixture_support.rbs +11 -0
- data/sig/help_hint_command_test.rbs +8 -0
- data/sig/heredoc_layout_acceptance_test.rbs +3 -0
- data/sig/keyboard_session_test.rbs +9 -0
- data/sig/keyword_forwarding_acceptance_test.rbs +3 -0
- data/sig/lazy_enumeration_acceptance_test.rbs +3 -0
- data/sig/literals_and_operators_acceptance_test.rbs +3 -0
- data/sig/method_contracts_acceptance_test.rbs +3 -0
- data/sig/method_lookup_acceptance_test.rbs +3 -0
- data/sig/nonlocal_exit_acceptance_test.rbs +3 -0
- data/sig/numbered_parameters_acceptance_test.rbs +3 -0
- data/sig/numeric_precision_acceptance_test.rbs +4 -0
- data/sig/packaging_test.rbs +3 -0
- data/sig/pattern_matching_acceptance_test.rbs +3 -0
- data/sig/reference_solutions_test.rbs +3 -0
- data/sig/refinement_scope_acceptance_test.rbs +3 -0
- data/sig/regexp_captures_acceptance_test.rbs +4 -0
- data/sig/rkoans/catalog.rbs +11 -0
- data/sig/rkoans/checker.rbs +22 -0
- data/sig/rkoans/cli.rbs +21 -0
- data/sig/rkoans/exercise.rbs +18 -0
- data/sig/rkoans/keyboard.rbs +13 -0
- data/sig/rkoans/progress.rbs +9 -0
- data/sig/rkoans/selection.rbs +9 -0
- data/sig/rkoans/session.rbs +30 -0
- data/sig/rkoans/terminal_view.rbs +24 -0
- data/sig/rkoans/watcher.rbs +18 -0
- data/sig/rkoans.rbs +2 -0
- data/sig/runtime_context_command_test.rbs +4 -0
- data/sig/selection_command_test.rbs +5 -0
- data/sig/session_command_test.rbs +12 -0
- data/sig/session_edge_cases_test.rbs +4 -0
- data/sig/shared_rows_acceptance_test.rbs +3 -0
- data/sig/singleton_pattern_acceptance_test.rbs +3 -0
- data/sig/time_and_date_acceptance_test.rbs +4 -0
- data/sig/visibility_acceptance_test.rbs +4 -0
- data/sig/watcher_test.rbs +3 -0
- data/solutions/about-array-assignment/about_array_assignment.rb +36 -0
- data/solutions/about-arrays/about_arrays.rb +53 -0
- data/solutions/about-asserts/about_asserts.rb +22 -0
- data/solutions/about-blocks/about_blocks.rb +30 -0
- data/solutions/about-class-methods/about_class_methods.rb +36 -0
- data/solutions/about-classes/about_classes.rb +40 -0
- data/solutions/about-constants/about_constants.rb +26 -0
- data/solutions/about-control-statements/about_control_statements.rb +35 -0
- data/solutions/about-dice-project/about_dice_project.rb +27 -0
- data/solutions/about-exceptions/about_exceptions.rb +30 -0
- data/solutions/about-extra-credit/about_extra_credit.rb +114 -0
- data/solutions/about-hashes/about_hashes.rb +52 -0
- data/solutions/about-inheritance/about_inheritance.rb +27 -0
- data/solutions/about-iteration/about_iteration.rb +31 -0
- data/solutions/about-keyword-arguments/about_keyword_arguments.rb +28 -0
- data/solutions/about-message-passing/about_message_passing.rb +38 -0
- data/solutions/about-methods/about_methods.rb +39 -0
- data/solutions/about-modules/about_modules.rb +23 -0
- data/solutions/about-nil/about_nil.rb +23 -0
- data/solutions/about-objects/about_objects.rb +34 -0
- data/solutions/about-open-classes/about_open_classes.rb +23 -0
- data/solutions/about-pattern-matching/about_pattern_matching.rb +39 -0
- data/solutions/about-proxy-object-project/about_proxy_object_project.rb +44 -0
- data/solutions/about-regular-expressions/about_regular_expressions.rb +60 -0
- data/solutions/about-sandwich-code/about_sandwich_code.rb +60 -0
- data/solutions/about-scope/about_scope.rb +33 -0
- data/solutions/about-scoring-project/about_scoring_project.rb +19 -0
- data/solutions/about-strings/about_strings.rb +56 -0
- data/solutions/about-symbols/about_symbols.rb +35 -0
- data/solutions/about-to-str/about_to_str.rb +24 -0
- data/solutions/about-triangle-project/about_triangle_project.rb +19 -0
- data/solutions/about-triangle-project-two/about_triangle_project_two.rb +25 -0
- data/solutions/about-true-and-false/about_true_and_false.rb +25 -0
- data/solutions/blocks-and-methods/blocks_and_methods.rb +14 -0
- data/solutions/class-state/class_state.rb +33 -0
- data/solutions/closure-capture/closure_capture.rb +12 -0
- data/solutions/collection-basics/collection_basics.rb +14 -0
- data/solutions/constant-scope/constant_scope.rb +18 -0
- data/solutions/core-protocols/core_protocols.rb +44 -0
- data/solutions/delegation/delegation.rb +17 -0
- data/solutions/dynamic-methods/dynamic_methods.rb +32 -0
- data/solutions/exception-flow/exception_flow.rb +34 -0
- data/solutions/heredoc-layout/heredoc_layout.rb +24 -0
- data/solutions/keyword-forwarding/keyword_forwarding.rb +26 -0
- data/solutions/lazy-enumeration/lazy_enumeration.rb +11 -0
- data/solutions/literals-and-operators/literals_and_operators.rb +22 -0
- data/solutions/method-contracts/method_contracts.rb +18 -0
- data/solutions/method-lookup/method_lookup.rb +26 -0
- data/solutions/nonlocal-exit/nonlocal_exit.rb +46 -0
- data/solutions/numbered-parameters/numbered_parameters.rb +18 -0
- data/solutions/numeric-precision/numeric_precision.rb +17 -0
- data/solutions/pattern-matching/pattern_matching.rb +17 -0
- data/solutions/refinement-scope/refinement_scope.rb +34 -0
- data/solutions/regexp-captures/regexp_captures.rb +24 -0
- data/solutions/runtime-context/runtime_context.rb +19 -0
- data/solutions/shared-rows/shared_rows.rb +13 -0
- data/solutions/singleton-pattern/singleton_pattern.rb +19 -0
- data/solutions/time-and-date/time_and_date.rb +16 -0
- data/solutions/visibility/visibility.rb +34 -0
- data/test/exercises/about_array_assignment_test.rb +87 -0
- data/test/exercises/about_arrays_test.rb +119 -0
- data/test/exercises/about_asserts_test.rb +41 -0
- data/test/exercises/about_blocks_test.rb +140 -0
- data/test/exercises/about_class_methods_test.rb +232 -0
- data/test/exercises/about_classes_test.rb +261 -0
- data/test/exercises/about_constants_test.rb +111 -0
- data/test/exercises/about_control_statements_test.rb +188 -0
- data/test/exercises/about_dice_project_test.rb +40 -0
- data/test/exercises/about_exceptions_test.rb +98 -0
- data/test/exercises/about_extra_credit_test.rb +74 -0
- data/test/exercises/about_hashes_test.rb +163 -0
- data/test/exercises/about_inheritance_test.rb +121 -0
- data/test/exercises/about_iteration_test.rb +148 -0
- data/test/exercises/about_keyword_arguments_test.rb +80 -0
- data/test/exercises/about_message_passing_test.rb +230 -0
- data/test/exercises/about_methods_test.rb +208 -0
- data/test/exercises/about_modules_test.rb +98 -0
- data/test/exercises/about_nil_test.rb +35 -0
- data/test/exercises/about_objects_test.rb +74 -0
- data/test/exercises/about_open_classes_test.rb +60 -0
- data/test/exercises/about_pattern_matching_test.rb +257 -0
- data/test/exercises/about_proxy_object_project_test.rb +75 -0
- data/test/exercises/about_regular_expressions_test.rb +243 -0
- data/test/exercises/about_sandwich_code_test.rb +82 -0
- data/test/exercises/about_scope_test.rb +123 -0
- data/test/exercises/about_scoring_project_test.rb +62 -0
- data/test/exercises/about_strings_test.rb +255 -0
- data/test/exercises/about_symbols_test.rb +120 -0
- data/test/exercises/about_to_str_test.rb +89 -0
- data/test/exercises/about_triangle_project_test.rb +29 -0
- data/test/exercises/about_triangle_project_two_test.rb +28 -0
- data/test/exercises/about_true_and_false_test.rb +43 -0
- data/test/exercises/blocks_and_methods_test.rb +22 -0
- data/test/exercises/class_state_test.rb +29 -0
- data/test/exercises/closure_capture_test.rb +29 -0
- data/test/exercises/collection_basics_test.rb +18 -0
- data/test/exercises/constant_scope_test.rb +18 -0
- data/test/exercises/core_protocols_test.rb +28 -0
- data/test/exercises/delegation_test.rb +23 -0
- data/test/exercises/dynamic_methods_test.rb +28 -0
- data/test/exercises/exception_flow_test.rb +17 -0
- data/test/exercises/heredoc_layout_test.rb +18 -0
- data/test/exercises/keyword_forwarding_test.rb +22 -0
- data/test/exercises/lazy_enumeration_test.rb +15 -0
- data/test/exercises/literals_and_operators_test.rb +25 -0
- data/test/exercises/method_contracts_test.rb +28 -0
- data/test/exercises/method_lookup_test.rb +14 -0
- data/test/exercises/nonlocal_exit_test.rb +22 -0
- data/test/exercises/numbered_parameters_test.rb +15 -0
- data/test/exercises/numeric_precision_test.rb +24 -0
- data/test/exercises/pattern_matching_test.rb +18 -0
- data/test/exercises/refinement_scope_test.rb +14 -0
- data/test/exercises/regexp_captures_test.rb +20 -0
- data/test/exercises/runtime_context_test.rb +59 -0
- data/test/exercises/shared_rows_test.rb +34 -0
- data/test/exercises/singleton_pattern_test.rb +16 -0
- data/test/exercises/time_and_date_test.rb +22 -0
- data/test/exercises/visibility_test.rb +22 -0
- metadata +471 -4
- data/Rakefile +0 -12
- data/sig/test_rkoans.rbs +0 -3
|
@@ -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,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,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,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,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,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,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,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
|
data/sig/rkoans/cli.rbs
ADDED
|
@@ -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,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
|