mirror of
https://github.com/codeninjasllc/discourse.git
synced 2025-02-24 15:33:57 -05:00
FIX: ensure we never have a string when an enum is Fixnum - Take 2
This commit is contained in:
parent
5ae6257504
commit
31e8309f05
5 changed files with 21 additions and 23 deletions
|
@ -3,7 +3,7 @@ require_dependency 'enum_site_setting'
|
||||||
class AutoTrackDurationSiteSetting < EnumSiteSetting
|
class AutoTrackDurationSiteSetting < EnumSiteSetting
|
||||||
|
|
||||||
def self.valid_value?(val)
|
def self.valid_value?(val)
|
||||||
values.any? { |v| v[:value].to_s == val.to_s }
|
values.any? { |v| v[:value] == val.to_i }
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.values
|
def self.values
|
||||||
|
|
|
@ -3,7 +3,7 @@ require_dependency 'enum_site_setting'
|
||||||
class NewTopicDurationSiteSetting < EnumSiteSetting
|
class NewTopicDurationSiteSetting < EnumSiteSetting
|
||||||
|
|
||||||
def self.valid_value?(val)
|
def self.valid_value?(val)
|
||||||
values.any? { |v| v[:value].to_s == val.to_s }
|
values.any? { |v| v[:value] == val.to_i }
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.values
|
def self.values
|
||||||
|
|
|
@ -3,11 +3,11 @@ require_dependency 'enum_site_setting'
|
||||||
class TrustLevelSetting < EnumSiteSetting
|
class TrustLevelSetting < EnumSiteSetting
|
||||||
|
|
||||||
def self.valid_value?(val)
|
def self.valid_value?(val)
|
||||||
valid_values.any? { |v| v.to_s == val.to_s }
|
valid_values.any? { |v| v == val.to_i }
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.values
|
def self.values
|
||||||
@values ||= valid_values.map {|x| {name: x.to_s, value: x} }
|
@values ||= valid_values.map { |x| { name: x.to_s, value: x } }
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.valid_values
|
def self.valid_values
|
||||||
|
|
|
@ -102,9 +102,7 @@ module SiteSettingExtension
|
||||||
|
|
||||||
if new_choices = opts[:choices]
|
if new_choices = opts[:choices]
|
||||||
|
|
||||||
if String === new_choices
|
new_choices = eval(new_choices) if new_choices.is_a?(String)
|
||||||
new_choices = eval(new_choices)
|
|
||||||
end
|
|
||||||
|
|
||||||
choices.has_key?(name) ?
|
choices.has_key?(name) ?
|
||||||
choices[name].concat(new_choices) :
|
choices[name].concat(new_choices) :
|
||||||
|
@ -280,7 +278,7 @@ module SiteSettingExtension
|
||||||
end
|
end
|
||||||
|
|
||||||
def add_override!(name, val)
|
def add_override!(name, val)
|
||||||
type = get_data_type(name, defaults[name])
|
type = get_data_type(name, defaults[name.to_sym])
|
||||||
|
|
||||||
if type == types[:bool] && val != true && val != false
|
if type == types[:bool] && val != true && val != false
|
||||||
val = (val == "t" || val == "true") ? 't' : 'f'
|
val = (val == "t" || val == "true") ? 't' : 'f'
|
||||||
|
@ -295,7 +293,7 @@ module SiteSettingExtension
|
||||||
end
|
end
|
||||||
|
|
||||||
if type == types[:enum]
|
if type == types[:enum]
|
||||||
val = val.to_i if Fixnum === defaults[name.to_sym]
|
val = val.to_i if defaults[name.to_sym].is_a?(Fixnum)
|
||||||
if enum_class(name)
|
if enum_class(name)
|
||||||
raise Discourse::InvalidParameters.new(:value) unless enum_class(name).valid_value?(val)
|
raise Discourse::InvalidParameters.new(:value) unless enum_class(name).valid_value?(val)
|
||||||
else
|
else
|
||||||
|
@ -395,8 +393,8 @@ module SiteSettingExtension
|
||||||
def get_data_type(name, val)
|
def get_data_type(name, val)
|
||||||
return types[:null] if val.nil?
|
return types[:null] if val.nil?
|
||||||
|
|
||||||
# Some types are just for validations like email. Only consider
|
# Some types are just for validations like email.
|
||||||
# it valid if includes in `types`
|
# Only consider it valid if includes in `types`
|
||||||
if static_type = static_types[name.to_sym]
|
if static_type = static_types[name.to_sym]
|
||||||
return types[static_type] if types.keys.include?(static_type)
|
return types[static_type] if types.keys.include?(static_type)
|
||||||
end
|
end
|
||||||
|
@ -426,7 +424,7 @@ module SiteSettingExtension
|
||||||
when types[:null]
|
when types[:null]
|
||||||
nil
|
nil
|
||||||
when types[:enum]
|
when types[:enum]
|
||||||
defaults[name.to_sym] === Fixnum ? value.to_i : value
|
defaults[name.to_sym].is_a?(Fixnum) ? value.to_i : value
|
||||||
else
|
else
|
||||||
return value if types[type]
|
return value if types[type]
|
||||||
# Otherwise it's a type error
|
# Otherwise it's a type error
|
||||||
|
|
|
@ -7,12 +7,11 @@ describe SiteSettingExtension do
|
||||||
SiteSettings::LocalProcessProvider.new
|
SiteSettings::LocalProcessProvider.new
|
||||||
end
|
end
|
||||||
|
|
||||||
def new_settings(provider)
|
def new_settings(provider=nil)
|
||||||
c = Class.new do
|
Class.new do
|
||||||
extend SiteSettingExtension
|
extend SiteSettingExtension
|
||||||
self.provider = provider
|
self.provider = provider if provider
|
||||||
end
|
end
|
||||||
c
|
|
||||||
end
|
end
|
||||||
|
|
||||||
let :settings do
|
let :settings do
|
||||||
|
@ -23,6 +22,10 @@ describe SiteSettingExtension do
|
||||||
new_settings(provider)
|
new_settings(provider)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
let :settings_db do
|
||||||
|
new_settings
|
||||||
|
end
|
||||||
|
|
||||||
describe "refresh!" do
|
describe "refresh!" do
|
||||||
|
|
||||||
it "will reset to default if provider vanishes" do
|
it "will reset to default if provider vanishes" do
|
||||||
|
@ -234,14 +237,11 @@ describe SiteSettingExtension do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
before do
|
|
||||||
settings.setting(:test_int_enum, 1, enum: TestIntEnumClass)
|
|
||||||
settings.refresh!
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'should coerce correctly' do
|
it 'should coerce correctly' do
|
||||||
settings.test_int_enum = "2"
|
settings_db.setting(:test_int_enum, 1, enum: TestIntEnumClass)
|
||||||
expect(settings.test_int_enum).to eq(2)
|
settings_db.test_int_enum = "2"
|
||||||
|
settings_db.refresh!
|
||||||
|
expect(settings_db.test_int_enum).to eq(2)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue