js2 0.3.3 → 0.3.4
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/js2/js2.js +112 -92
- metadata +7 -17
data/lib/js2/js2.js
CHANGED
@@ -139,7 +139,7 @@ function mainFunction (arg) {
|
|
139
139
|
};
|
140
140
|
|
141
141
|
var assert = {
|
142
|
-
'eq': function(
|
142
|
+
'eq': function(expected, actual) { if (expected != actual) console.log("Expected "+expected+", but got "+actual+".") },
|
143
143
|
'isFalse': function(val) { if (val) console.log("Expected false, but got "+val+".") },
|
144
144
|
'isTrue': function(val) { if (!val) console.log("Expected true, but got " +val+".") }
|
145
145
|
};
|
@@ -927,13 +927,25 @@ JS2.Array.prototype.until = function(f) {
|
|
927
927
|
|
928
928
|
|
929
929
|
JS2.Array.prototype.collect = function(f) {
|
930
|
-
var ret
|
931
|
-
|
930
|
+
var ret = new JS2.Array();
|
931
|
+
var self = this;
|
932
|
+
this.each(function($1,$2,$3){ ret.push(f.call(self, $1, $2)) });
|
932
933
|
return ret;
|
933
934
|
};
|
934
935
|
|
936
|
+
// http://clojure.github.com/clojure/clojure.core-api.html#clojure.core/reduce
|
935
937
|
JS2.Array.prototype.reduce = function(f, val) {
|
936
|
-
this.
|
938
|
+
if (this.length == 0) return val;
|
939
|
+
if (this.length == 1) return val == null ? f(this[0]) : f(val, this[0]);
|
940
|
+
|
941
|
+
var i = 0;
|
942
|
+
if (val == null) val = this[i++];
|
943
|
+
|
944
|
+
for (var n=this.length;i<n;i++) {
|
945
|
+
val = f(val, this[i]);
|
946
|
+
}
|
947
|
+
|
948
|
+
return val;
|
937
949
|
};
|
938
950
|
|
939
951
|
JS2.Array.prototype.reject = function(f) {
|
@@ -943,7 +955,8 @@ JS2.Array.prototype.reject = function(f) {
|
|
943
955
|
} else if (typeof f == 'string' || typeof f == 'number') {
|
944
956
|
this.each(function($1,$2,$3){ if ($1 != f) ret.push($1) });
|
945
957
|
} else if (typeof f == 'function') {
|
946
|
-
|
958
|
+
var self = this;
|
959
|
+
this.each(function($1,$2,$3){ if (!f.call(self, $1, $2)) ret.push($1) });
|
947
960
|
}
|
948
961
|
return ret;
|
949
962
|
};
|
@@ -955,7 +968,8 @@ JS2.Array.prototype.select = function(f) {
|
|
955
968
|
} else if (typeof f == 'string' || typeof f == 'number') {
|
956
969
|
this.each(function($1,$2,$3){ if ($1 == f) ret.push($1) });
|
957
970
|
} else if (typeof f == 'function') {
|
958
|
-
|
971
|
+
var self = this;
|
972
|
+
this.each(function($1,$2,$3){ if (f.call(self, $1, $2)) ret.push($1) });
|
959
973
|
}
|
960
974
|
return ret;
|
961
975
|
};
|
@@ -973,16 +987,17 @@ JS2.Array.prototype.any = function() {
|
|
973
987
|
return this.length > 0;
|
974
988
|
};
|
975
989
|
|
976
|
-
|
977
|
-
|
990
|
+
|
991
|
+
JS2.Class.extend('FileSystem', function(KLASS, OO){
|
992
|
+
OO.addMember("initialize",function (adapter) {
|
978
993
|
this.adapter = adapter;
|
979
|
-
}
|
994
|
+
});
|
980
995
|
|
981
|
-
find
|
996
|
+
OO.addMember("find",function (dir, ext, recursive) {
|
982
997
|
return this._find(this.expandPath(dir), new RegExp('\\.' + ext + '$'), recursive);
|
983
|
-
}
|
998
|
+
});
|
984
999
|
|
985
|
-
_find
|
1000
|
+
OO.addMember("_find",function (dir, regex, recursive) {
|
986
1001
|
if (!this.isDirectory(dir)) return [];
|
987
1002
|
|
988
1003
|
var parts = this.adapter.readdir(dir);
|
@@ -1003,15 +1018,15 @@ JS2.Class.extend('FileSystem', {
|
|
1003
1018
|
});
|
1004
1019
|
|
1005
1020
|
return files;
|
1006
|
-
}
|
1021
|
+
});
|
1007
1022
|
|
1008
|
-
canonical
|
1023
|
+
OO.addMember("canonical",function (file) {
|
1009
1024
|
var abs = this.expandPath(file);
|
1010
1025
|
abs = abs.replace(/\/$/, '');
|
1011
1026
|
return abs;
|
1012
|
-
}
|
1027
|
+
});
|
1013
1028
|
|
1014
|
-
mkpath
|
1029
|
+
OO.addMember("mkpath",function (file) {
|
1015
1030
|
var dirname = this.canonical(this.dirname(file));
|
1016
1031
|
|
1017
1032
|
var subdirs = js2(dirname.split('/'));
|
@@ -1023,83 +1038,84 @@ JS2.Class.extend('FileSystem', {
|
|
1023
1038
|
toMake += '/' + $1;
|
1024
1039
|
self.mkdir(toMake);
|
1025
1040
|
});
|
1026
|
-
}
|
1041
|
+
});
|
1027
1042
|
|
1028
1043
|
// ADAPTER USAGE
|
1029
|
-
dirname
|
1044
|
+
OO.addMember("dirname",function (file) {
|
1030
1045
|
return this.adapter.dirname(file);
|
1031
|
-
}
|
1046
|
+
});
|
1032
1047
|
|
1033
|
-
readdir
|
1048
|
+
OO.addMember("readdir",function (file) {
|
1034
1049
|
return this.adapter.readdir(file);
|
1035
|
-
}
|
1050
|
+
});
|
1036
1051
|
|
1037
|
-
read
|
1052
|
+
OO.addMember("read",function (file) {
|
1038
1053
|
var data = this.adapter.read(file);
|
1039
1054
|
return data;
|
1040
|
-
}
|
1055
|
+
});
|
1041
1056
|
|
1042
|
-
write
|
1057
|
+
OO.addMember("write",function (file, data) {
|
1043
1058
|
return this.adapter.write(file, data);
|
1044
|
-
}
|
1059
|
+
});
|
1045
1060
|
|
1046
|
-
mtime
|
1061
|
+
OO.addMember("mtime",function (file) {
|
1047
1062
|
return this.adapter.mtime(file);
|
1048
|
-
}
|
1063
|
+
});
|
1049
1064
|
|
1050
|
-
exists
|
1065
|
+
OO.addMember("exists",function (file) {
|
1051
1066
|
return this.isDirectory(file) || this.isFile(file);
|
1052
|
-
}
|
1067
|
+
});
|
1053
1068
|
|
1054
|
-
mkdir
|
1069
|
+
OO.addMember("mkdir",function (file) {
|
1055
1070
|
if (!this.exists(file)) {
|
1056
1071
|
return this.adapter.mkdir(file);
|
1057
1072
|
}
|
1058
|
-
}
|
1073
|
+
});
|
1059
1074
|
|
1060
|
-
isFile
|
1075
|
+
OO.addMember("isFile",function (file) {
|
1061
1076
|
try {
|
1062
1077
|
return this.adapter.isFile(file);
|
1063
1078
|
} catch(e) {
|
1064
1079
|
return false;
|
1065
1080
|
}
|
1066
|
-
}
|
1081
|
+
});
|
1067
1082
|
|
1068
|
-
setInterval
|
1083
|
+
OO.addMember("setInterval",function (code, interval) {
|
1069
1084
|
return this.adapter.setInterval(code, interval);
|
1070
|
-
}
|
1085
|
+
});
|
1071
1086
|
|
1072
|
-
isDirectory
|
1087
|
+
OO.addMember("isDirectory",function (file) {
|
1073
1088
|
try {
|
1074
1089
|
return this.adapter.isDirectory(file);
|
1075
1090
|
} catch(e) {
|
1076
1091
|
return false;
|
1077
1092
|
}
|
1078
|
-
}
|
1093
|
+
});
|
1079
1094
|
|
1080
|
-
expandPath
|
1095
|
+
OO.addMember("expandPath",function (file) {
|
1081
1096
|
return this.adapter.expandPath(file);
|
1082
|
-
}
|
1097
|
+
});
|
1083
1098
|
});
|
1084
1099
|
|
1085
|
-
|
1086
|
-
|
1100
|
+
|
1101
|
+
JS2.Class.extend('Updater', function(KLASS, OO){
|
1102
|
+
OO.addMember("initialize",function (fs, inDir, outDir, recursive) {
|
1087
1103
|
this.recursive = recursive;
|
1088
1104
|
this.fs = fs;
|
1089
1105
|
this.inDir = this.fs.canonical(inDir);
|
1090
1106
|
this.outDir = this.fs.canonical(outDir);
|
1091
1107
|
this.verbose = true;
|
1092
|
-
}
|
1108
|
+
});
|
1093
1109
|
|
1094
|
-
update
|
1110
|
+
OO.addMember("update",function (force, funct) {
|
1095
1111
|
var self = this;
|
1096
1112
|
this.matchDirs(this.inDir);
|
1097
1113
|
this.fs.find(this.inDir, 'js2', this.recursive).each(function($1,$2,$3){
|
1098
1114
|
self.tryUpdate($1, force, funct);
|
1099
1115
|
});
|
1100
|
-
}
|
1116
|
+
});
|
1101
1117
|
|
1102
|
-
matchDirs
|
1118
|
+
OO.addMember("matchDirs",function (dir) {
|
1103
1119
|
var subs = this.fs.readdir(dir);
|
1104
1120
|
for(var _i4=0,_c4=subs,_l4=_c4.length,sub;sub=_c4[_i4]||_i4<_l4;_i4++){
|
1105
1121
|
var path = dir + '/' + sub;
|
@@ -1108,9 +1124,9 @@ JS2.Class.extend('Updater', {
|
|
1108
1124
|
this.matchDirs(path);
|
1109
1125
|
}
|
1110
1126
|
}
|
1111
|
-
}
|
1127
|
+
});
|
1112
1128
|
|
1113
|
-
tryUpdate
|
1129
|
+
OO.addMember("tryUpdate",function (file, force, funct) {
|
1114
1130
|
var outFile = file.replace(this.inDir, this.outDir).replace(/\.js2$/, '.js');
|
1115
1131
|
|
1116
1132
|
var dir = this.fs.dirname(file);
|
@@ -1123,18 +1139,19 @@ JS2.Class.extend('Updater', {
|
|
1123
1139
|
this.fs.write(outFile, JS2(this.fs.read(file)));
|
1124
1140
|
}
|
1125
1141
|
}
|
1126
|
-
}
|
1142
|
+
});
|
1127
1143
|
});
|
1128
1144
|
|
1129
|
-
|
1130
|
-
|
1131
|
-
"
|
1145
|
+
|
1146
|
+
JS2.Class.extend('Config', function(KLASS, OO){
|
1147
|
+
OO.addMember("CLI_REGEX",/^-(r|i|f)(=(\w+))$/);
|
1148
|
+
OO.addMember("optsLookup",{
|
1132
1149
|
'n': 'non-recursive',
|
1133
1150
|
'i': 'interval',
|
1134
1151
|
'f': 'format'
|
1135
|
-
}
|
1152
|
+
});
|
1136
1153
|
|
1137
|
-
initialize
|
1154
|
+
OO.addMember("initialize",function (fs, argv) {
|
1138
1155
|
this.format = 'browser';
|
1139
1156
|
this.recursive = true;
|
1140
1157
|
this.interval = 2;
|
@@ -1164,9 +1181,9 @@ JS2.Class.extend('Config', {
|
|
1164
1181
|
|
1165
1182
|
this.recursive = !this['non-recursive'];
|
1166
1183
|
this.interval = parseInt(this.interval);
|
1167
|
-
}
|
1184
|
+
});
|
1168
1185
|
|
1169
|
-
loadConfigFile
|
1186
|
+
OO.addMember("loadConfigFile",function (file) {
|
1170
1187
|
if (this.fs.isFile(file)) {
|
1171
1188
|
try {
|
1172
1189
|
var config = JSON.parse(this.fs.read(file).replace(/\n\r?/g, ''));
|
@@ -1184,12 +1201,13 @@ JS2.Class.extend('Config', {
|
|
1184
1201
|
}
|
1185
1202
|
}
|
1186
1203
|
return false;
|
1187
|
-
}
|
1204
|
+
});
|
1188
1205
|
|
1189
1206
|
});
|
1190
1207
|
|
1191
|
-
|
1192
|
-
|
1208
|
+
|
1209
|
+
JS2.Class.extend('Commander', function(KLASS, OO){
|
1210
|
+
OO.addMember("BANNER","js2 <command> [options] <arguments>\n" +
|
1193
1211
|
"Commands:\n" +
|
1194
1212
|
" * run <file> -- Executes file\n" +
|
1195
1213
|
" * render <file> -- Shows JS2 compiled output\n" +
|
@@ -1202,14 +1220,14 @@ JS2.Class.extend('Commander', {
|
|
1202
1220
|
" Options:\n" +
|
1203
1221
|
" -n -- Do NOT traverse directories recursively\n" +
|
1204
1222
|
" -f=<format> -- Compile for different formats: node, ringo, or browser\n" +
|
1205
|
-
" -i=<seconds> -- Interval time in seconds between loops\n"
|
1223
|
+
" -i=<seconds> -- Interval time in seconds between loops\n");
|
1206
1224
|
|
1207
|
-
"DEFAULT_CONFIG"
|
1225
|
+
OO.addMember("DEFAULT_CONFIG",{
|
1208
1226
|
compile: { inDir: 'src', outDir: 'lib', recursive: true, decorator: 'Node' },
|
1209
1227
|
watch: { inDir: 'src', outDir: 'lib', recursive: true, decorator: 'Node' }
|
1210
|
-
}
|
1228
|
+
});
|
1211
1229
|
|
1212
|
-
initialize
|
1230
|
+
OO.addMember("initialize",function (argv) {
|
1213
1231
|
this.fs = JS2.fs;
|
1214
1232
|
this.config = new JS2.Config(this.fs, argv);
|
1215
1233
|
this.command = this.config.command;
|
@@ -1219,40 +1237,40 @@ JS2.Class.extend('Commander', {
|
|
1219
1237
|
case 'node': JS2.DECORATOR = new JS2.NodeDecorator(); break;
|
1220
1238
|
default: JS2.DECORATOR = new JS2.BrowserDecorator(); break;
|
1221
1239
|
}
|
1222
|
-
}
|
1240
|
+
});
|
1223
1241
|
|
1224
|
-
cli
|
1242
|
+
OO.addMember("cli",function () {
|
1225
1243
|
if (this[this.command]) {
|
1226
1244
|
this[this.command]();
|
1227
1245
|
} else {
|
1228
1246
|
this.showBanner();
|
1229
1247
|
}
|
1230
|
-
}
|
1248
|
+
});
|
1231
1249
|
|
1232
|
-
render
|
1250
|
+
OO.addMember("render",function () {
|
1233
1251
|
console.log(js2.render(this.fs.read(this.config.args[0])));
|
1234
|
-
}
|
1252
|
+
});
|
1235
1253
|
|
1236
|
-
run
|
1254
|
+
OO.addMember("run",function () {
|
1237
1255
|
var file;
|
1238
1256
|
var i = 0;
|
1239
1257
|
while (file = this.config.args[i++]) {
|
1240
1258
|
eval(js2.render(this.fs.read(file)));
|
1241
1259
|
}
|
1242
|
-
}
|
1260
|
+
});
|
1243
1261
|
|
1244
|
-
compile
|
1262
|
+
OO.addMember("compile",function () {
|
1245
1263
|
var self = this;
|
1246
1264
|
this.getUpdater().update(true, function($1,$2,$3){ return JS2.DECORATOR.file($1); });
|
1247
|
-
}
|
1265
|
+
});
|
1248
1266
|
|
1249
|
-
getUpdater
|
1267
|
+
OO.addMember("getUpdater",function () {
|
1250
1268
|
var inDir = this.config.args[0] || this.config.sourceDir || '.';
|
1251
1269
|
var outDir = this.config.args[1] || this.config.outDir || inDir;
|
1252
1270
|
return new JS2.Updater(this.fs, inDir, outDir, this.config.recursive);
|
1253
|
-
}
|
1271
|
+
});
|
1254
1272
|
|
1255
|
-
watch
|
1273
|
+
OO.addMember("watch",function () {
|
1256
1274
|
var updater = this.getUpdater();
|
1257
1275
|
var self = this;
|
1258
1276
|
var interval = this.config.interval || 2;
|
@@ -1262,47 +1280,49 @@ JS2.Class.extend('Commander', {
|
|
1262
1280
|
// HACK to get this integrated with ruby
|
1263
1281
|
updater.update();
|
1264
1282
|
setInterval(function($1,$2,$3){ console.log('updating'); updater.update(true, function($1,$2,$3){ return JS2.DECORATOR.file($1); }); }, interval * 1000);
|
1265
|
-
}
|
1283
|
+
});
|
1266
1284
|
|
1267
|
-
showBanner
|
1285
|
+
OO.addMember("showBanner",function () {
|
1268
1286
|
console.log(this.BANNER);
|
1269
|
-
}
|
1287
|
+
});
|
1270
1288
|
});
|
1271
1289
|
|
1272
1290
|
|
1273
|
-
|
1274
|
-
|
1291
|
+
|
1292
|
+
JS2.Class.extend('BrowserDecorator', function(KLASS, OO){
|
1293
|
+
OO.addMember("file",function (code) {
|
1275
1294
|
return code;
|
1276
|
-
}
|
1295
|
+
});
|
1277
1296
|
|
1278
|
-
klass
|
1297
|
+
OO.addMember("klass",function (name, par, source) {
|
1279
1298
|
return par+".extend('"+name+"',"+source+");";
|
1280
|
-
}
|
1299
|
+
});
|
1281
1300
|
});
|
1282
1301
|
|
1283
|
-
JS2.Class.extend('NodeDecorator', {
|
1284
|
-
file
|
1302
|
+
JS2.Class.extend('NodeDecorator', function(KLASS, OO){
|
1303
|
+
OO.addMember("file",function (code) {
|
1285
1304
|
return "var js2 = require('js2').js2;\nvar JS2 = js2;\n" + code;
|
1286
|
-
}
|
1305
|
+
});
|
1287
1306
|
|
1288
|
-
klass
|
1307
|
+
OO.addMember("klass",function (name, par, source) {
|
1289
1308
|
return "var "+name+"=exports['"+name+"']="+par+".extend("+source+");";
|
1290
|
-
}
|
1309
|
+
});
|
1291
1310
|
});
|
1292
1311
|
|
1293
|
-
JS2.Class.extend('RingoDecorator', {
|
1294
|
-
file
|
1312
|
+
JS2.Class.extend('RingoDecorator', function(KLASS, OO){
|
1313
|
+
OO.addMember("file",function (code) {
|
1295
1314
|
return "var js2 = require('js2').js2;\nvar JS2 = js2;\n" + code;
|
1296
|
-
}
|
1315
|
+
});
|
1297
1316
|
|
1298
|
-
klass
|
1317
|
+
OO.addMember("klass",function (name, par, source) {
|
1299
1318
|
return "var "+name+"=exports['"+name+"']="+par+".extend("+source+");";
|
1300
|
-
}
|
1319
|
+
});
|
1301
1320
|
});
|
1302
1321
|
|
1303
1322
|
JS2.DECORATOR = JS2.DECORATOR || new JS2.BrowserDecorator();
|
1304
1323
|
|
1305
1324
|
|
1325
|
+
|
1306
1326
|
JS2.fs = new JS2.FileSystem(JS2_RUBY_FILE_ADAPTER);
|
1307
1327
|
js2.DECORATOR = new JS2.BrowserDecorator();
|
1308
1328
|
js2.ROOT = root;
|
metadata
CHANGED
@@ -1,12 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: js2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 3
|
8
|
-
- 3
|
9
|
-
version: 0.3.3
|
4
|
+
prerelease:
|
5
|
+
version: 0.3.4
|
10
6
|
platform: ruby
|
11
7
|
authors:
|
12
8
|
- Jeff Su
|
@@ -14,7 +10,7 @@ autorequire:
|
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
12
|
|
17
|
-
date: 2011-03-
|
13
|
+
date: 2011-03-10 00:00:00 +08:00
|
18
14
|
default_executable:
|
19
15
|
dependencies:
|
20
16
|
- !ruby/object:Gem::Dependency
|
@@ -25,8 +21,6 @@ dependencies:
|
|
25
21
|
requirements:
|
26
22
|
- - ">="
|
27
23
|
- !ruby/object:Gem::Version
|
28
|
-
segments:
|
29
|
-
- 0
|
30
24
|
version: "0"
|
31
25
|
type: :runtime
|
32
26
|
version_requirements: *id001
|
@@ -42,11 +36,11 @@ extra_rdoc_files: []
|
|
42
36
|
files:
|
43
37
|
- bin/js2
|
44
38
|
- bin/js2-ruby
|
45
|
-
- lib/js2
|
39
|
+
- lib/js2.rb
|
46
40
|
- lib/js2/context.rb
|
47
|
-
- lib/js2/fs.rb
|
48
41
|
- lib/js2/rack.rb
|
49
|
-
- lib/js2.rb
|
42
|
+
- lib/js2/command.rb
|
43
|
+
- lib/js2/fs.rb
|
50
44
|
- lib/js2/js2.js
|
51
45
|
- CHANGELOG
|
52
46
|
has_rdoc: true
|
@@ -63,21 +57,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
63
57
|
requirements:
|
64
58
|
- - ">="
|
65
59
|
- !ruby/object:Gem::Version
|
66
|
-
segments:
|
67
|
-
- 0
|
68
60
|
version: "0"
|
69
61
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
62
|
none: false
|
71
63
|
requirements:
|
72
64
|
- - ">="
|
73
65
|
- !ruby/object:Gem::Version
|
74
|
-
segments:
|
75
|
-
- 0
|
76
66
|
version: "0"
|
77
67
|
requirements: []
|
78
68
|
|
79
69
|
rubyforge_project:
|
80
|
-
rubygems_version: 1.
|
70
|
+
rubygems_version: 1.5.2
|
81
71
|
signing_key:
|
82
72
|
specification_version: 3
|
83
73
|
summary: Javascript Syntactic Sugar
|