{"id":16278553,"url":"https://github.com/dezoito/fw1-clipping","last_synced_at":"2025-09-18T16:30:32.762Z","repository":{"id":23887229,"uuid":"27266507","full_name":"dezoito/fw1-clipping","owner":"dezoito","description":"ColdFusion + FW/1 Example Application","archived":false,"fork":false,"pushed_at":"2017-12-13T18:38:28.000Z","size":33348,"stargazers_count":9,"open_issues_count":0,"forks_count":6,"subscribers_count":5,"default_branch":"master","last_synced_at":"2024-12-29T14:37:01.437Z","etag":null,"topics":["article","bdd","bdd-tests","coldfusion","coldfusion-fw","selenium","testbox","udf-libraries"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dezoito.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-11-28T12:39:35.000Z","updated_at":"2023-10-14T21:29:09.000Z","dependencies_parsed_at":"2022-08-22T06:31:24.790Z","dependency_job_id":null,"html_url":"https://github.com/dezoito/fw1-clipping","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dezoito%2Ffw1-clipping","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dezoito%2Ffw1-clipping/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dezoito%2Ffw1-clipping/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dezoito%2Ffw1-clipping/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dezoito","download_url":"https://codeload.github.com/dezoito/fw1-clipping/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":233496664,"owners_count":18684943,"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":["article","bdd","bdd-tests","coldfusion","coldfusion-fw","selenium","testbox","udf-libraries"],"created_at":"2024-10-10T18:58:56.294Z","updated_at":"2025-09-18T16:30:32.004Z","avatar_url":"https://github.com/dezoito.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"ColdFusion + FW/1 Example Application\n---------------------------------------------------\n\nThis app can be used to store clippings and news articles and was created as an exercise to learn the awesome [FW/1 Framework](https://github.com/framework-one/fw1) (it has been tested with versions 3.0 and 3.1).\n\nFor detailed explanations, checkout [this series of articles](http://dezoito.github.io/2015/03/26/fw1-example-app-released.html) on the topics I tried to cover:\n\n### 1- Project Structure\nI decided to use subsystems, so the main app's logic is inside the **/home** folder (which is the default subsystem).\n\nNotice that I added these folders to the project's root:\n\n**/customtags** - It stores the few custom tags used in this project (I made one to handle pagination)\n\n**/lib** - Stores User Defined Functions and UDF libraries\n\n**/setup** - Contains the SQL script for database creation (I used mySQL, but it's simple enough to run on other DBs)\n\n**/static** - This is where I keep JS, CSS and Image files\n\n**/tests** - Self explanatory (But probably one of the most interesting parts in this project)\n\n\n### 2- Forms and Validation Patterns\nThe app uses the same view to display Create or Update forms,\nthe same methods to validade and save objects, and performs CSRF verification with _CSRFVerifyToken()_ to stop Cross Site Request Forgery.\n\nValidation errors and messages are displayed next to their respect form fields.\n\nAlso, note how validation rules and attribute sanitizing code are kept within the model definition.\n\n\n### 3- Use of UDF Libraries\nThe _/lib_ folder contains _functions.cfc_, a library of commonly used functions\nthat is saved in the **application** scope so they can be easily accessed anywhere.\n\n\n### 4- Accessing an External Service\nThe app can display a summary of articles in a modal window (using the [flask-Summarizer App](https://github.com/dezoito/flask-Summarizer)).\nI used this as a way to see how to make Ajax calls and also access an external service.\n\n\n### 5- BDD Testing\nThe folder _/tests_ contains the spects for tests that run using [testBox](http://wiki.coldbox.org/wiki/TestBox.cfm) and [CFSelenium](http://cfselenium.riaforge.org/).\n\nI start with some very simple tests that escalate to CRUD tests that save data to a testing database.\n**_/tests/specs/Test_6_Integration_Selenium.cfc_** contains full integration tests using Selenium.\n\nTo run these tests, you must have CFSelenium and testBox installed on your server.\n\n###\n\n### References\nAside from the Official Documentation, I am thankful to these authors and resources:\n\n[**Raymond Camdem's QBall Sample Application**](https://github.com/framework-one/fw1/tree/master/examples/qBall)\n\n[**Simon Bingham's Xindi CMS**](https://github.com/simonbingham/xindi)\n\n[**Joe Steinbring's Pagination Gist**](https://gist.github.com/steinbring/4315198)\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdezoito%2Ffw1-clipping","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdezoito%2Ffw1-clipping","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdezoito%2Ffw1-clipping/lists"}