This Rails engine brings a setting model into your app to be used as feature flags, gauges, knobs and other live controls you may need.
Add this line to your application's Gemfile:
gem 'sail'
And then execute:
$ bundle
Or install it yourself as:
$ gem install sail
Running the generator will create the settings table for your application.
$ rails g sail my_desired_migration_name
Which generates a migration to create the following table
create_table :sail_settings do |t|
t.string :name, null: false
t.text :description
t.string :value, null: false
t.integer :cast_type, null: false, limit: 1
t.index ["name"], name: "index_settings_on_name", unique: true
t.timetamps
end
Available configurations and their defaults are listed below
Sail.configure do |config|
config.cache_life_span = 10.minutes # How long to cache the Sail::Setting.get response for
config.array_separator = ';' # Default separator for array settings
end
Settings can be read or set via their interface. Notice that when reading a setting's value, it will be cast to the appropriate type using the "cast_type" field.
Possible cast types are
- integer
- float
- string
- boolean
- range
- array
# Get setting value with appropriate cast type
Sail::Setting.get('name')
# Set setting value
Sail::Setting.set('name', 'value')
# Integer setting
Sail::Setting.create(name: :my_setting, cast_type: :integer, description: 'A very important setting', value: '15')
Sail::Setting.get(:my_setting)
=> 15
# Float setting
Sail::Setting.create(name: :my_setting, cast_type: :float, description: 'A very important setting', value: '1.532')
Sail::Setting.get(:my_setting)
=> 1.532
# String setting
Sail::Setting.create(name: :my_setting, cast_type: :string, description: 'A very important setting', value: '15')
Sail::Setting.get(:my_setting)
=> '15'
# Boolean setting
Sail::Setting.create(name: :my_setting, cast_type: :boolean, description: 'A very important setting', value: 'true')
Sail::Setting.get(:my_setting)
=> true
# Range setting (ranges only accept values between 0...100)
Sail::Setting.create(name: :my_setting, cast_type: :range, description: 'A very important setting', value: '99')
Sail::Setting.get(:my_setting)
=> 99
# Array setting
Sail::Setting.create(name: :my_setting, cast_type: :array, description: 'A very important setting', value: 'John;Alfred;Michael')
Sail::Setting.get(:my_setting)
=> ['John', 'Alfred', 'Michael']
Sail brings a simple dashboard so that you can manage your settings and update their values as needed.
Please refer to this simple guideline.