Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Ruby gem to handle settings for ActiveRecord objects by storing them as serialized Hash in a separate database table. Optional: Defaults and Namespaces.
Ruby
tree: 74c09d03c2

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
ci
lib
spec
.gitignore
.travis.yml
Changelog.md
Gemfile
MIT-LICENSE
README.md
Rakefile
rails-settings.gemspec

README.md

Settings gem for Rails

Build Status

Handling settings for ActiveRecord objects by storing them as serialized Hash in a separate database table. Optional: Defaults and Namespaces.

BEWARE: WORK IN PROGRESS!

Requirements

Rails 3.1.x or 3.2.x
Ruby 1.8.7, 1.9.3 or 2.0.0

Example

Define Settings for a model with default values

Without defaults:

class User < ActiveRecord::Base
  has_settings :dashboard, :calendar
end

With defaults:

class User < ActiveRecord::Base
  has_settings do |s|
    s.key :dashboard, :defaults => { :theme => 'blue', :view => 'monthly', :filter => false }
    s.key :calendar,  :defaults => { :scope => 'company'}
  end
end

With customized object, e.g. for validation:

class Project < ActiveRecord::Base
  has_settings :info, :class_name => 'ProjectSettingObject'
end

class ProjectSettingObject < RailsSettings::SettingObject
  validate do
    unless self.owner_name.present? && self.owner_name.is_a?(String)
      errors.add(:base, "Owner name is missing")
    end
  end
end

Set settings for a given object

user = User.find(1)
user.settings(:dashboard).theme = 'black'
user.settings(:calendar).scope = 'all'
user.settings(:calendar).display = 'daily'
user.save!

or

user = User.find(1)
user.settings(:dashboard).update_attributes! :theme => 'black'
user.settings(:calendar).update_attributes! :scope => 'all', :display => 'dialy'

Get settings

user = User.find(1)
user.settings(:dashboard).theme
# => 'black

user.settings(:dashboard).view
# => 'monthly'  (it's default)

user.settings(:calendar).scope
# => 'all'

Installation

Include the gem in your Gemfile:

gem 'ledermann-rails-settings', :github => 'ledermann/rails-settings', :branch => 'rewrite', :require => 'rails-settings'

Generate and run the migration:

rails g rails_settings:migration
rake db:migrate

License

MIT License
Copyright (c) 2013 Georg Ledermann

This gem is a complete rewrite of rails-settings by Alex Wayne

Something went wrong with that request. Please try again.