{"id":20082215,"url":"https://github.com/exercism/cfml","last_synced_at":"2025-08-27T02:16:04.767Z","repository":{"id":30871896,"uuid":"34429525","full_name":"exercism/cfml","owner":"exercism","description":"Exercism exercises in CFML.","archived":false,"fork":false,"pushed_at":"2025-07-15T00:59:43.000Z","size":635,"stargazers_count":13,"open_issues_count":9,"forks_count":26,"subscribers_count":13,"default_branch":"main","last_synced_at":"2025-08-04T23:27:32.316Z","etag":null,"topics":["community-contributions-paused","exercism-track","unmaintained"],"latest_commit_sha":null,"homepage":"https://exercism.org/tracks/cfml","language":"ColdFusion","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/exercism.png","metadata":{"funding":{"github":["exercism"],"custom":["https://exercism.org/donate"]},"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2015-04-23T02:42:35.000Z","updated_at":"2025-07-15T00:59:47.000Z","dependencies_parsed_at":"2023-01-14T17:52:15.960Z","dependency_job_id":"18c506e4-7b7d-4fec-9b97-85e97477e227","html_url":"https://github.com/exercism/cfml","commit_stats":{"total_commits":274,"total_committers":22,"mean_commits":"12.454545454545455","dds":0.6788321167883211,"last_synced_commit":"157428792452e12f4ddd29ff1355378a7286f67c"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/exercism/cfml","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exercism%2Fcfml","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exercism%2Fcfml/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exercism%2Fcfml/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exercism%2Fcfml/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/exercism","download_url":"https://codeload.github.com/exercism/cfml/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exercism%2Fcfml/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272185400,"owners_count":24888332,"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","status":"online","status_checked_at":"2025-08-26T02:00:07.904Z","response_time":60,"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":["community-contributions-paused","exercism-track","unmaintained"],"created_at":"2024-11-13T15:42:27.261Z","updated_at":"2025-08-27T02:16:04.712Z","avatar_url":"https://github.com/exercism.png","language":"ColdFusion","funding_links":["https://github.com/sponsors/exercism","https://exercism.org/donate"],"categories":[],"sub_categories":[],"readme":"# Exercism CFML Track\n\n[![Configlet](https://github.com/exercism/cfml/actions/workflows/configlet.yml/badge.svg)](https://github.com/exercism/cfml/actions/workflows/configlet.yml) [![Test Exercises](https://github.com/exercism/cfml/actions/workflows/test.yml/badge.svg)](https://github.com/exercism/cfml/actions/workflows/test.yml)\n\nExercism problems in ColdFusion.  There are two major CFML engines in existence:\n\n* **[Lucee Server](http://lucee.org/)** - A free open source CFML engine\n* **[Adobe ColdFusion](http://www.adobe.com/products/coldfusion-family.html)** - A commercially supported Enterprise CF engine\n\nThese exercises should teach the basics of CFML in a way that can be transferred to either engine.  The CommandBox CLI will run your tests against Lucee Server by default.  \n\n## Setup\n\nThe only thing you will need to run these exercises is [CommandBox CLI](https://ortus.gitbooks.io/commandbox-documentation/content/getting_started_guide.html) and [Java 7+](https://java.com/en/download/) installed.  CommandBox CLI is supported on Mac, Linux, and Windows, and the installation guide can be found here:\n\n[https://ortus.gitbooks.io/commandbox-documentation/content/setup/installation.html](https://ortus.gitbooks.io/commandbox-documentation/content/setup/installation.html)\n\nAn example of getting CommandBox CLI setup if you're a Homebrew user on Mac would be:\n\n```bash\nbrew install commandbox\n```\n\n## Anatomy of an Exercise\n\nThe files for an exercise live in `/exercises/\u003cslug\u003e`. The slug for an exercise is a unique nickname composed of a-z (lowercase) and -, e.g. `leap` or `hello-world`. Inside its directory, each exercise has:\n\n* `\u003cexercise_name\u003eTest.cfc` - The test suite\n* `\u003cexercise_name\u003e.cfc` - Implementation stub, omitted for the later exercises \n* `TestRunner.cfc` - A CLI task runner to run the unit test with\n* `box.json` - A package descriptor that lists dependencies\n* `index.cfm` - A web-based test runner for students wishing to start a web server  \n* `.meta/Example.cfc` - An example solution\n* `.meta/ExampleTest.cfc` - A test suite that runs the Example solution\n\n## Running the Tests\n\nTo run the test for a given exercise, `cd` into the folder and run the following:\n\n```bash \nbox task run TestRunner\n# Or start up a test watcher that will rerun when files change\nbox task run TestRunner --:watcher\n```\n\nIf you want to run the test suite against the solution: \n\n```bash \nbox task run TestRunner --:solution\n```\n\nThe tests leverage a library called TestBox which supports xUnit and BDD style of testing.  All test suites will be written in the [BDD style](https://testbox.ortusbooks.com/content/primers/bdd/specs.html) which uses closures to define test specs.  You won't need to worry about installing TestBox.  The CLI test runner will take care of that for you.  You just need to be connected to the internet the first time you run it.  You can read more about it here:\n\n[https://testbox.ortusbooks.com/content/](https://testbox.ortusbooks.com/content/)\n\n## Pull Requests\n\nWe welcome pull requests that provide fixes to existing test suites (missing tests, interesting edge cases, improved APIs), as well as new problems.\n\nIf you're unsure, then go ahead and open a GitHub issue, and we'll discuss the change.\n\nPlease submit changes to a single problem per pull request unless you're submitting a general change across many of the problems (e.g. formatting).\n\n## Style Guide\nThe exercise tests, solutions, and filenames will follow this ColdFusion style guide.\n\n[ColdFusion (CFML) Standards \u0026 Best Practices](https://github.com/Ortus-Solutions/coding-standards/blob/master/coldfusion.md)\n\n\nHere's the TL;DR; version.\n\n* Component names are pascal-cased ( `LeapTest.cfc` )\n* Variable names are headless camel-cased ( `greetingService` )\n* Variable names should avoid abbreviations and be descriptive ( `maximumAccountBalance` )\n* Indentation uses a tab character\n* Remove trailing whitespace from lines \n* Block statements will use the [`1TBS`](https://en.wikipedia.org/wiki/Indent_style#Variant:_1TBS_.28OTBS.29) with space padding all parens and brackets as follows:\n \n```js\nif( condition || otherCondition ) {\n\tmyStruct[ key ] = doSomething( param1, param2, true, 'Tuesday' );\n} else {\n\treturn false;\n}\n```\n\nTODO: Configure task runner to lint exercises and clean trailing whitespace and tabs/spaces.  Allow this to be run on all exercises or a single one.\n\n\n## Contributing Guide\n\nPlease see the [contributing guide](https://github.com/exercism/docs/blob/master/contributing-to-language-tracks/README.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fexercism%2Fcfml","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fexercism%2Fcfml","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fexercism%2Fcfml/lists"}