Class: FeatureSetting::FsSetting

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
lib/feature_setting/orm/active_record/fs_setting.rb

Constant Summary collapse

SETTINGS =
{
  test: 'value',
}

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.define_getter_method(key) ⇒ Object



35
36
37
38
39
40
# File 'lib/feature_setting/orm/active_record/fs_setting.rb', line 35

def define_getter_method(key)
  define_singleton_method(key.to_s) do
    record = self.where(key: key, klass: klass).first
    convert_to_type(record.value, record.value_type)
  end
end

.define_setter_method(key) ⇒ Object



42
43
44
45
46
47
# File 'lib/feature_setting/orm/active_record/fs_setting.rb', line 42

def define_setter_method(key)
  define_singleton_method("#{key}=") do |value|
    record = self.where(key: key, klass: klass).first
    set!(key, value)
  end
end

.defined_settingsObject



77
78
79
# File 'lib/feature_setting/orm/active_record/fs_setting.rb', line 77

def defined_settings
  settings.keys.map(&:to_s)
end

.existing_key(key = nil, hash = {}) ⇒ Object



70
71
72
73
74
75
# File 'lib/feature_setting/orm/active_record/fs_setting.rb', line 70

def existing_key(key = nil, hash = {})
  settings.key?(hash.keys.first) || settings.key?(key.to_sym)
  hash.keys.first || key.to_sym
rescue
  nil
end

.init_settings!Object



26
27
28
29
30
31
32
33
# File 'lib/feature_setting/orm/active_record/fs_setting.rb', line 26

def init_settings!
  settings.each do |key, value|
    self.create_with(key: key, value: convert_to_string(value, value.class.to_s), value_type: value.class.to_s, klass: klass).find_or_create_by(klass: klass, key: key)
    define_getter_method(key)
    define_setter_method(key)
  end
  remove_old_settings!
end

.klassObject



22
23
24
# File 'lib/feature_setting/orm/active_record/fs_setting.rb', line 22

def klass
  self.new.klass.to_s
end

.remove_old_settings!Object



49
50
51
# File 'lib/feature_setting/orm/active_record/fs_setting.rb', line 49

def remove_old_settings!
  self.where(klass: klass, key: all_stored_settings - defined_settings).destroy_all
end

.reset_settings!Object



53
54
55
56
# File 'lib/feature_setting/orm/active_record/fs_setting.rb', line 53

def reset_settings!
  self.where(klass: klass).destroy_all
  init_settings!
end

.set!(key = nil, value = nil, **hash) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
# File 'lib/feature_setting/orm/active_record/fs_setting.rb', line 58

def set!(key = nil, value = nil, **hash)
  key = existing_key(key, hash)
  fail 'ERROR: FsSetting key is missing or does not exist.' unless key

  record = self.where(key: key, klass: klass).first
  new_value = hash.values.first || value
  record.update_attributes(
    value: convert_to_string(new_value, new_value.class.to_s),
    value_type: new_value.class.to_s
  )
end

.settingsObject



18
19
20
# File 'lib/feature_setting/orm/active_record/fs_setting.rb', line 18

def settings
  self.new.settings
end

Instance Method Details

#klassObject



13
14
15
# File 'lib/feature_setting/orm/active_record/fs_setting.rb', line 13

def klass
  self.class
end

#settingsObject



9
10
11
# File 'lib/feature_setting/orm/active_record/fs_setting.rb', line 9

def settings
  self.class::SETTINGS
end