{"id":19755974,"url":"https://github.com/mumuki/mumukit","last_synced_at":"2025-04-30T11:33:12.386Z","repository":{"id":25661672,"uuid":"29097304","full_name":"mumuki/mumukit","owner":"mumuki","description":"Micro Framework for quickly implementing Mumuki runners","archived":false,"fork":false,"pushed_at":"2023-10-06T03:03:41.000Z","size":408,"stargazers_count":5,"open_issues_count":5,"forks_count":3,"subscribers_count":13,"default_branch":"master","last_synced_at":"2025-04-19T09:31:14.583Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://mumuki.io","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mumuki.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2015-01-11T16:12:20.000Z","updated_at":"2022-04-21T21:03:06.000Z","dependencies_parsed_at":"2023-09-24T01:37:58.020Z","dependency_job_id":null,"html_url":"https://github.com/mumuki/mumukit","commit_stats":{"total_commits":478,"total_committers":13,"mean_commits":36.76923076923077,"dds":0.5732217573221757,"last_synced_commit":"12f14237481c320013904d2a44ed289b307f5f96"},"previous_names":[],"tags_count":78,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mumuki%2Fmumukit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mumuki%2Fmumukit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mumuki%2Fmumukit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mumuki%2Fmumukit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mumuki","download_url":"https://codeload.github.com/mumuki/mumukit/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251063759,"owners_count":21530843,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-12T03:14:24.623Z","updated_at":"2025-04-30T11:33:11.996Z","avatar_url":"https://github.com/mumuki.png","language":"Ruby","funding_links":[],"categories":["Testing"],"sub_categories":[],"readme":"[![Build Status](https://travis-ci.org/mumuki/mumukit.svg?branch=master)](https://travis-ci.org/mumuki/mumukit)\n[![Code Climate](https://codeclimate.com/github/mumuki/mumukit/badges/gpa.svg)](https://codeclimate.com/github/mumuki/mumukit)\n[![Test Coverage](https://codeclimate.com/github/mumuki/mumukit/badges/coverage.svg)](https://codeclimate.com/github/mumuki/mumukit)\n\n# Mumukit\n\n\u003e Micro framework for quickly implement Mumuki runners\n\n## TL;DR\n\nThe best way to start using `mumukit` is with [mumukit-bootstrap](https://github.com/mumuki/mumukit-bootstrap), and reading our online documentation in [develop.mumuki.io](http://develop.mumuki.io/chapters/66-runners-development)\n\n## Installing\n\nYou usually add mumukit to an empty project. First you need to add it to your Gemfile:\n\n```\ngem 'mumukit'\n```\n\nor, if you want latest version:\n\n\n```\ngem 'mumukit', github: 'mumuki/mumukit', branch: 'master'\n```\n\nAnd then `bundle install`\n\n## Ruby Version\n\n`mumukit` works with Ruby 2.0-2.3\n\n## Getting started\n\n### Seed\n\nThe easiest way of getting started is by using using the `seed/seed.sh` script.\n\n1. Clone this project in a clean directory: `git clone https://github.com/mumuki/mumukit`\n2. Go to `seed` directory: `cd mumukit/seed`\n3. Run the script:  `./seed.sh`\n4. Follow instructions.\n\n### Hooks\n\n`mumukit` is a framework where nearly everything is a _hook_ - a class you must implement following some naming and method conventions.\nIn order to implement a Mumuki Runner with `mumukit`, you need zero or more of the following:\n\n* `query_hook`: lets runner to run queries like in a native console\n* `version_hook`: lets runner to specify a version\n* `feedback_hook`: lets runner to generate explanations of compiler/interpreter tools\n* `expectations_hook`: lets runner to execute expectations\n* `validation_hook`: lets runner to validate request in order to detect malicious code\n\n### Components\n\nIn addition, `mumukit` provides some _components_ to make implementation of hooks easier:\n\n* `Mumukit::IsolatedEnvironment`\n* `Mumukit::Cookie`\n* `Mumukit::Metatest`\n* `Mumukit::Explainer`\n\n### Templates\n\nAlso, `mumukit` provides _templates_ that implement some specialized use cases hooks:\n\n* `Mumukit::Hook`: the base hook. It lets to read environment variables and translations\n* `Mumukit::Templates::FileHook`: allows to implement `test_hooks` and `query_hooks` that interact with external command line tools using files and command line arguments\n* `Mumukit::Templates::MulangExpectationsHook`: allows to implement `expectation_hooks` that rely on [mulang](https://github.com/mumuki/mulang) tool\n\n### Extensions\n\nFinally, `mumukit` templates provides the following _extensions_ - features that can be activated in some `hooks`:\n\n* `Mumukit::Hook`\n  * `stateful_through`: lets to handle cookies. Useful in `query_hooks`.\n*  `Mumukit::Templates::FileHook`:\n  * `line_number_offset`: lets you specify line number offset, so that line numbers reported by compilers and interpreters matches content.\n  * `structured`: lets to process JSON output from external commands\n  * `mashup`: lets to generate source code files\n  * `isolated`: lets to run commands within docker or in native environment\n* `Mumukit::Templates::MulangExpectationsHook`\n  * `include_smells`: lets to include in the result smells produced by _mulang_\n  \n## Server extensions\n\nIf you need to serve assets, you can include the `Mumukit::Server::WithAssets` mixin which enables cross origin requests and provides `get_asset` and `get_local_asset` methods\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmumuki%2Fmumukit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmumuki%2Fmumukit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmumuki%2Fmumukit/lists"}