FIX: Param should be displayed when the default value is invalid (#313)
What's the problem? =================== TL;DR: When the user enters an incorrect default value, its corresponding param-input will disappear When creating a parameter from SQL, we perform cast_to_ruby, which means that if the default value given by the user is invalid, the entire parameter will not be added to the param_list of the query. This behavior is very confusing, and users will not understand why an incorrect initial value will cause the param-input to disappear. What's the fix? ================ The cast_to_ruby process is canceled in create_from_sql, so that param-input with incorrect default value will still be displayed. We have a simple validation process on the front end, which is enough to prompt whether some default inputs are incorrect.
This commit is contained in:
parent
b6c45800b3
commit
760667d744
|
@ -4,7 +4,7 @@ module ::DiscourseDataExplorer
|
||||||
class Parameter
|
class Parameter
|
||||||
attr_accessor :identifier, :type, :default, :nullable
|
attr_accessor :identifier, :type, :default, :nullable
|
||||||
|
|
||||||
def initialize(identifier, type, default, nullable)
|
def initialize(identifier, type, default, nullable, validate: true)
|
||||||
unless identifier
|
unless identifier
|
||||||
raise ValidationError.new("Parameter declaration error - identifier is missing")
|
raise ValidationError.new("Parameter declaration error - identifier is missing")
|
||||||
end
|
end
|
||||||
|
@ -25,7 +25,7 @@ module ::DiscourseDataExplorer
|
||||||
@default = default
|
@default = default
|
||||||
@nullable = nullable
|
@nullable = nullable
|
||||||
begin
|
begin
|
||||||
cast_to_ruby default if default.present?
|
cast_to_ruby default if default.present? && validate
|
||||||
rescue ValidationError
|
rescue ValidationError
|
||||||
raise ValidationError.new(
|
raise ValidationError.new(
|
||||||
"Parameter declaration error - the default value is not a valid #{type}",
|
"Parameter declaration error - the default value is not a valid #{type}",
|
||||||
|
@ -89,7 +89,7 @@ module ::DiscourseDataExplorer
|
||||||
type = type.strip
|
type = type.strip
|
||||||
|
|
||||||
begin
|
begin
|
||||||
ret_params << Parameter.new(ident, type, default, nullable)
|
ret_params << Parameter.new(ident, type, default, nullable, validate: opts[:strict])
|
||||||
rescue StandardError
|
rescue StandardError
|
||||||
raise if opts[:strict]
|
raise if opts[:strict]
|
||||||
end
|
end
|
||||||
|
|
|
@ -77,4 +77,22 @@ RSpec.describe DiscourseDataExplorer::Parameter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe ".create_from_sql" do
|
||||||
|
it "should not validate default value" do
|
||||||
|
TEST_SQL = <<~SQL
|
||||||
|
-- [params]
|
||||||
|
-- user_id :user_id = user_not_exists
|
||||||
|
-- post_id :post_id = /t/should-not-exist/33554432/1
|
||||||
|
-- topic_id :topic_id = /t/should-not-exist/2147483646
|
||||||
|
-- category_id :category_id = category_not_exists
|
||||||
|
-- group_id :group_id = group_not_exists
|
||||||
|
-- group_list :group_list = group_not_exists1,group_not_exists1
|
||||||
|
-- user_list :mul_users = user_not_exists1,user_not_exists2
|
||||||
|
SELECT 1
|
||||||
|
SQL
|
||||||
|
|
||||||
|
expect(described_class.create_from_sql(TEST_SQL).length).to eq(7)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue