{"id":21511450,"url":"https://github.com/alexwayfer/flame","last_synced_at":"2025-04-04T13:12:37.568Z","repository":{"id":13568996,"uuid":"51094991","full_name":"AlexWayfer/flame","owner":"AlexWayfer","description":"Ruby web-framework","archived":false,"fork":false,"pushed_at":"2025-04-04T12:46:00.000Z","size":843,"stargazers_count":49,"open_issues_count":1,"forks_count":7,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-04-04T13:12:33.312Z","etag":null,"topics":["backend","framework","ruby","web","web-framework"],"latest_commit_sha":null,"homepage":"","language":"Ruby","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/AlexWayfer.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.txt","code_of_conduct":"CODE_OF_CONDUCT.md","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-02-04T18:09:08.000Z","updated_at":"2024-12-30T12:28:56.000Z","dependencies_parsed_at":"2023-12-25T23:19:48.738Z","dependency_job_id":"e55b85b8-228d-46f2-9bfb-9b102d8539f3","html_url":"https://github.com/AlexWayfer/flame","commit_stats":{"total_commits":706,"total_committers":9,"mean_commits":78.44444444444444,"dds":"0.12889518413597734","last_synced_commit":"bc89c7cf85bbc6fa7192c84557c5519b47922d9b"},"previous_names":[],"tags_count":31,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexWayfer%2Fflame","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexWayfer%2Fflame/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexWayfer%2Fflame/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexWayfer%2Fflame/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AlexWayfer","download_url":"https://codeload.github.com/AlexWayfer/flame/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247182401,"owners_count":20897381,"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":["backend","framework","ruby","web","web-framework"],"created_at":"2024-11-23T22:08:59.257Z","updated_at":"2025-04-04T13:12:37.542Z","avatar_url":"https://github.com/AlexWayfer.png","language":"Ruby","readme":"\u003cp align=\"center\"\u003e\n    \u003cimg\n        src=\"https://raw.githubusercontent.com/AlexWayfer/flame/main/public/favicon.ico\"\n        height=\"150\"\n        alt=\"Flame Logo\"\n        title=\"Logo from open-source Elusive-Iconfont (https://github.com/reduxframework/elusive-iconfont)\"\n    /\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eFlame\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://cirrus-ci.com/github/AlexWayfer/flame/main\"\u003e\u003cimg\n        src=\"https://api.cirrus-ci.com/github/AlexWayfer/flame.svg?branch=main\"\n        alt=\"Cirrus CI\"\n    /\u003e\u003c/a\u003e\n    \u003ca href=\"https://codecov.io/gh/AlexWayfer/flame\"\u003e\u003cimg\n        src=\"https://img.shields.io/codecov/c/github/AlexWayfer/flame.svg?style=flat-square\"\n        alt=\"Codecov\"\n    /\u003e\u003c/a\u003e\n    \u003ca href=\"https://codeclimate.com/github/AlexWayfer/flame\"\u003e\u003cimg\n        src=\"https://img.shields.io/codeclimate/maintainability/AlexWayfer/flame.svg?style=flat-square\"\n        alt=\"Code Climate\"\n    /\u003e\u003c/a\u003e\n    \u003ca href=\"https://depfu.com/repos/AlexWayfer/flame\"\u003e\u003cimg\n        src=\"https://img.shields.io/depfu/AlexWayfer/flame.svg?style=flat-square\"\n        alt=\"Depfu\"\n    /\u003e\u003c/a\u003e\n    \u003ca href=\"http://inch-ci.org/github/AlexWayfer/flame\"\u003e\u003cimg\n        src=\"http://inch-ci.org/github/AlexWayfer/flame.svg?branch=main\u0026style=flat-square\"\n        alt=\"Docs\"\n    /\u003e\u003c/a\u003e\n    \u003ca href=\"https://rubygems.org/gems/flame\"\u003e\u003cimg\n        src=\"https://img.shields.io/gem/v/flame.svg?include_prereleases\u0026style=flat-square\"\n        alt=\"Gem (including prereleases)\"\n    /\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/AlexWayfer/flame/blob/main/LICENSE.txt\"\u003e\u003cimg\n        src=\"https://img.shields.io/github/license/AlexWayfer/flame.svg?style=flat-square\"\n        alt=\"MIT license\"\n    /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\nFlame is a small Ruby web framework, built on [Rack](https://github.com/rack/rack),\ninspired by [Gin](https://github.com/jcasts/gin) (which follows class-controllers style),\ndesigned as a replacement [Sinatra](https://github.com/sinatra/sinatra)\nor maybe even [Rails](https://github.com/rails/rails).\n\n## Why?\n\nI didn't like class methods, especially for controller's hooks — OOP is prettier without it.\nAnd I found a way to implement controller's hooks without using class methods,\nbut with the inheritance (including the including of modules).\nMoreover, with class methods an insufficiently obvious order of hooks (especially with inheritance)\nand complicated implementation of conditions are obtained.\nIn this framework everything is Ruby-native as it can be.\n\n## Installation\n\nUsing the built-in `gem`:\n\n```bash\n$ gem install flame\n```\n\nor with [Bundler](http://bundler.io/):\n\n```ruby\n# Gemfile\ngem 'flame'\n```\n\n## Usage\n\nThe simplest example:\n\n```ruby\n# index_controller.rb\n\nclass IndexController \u003c Flame::Controller\n  def index\n    view :index # or just `view`, Symbol as method-name by default\n  end\n\n  def hello_world\n    \"Hello World!\"\n  end\n\n  def goodbye\n    \"Goodbye World!\"\n  end\nend\n\n# app.rb\n\nclass App \u003c Flame::Application\n  mount IndexController do\n    # all methods will be mounted automatically, it's just an example of refinement\n    get '/hello', :hello_world\n  end\nend\n\n# config.ru\n\nrequire_relative './index_controller'\n\nrequire_relative './app'\n\nrun App.new # or `run App`\n```\n\nMore at [Wiki](https://github.com/AlexWayfer/flame/wiki).\n\n## Benchmark\n\nThe last benchmark can be viewed [here](https://github.com/luislavena/bench-micro).\n\n## Development\n\nAfter checking out the repo, run `bundle install` to install dependencies.\n\nThen, run `toys rspec` to run the tests.\n\nTo install this gem onto your local machine, run `toys gem install`.\n\nTo release a new version, run `toys gem release %version%`.\nSee how it works [here](https://github.com/AlexWayfer/gem_toys#release).\n\n## Contributing\n\nBug reports and pull requests are welcome on [GitHub](https://github.com/AlexWayfer/flame).\n\n## License\n\nThe gem is available as open source under the terms of the\n[MIT License](https://opensource.org/licenses/MIT).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexwayfer%2Fflame","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falexwayfer%2Fflame","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexwayfer%2Fflame/lists"}