Visit:
https://github.com/huacnlee/rails-settings-cached/releases
f.select
with Setting instance method.var
, value
as Setting key, now will raise error.eval
method.irb> Setting.default_locale = "foo"
ActiveRecord::RecordInvalid: (Validation failed: Default locale is not included in [zh-CN, en, jp])
validates
options to special the Rails Validation for fields (#201)class Setting < RailsSettings::Base
# cache_prefix { "v1" }
field :app_name, default: "Rails Settings", validates: { presence: true, length: { in: 2..20 } }
field :default_locale, default: "zh-CN", validates: { presence: true, inclusion: { in: %w[zh-CN en jp], message: "is not included in [zh-CN, en, jp]" } }
end
In Rails 5.0:
# You must add request_store dependency in to you Gemfile
gem "request_store"
gem "rails-settings-cached"
This changes is used to avoid startup errors in a database-free environment (such as assets:precompile in Docker build).
Setting.smtp_settings = { foo: 1, bar: 2 }
Setting.smtp_settings[:foo]
=> 1
Setting.smtp_settings["foo"]
=> 1
get_field
method to get field option.class Setting
field :admin_emails, type: :array, default: "huacnlee"
end
Setting.get_field(:admin_emails)
=> { key: "admin_emails", type: :array, default: "huacnlee@gmail.com", readonly: false }
editable_keys
to get keys that allow to modify.readonly_keys
to get readonly keys.Settings
conflict issue. #172Setting.keys
methods to get all keys.\n
and ,
.separator
option for speical the separator for Array type.For example:
class Setting < RailsSettings::Base
field :tips, type: :array, separator: /[\n]+/
field :keywords, type: :array, separator: ","
end
🚨 BREAK CHANGES WARNING: rails-settings-cached 2.x has redesign the API, the new version will compatible with the stored setting values by older version. But you must read the README.md again, and follow guides to change your Setting model.
scope
support (RailsSettings::Extend has removed);field
method to statement the setting keys before use.For example:
class Setting < RailsSettings::Base
field :host, default: "http://example.com"
field :readonly_item, type: :integer, default: 100, readonly: true
field :user_limits, type: :integer, default: 1
field :admin_emails, type: :array, default: %w[admin@rubyonrails.org]
field :captcha_enable, type: :boolean, default: 1
field :smtp_settings, type: :hash, default: {
host: "foo.com",
username: "foo@bar.com",
password: "123456"
}
end
NOTE: This design will load all settings from db/cache in memory, so I recommend that you do not design a lot of Setting keys (below 1000 keys), and do not store large value。
https://github.com/huacnlee/rails-settings-cached/blob/0.x/CHANGELOG.md