File tree 3 files changed +55
-1
lines changed
3 files changed +55
-1
lines changed Original file line number Diff line number Diff line change @@ -2,6 +2,7 @@ const putility = require("@heyputer/putility");
2
2
const BaseService = require ( "../../services/BaseService" ) ;
3
3
const { Judge0Client } = require ( "./Judge0Client" ) ;
4
4
const { Context } = require ( "../../util/context" ) ;
5
+ const { find_highest_version } = require ( "../../util/versionutil" ) ;
5
6
6
7
class Judge0Service extends BaseService {
7
8
_construct ( ) {
@@ -46,7 +47,9 @@ class Judge0Service extends BaseService {
46
47
return lang . judge0_id ;
47
48
}
48
49
}
49
- let lang = this . languages . find ( ( lang ) => lang . language === runtime ) ;
50
+ const matchingLangs = this . languages . filter ( ( lang ) => lang . language === runtime ) ;
51
+ const lang = find_highest_version ( matchingLangs ) ;
52
+
50
53
if ( lang ) {
51
54
return lang . judge0_id ;
52
55
}
Original file line number Diff line number Diff line change
1
+ /**
2
+ * Select the object with the highest version.
3
+ * Objects are of the form:
4
+ * { version: '1.2.0' }
5
+ *
6
+ * Semver is assumed.
7
+ *
8
+ * @param {* } objects
9
+ */
10
+ const find_highest_version = ( objects ) => {
11
+ let highest = [ 0 , 0 , 0 ] ;
12
+ let highest_obj = null ;
13
+
14
+ for ( const obj of objects ) {
15
+ const parts = obj . version . split ( '.' ) ;
16
+ for ( let i = 0 ; i < 3 ; i ++ ) {
17
+ const part = parseInt ( parts [ i ] ) ;
18
+ if ( part > highest [ i ] ) {
19
+ highest = parts ;
20
+ highest_obj = obj ;
21
+ break ;
22
+ } else if ( part < highest [ i ] ) {
23
+ break ;
24
+ } 1
25
+ }
26
+ }
27
+
28
+ return highest_obj ;
29
+ } ;
30
+
31
+ module . exports = {
32
+ find_highest_version,
33
+ } ;
Original file line number Diff line number Diff line change
1
+ const { expect } = require ( 'chai' ) ;
2
+
3
+ describe ( 'versionutil' , ( ) => {
4
+ it ( 'works' , ( ) => {
5
+ const objects = [
6
+ { version : '1.2.0' } ,
7
+ { version : '3.0.2' } ,
8
+ { version : '1.2.1' } ,
9
+ { version : '1.2.0' } ,
10
+ { version : '3.1.0' , h : true } ,
11
+ { version : '1.2.2' } ,
12
+ ] ;
13
+
14
+ const { find_highest_version } = require ( './versionutil' ) ;
15
+ const highest_object = find_highest_version ( objects ) ;
16
+ expect ( highest_object ) . to . deep . equal ( { version : '3.1.0' , h : true } ) ;
17
+ } ) ;
18
+ } ) ;
You can’t perform that action at this time.
0 commit comments