Skip to content

Commit 3f66d44

Browse files
committed
Fix #236 fallback to string type when used unsupported field type. Ref: #235
1 parent 8dc786f commit 3f66d44

File tree

3 files changed

+20
-6
lines changed

3 files changed

+20
-6
lines changed

lib/rails-settings/fields/base.rb

+10-4
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,10 @@ def saved_value
2222
return parent.send(:_all_settings)[key] if table_exists?
2323

2424
# Fallback to default value if table was not ready (before migrate)
25-
puts "WARNING: table: \"#{parent.table_name}\" does not exist or not database connection, `#{parent.name}.#{key}` fallback to returns the default value."
26-
nil
25+
puts(
26+
"WARNING: table: \"#{parent.table_name}\" does not exist or not database connection, `#{parent.name}.#{key}` fallback to returns the default value."
27+
)
28+
nil
2729
end
2830

2931
def default_value
@@ -62,8 +64,12 @@ def generate(**args)
6264
private
6365

6466
def fetch_field_class(type)
65-
field_class_name = type.to_s.split('_').map(&:capitalize).join('')
66-
const_get("::RailsSettings::Fields::#{field_class_name}")
67+
field_class_name = type.to_s.split("_").map(&:capitalize).join("")
68+
begin
69+
const_get("::RailsSettings::Fields::#{field_class_name}")
70+
rescue StandardError
71+
::RailsSettings::Fields::String
72+
end
6773
end
6874
end
6975
end

test/base_test.rb

+9-2
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,13 @@ class NewSetting < RailsSettings::Base
5151
end
5252

5353
test "setting_keys" do
54-
assert_equal 16, Setting.keys.size
54+
assert_equal 17, Setting.keys.size
5555
assert_includes(Setting.keys, "host")
5656
assert_includes(Setting.keys, "readonly_item")
5757
assert_includes(Setting.keys, "default_tags")
5858
assert_includes(Setting.keys, "omniauth_google_options")
5959

60-
assert_equal 13, Setting.editable_keys.size
60+
assert_equal 14, Setting.editable_keys.size
6161
assert_includes(Setting.editable_keys, "host")
6262
assert_includes(Setting.editable_keys, "default_tags")
6363

@@ -365,6 +365,13 @@ class NewSetting < RailsSettings::Base
365365
assert_equal %w[Ruby Rails GitHub], Setting.default_tags
366366
end
367367

368+
test "unsupported type to string" do
369+
assert_equal "hello", Setting.fallback_field
370+
371+
Setting.fallback_field = "bar"
372+
assert_equal "bar", Setting.fallback_field
373+
end
374+
368375
test "key with complex options" do
369376
assert_equal %w[foo bar], Setting.key_with_more_options
370377
field = Setting.get_field(:key_with_more_options)

test/dummy/app/models/setting.rb

+1
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,5 @@ def foo
4848
end
4949

5050
field :key_with_more_options, type: :array, validates: {presence: true}, default: %w[foo bar], foo: 1, section: :theme
51+
field :fallback_field, type: :foo_bar, default: "hello"
5152
end

0 commit comments

Comments
 (0)