{"id":21384018,"url":"https://github.com/radbas/framework.cr","last_synced_at":"2025-03-16T11:40:44.472Z","repository":{"id":182999469,"uuid":"669408288","full_name":"radbas/framework.cr","owner":"radbas","description":"The crystal radbas framework.","archived":false,"fork":false,"pushed_at":"2025-02-01T12:44:20.000Z","size":40,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-02-01T13:35:18.470Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Crystal","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/radbas.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":"2023-07-22T07:16:48.000Z","updated_at":"2025-02-01T12:44:24.000Z","dependencies_parsed_at":"2024-11-22T13:15:20.369Z","dependency_job_id":null,"html_url":"https://github.com/radbas/framework.cr","commit_stats":null,"previous_names":["radbas/framework.cr"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/radbas%2Fframework.cr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/radbas%2Fframework.cr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/radbas%2Fframework.cr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/radbas%2Fframework.cr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/radbas","download_url":"https://codeload.github.com/radbas/framework.cr/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243864609,"owners_count":20360355,"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-22T11:37:27.957Z","updated_at":"2025-03-16T11:40:44.456Z","avatar_url":"https://github.com/radbas.png","language":"Crystal","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Framework.cr\n\nThe crystal web framework.\n\n## Installation\n\n1. Add the dependency to your `shard.yml`:\n\n   ```yaml\n   dependencies:\n     framework:\n       github: radbas/framework.cr\n   ```\n\n2. Run `shards install`\n\n## Usage\n\n```crystal\nrequire \"radbas-framework\"\n```\n\n### Build an application and run it\n\n```crystal\nbuilder = Radbas::ApplicationBuilder.new\n# Radbas::Context is an alias for :HTTP::Server::Context\nbuilder.get \"/\", -\u003e(ctx : Radbas::Context) {\n  ctx.response.write \"Hello World\".to_slice\n}\n\napp : Radbas::Application = builder.build\nserver = Radbas::ApplicationServer.new app\nserver.listen\n\n# Radbas::Application implements ::Http::Handler and can also be used as a HTTP::Server handler\nserver = HTTP::Server.new([app])\n```\n\n### Add middleware\n\n```crystal\nbuilder = Radbas::ApplicationBuilder.new\n\n# Built-in middleware\nbuilder.add_request_logger_middleware\nbuilder.add_error_middleware # Gets added automatically, if not manually called\nbuilder.add_routing_middleware # Gets added automatically, if not manually called\n\n# Custom middleware\n# Everything that satisfies Radbas::MiddlewareLike can be used as middleware\n# Namely Proc(Radbas::Context, Radbas::Next, Nil) or Radbas::Middleware\nclass MyMiddleware\n  include Radbas::Middleware\n  def call(ctx : Radbas::Context, delegate : Radbas::Next)\n    # before next\n    delegate.call(ctx)\n    # after next\n  end\nend\n\nbuilder.add MyMiddleware.new\n\n# middleware Proc\nbuilder.add -\u003e(ctx : Radbas::Context, del : Radbas::Next) {}\n```\n\n### Add routes\n\n```crystal\n# Everything that satisfies Radbas::ActionLike can be used as an endpoint\n# Namely Proc(Radbas::Context, Nil) or Radbas::Action\nclass MyAction\n  include Radbas::Action\n  def call(ctx : Radbas::Context)\n    ctx.response.write \"Hello World\".to_slice\n  end\nend\n\nbuilder.get \"/\", MyAction.new\nbuilder.get \"/\", -\u003e(ctx : Radbas::Context) {}\n\n# builder.post\n# builder.put\n# builder.patch\n# builder.delete\n# ...\n\n# sever sent events\nbuilder.sse \"/events\", -\u003e(\n  stream : Radbas::ServerSentEvents::Stream,\n  ctx : Radbas::Context\n) {}\n\n# websocket\nbuilder.ws \"/socket\", -\u003e(\n  socket : HTTP::WebSocket,\n  ctx : Radbas::Context\n) {}\n\n # TODO: full routing docs\n```\n\n\n## Contributing\n\n1. Fork it (\u003chttps://github.com/radbas/framework.cr/fork\u003e)\n2. Create your feature branch (`git checkout -b my-new-feature`)\n3. Commit your changes (`git commit -am 'Add some feature'`)\n4. Push to the branch (`git push origin my-new-feature`)\n5. Create a new Pull Request\n\n## Contributors\n\n- [Johannes Rabausch](https://github.com/jrabausch) - creator and maintainer\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fradbas%2Fframework.cr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fradbas%2Fframework.cr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fradbas%2Fframework.cr/lists"}