diff options
author | Eugen Rochko <eugen@zeonfederated.com> | 2023-03-30 14:44:00 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-30 14:44:00 +0200 |
commit | a9b5598c97fc4d3302b61b260097ef41c2ebe377 (patch) | |
tree | 2568f87b80c64214f3d03bedb6e6f85a77e9ddb0 /app/models/user_settings/setting.rb | |
parent | e7c3e5587489a9e248973fa0719869541d34ba9f (diff) |
Change user settings to be stored in a more optimal way (#23630)
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
Diffstat (limited to 'app/models/user_settings/setting.rb')
-rw-r--r-- | app/models/user_settings/setting.rb | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/app/models/user_settings/setting.rb b/app/models/user_settings/setting.rb new file mode 100644 index 000000000..c359c593b --- /dev/null +++ b/app/models/user_settings/setting.rb @@ -0,0 +1,48 @@ +# frozen_string_literal: true + +class UserSettings::Setting + attr_reader :name, :namespace, :in + + def initialize(name, options = {}) + @name = name.to_sym + @default_value = options[:default] + @namespace = options[:namespace] + @in = options[:in] + end + + def default_value + if @default_value.respond_to?(:call) + @default_value.call + else + @default_value + end + end + + def type + if @default_value.is_a?(TrueClass) || @default_value.is_a?(FalseClass) + ActiveModel::Type::Boolean.new + else + ActiveModel::Type::String.new + end + end + + def type_cast(value) + if type.respond_to?(:cast) + type.cast(value) + else + value + end + end + + def to_a + [key, default_value] + end + + def key + if namespace + "#{namespace}.#{name}".to_sym + else + name + end + end +end |