@@ -238,9 +238,10 @@ defmodule Version do
238238 @ spec parse ( String . t ) :: { :ok , t } | :error
239239 def parse ( string ) when is_binary ( string ) do
240240 case Version.Parser . parse_version ( string ) do
241- { :ok , { major , minor , patch , pre } } ->
241+ { :ok , { major , minor , patch , pre , build_parts } } ->
242+ build = if build_parts == [ ] , do: nil , else: Enum . join ( build_parts , "" )
242243 version = % Version { major: major , minor: minor , patch: patch ,
243- pre: pre , build: get_build ( string ) }
244+ pre: pre , build: build }
244245 { :ok , version }
245246 :error ->
246247 :error
@@ -312,23 +313,13 @@ defmodule Version do
312313
313314 defp to_matchable ( string , allow_pre? ) do
314315 case Version.Parser . parse_version ( string ) do
315- { :ok , { major , minor , patch , pre } } ->
316+ { :ok , { major , minor , patch , pre , _build_parts } } ->
316317 { major , minor , patch , pre , allow_pre? }
317318 :error ->
318319 raise InvalidVersionError , message: string
319320 end
320321 end
321322
322- defp get_build ( string ) do
323- case Regex . run ( ~r/ \+ ([^\s ]+)$/ , string ) do
324- nil ->
325- nil
326-
327- [ _ , build ] ->
328- build
329- end
330- end
331-
332323 defmodule Parser.DSL do
333324 @ moduledoc false
334325
@@ -413,8 +404,8 @@ defmodule Version do
413404 { :ok , patch } <- maybe_patch ( patch , approximate? ) ,
414405 { :ok , pre_parts } <- optional_dot_separated ( pre ) ,
415406 { :ok , pre_parts } <- convert_parts_to_integer ( pre_parts , [ ] ) ,
416- { :ok , _build_parts } <- optional_dot_separated ( build ) do
417- { :ok , { major , minor , patch , pre_parts } }
407+ { :ok , build_parts } <- optional_dot_separated ( build ) do
408+ { :ok , { major , minor , patch , pre_parts , build_parts } }
418409 else
419410 _other -> :error
420411 end
@@ -599,7 +590,7 @@ defmodule Version do
599590
600591 defp parse_condition ( version , approximate? \\ false ) do
601592 case parse_version ( version , approximate? ) do
602- { :ok , version } -> version
593+ { :ok , { major , minor , patch , pre , _build } } -> { major , minor , patch , pre }
603594 :error -> throw :invalid_matchspec
604595 end
605596 end
0 commit comments