0.0
Low commit activity in last 3 years
No release in over a year
Golden Setting persists settings in database and keep alive in cache.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 1.3
>= 0
>= 2.13.0

Runtime

>= 3.2.13, < 5
>= 3.2.13, < 5
 Project Readme

Golden Setting

The golden-setting persists settings in database and keeps alive in cache.

A web interface is provied to let users can update easily.

Requirement

For Rails 4 project, Gemfile should have

gem 'devise', '~> 3.0'
gem 'cancancan'
gem 'simple_form', '~> 3.0'
gem 'bootstrap-sass'
gem 'will_paginate'
gem 'golden-theme'

If you add gem 'protected_attributes' in your Gemfile, remember to add

attr_accessible :name, :field_type, :field_values, :group

to your Setting class.

For Rails 3 project, Gemfile should have

gem 'devise', '>= 2.0', '< 3.0'
gem 'cancancan'
gem 'simple_form', '>= 2.0', '< 3.0'
gem 'bootstrap-sass'
gem 'will_paginate'
gem 'golden-theme'

Please make sure these gems are installed and configured properly.

Installation

Add golden-setting to your application's Gemfile.

gem 'golden-setting'

Then bundle gems, generate settings and migrate database.

$ bundle
$ rails generate golden:setting:install setting
$ rake db:migrate

Remember add setting abilities for cancancan.

can :index, Setting
can :batch_update, Setting

Configuration

You will need to add these basic configures of golden-setting for your needs.

  • groups for grouping settings with a name
  • default_group for saving settings with a group
  • default_tab for a group of settings shown in tab views
  • before_actions for setting up authentication filters

Edit config/initializers/golden_setting.rb for more detail.

Usage

Create/Read/Update/Destroy settings

You can add setting with named group.

Setting.add 'google', 'google_analytics_token', 12345
Setting.add 'api', 'golden_api_credentials', { username: 'tsechingho', password: 'secret' }
Setting.add 'theme', 'theme_color', 'golden', :select, "%w(golden white)"

or add setting with blank group.

Setting.google_analytics_token = 12345
Setting.golden_api_credentials = { username: 'tsechingho', password: 'secret' }
Setting.theme_color = 'golden'

Read settings (group regardless).

Setting.google_analytics_token
Setting.golden_api_credentials
Setting.theme_color

Update settings (group regardless).

Setting.google_analytics_token = 'abced'
Setting.merge!(:golden_api_credentials, password: 'topsecret')
Setting.theme_color = 'white'

Destroy settings.

Setting.destroy :google_analytics_token
Setting.destroy :golden_api_credentials
Setting.destroy :theme_color

List settings

You can add setting with complex name with []= method, and retrieve with [] method.

And list settings as key-value pair with/without name prefix.

Setting['preferences.color'] = :blue
Setting['preferences.size'] = :large
Setting['license.key'] = 'ABC-DEF'
Setting['license.key']
Setting.list
Setting.list('preferences.')

Default settings

You can add virtaul settings for your application by setting defaults.

Add config/initializers/golden_setting_defaults.rb.

Rails.application.config.after_initialize do
  Setting.defaults[:administrator] = 'tsechingho'
end

These virtaul settings were not saved in database.

Setting.named('administrator').count    # => 0
Setting.administrator    # => 'tsechingho'

You can also save default settings in database after initializing your application.

Rails.application.config.after_initialize do
  Setting.save_default :manager, 'tsechingho'
end

These default settings were saved in database with default group.

Setting.named('manager').count    # => 1
Setting.object('manager').group    # => 'site'
Setting.manager    # => 'tsechingho'

For Rails 3 project, use YourApp::Application.config.after_initialize instead.

Resourced settings

Settings may be bound to any existing ActiveRecord object.

class User < ActiveRecord::Base
  include Golden::Setting::Resourced
end

Then you can set or get settings.

user = User.first
user.settings.theme_color = 'golden'
user.settings.theme_color    # => 'golden'
user.settings.list    # => { "theme_color" => 'golden' }

You can find users having or not having some settings by (experimental) scopes.

User.with_settings.to_a.size    # => 1
User.with_settings_for('theme_color').count    # => 1
User.without_settings.count

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

License

MIT