@@ -89,10 +89,10 @@ case class BobbyVersionRange(
89
89
} else None
90
90
}
91
91
92
- def isMatch (v : Version ): Boolean = {
92
+ def includes (v : Version ): Boolean = {
93
93
val qualFilter : Function1 [Version , Boolean ] = qualifier match {
94
94
case Some (qual) => _.toString.contains(qual)
95
- case None => _ => false
95
+ case None => _ => true
96
96
}
97
97
val lbFilter : Function1 [Version , Boolean ] = lowerBound match {
98
98
case Some (BobbyVersion (version, true )) => _ >= version
@@ -104,14 +104,16 @@ case class BobbyVersionRange(
104
104
case Some (BobbyVersion (version, false )) => _ < version
105
105
case None => _ => true
106
106
}
107
- qualFilter(v) || ( lbFilter(v) && ubFilter(v) )
107
+ qualFilter(v) && lbFilter(v) && ubFilter(v)
108
108
}
109
+
110
+ override def toString : String = range
109
111
}
110
112
111
113
object BobbyVersionRange {
112
114
113
115
private val fixed = """ ^\[(\d+\.\d+.\d+)\]""" .r
114
- private val fixedUpper = """ ^\( ,?(\d+\.\d+.\d+)[\]\)]""" .r
116
+ private val fixedUpper = """ ^[\[\(] ,?(\d+\.\d+.\d+)[\]\)]""" .r
115
117
private val fixedLower = """ ^[\[\(](\d+\.\d+.\d+),[\]\)]""" .r
116
118
private val rangeRegex = """ ^[\[\(](\d+\.\d+.\d+),(\d+\.\d+.\d+)[\]\)]""" .r
117
119
private val qualifier = """ ^\[[-\*]+(.*)\]""" .r
@@ -121,42 +123,54 @@ object BobbyVersionRange {
121
123
122
124
PartialFunction .condOpt(trimmedRange) {
123
125
case fixed(v) =>
124
- val fixed = Version .parse(v).map(BobbyVersion (_, inclusive = true )) // TODO fail, if invalid version
125
- BobbyVersionRange (
126
- lowerBound = fixed
127
- , upperBound = fixed
128
- , qualifier = None
129
- , range = trimmedRange
130
- )
126
+ Version .parse(v).map(BobbyVersion (_, inclusive = true ))
127
+ .map { fixed =>
128
+ BobbyVersionRange (
129
+ lowerBound = Some (fixed)
130
+ , upperBound = Some (fixed)
131
+ , qualifier = None
132
+ , range = trimmedRange
133
+ )
134
+ }
131
135
case fixedUpper(v) =>
132
- BobbyVersionRange (
133
- lowerBound = None
134
- , upperBound = Version .parse(v).map(BobbyVersion (_, inclusive = trimmedRange.endsWith(" ]" ))) // TODO fail, if invalid version
135
- , qualifier = None
136
- , range = trimmedRange
137
- )
136
+ Version .parse(v).map(BobbyVersion (_, inclusive = trimmedRange.endsWith(" ]" )))
137
+ .map { ub =>
138
+ BobbyVersionRange (
139
+ lowerBound = None
140
+ , upperBound = Some (ub)
141
+ , qualifier = None
142
+ , range = trimmedRange
143
+ )
144
+ }
138
145
case fixedLower(v) =>
139
- BobbyVersionRange (
140
- lowerBound = Version .parse(v).map(BobbyVersion (_, inclusive = trimmedRange.startsWith(" [" ))) // TODO fail, if invalid version
141
- , upperBound = None
142
- , qualifier = None
143
- , range = trimmedRange
144
- )
146
+ Version .parse(v).map(BobbyVersion (_, inclusive = trimmedRange.startsWith(" [" )))
147
+ .map { lb =>
148
+ BobbyVersionRange (
149
+ lowerBound = Some (lb)
150
+ , upperBound = None
151
+ , qualifier = None
152
+ , range = trimmedRange
153
+ )
154
+ }
145
155
case rangeRegex(v1, v2) =>
146
- BobbyVersionRange (
147
- lowerBound = Version .parse(v1).map(BobbyVersion (_, inclusive = trimmedRange.startsWith(" [" ))) // TODO fail, if invalid version
148
- , upperBound = Version .parse(v2).map(BobbyVersion (_, inclusive = trimmedRange.endsWith(" ]" ))) // TODO fail, if invalid version
149
- , qualifier = None
150
- , range = trimmedRange
151
- )
156
+ for {
157
+ lb <- Version .parse(v1).map(BobbyVersion (_, inclusive = trimmedRange.startsWith(" [" )))
158
+ ub <- Version .parse(v2).map(BobbyVersion (_, inclusive = trimmedRange.endsWith(" ]" )))
159
+ } yield
160
+ BobbyVersionRange (
161
+ lowerBound = Some (lb)
162
+ , upperBound = Some (ub)
163
+ , qualifier = None
164
+ , range = trimmedRange
165
+ )
152
166
case qualifier(q) if q.length() > 1 =>
153
- BobbyVersionRange (
167
+ Some ( BobbyVersionRange (
154
168
lowerBound = None
155
169
, upperBound = None
156
170
, qualifier = Some (q)
157
171
, range = trimmedRange
158
- )
159
- }
172
+ ))
173
+ }.flatten
160
174
}
161
175
162
176
def apply (range : String ): BobbyVersionRange =
@@ -273,24 +287,6 @@ object Version {
273
287
}
274
288
275
289
276
- trait VersionOp {
277
- def s : String
278
- }
279
- object VersionOp {
280
- case object Gte extends VersionOp { val s = " >=" }
281
- case object Lte extends VersionOp { val s = " <=" }
282
- case object Eq extends VersionOp { val s = " ==" }
283
-
284
- def parse (s : String ): Option [VersionOp ] =
285
- s match {
286
- case Gte .s => Some (Gte )
287
- case Lte .s => Some (Lte )
288
- case Eq .s => Some (Eq )
289
- case _ => None
290
- }
291
- }
292
-
293
-
294
290
case class ServiceWithDependency (
295
291
slugName : String ,
296
292
slugVersion : String ,
0 commit comments