File tree Expand file tree Collapse file tree 2 files changed +24
-1
lines changed Expand file tree Collapse file tree 2 files changed +24
-1
lines changed Original file line number Diff line number Diff line change @@ -105,7 +105,9 @@ defmodule Hex.Version do
105
105
106
106
defp custom_requirement ( requirement ) do
107
107
try do
108
- req = String . split ( requirement , " " , trim: true ) |> custom_parse
108
+ req = String . split ( requirement , " " , trim: true )
109
+ |> split_ops
110
+ |> custom_parse
109
111
{ :ok , % Requirement { source: requirement , req: req } }
110
112
catch
111
113
:error ->
@@ -130,6 +132,17 @@ defmodule Hex.Version do
130
132
defp custom_parse ( _ ) ,
131
133
do: throw :error
132
134
135
+ def split_ops ( [ op | rest ] ) when op in @ version_ops ,
136
+ do: [ op | split_ops ( rest ) ]
137
+ def split_ops ( [ << op :: binary - 2 , version :: binary >> | rest ] ) when op in @ version_ops ,
138
+ do: [ op , version | split_ops ( rest ) ]
139
+ def split_ops ( [ << op :: binary - 1 , version :: binary >> | rest ] ) when op in @ version_ops ,
140
+ do: [ op , version | split_ops ( rest ) ]
141
+ def split_ops ( [ version | rest ] ) ,
142
+ do: [ version | split_ops ( rest ) ]
143
+ def split_ops ( [ ] ) ,
144
+ do: [ ]
145
+
133
146
defp allow_pre? do
134
147
Code . ensure_loaded? ( Version ) and function_exported? ( Version , :match? , 3 )
135
148
end
Original file line number Diff line number Diff line change @@ -12,4 +12,14 @@ defmodule Hex.VersionTest do
12
12
refute V . match? ( "1.1.0-beta" , ">= 1.0.0" )
13
13
assert V . match? ( "1.1.0-beta" , ">= 1.0.0-beta" )
14
14
end
15
+
16
+ test "parse requirement" do
17
+ assert { :ok , _ } = V . parse_requirement ( "1.0.0" )
18
+ assert { :ok , _ } = V . parse_requirement ( "== 1.0.0" )
19
+ assert { :ok , _ } = V . parse_requirement ( "==1.0.0" )
20
+ assert { :ok , _ } = V . parse_requirement ( "== 1.0.0 and == 1.0.0" )
21
+ assert { :ok , _ } = V . parse_requirement ( "==1.0.0 and ==1.0.0" )
22
+
23
+ assert :error = V . parse_requirement ( "foo" )
24
+ end
15
25
end
You can’t perform that action at this time.
0 commit comments