0.0
No commit activity in last 3 years
No release in over 3 years
A real settings tool for Rails3
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

>= 0
>= 0

Runtime

>= 0
 Project Readme

RealSettings Build Status

RealSettings is a real settings tool for Rails3.

RealSetting load default settings from config file, and store settings in memory.

RealSetting can store settings in database.

RealSetting can store different settings for your model(activerecord model only).

Installation

Add this line to your application's Gemfile:

gem 'real_settings'

And then execute:

$ bundle

Or install it yourself as:

$ gem install real_settings

Run install command and migrate database:

$ rails g real_settings:install
$ rake db:migrate

Configuration in config/initializers/real_settings.rb

Caution: settings in 'file_config' can't store in database.

Settings.file_config do |settings|
  settings.app_name = "My Application Name"
  settings.app_url = "http://www.my-application.com"
  settings.default_meta_keywords = "default meta keywords"
  settings.default_meta_description = "default meta description"
  # add some settings here
end

Settings.db_config_default do |settings|
  settings.paginate_count = 10
end

Caution: settings set by 'file_config' in config/initializers/real_settings.rb can't store in database.

Settings.app_name # => "real_settings"
Settings.app_name = "new app name"
Settings.app_name # => "new app name"
Settings.save!
Settings.app_name # => "real_settings"

Settings.paginate_count # => 10
Settings.paginate_count = 20
Settings.save!
Setttings.paginate_count # => 20

Features & Usage

RealSettings load default settings from config file

Settings.config do
  settings.app_name = "My Application Name"
  settings.app_url = "http://www.my-application.com"
  settings.default_meta_keywords = "default meta keywords"
  settings.default_meta_description = "default meta description"
  ......
end

Settings.app_name # => "real_settings"
Settings.app_url # => "http://www.real-settings.com"
Settings.default_meta_keywords # => "default meta keywords"
Settings.default_meta_description # => "default meta description"

RealSettings can write settings into database

Settings.admin_name # => nil
Settings.admin_name = "Macrow"
Settings.save!

Smart Convert setting type

Settings.a = 123
Settings.b = 'string'
Settings.c = [1,2,3]
Settings.d = Time.now
Settings.e = 12.345
Settings.f = false

Settings.save!
Settings.reload!

Settings.a # 123 # Fixnum
Settings.b # 'string' # String
Settings.c # [1,2,3] # Array
Settings.d # Time.now # Time
Settings.e # 12.345 # Float
Settings.f # false # Boolean

Support has_settings method

class User < ActiveReocrd::Base
  has_settings
end

user = User.first
user.settings.to_hash # => {}
user.settings.email # => nil
user.settings.email = "Macrow_wh@163.com"
user.settings.email # => "Macrow_wh@163.com"
user.settings.to_hash # => { :email => "Macrow_wh@163.com" }
user.save! # save email settings in database

another_user = User.last
another_user.settings.to_hash # => {}
another_user.settings.email # => nil

has_settings method with default values

class User < ActiveRecord::Base
  has_settings :defaults => { :notebook => 'Macbook Pro', :mobile => 'iPhone 4' }
end

user = User.first
user.settings.to_hash # => { :notebook => 'Macbook Pro', :mobile => 'iPhone 4' }
user.settings.email # => nil
user.settings.email = "Macrow_wh@163.com"
user.settings.email # => "Macrow_wh@163.com"
user.settings # => { :notebook => 'Macbook Pro', :mobile => 'iPhone 4', :email => "Macrow_wh@163.com" }
user.save! # save email settings in database

another_user = User.last
another_user.settings.to_hash # => { :notebook => 'Macbook Pro', :mobile => 'iPhone 4' }
another_user.settings.email # => nil

RealSettings load all settings in memory for performance in first query action

Settings.admin_name # => nil
Settings.admin_name = "Macrow"
Settings.admin_name # => "Macrow"
Settings.reload!
Settings.admin_name # => nil

Settings.admin_name = "Macrow"
Settings.save!
Settings.admin_name # => "Macrow"
Settings.reload!
Settings.admin_name # => "Macrow"

Editing Global Settings

# config/routes.rb
get 'settings/edit' => 'settings#edit'
put 'settings/update' => 'settings#update'

# Edit Form:
form_for Settings, :as => :settings, :url => settings_update_path, :method => :put do |f|
  f.text_field :app_name
  f.text_field :app_url
  ......
end

simple_form_for Settings, :as => :settings, :url => settings_update_path, :method => :put do |f|
  f.input :app_name
  f.input :app_url
  ......
end

# Update Action:
Settings.update_settings(params[:settings])

Editing User's settings

# config/routes.rb
resources :users do
  get 'settings/edit' => 'users#edit_settings'
  put 'settings/update' => 'users#update_settings'
end

# User's settings Edit Form:
form_for @user.settings, :as => :settings, :url => user_settings_update_path(@user), :method => :put do |f|
  f.text_field :notebook
  f.text_field :mobile
  ......
end

simple_form_for @user.settings, :as => :settings, :url => user_settings_update_path(@user), :method => :put do |f|
  f.input :notebook
  f.input :mobile
  ......
end

# Update Action:
@user = User.find(params[:user_id])
@user.settings.update_settings(params[:settings])

License

MIT License.