Class: FeatureSetting::FsSetting
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- FeatureSetting::FsSetting
show all
- Defined in:
- lib/feature_setting/orm/active_record/fs_setting.rb
Defined Under Namespace
Classes: SettingKeyNotFoundError, SettingTypeMismatchError
Constant Summary
collapse
- SETTINGS =
{
test: 'value'
}.freeze
Class Method Summary
collapse
Instance Method Summary
collapse
Class Method Details
.cache_settings! ⇒ Object
49
50
51
52
53
54
55
56
|
# File 'lib/feature_setting/orm/active_record/fs_setting.rb', line 49
def cache_settings!
settings.each do |key, value|
create_setting(key, value)
record = find_by(key: key, klass: klass)
value = ConvertValue.convert_to_type(record.value, record.value_type)
define_getter_method(key) { value }
end
end
|
.define_getter_method(key, &block) ⇒ Object
58
59
60
61
62
63
64
65
66
67
|
# File 'lib/feature_setting/orm/active_record/fs_setting.rb', line 58
def define_getter_method(key, &block)
unless block_given?
block = proc do
record = find_by(key: key, klass: klass)
ConvertValue.convert_to_type(record.value, record.value_type)
end
end
define_singleton_method(key.to_s) { block.call }
end
|
.define_setter_method(key) ⇒ Object
69
70
71
72
73
|
# File 'lib/feature_setting/orm/active_record/fs_setting.rb', line 69
def define_setter_method(key)
define_singleton_method("#{key}=") do |value|
set!(key, value)
end
end
|
.defined_keys ⇒ Object
116
117
118
|
# File 'lib/feature_setting/orm/active_record/fs_setting.rb', line 116
def defined_keys
settings.keys.map(&:to_s)
end
|
.existing_key(key = nil, hash = {}) ⇒ Object
rubocop:enable Metrics/AbcSize, Metrics/MethodLength
108
109
110
111
112
113
114
|
# File 'lib/feature_setting/orm/active_record/fs_setting.rb', line 108
def existing_key(key = nil, hash = {})
return unless settings.key?(hash.keys.first) || settings.key?(key.to_sym)
hash.keys.first || key.to_sym
rescue StandardError
nil
end
|
.init_settings!(remove_old_settings: false) ⇒ Object
40
41
42
43
44
45
46
47
|
# File 'lib/feature_setting/orm/active_record/fs_setting.rb', line 40
def init_settings!(remove_old_settings: false)
settings.each do |key, value|
create_setting(key, value)
define_getter_method(key)
define_setter_method(key)
end
remove_old_settings! if remove_old_settings
end
|
.klass ⇒ Object
36
37
38
|
# File 'lib/feature_setting/orm/active_record/fs_setting.rb', line 36
def klass
new.klass.to_s
end
|
.remove_old_settings! ⇒ Object
75
76
77
|
# File 'lib/feature_setting/orm/active_record/fs_setting.rb', line 75
def remove_old_settings!
where(klass: klass, key: all_stored_keys - defined_keys).delete_all
end
|
.reset_settings! ⇒ Object
79
80
81
|
# File 'lib/feature_setting/orm/active_record/fs_setting.rb', line 79
def reset_settings!
init_settings! if where(klass: klass).delete_all
end
|
.set!(key = nil, value = nil) ⇒ Object
Also known as:
update!
rubocop:disable Metrics/AbcSize, Metrics/MethodLength
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
# File 'lib/feature_setting/orm/active_record/fs_setting.rb', line 84
def set!(key = nil, value = nil)
raise SettingNotExistsError unless defined_keys.include?(key.to_s)
record = find_by(key: key.to_s, klass: klass)
old_value = ConvertValue.convert_to_type(record.value, record.value_type)
if record.value_type == 'Hash'
raise SettingTypeMismatchError unless value.is_a?(Hash)
new_value = old_value.update(value)
value_type = 'Hash'
else
new_value = value
value_type = value.class.to_s
end
record.update(
value: ConvertValue.convert_to_string(new_value, new_value.class.to_s),
value_type: value_type
)
end
|
.settings ⇒ Object
32
33
34
|
# File 'lib/feature_setting/orm/active_record/fs_setting.rb', line 32
def settings
new.settings
end
|
.stored_settings ⇒ Object
120
121
122
123
124
125
126
127
|
# File 'lib/feature_setting/orm/active_record/fs_setting.rb', line 120
def stored_settings
hash = {}
where(klass: klass).each do |record|
hash[record.key.to_sym] = ConvertValue.convert_to_type(record.value, record.value_type)
end
hash
end
|
Instance Method Details
#klass ⇒ Object
27
28
29
|
# File 'lib/feature_setting/orm/active_record/fs_setting.rb', line 27
def klass
self.class
end
|
#settings ⇒ Object
23
24
25
|
# File 'lib/feature_setting/orm/active_record/fs_setting.rb', line 23
def settings
self.class::SETTINGS
end
|