{"id":15722047,"url":"https://github.com/haijin-development/ruby-sirens","last_synced_at":"2026-05-19T04:06:43.361Z","repository":{"id":56895974,"uuid":"186311077","full_name":"haijin-development/ruby-sirens","owner":"haijin-development","description":"Interactive utilities to develop in Ruby, implemented in Ruby and GTK3.","archived":false,"fork":false,"pushed_at":"2019-07-27T13:21:27.000Z","size":8649,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-07T11:18:55.492Z","etag":null,"topics":["debugging-tools","development-tools","gtk3","gui-application","ruby"],"latest_commit_sha":null,"homepage":"","language":"Ruby","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/haijin-development.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":"2019-05-12T22:33:30.000Z","updated_at":"2019-07-27T02:51:10.000Z","dependencies_parsed_at":"2022-08-21T01:50:19.042Z","dependency_job_id":null,"html_url":"https://github.com/haijin-development/ruby-sirens","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haijin-development%2Fruby-sirens","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haijin-development%2Fruby-sirens/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haijin-development%2Fruby-sirens/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haijin-development%2Fruby-sirens/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/haijin-development","download_url":"https://codeload.github.com/haijin-development/ruby-sirens/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246390873,"owners_count":20769478,"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":["debugging-tools","development-tools","gtk3","gui-application","ruby"],"created_at":"2024-10-03T22:03:29.537Z","updated_at":"2026-05-19T04:06:38.287Z","avatar_url":"https://github.com/haijin-development.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Sirens\n\n*Sirens* gives Ruby developers some simple and interactive utilities to ease development, testing and learning Ruby.\n\nThese utilities are written in Ruby and use gtk3 as its GUI support.\n\n### Installation\n\n#### Pre requisites\n\n```\napt install libglib2.0-dev\n```\n\nIn the project Gemfile add the following gem:\n\n```ruby\ngroup :test, :development do\n    gem 'sirens'\nend\n```\n\nand install the bundles with:\n\n```\nbundle install\n```\n\n### Usage\n\nFirst require the gem:\n\n```ruby\nrequire 'rubygems'\nrequire 'bundler/setup'\n\nrequire 'sirens'\n```\n\nthen open a browser in any part of the application or in a test with:\n\n```\nSirens.browse(object: user)\n```\n\n![Browsing objects](./docs/browsing-object.gif)\n\n\n### Testing\n\nRun the tests with\n\n```\nbundle exec rspec\n```\n\n### References\n\nThese utilities are heavily based in the Smalltalk browsers, in particular in the [Object Arts](https://www.object-arts.com/)\nimplementation named [Dolphin Smalltalk](https://github.com/dolphinsmalltalk/Dolphin), which I fancy for its\noutstanding beauty.\n\nI started a similar framework some years ago implementing a custom GTK+ GUI framework inspired in [Shoes](http://shoesrb.com/)\nand [Dolphin's MVP framework](http://www.object-arts.com/downloads/docs/index.html?compositemvpcomponent.htm) but then\nI dropped the project.\n\nI recently learned [React](https://reactjs.org/) and I liked very much its simplicity and its declarative DSL.\n\nI decided to re-implement these utilities from scratch using a DSL similar to [Shoes](http://shoesrb.com/)\n(which also resembles React JSX) but bringing back the models to it, adding a custom layer of\n[composable models](https://github.com/haijin-development/ruby-sirens/tree/master/lib/models)\nto handle most of the information updates between components instead of [lifting up the state](https://reactjs.org/tutorial/tutorial.html#lifting-state-up-again)\nto a common ancestor.\n\nI think the [final result](https://github.com/haijin-development/ruby-sirens/tree/master/lib/sirens) is both very\nsimple to use and highly adaptable and its worth looking at it.\n\nThe graphics code remains in the View layer, so it would be possible to switch to any graphics library, be it GTK+ or QT.\n\nI like this implementation much better than the previous one I did several years ago and it could be spin-off to a GTK+\ngem on its own, but currently there are no plans to do that.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhaijin-development%2Fruby-sirens","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhaijin-development%2Fruby-sirens","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhaijin-development%2Fruby-sirens/lists"}