{"id":19031863,"url":"https://github.com/andydevs/roject","last_synced_at":"2026-06-19T03:32:02.289Z","repository":{"id":108735486,"uuid":"62930854","full_name":"andydevs/roject","owner":"andydevs","description":"Roject is a programming project manager written in Ruby. With Roject, you can create and edit projects based on templates using simple commands without a heavy IDE.","archived":false,"fork":false,"pushed_at":"2017-02-08T21:21:40.000Z","size":141,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-21T20:29:38.911Z","etag":null,"topics":["ruby"],"latest_commit_sha":null,"homepage":null,"language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andydevs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-07-09T03:47:51.000Z","updated_at":"2016-07-09T03:58:32.000Z","dependencies_parsed_at":"2023-06-04T13:30:21.159Z","dependency_job_id":null,"html_url":"https://github.com/andydevs/roject","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/andydevs/roject","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andydevs%2Froject","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andydevs%2Froject/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andydevs%2Froject/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andydevs%2Froject/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andydevs","download_url":"https://codeload.github.com/andydevs/roject/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andydevs%2Froject/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34516549,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-19T02:00:06.005Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["ruby"],"created_at":"2024-11-08T21:25:31.147Z","updated_at":"2026-06-19T03:32:02.274Z","avatar_url":"https://github.com/andydevs.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Roject\n\nRoject is a programming project manager written in Ruby. With Roject, you can create and edit projects based on templates and using simple, customisable commands without a heavy IDE.\n\n## Table of Contents\n\n - [Project Script](#project-script)\n \t- [Config](#config)\n \t- [Makers](#makers)\n - [The Command Line](#the-command-line)\n\n## Project Script\n\nA Roject project is configured using a project script in a project directory, create a ruby script called \"project.rb\". This ruby script is evaluated in the context of a Roject project object and contains information about the project, the types of files that can be made, and the tasks that can be performed.\n\n```ruby\n# Config\nconfig project_name: \"Dre\",\nauthor: \"Anshul Kharbanda\",\ncreated: \"7 - 23 - 2016\",\nshort_description: \"Forgot about Dre.\",\nlong_description: \"Nowadays everybody wanna talk like\" \\\n\" they got somethin' to say but nothin' comes out\" \\\n\" when they move their lips just a bunch of gibberish\" \\\n\" and they all acting like they forgot about Dre.\"\n\n#---------------------------MAKERS---------------------------\n\n# Header file\nfile :header, \npath: \"include/@(project_name)/@(path)\",\ntemplate: \"header.general\",\nextension: \"h\"\n\n# Source file\nfile :source, \npath: \"src/@(path)\",\ntemplate: \"source.general\",\nextension: \"cpp\"\n\n# Module includes a source and include\ntask :module do |args|\n\t# Add header id\n\targs[:header_id] = c_header_id(args[:path])\n\n\t# Create source and header\n\tmake :header, args\n\tmake :source, args\nend\n```\n\nIn this script, the project information (project_name, author, etc.) is configured using the `config` method, which is given a hash of the project info. After which, project makers (automated tasks that can be called via the command line) are defined using the `file` and `task` methods. The `file` method creates a file maker which makes files according to the information given using the command line arguments. The `task` method creates a task maker which executes the given block with the command line arguments.\n\n### Config\n\nProjects are configured using the `config` method:\n\n```ruby\nconfig project_name: \"Dre\",\nauthor: \"Anshul Kharbanda\",\ncreated: \"7 - 23 - 2016\",\nshort_description: \"Forgot about Dre.\",\nlong_description: \"Nowadays everybody wanna talk like\" \\\n\" they got somethin' to say but nothin' comes out\" \\\n\" when they move their lips just a bunch of gibberish\" \\\n\" and they all acting like they forgot about Dre.\"\n```\n\nThis command should be passed a hash of project info keys, of which are the following:\n\n|        Key        |            Description             |\n|:-----------------:|:----------------------------------:|\n|   project_name    |      the name of the project       |\n|      author       |       the project's author         |\n|      created      |  the date the project was created  |\n| short_description | a short description of the project |\n| long_description  | a long description of the project  |\n\nThere are also optional options to set. The `directory` key is a hash of essential directories. The `templates` key within the `directory` hash determines where project templates are located, and defaults to `_templates`. Of course, this can also be changed to your liking.\n\n```ruby\nconfig project_name: \"Dre\",\nauthor: \"Anshul Kharbanda\",\ncreated: \"7 - 23 - 2016\",\nshort_description: \"Forgot about Dre.\",\nlong_description: \"Nowadays everybody wanna talk like\" \\\n\" they got somethin' to say but nothin' comes out\" \\\n\" when they move their lips just a bunch of gibberish\" \\\n\" and they all acting like they forgot about Dre.\",\ndirectory: {\n\ttemplates: \"new-templates-dir\"\n}\n```\n\n### Makers\n\nProject makers are also specified int the Project script. Makers are automated tasks that create new files. There are two types of makers to date.\n\n#### File Makers\n\nFile makers are specified using the `file` method.\n\n```ruby\nfile :header, \npath: \"include/@(project_name)/@(path)\",\ntemplate: \"header.general\",\nextension: \"h\"\n```\n\nRoject uses the [General](http://andydevs.github.io/general) templating library for file and string templates. FileMakers use general templates, project information, and command line arguments to create files of specific types. File templates are located in the `templates` directory (which is set using `config`).\n\nThe `file` method is passed a name (used to call the maker via the command line arguments), and a hash of options, which should include the following:\n\n|    Key    |                                        Description                                      |\n|:---------:|:---------------------------------------------------------------------------------------:|\n|   path    |     The path of the file, as a General template string (parsed on creation of the file) |\n| template  |                     The filename of the General template file to format                 |\n| extension |                                     The file extension                                  |\n\n#### Task Makers\n\nTask makers are specified using the `task` method.\n\n```ruby\n# Module includes a source and include\ntask :module do |args|\n\t# Add header id\n\targs[:header_id] = c_header_id(args[:path])\n\n\t# Create source and header\n\tmake :header, args\n\tmake :source, args\nend\n```\n\nThe `task` method is passed the command line name and a block which is called when the task is called from the command line, which takes one hash of arguments parsed from the command line.\n\n## The Command Line\n\nThe Roject library comes with the `roject` binary script, from which you call the project makers that were defined.\n\n```\n$ roject [maker name] [command line arguments]\n```\n\nCommand line arguments are key-value pairs which follow the following pattern: `[key]:[value]`. The script will search the current directory for a project script, read it, and run the given maker in the context of the project.\n\n---\nAnshul Kharbanda","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandydevs%2Froject","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandydevs%2Froject","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandydevs%2Froject/lists"}