Class: Sail::Setting
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
- AVAILABLE_MODELS =
Dir[Rails.root.join("app", "models", "*.rb")]
.map { |dir| dir.split("/").last.camelize.gsub(".rb", "") }.freeze
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Instance Attribute Details
#caster ⇒ Object
Returns the value of attribute caster.
18
19
20
|
# File 'app/models/sail/setting.rb', line 18
def caster
@caster
end
|
Class Method Details
.database_to_file ⇒ Object
133
134
135
136
137
138
139
140
141
142
|
# File 'app/models/sail/setting.rb', line 133
def self.database_to_file
attributes = {}
Setting.all.find_each do |setting|
setting_attrs = setting.attributes.except("id", "name", "created_at", "updated_at", "cast_type")
attributes[setting.name] = setting_attrs.merge("cast_type" => setting.cast_type)
end
File.open(config_file_path, "w") { |f| f.write(attributes.to_yaml) }
end
|
.get(name) ⇒ Object
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
# File 'app/models/sail/setting.rb', line 60
def self.get(name)
Sail.instrumenter.increment_usage_of(name)
cached_setting = Rails.cache.read("setting_get_#{name}")
return cached_setting unless cached_setting.nil?
setting = Setting.for_value_by_name(name).first
return if setting.nil?
setting_value = setting.safe_cast
unless setting.should_not_cache?
Rails.cache.write(
"setting_get_#{name}", setting_value,
expires_in: Sail.configuration.cache_life_span
)
end
setting_value
end
|
.load_defaults(override = false) ⇒ Object
105
106
107
108
109
110
111
112
113
114
|
# File 'app/models/sail/setting.rb', line 105
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
98
99
100
101
102
103
|
# File 'app/models/sail/setting.rb', line 98
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
81
82
83
84
85
86
87
|
# File 'app/models/sail/setting.rb', line 81
def self.set(name, value)
setting = Setting.find_by(name: name)
value_cast = setting.caster.from(value)
success = setting.update(value: value_cast)
Rails.cache.delete("setting_get_#{name}") if success
[setting, success]
end
|
.switcher(positive:, negative:, throttled_by:) ⇒ Object
89
90
91
92
93
94
95
96
|
# File 'app/models/sail/setting.rb', line 89
def self.switcher(positive:, negative:, throttled_by:)
setting = select(:cast_type).find_by(name: throttled_by)
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_name ⇒ Object
147
148
149
|
# File 'app/models/sail/setting.rb', line 147
def display_name
name.gsub(/[^a-zA-Z\d]/, " ").titleize
end
|
#relevancy ⇒ Object
157
158
159
|
# File 'app/models/sail/setting.rb', line 157
def relevancy
(Sail.instrumenter.relative_usage_of(name) / Sail::Setting.count).round(1)
end
|
#safe_cast ⇒ Object
165
166
167
|
# File 'app/models/sail/setting.rb', line 165
def safe_cast
try(:caster).try(:to_value)
end
|
#should_not_cache? ⇒ Boolean
161
162
163
|
# File 'app/models/sail/setting.rb', line 161
def should_not_cache?
ab_test? || cron? || throttle?
end
|
#stale? ⇒ Boolean
151
152
153
154
155
|
# File 'app/models/sail/setting.rb', line 151
def stale?
return if Sail.configuration.days_until_stale.blank?
updated_at < Sail.configuration.days_until_stale.days.ago
end
|