Class: SettingAccessors::SettingSet
- Inherits:
-
Object
- Object
- SettingAccessors::SettingSet
- Includes:
- Helpers
- Defined in:
- lib/setting_accessors/setting_set.rb
Instance Attribute Summary collapse
-
#record ⇒ Object
readonly
Returns the value of attribute record.
Instance Method Summary collapse
- #changed_settings ⇒ Object
-
#get(key, skip_cached: false) ⇒ Object
(also: #[])
Tries to retrieve the given setting’s value from the temp settings (already read/written values in this instance).
-
#get_or_default(key, store_default: true, skip_cached: false) ⇒ Object
Tries to find a setting for this record.
-
#initialize(record) ⇒ SettingSet
constructor
A new instance of SettingSet.
- #key?(key) ⇒ Boolean
-
#set(key, val) ⇒ Object
(also: #[]=)
Writes a setting’s value.
- #value_before_type_cast(key) ⇒ Object
- #value_changed?(key) ⇒ Boolean
-
#value_type(key) ⇒ String
The setting’s value type in the
record‘s context. -
#value_was(key) ⇒ Object
The value the given setting had after it was last persisted.
Methods included from Helpers
#ensure_nested_hash!, #lookup_nested_hash
Constructor Details
#initialize(record) ⇒ SettingSet
Returns a new instance of SettingSet.
12 13 14 15 |
# File 'lib/setting_accessors/setting_set.rb', line 12 def initialize(record) @record = record @temp_settings = {} end |
Instance Attribute Details
#record ⇒ Object (readonly)
Returns the value of attribute record.
10 11 12 |
# File 'lib/setting_accessors/setting_set.rb', line 10 def record @record end |
Instance Method Details
#changed_settings ⇒ Object
112 113 114 |
# File 'lib/setting_accessors/setting_set.rb', line 112 def changed_settings @temp_settings.select { |k, _| value_changed?(k) } end |
#get(key, skip_cached: false) ⇒ Object Also known as: []
Tries to retrieve the given setting’s value from the temp settings (already read/written values in this instance). If the setting hasn’t been used before, its value is retrieved from the database.
If a setting hasn’t been read by this record (instance) before, its value is stored in the local read set.
TODO: See if this causes problems with read settings not being updated by external changes.
User1: Read Setting X
User2: Update Setting X
User1: Read Setting X -> Gets old value from temp settings.
This shouldn't be too dangerous as the system state will be refreshed with every request though.
35 36 37 38 39 40 41 |
# File 'lib/setting_accessors/setting_set.rb', line 35 def get(key, skip_cached: false) return @temp_settings[key.to_sym] if !skip_cached && key?(key) value = SettingAccessors.setting_class.get(key, record) @temp_settings[key.to_sym] = value unless value.nil? value end |
#get_or_default(key, store_default: true, skip_cached: false) ⇒ Object
Tries to find a setting for this record. If none is found, will return the default setting value specified in the setting accessor call
73 74 75 76 77 78 79 80 |
# File 'lib/setting_accessors/setting_set.rb', line 73 def get_or_default(key, store_default: true, skip_cached: false) result = get(key, skip_cached: skip_cached) return result if result || (key?(key) && !skip_cached) try_dup(SettingAccessors.setting_class.get_or_default(key, record)).tap do |value| set(key, value) if store_default end end |
#key?(key) ⇒ Boolean
45 46 47 |
# File 'lib/setting_accessors/setting_set.rb', line 45 def key?(key) @temp_settings.key?(key.to_sym) end |
#set(key, val) ⇒ Object Also known as: []=
Writes a setting’s value
52 53 54 55 56 |
# File 'lib/setting_accessors/setting_set.rb', line 52 def set(key, val) track_old_value(key) set_value_before_type_cast(key, val) @temp_settings[key.to_sym] = SettingAccessors::Internal.converter(value_type(key)).new(val).convert end |
#value_before_type_cast(key) ⇒ Object
106 107 108 109 110 |
# File 'lib/setting_accessors/setting_set.rb', line 106 def value_before_type_cast(key) lookup_nested_hash(@values_before_type_casts, key.to_s) rescue NestedHashKeyNotFoundException get(key) end |
#value_changed?(key) ⇒ Boolean
102 103 104 |
# File 'lib/setting_accessors/setting_set.rb', line 102 def value_changed?(key) get(key) != value_was(key) end |
#value_type(key) ⇒ String
Returns the setting’s value type in the record‘s context.
85 86 87 |
# File 'lib/setting_accessors/setting_set.rb', line 85 def value_type(key) SettingAccessors::Internal.setting_value_type(key, record) end |
#value_was(key) ⇒ Object
Returns the value the given setting had after it was last persisted.
96 97 98 99 100 |
# File 'lib/setting_accessors/setting_set.rb', line 96 def value_was(key) lookup_nested_hash(@old_values, key.to_s) rescue NestedHashKeyNotFoundException get(key) end |