{"id":16681463,"url":"https://github.com/printercu/costa","last_synced_at":"2025-04-09T23:11:31.307Z","repository":{"id":9498339,"uuid":"11390705","full_name":"printercu/costa","owner":"printercu","description":"In the search of smth Rails-like for node","archived":false,"fork":false,"pushed_at":"2014-03-06T15:40:32.000Z","size":292,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-09T23:11:28.040Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"CoffeeScript","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/printercu.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}},"created_at":"2013-07-13T16:28:06.000Z","updated_at":"2015-02-02T11:54:46.000Z","dependencies_parsed_at":"2022-09-08T06:12:43.909Z","dependency_job_id":null,"html_url":"https://github.com/printercu/costa","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/printercu%2Fcosta","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/printercu%2Fcosta/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/printercu%2Fcosta/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/printercu%2Fcosta/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/printercu","download_url":"https://codeload.github.com/printercu/costa/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248125590,"owners_count":21051770,"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-10-12T14:04:17.706Z","updated_at":"2025-04-09T23:11:31.281Z","avatar_url":"https://github.com/printercu.png","language":"CoffeeScript","readme":"# Costa\n\nBuilt with [CoffeeClasskit](https://github.com/printercu/coffee_classkit) \u0026\n[FlowCoffee](https://github.com/printercu/flow-coffee).\nInspired by Rails. Is kept tiny to be fast as fire.\n\n## How can it look like\n\n### Controller\n\n```coffee\nPost = require '../models/post'\nresource_class = Post\n\nmodule.exports =\nclass PostsController extends require './application_controller'\n  @extendsWithProto()\n\n  @beforeFilter 'buildResource', only: ['new', 'create']\n  @beforeFilter 'findResource', only: ['show', 'edit', 'update', 'delete']\n\n  indexAction: -\u003e\n    resource_class.all @handleErrors (err, @collection) =\u003e\n      @render {@collection}\n\n  newAction: -\u003e\n    @render {@resource}\n\n  createAction: -\u003e\n    @resource.save (err) =\u003e\n      if err\n        if @resource.errors.hasAny\n          @res.format\n            json: =\u003e @res.status(422).jsonp @resource.exportFor 'api' # unprocessable_entity\n            html: =\u003e\n              @res.flash 'error', @resource.errors.first()\n              @res.redirect \"/posts/new\"\n        else\n          @next(err)\n      else\n        url = \"/posts/#{@resource.id}\"\n        @res.format\n          json: =\u003e @res.status(201).set('Location', url).jsonp @resource.exportFor 'api' # created\n          html: =\u003e\n            @res.flash 'Item created'\n            @res.redirect url\n\n  showAction: -\u003e\n    @render {@resource}\n\n  editAction: -\u003e\n    @render {@resource}\n\n  updateAction: -\u003e\n    @resource.update @itemParams, (err) =\u003e\n      if err\n        if @resource.errors.hasAny\n          @res.format\n            json: =\u003e @res.status(422).jsonp @resource.exportFor 'api' # unprocessable_entity\n            html: =\u003e\n              @res.flash 'error', @resource.errors.first()\n              @res.redirect \"/posts/#{@resource.id}/edit\"\n        else\n          @next(err)\n      else\n        url = \"/posts/#{@resource.id}\"\n        @res.format\n          json: =\u003e @res.jsonp @resource.exportFor 'api'\n          html: =\u003e\n            @res.flash 'Item updated'\n            @res.redirect url\n\n  buildResource: (callback) -\u003e\n    @resource = resource_class.create @itemParams\n    callback()\n\n  findResource: (callback) -\u003e\n    resource_class.find @req.param('id'), @handleErrors (err, @resource) =\u003e\n      callback()\n\n  allowed_params = [\n    'title'\n    'body_md'\n  ]\n\n  Object.defineProperty @::, 'itemParams', get: -\u003e\n    @params allowed_params...\n```\n\nAnd now just call `PostsController.dispatch(action, req, res, next)`\nthe way you like with `action` one of `index, new, create, show, edit, update, destroy`.\n\n### Model\n\n```coffee\nmarked  = require 'marked'\nhljs    = require 'highlight.js'\n_       = require 'lodash'\n\nmodule.exports =\nclass Post extends require './base_record'\n  @extendsWithProto()\n\n  @include require './concerns/with_fixtures'\n\n  @MARKED_OPTIONS =\n    highlight: (code, lang) -\u003e\n      code = 'coffeescript' if code is 'coffee'\n      try\n        return hljs.highlight(lang, code).value\n      catch error\n        return hljs.highlightAuto(code).value\n\n  @exportAttrs 'body', 'body_md', 'title', 'created_at'\n\n  @validatesPresenceOf 'body_md', 'title'\n\n  @beforeCreate (callback) -\u003e\n    @created_at = new Date\n    callback()\n\n  @beforeSave (callback) -\u003e\n    @compileBody()\n    callback()\n\n  @all: (callback) -\u003e\n    @maxId (err, max_id) =\u003e\n      return callback err if err\n      @getMulti [1..max_id], (err, items) -\u003e\n        return callback err if err\n        callback err, _.compact items\n\n  compileBody: -\u003e\n    @body = marked @body_md, @constructor.MARKED_OPTIONS\n```\n\n## More documentation in tests \u0026 source\n\n## License\n\nMIT\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprintercu%2Fcosta","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprintercu%2Fcosta","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprintercu%2Fcosta/lists"}