Class: Sail::Setting

Inherits:
ApplicationRecord show all
Extended by:
ValueCast
Defined in:
app/models/sail/setting.rb

Overview

Setting This is the model used for settings it contains all data definitions, validations, scopes and methods

Defined Under Namespace

Classes: UnexpectedCastType

Constant Summary collapse

FULL_RANGE =
(0...100).freeze
SETTINGS_PER_PAGE =
8
AVAILABLE_MODELS =
Dir["#{Rails.root}/app/models/*.rb"]
.map { |dir| dir.split("/").last.camelize.gsub(".rb", "") }.freeze

Class Method Summary collapse

Instance Method Summary collapse

Methods included from ValueCast

ab_test_get, ab_test_set, array_get, array_set, boolean_get, boolean_set, cron_get, cron_set, date_get, date_set, float_get, float_set, integer_get, integer_set, obj_model_get, obj_model_set, range_get, range_set, string_get, string_set, throttle_get, throttle_set, uri_get, uri_set

Class Method Details

.cast_setting_value(setting) ⇒ Object



66
67
68
69
70
# File 'app/models/sail/setting.rb', line 66

def self.cast_setting_value(setting)
  return if setting.nil?

  send("#{setting.cast_type}_get", setting.value)
end

.cast_value_for_set(setting, value) ⇒ Object



72
73
74
# File 'app/models/sail/setting.rb', line 72

def self.cast_value_for_set(setting, value)
  send("#{setting.cast_type}_set", value)
end

.get(name) ⇒ Object



50
51
52
53
54
55
56
# File 'app/models/sail/setting.rb', line 50

def self.get(name)
  Rails.cache.fetch("setting_get_#{name}", expires_in: Sail.configuration.cache_life_span) do
    cast_setting_value(
      Setting.select(:value, :cast_type).where(name: name).first
    )
  end
end

.load_defaults(override = false) ⇒ Object



92
93
94
95
96
97
98
99
100
101
# File 'app/models/sail/setting.rb', line 92

def self.load_defaults(override = false)
  if File.exist?(config_file_path) &&
     ActiveRecord::Base.connection.table_exists?(table_name)

    destroy_all if override
    config = YAML.load_file(config_file_path)
    find_or_create_settings(config)
    destroy_missing_settings(config.keys)
  end
end

.reset(name) ⇒ Object



85
86
87
88
89
90
# File 'app/models/sail/setting.rb', line 85

def self.reset(name)
  if File.exist?(config_file_path)
    defaults = YAML.load_file(config_file_path)
    set(name, defaults[name]["value"])
  end
end

.set(name, value) ⇒ Object



58
59
60
61
62
63
64
# File 'app/models/sail/setting.rb', line 58

def self.set(name, value)
  setting = Setting.find_by(name: name)
  value_cast = cast_value_for_set(setting, value)
  success = setting.update_attributes(value: value_cast)
  Rails.cache.delete("setting_get_#{name}") if success
  [setting, success]
end

.switcher(positive:, negative:, throttled_by:) ⇒ Object

Raises:

  • (ActiveRecord::RecordNotFound)


76
77
78
79
80
81
82
83
# File 'app/models/sail/setting.rb', line 76

def self.switcher(positive:, negative:, throttled_by:)
  setting = select(:cast_type).where(name: throttled_by).first
  raise ActiveRecord::RecordNotFound, "Can't find throttle setting" if setting.nil?

  raise UnexpectedCastType unless setting.throttle?

  get(throttled_by) ? get(positive) : get(negative)
end

Instance Method Details

#display_nameObject



123
124
125
# File 'app/models/sail/setting.rb', line 123

def display_name
  name.gsub(/[^a-zA-Z\d]/, " ").titleize
end