js2 0.3.3 → 0.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|