Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Nov 8, 2022. It is now read-only.

Commite244d89

Browse files
committed
refactor(editor): use macros to reduce similar code
1 parent2ece8ea commite244d89

File tree

2 files changed

+33
-51
lines changed

2 files changed

+33
-51
lines changed

‎lib/helper/validate_by_schema.ex‎

Lines changed: 32 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,33 @@
1+
defmoduleHelper.ValidateBySchema.Matchersdo
2+
@moduledoc"""
3+
matchers for basic type, support required option
4+
"""
5+
6+
defmacro__using__(types)do
7+
# can not use Enum.each here, see https://elixirforum.com/t/define-multiple-modules-in-macro-only-last-one-gets-created/1654/4
8+
fortype<-typesdo
9+
guard_name=iftype==:string,do:"binary",else:type|>to_string
10+
11+
quotedo
12+
defpmatch(field,nil,[unquote(type),required:false]),do:done(field,nil)
13+
14+
defpmatch(field,value,[unquote(type),required:false])
15+
whenunquote(:"is_#{guard_name}")(value)do
16+
done(field,value)
17+
end
18+
19+
defpmatch(field,value,[unquote(type)])whenunquote(:"is_#{guard_name}")(value),
20+
do:done(field,value)
21+
22+
defpmatch(field,value,[unquote(type),required:false]),
23+
do:error(field,value,unquote(type))
24+
25+
defpmatch(field,value,[unquote(type)]),do:error(field,value,unquote(type))
26+
end
27+
end
28+
end
29+
end
30+
131
defmoduleHelper.ValidateBySchemado
232
@moduledoc"""
333
validate json data by given schema, mostly used in editorjs validator
@@ -21,6 +51,8 @@ defmodule Helper.ValidateBySchema do
2151
data = %{checked: true, label: "done"}
2252
ValidateBySchema.cast(schema, data)
2353
"""
54+
useHelper.ValidateBySchema.Matchers,[:string,:number,:list,:boolean]
55+
2456
defcast(schema,data)do
2557
errors_info=cast_errors(schema,data)
2658

@@ -47,56 +79,6 @@ defmodule Helper.ValidateBySchema do
4779
end)
4880
end
4981

50-
# 这里试过用 macro 消除重复代码,但是不可行。
51-
# macro 对于重复定义的 quote 只会覆盖掉,除非每个 quote 中定义的内容不一样
52-
# 参考: https://elixirforum.com/t/define-multiple-modules-in-macro-only-last-one-gets-created/1654
53-
54-
# boolean field
55-
defpmatch(field,nil,[:boolean,required:false]),do:done(field,nil)
56-
57-
defpmatch(field,value,[:boolean,required:false])whenis_boolean(value)do
58-
done(field,value)
59-
end
60-
61-
defpmatch(field,value,[:boolean])whenis_boolean(value),do:done(field,value)
62-
defpmatch(field,value,[:boolean,required:false]),do:error(field,value,:boolean)
63-
defpmatch(field,value,[:boolean]),do:error(field,value,:boolean)
64-
65-
# string field
66-
defpmatch(field,nil,[:string,required:false]),do:done(field,nil)
67-
68-
defpmatch(field,value,[:string,required:false])whenis_binary(value)do
69-
done(field,value)
70-
end
71-
72-
defpmatch(field,value,[:string])whenis_binary(value),do:done(field,value)
73-
defpmatch(field,value,[:string,required:false]),do:error(field,value,:string)
74-
defpmatch(field,value,[:string]),do:error(field,value,:string)
75-
76-
defpmatch(field,nil,[:string,required:false]),do:done(field,nil)
77-
78-
# number
79-
defpmatch(field,nil,[:number,required:false]),do:done(field,nil)
80-
81-
defpmatch(field,value,[:number,required:false])whenis_number(value)do
82-
done(field,value)
83-
end
84-
85-
defpmatch(field,value,[:number])whenis_number(value),do:done(field,value)
86-
defpmatch(field,value,[:number,required:false]),do:error(field,value,:number)
87-
defpmatch(field,value,[:number]),do:error(field,value,:number)
88-
89-
# list
90-
defpmatch(field,nil,[:list,required:false]),do:done(field,nil)
91-
92-
defpmatch(field,value,[:list,required:false])whenis_list(value)do
93-
done(field,value)
94-
end
95-
96-
defpmatch(field,value,[:list])whenis_list(value),do:done(field,value)
97-
defpmatch(field,value,[:list,required:false]),do:error(field,value,:list)
98-
defpmatch(field,value,[:list]),do:error(field,value,:list)
99-
10082
# enum
10183
defpmatch(field,nil,enum:_,required:false),do:done(field,nil)
10284

‎test/helper/converter/editor_to_html_test/list_test.exs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ defmodule GroupherServer.Test.Helper.Converter.EditorToHTML.List do
6161
],
6262
"version"=>"2.15.0"
6363
}
64-
@tag:wip
64+
@tag:wip2
6565
test"invalid list data parse should raise error message"do
6666
{:ok,editor_string}=Jason.encode(@editor_json)
6767
{:error,err_msg}=Parser.to_html(editor_string)

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp