@@ -4,7 +4,7 @@ defmodule Record do
44
55 Records are simply tuples where the first element is an atom:
66
7- iex> Record.record? {User, "john", 27}
7+ iex> Record.is_record {User, "john", 27}
88 true
99
1010 This module provides conveniences for working with records at
@@ -56,6 +56,23 @@ defmodule Record do
5656 Macro . escape Record.Extractor . extract ( name , opts )
5757 end
5858
59+ @ doc false
60+ defmacro record? ( data , kind ) do
61+ case Macro.Env . in_guard? ( __CALLER__ ) do
62+ true ->
63+ quote do
64+ is_tuple ( unquote ( data ) ) and tuple_size ( unquote ( data ) ) > 0
65+ and :erlang . element ( 1 , unquote ( data ) ) == unquote ( kind )
66+ end
67+ false ->
68+ quote do
69+ result = unquote ( data )
70+ is_tuple ( result ) and tuple_size ( result ) > 0
71+ and :erlang . element ( 1 , result ) == unquote ( kind )
72+ end
73+ end
74+ end
75+
5976 @ doc """
6077 Checks if the given `data` is a record of `kind`.
6178
@@ -64,11 +81,11 @@ defmodule Record do
6481 ## Examples
6582
6683 iex> record = {User, "john", 27}
67- iex> Record.record? (record, User)
84+ iex> Record.is_record (record, User)
6885 true
6986
7087 """
71- defmacro record? ( data , kind ) do
88+ defmacro is_record ( data , kind ) do
7289 case Macro.Env . in_guard? ( __CALLER__ ) do
7390 true ->
7491 quote do
@@ -84,6 +101,23 @@ defmodule Record do
84101 end
85102 end
86103
104+ @ doc false
105+ defmacro record? ( data ) do
106+ case Macro.Env . in_guard? ( __CALLER__ ) do
107+ true ->
108+ quote do
109+ is_tuple ( unquote ( data ) ) and tuple_size ( unquote ( data ) ) > 0
110+ and is_atom ( :erlang . element ( 1 , unquote ( data ) ) )
111+ end
112+ false ->
113+ quote do
114+ result = unquote ( data )
115+ is_tuple ( result ) and tuple_size ( result ) > 0
116+ and is_atom ( :erlang . element ( 1 , result ) )
117+ end
118+ end
119+ end
120+
87121 @ doc """
88122 Checks if the given `data` is a record.
89123
@@ -92,14 +126,14 @@ defmodule Record do
92126 ## Examples
93127
94128 iex> record = {User, "john", 27}
95- iex> Record.record? (record)
129+ iex> Record.is_record (record)
96130 true
97131 iex> tuple = {}
98- iex> Record.record? (tuple)
132+ iex> Record.is_record (tuple)
99133 false
100134
101135 """
102- defmacro record? ( data ) do
136+ defmacro is_record ( data ) do
103137 case Macro.Env . in_guard? ( __CALLER__ ) do
104138 true ->
105139 quote do
@@ -319,7 +353,7 @@ defmodule Record do
319353 # Returns a keyword list of the record
320354 @ doc false
321355 def __keyword__ ( atom , fields , record ) do
322- if record? ( record , atom ) do
356+ if is_record ( record , atom ) do
323357 [ _tag | values ] = Tuple . to_list ( record )
324358 join_keyword ( fields , values , [ ] )
325359 else
0 commit comments