{"id":16183692,"url":"https://github.com/allenwq/settings_on_rails","last_synced_at":"2025-03-19T02:30:50.196Z","repository":{"id":30066366,"uuid":"33615821","full_name":"allenwq/settings_on_rails","owner":"allenwq","description":":smile_cat: Ruby gem help to handle key/value settings(preferences) for ActiveRecord model. Settings are stored in hash, supports nested/multiple keys and default values.","archived":false,"fork":false,"pushed_at":"2024-07-22T03:22:44.000Z","size":40,"stargazers_count":5,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-10-22T22:36:58.124Z","etag":null,"topics":["rails","ruby","settings"],"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/allenwq.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"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":"2015-04-08T15:35:18.000Z","updated_at":"2020-03-02T13:05:04.000Z","dependencies_parsed_at":"2024-10-23T01:02:54.270Z","dependency_job_id":null,"html_url":"https://github.com/allenwq/settings_on_rails","commit_stats":{"total_commits":50,"total_committers":3,"mean_commits":"16.666666666666668","dds":"0.040000000000000036","last_synced_commit":"b7b2580a40b674e85aa912cde27201ca245f6c41"},"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/allenwq%2Fsettings_on_rails","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/allenwq%2Fsettings_on_rails/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/allenwq%2Fsettings_on_rails/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/allenwq%2Fsettings_on_rails/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/allenwq","download_url":"https://codeload.github.com/allenwq/settings_on_rails/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221720369,"owners_count":16869474,"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":["rails","ruby","settings"],"created_at":"2024-10-10T07:06:00.660Z","updated_at":"2024-10-27T19:08:59.711Z","avatar_url":"https://github.com/allenwq.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Settings on Rails\n[![Build Status](https://travis-ci.org/allenwq/settings_on_rails.svg?branch=master)](https://travis-ci.org/allenwq/settings_on_rails)\n[![Coverage Status](https://coveralls.io/repos/allenwq/settings_on_rails/badge.svg?branch=master)](https://coveralls.io/r/allenwq/settings_on_rails?branch=master)\n\n## Installation\n\nIf you are using [Bundler](http://bundler.io/), add this line to your application's Gemfile:\n\n```ruby\ngem 'settings_on_rails'\n```\n\nAnd then execute:\n\n    $ bundle\n\nAlternatively, install it by running:\n\n    $ gem install settings_on_rails\n\n## Getting Started\n\n### Add database column\n\nStart by adding a text field to the model on which you want settings:\n\n```ruby\nrails g migration add_settings_column_to_blogs settings_column:text\n```\n\n### Declare in model\n\n```ruby\nclass Blog \u003c ActiveRecord::Base\n  has_settings_on :settings_column\nend\n```\n\n### Set settings\n\n```ruby\n@blog.settings.title = 'My Space'\n@blog.settings(:theme).background_color = 'blue'\n\n@blog.save\n```\n\n### Get settings\n\n```ruby\n@blog.settings(:theme).background_color\n=\u003e 'blue'\n\n# returns nil if not set\n@blog.settings(:post).pagination\n=\u003e nil\n```\n\n## Defining Default Values\n\n```ruby\nclass Blog \u003c ActiveRecord::Base\n  has_settings_on :column\n\n  has_settings do |s|\n    s.key :theme, defaults:{ background_color: 'red', text_size: 50 }\n    s.attr :title, default: 'My Space'\n  end\nend\n```\n\nOR\n\n```ruby\nclass Blog \u003c ActiveRecord::Base\n  has_settings_on :column do |s|\n    s.key :theme, defaults: { background_color: 'red', text_size: 50 }\n    s.attr :title, default: 'My Space'\n  end\nend\n```\n\nYou can get these defaults by:\n\n```ruby\n@blog.settings(:theme).background_color\n=\u003e 'red'\n\n@blog.settings(:theme).text_size\n=\u003e 50\n\n@blog.settings.title\n=\u003e 'My Space'\n```\n\n## Nested Keys\n\nSettings on Rails supports nested keys by chaining calls to the `settings` method:\n\n```ruby\n# Set\n@blog.settings(:theme).settings(:homepage).background_color = 'white'\n\n# Get\n@blog.settings(:theme).settings(:homepage).background_color\n=\u003e 'white'\n```\n\n## Multiple Keys\n\nYou can also define multiple keys in the following way, this is equivalent to nested keys:\n\n```ruby\n# Set\n@blog.settings(:theme, :homepage).background_color = 'white'\n\n# Get\n@blog.settings(:theme, :homepage).background_color\n=\u003e 'white'\n```\n\n\n## Method Name Customization\n\nYou can customize the name of the `settings` method:\n\n```ruby\nclass Blog \u003c ActiveRecord::Base\n  has_settings_on :settings_column, method: :preferences\nend\n```\n\nWhich allows you to do:\n\n```ruby\n@blog.preferences(:theme).background_color\n```\n\n## Contributing\n\n1. Fork it ( https://github.com/allenwq/settings_on_rails/fork )\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","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fallenwq%2Fsettings_on_rails","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fallenwq%2Fsettings_on_rails","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fallenwq%2Fsettings_on_rails/lists"}