konacha 2.5.1 → 2.6.0

Sign up to get free protection for your applications and to get access to all the features.
data/History.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # master
2
2
 
3
+ # 2.6.0
4
+
5
+ * Update mocha (1.9.0) and chai (1.5.0)
6
+
3
7
  # 2.5.1
4
8
 
5
9
  * Fix several Rails 4 beta compatibility issues.
data/README.md CHANGED
@@ -224,6 +224,12 @@ Sprocket's built in support for JavaScript template (`.jst`) files. Add a `spec/
224
224
  directory, place template files there (using any JS template language supported by Sprockets),
225
225
  require them in your spec or spec_helper, and render them into the `<body>`.
226
226
 
227
+ Note that if you want to use EJS as in the following example, you need to add that gem to your Gemfile:
228
+
229
+ ```ruby
230
+ gem "ejs"
231
+ ```
232
+
227
233
  For example, in `spec/javascripts/templates/hello.jst.ejs`:
228
234
 
229
235
  ```html
data/Rakefile CHANGED
@@ -6,15 +6,23 @@ require "rspec/core/rake_task"
6
6
  RSpec::Core::RakeTask.new :spec
7
7
 
8
8
  desc 'Build and copy Mocha and Chai assets from submodules into vendor/assets'
9
- task :assets do
10
- sh 'git submodule update --init' unless File.exist?('mocha/Makefile') || File.exist?('chai/Makefile')
11
- sh 'cd mocha && npm install && make clean && make'
12
- sh 'cd chai && npm install && make clean && make'
13
- mkdir_p 'vendor/assets/javascripts'
14
- mkdir_p 'vendor/assets/stylesheets'
15
- cp 'mocha/mocha.js', 'vendor/assets/javascripts/'
16
- cp 'mocha/mocha.css', 'vendor/assets/stylesheets/'
17
- cp 'chai/chai.js', 'vendor/assets/javascripts/'
9
+ task :assets => ['assets:build', 'assets:copy']
10
+
11
+ namespace :assets do
12
+ task :build do
13
+ sh 'git submodule update --init' unless File.exist?('mocha/Makefile') || File.exist?('chai/Makefile')
14
+ sh 'cd mocha && npm install && make clean && make'
15
+ sh 'cd chai && npm install && make clean && make'
16
+ end
17
+
18
+ task :copy do
19
+ sh 'git submodule update --init' unless File.exist?('mocha/Makefile') || File.exist?('chai/Makefile')
20
+ mkdir_p 'vendor/assets/javascripts'
21
+ mkdir_p 'vendor/assets/stylesheets'
22
+ cp 'mocha/mocha.js', 'vendor/assets/javascripts/'
23
+ cp 'mocha/mocha.css', 'vendor/assets/stylesheets/'
24
+ cp 'chai/chai.js', 'vendor/assets/javascripts/'
25
+ end
18
26
  end
19
27
 
20
28
  task :default => :spec
@@ -25,10 +25,6 @@ mocha.ui = function (name) {
25
25
 
26
26
  mocha.ui('bdd');
27
27
 
28
- // Disable leak detection by default. It doesn't seem to be reliable
29
- // with Konacha's iframe setup.
30
- mocha.ignoreLeaks();
31
-
32
28
  mocha.suite.beforeAll(function () {
33
29
  var contexts = parent.document.getElementsByClassName("test-context");
34
30
  for (var i = 0; i < contexts.length; ++i) {
@@ -17,7 +17,7 @@ the asset pipeline and engines.}
17
17
  gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
18
  gem.name = "konacha"
19
19
  gem.require_paths = ["lib"]
20
- gem.version = "2.5.1"
20
+ gem.version = "2.6.0"
21
21
  gem.license = "MIT"
22
22
 
23
23
  gem.add_dependency "railties", ">= 3.1", "< 5"
@@ -38,7 +38,7 @@
38
38
 
39
39
  require.relative = function (parent) {
40
40
  return function(p){
41
- if ('.' != p[0]) return require(p);
41
+ if ('.' != p.charAt(0)) return require(p);
42
42
 
43
43
  var path = parent.split('/')
44
44
  , segs = p.split('/');
@@ -63,7 +63,7 @@
63
63
  require.register("chai.js", function(module, exports, require){
64
64
  /*!
65
65
  * chai
66
- * Copyright(c) 2011-2012 Jake Luer <jake@alogicalparadox.com>
66
+ * Copyright(c) 2011-2013 Jake Luer <jake@alogicalparadox.com>
67
67
  * MIT Licensed
68
68
  */
69
69
 
@@ -74,7 +74,7 @@
74
74
  * Chai version
75
75
  */
76
76
 
77
- exports.version = '1.4.2';
77
+ exports.version = '1.5.0';
78
78
 
79
79
  /*!
80
80
  * Primary `Assertion` prototype
@@ -147,7 +147,7 @@
147
147
  /*!
148
148
  * chai
149
149
  * http://chaijs.com
150
- * Copyright(c) 2011-2012 Jake Luer <jake@alogicalparadox.com>
150
+ * Copyright(c) 2011-2013 Jake Luer <jake@alogicalparadox.com>
151
151
  * MIT Licensed
152
152
  */
153
153
 
@@ -194,6 +194,20 @@
194
194
 
195
195
  Assertion.includeStack = false;
196
196
 
197
+ /*!
198
+ * ### Assertion.showDiff
199
+ *
200
+ * User configurable property, influences whether or not
201
+ * the `showDiff` flag should be included in the thrown
202
+ * AssertionErrors. `false` will always be `false`; `true`
203
+ * will be true when the assertion has requested a diff
204
+ * be shown.
205
+ *
206
+ * @api public
207
+ */
208
+
209
+ Assertion.showDiff = true;
210
+
197
211
  Assertion.addProperty = function (name, fn) {
198
212
  util.addProperty(this.prototype, name, fn);
199
213
  };
@@ -231,6 +245,7 @@
231
245
  Assertion.prototype.assert = function (expr, msg, negateMsg, expected, _actual, showDiff) {
232
246
  var ok = util.test(this, arguments);
233
247
  if (true !== showDiff) showDiff = false;
248
+ if (true !== Assertion.showDiff) showDiff = false;
234
249
 
235
250
  if (!ok) {
236
251
  var msg = util.getMessage(this, arguments)
@@ -268,7 +283,7 @@
268
283
  /*!
269
284
  * chai
270
285
  * http://chaijs.com
271
- * Copyright(c) 2011-2012 Jake Luer <jake@alogicalparadox.com>
286
+ * Copyright(c) 2011-2013 Jake Luer <jake@alogicalparadox.com>
272
287
  * MIT Licensed
273
288
  */
274
289
 
@@ -352,7 +367,7 @@
352
367
  *
353
368
  * The `a` and `an` assertions are aliases that can be
354
369
  * used either as language chains or to assert a value's
355
- * type (as revealed by `Object.prototype.toString`).
370
+ * type.
356
371
  *
357
372
  * // typeof
358
373
  * expect('test').to.be.a('string');
@@ -370,15 +385,14 @@
370
385
  * @api public
371
386
  */
372
387
 
373
- function an(type, msg) {
388
+ function an (type, msg) {
374
389
  if (msg) flag(this, 'message', msg);
390
+ type = type.toLowerCase();
375
391
  var obj = flag(this, 'object')
376
- , klassStart = type.charAt(0).toUpperCase()
377
- , klass = klassStart + type.slice(1)
378
- , article = ~[ 'A', 'E', 'I', 'O', 'U' ].indexOf(klassStart) ? 'an ' : 'a ';
392
+ , article = ~[ 'a', 'e', 'i', 'o', 'u' ].indexOf(type.charAt(0)) ? 'an ' : 'a ';
379
393
 
380
394
  this.assert(
381
- '[object ' + klass + ']' === toString.call(obj)
395
+ type === _.type(obj)
382
396
  , 'expected #{this} to be ' + article + type
383
397
  , 'expected #{this} not to be ' + article + type
384
398
  );
@@ -663,12 +677,13 @@
663
677
  * expect([ 1, 2, 3 ]).to.eql([ 1, 2, 3 ]);
664
678
  *
665
679
  * @name eql
680
+ * @alias eqls
666
681
  * @param {Mixed} value
667
682
  * @param {String} message _optional_
668
683
  * @api public
669
684
  */
670
685
 
671
- Assertion.addMethod('eql', function (obj, msg) {
686
+ function assertEql(obj, msg) {
672
687
  if (msg) flag(this, 'message', msg);
673
688
  this.assert(
674
689
  _.eql(obj, flag(this, 'object'))
@@ -678,7 +693,10 @@
678
693
  , this._obj
679
694
  , true
680
695
  );
681
- });
696
+ }
697
+
698
+ Assertion.addMethod('eql', assertEql);
699
+ Assertion.addMethod('eqls', assertEql);
682
700
 
683
701
  /**
684
702
  * ### .above(value)
@@ -760,7 +778,7 @@
760
778
  this.assert(
761
779
  len >= n
762
780
  , 'expected #{this} to have a length at least #{exp} but got #{act}'
763
- , 'expected #{this} to not have a length below #{exp}'
781
+ , 'expected #{this} to have a length below #{exp}'
764
782
  , n
765
783
  , len
766
784
  );
@@ -856,7 +874,7 @@
856
874
  this.assert(
857
875
  len <= n
858
876
  , 'expected #{this} to have a length at most #{exp} but got #{act}'
859
- , 'expected #{this} to not have a length above #{exp}'
877
+ , 'expected #{this} to have a length above #{exp}'
860
878
  , n
861
879
  , len
862
880
  );
@@ -1301,35 +1319,50 @@
1301
1319
  if (desiredError) {
1302
1320
  this.assert(
1303
1321
  err === desiredError
1304
- , 'expected #{this} to throw ' + _.inspect(desiredError) + ' but ' + _.inspect(err) + ' was thrown'
1305
- , 'expected #{this} to not throw ' + _.inspect(desiredError)
1322
+ , 'expected #{this} to throw #{exp} but #{act} was thrown'
1323
+ , 'expected #{this} to not throw #{exp}'
1324
+ , desiredError
1325
+ , err
1306
1326
  );
1327
+
1307
1328
  return this;
1308
1329
  }
1309
1330
  // next, check constructor
1310
1331
  if (constructor) {
1311
1332
  this.assert(
1312
1333
  err instanceof constructor
1313
- , 'expected #{this} to throw ' + name + ' but ' + _.inspect(err) + ' was thrown'
1314
- , 'expected #{this} to not throw ' + name + ' but ' + _.inspect(err) + ' was thrown');
1334
+ , 'expected #{this} to throw #{exp} but #{act} was thrown'
1335
+ , 'expected #{this} to not throw #{exp} but #{act} was thrown'
1336
+ , name
1337
+ , err
1338
+ );
1339
+
1315
1340
  if (!errMsg) return this;
1316
1341
  }
1317
1342
  // next, check message
1318
- if (err.message && errMsg && errMsg instanceof RegExp) {
1343
+ var message = 'object' === _.type(err) && "message" in err
1344
+ ? err.message
1345
+ : '' + err;
1346
+
1347
+ if ((message != null) && errMsg && errMsg instanceof RegExp) {
1319
1348
  this.assert(
1320
- errMsg.exec(err.message)
1321
- , 'expected #{this} to throw error matching ' + errMsg + ' but got ' + _.inspect(err.message)
1322
- , 'expected #{this} to throw error not matching ' + errMsg
1349
+ errMsg.exec(message)
1350
+ , 'expected #{this} to throw error matching #{exp} but got #{act}'
1351
+ , 'expected #{this} to throw error not matching #{exp}'
1352
+ , errMsg
1353
+ , message
1323
1354
  );
1355
+
1324
1356
  return this;
1325
- } else if (err.message && errMsg && 'string' === typeof errMsg) {
1357
+ } else if ((message != null) && errMsg && 'string' === typeof errMsg) {
1326
1358
  this.assert(
1327
- ~err.message.indexOf(errMsg)
1359
+ ~message.indexOf(errMsg)
1328
1360
  , 'expected #{this} to throw error including #{exp} but got #{act}'
1329
1361
  , 'expected #{this} to throw error not including #{act}'
1330
1362
  , errMsg
1331
- , err.message
1363
+ , message
1332
1364
  );
1365
+
1333
1366
  return this;
1334
1367
  } else {
1335
1368
  thrown = true;
@@ -1337,16 +1370,23 @@
1337
1370
  }
1338
1371
  }
1339
1372
 
1340
- var expectedThrown = name ? name : desiredError ? _.inspect(desiredError) : 'an error';
1341
1373
  var actuallyGot = ''
1374
+ , expectedThrown = name !== null
1375
+ ? name
1376
+ : desiredError
1377
+ ? '#{exp}' //_.inspect(desiredError)
1378
+ : 'an error';
1379
+
1342
1380
  if (thrown) {
1343
- actuallyGot = ' but ' + _.inspect(thrownError) + ' was thrown'
1381
+ actuallyGot = ' but #{act} was thrown'
1344
1382
  }
1345
1383
 
1346
1384
  this.assert(
1347
1385
  thrown === true
1348
1386
  , 'expected #{this} to throw ' + expectedThrown + actuallyGot
1349
1387
  , 'expected #{this} to not throw ' + expectedThrown + actuallyGot
1388
+ , desiredError
1389
+ , thrownError
1350
1390
  );
1351
1391
  };
1352
1392
 
@@ -1379,7 +1419,7 @@
1379
1419
  if (msg) flag(this, 'message', msg);
1380
1420
  var obj = flag(this, 'object')
1381
1421
  , itself = flag(this, 'itself')
1382
- , context = ('function' === typeof obj && !itself)
1422
+ , context = ('function' === _.type(obj) && !itself)
1383
1423
  ? obj.prototype[method]
1384
1424
  : obj[method];
1385
1425
 
@@ -1428,8 +1468,8 @@
1428
1468
  var obj = flag(this, 'object');
1429
1469
  this.assert(
1430
1470
  matcher(obj)
1431
- , 'expected #{this} to satisfy ' + _.inspect(matcher)
1432
- , 'expected #{this} to not satisfy' + _.inspect(matcher)
1471
+ , 'expected #{this} to satisfy ' + _.objDisplay(matcher)
1472
+ , 'expected #{this} to not satisfy' + _.objDisplay(matcher)
1433
1473
  , this.negate ? false : true
1434
1474
  , matcher(obj)
1435
1475
  );
@@ -1466,7 +1506,7 @@
1466
1506
  require.register("chai/error.js", function(module, exports, require){
1467
1507
  /*!
1468
1508
  * chai
1469
- * Copyright(c) 2011-2012 Jake Luer <jake@alogicalparadox.com>
1509
+ * Copyright(c) 2011-2013 Jake Luer <jake@alogicalparadox.com>
1470
1510
  * MIT Licensed
1471
1511
  */
1472
1512
 
@@ -1530,7 +1570,7 @@
1530
1570
  require.register("chai/interface/assert.js", function(module, exports, require){
1531
1571
  /*!
1532
1572
  * chai
1533
- * Copyright(c) 2011-2012 Jake Luer <jake@alogicalparadox.com>
1573
+ * Copyright(c) 2011-2013 Jake Luer <jake@alogicalparadox.com>
1534
1574
  * MIT Licensed
1535
1575
  */
1536
1576
 
@@ -2520,7 +2560,7 @@
2520
2560
  require.register("chai/interface/expect.js", function(module, exports, require){
2521
2561
  /*!
2522
2562
  * chai
2523
- * Copyright(c) 2011-2012 Jake Luer <jake@alogicalparadox.com>
2563
+ * Copyright(c) 2011-2013 Jake Luer <jake@alogicalparadox.com>
2524
2564
  * MIT Licensed
2525
2565
  */
2526
2566
 
@@ -2536,7 +2576,7 @@
2536
2576
  require.register("chai/interface/should.js", function(module, exports, require){
2537
2577
  /*!
2538
2578
  * chai
2539
- * Copyright(c) 2011-2012 Jake Luer <jake@alogicalparadox.com>
2579
+ * Copyright(c) 2011-2013 Jake Luer <jake@alogicalparadox.com>
2540
2580
  * MIT Licensed
2541
2581
  */
2542
2582
 
@@ -2616,7 +2656,7 @@
2616
2656
  require.register("chai/utils/addChainableMethod.js", function(module, exports, require){
2617
2657
  /*!
2618
2658
  * Chai - addChainingMethod utility
2619
- * Copyright(c) 2012 Jake Luer <jake@alogicalparadox.com>
2659
+ * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
2620
2660
  * MIT Licensed
2621
2661
  */
2622
2662
 
@@ -2626,6 +2666,18 @@
2626
2666
 
2627
2667
  var transferFlags = require('./transferFlags');
2628
2668
 
2669
+ /*!
2670
+ * Module variables
2671
+ */
2672
+
2673
+ // Check whether `__proto__` is supported
2674
+ var hasProtoSupport = '__proto__' in Object;
2675
+
2676
+ // Without `__proto__` support, this module will need to add properties to a function.
2677
+ // However, some Function.prototype methods cannot be overwritten,
2678
+ // and there seems no easy cross-platform way to detect them (@see chaijs/chai/issues/69).
2679
+ var excludeNames = /^(?:length|name|arguments|caller)$/;
2680
+
2629
2681
  /**
2630
2682
  * ### addChainableMethod (ctx, name, method, chainingBehavior)
2631
2683
  *
@@ -2667,16 +2719,20 @@
2667
2719
  return result === undefined ? this : result;
2668
2720
  };
2669
2721
 
2670
- // Re-enumerate every time to better accomodate plugins.
2671
- var asserterNames = Object.getOwnPropertyNames(ctx);
2672
- asserterNames.forEach(function (asserterName) {
2673
- var pd = Object.getOwnPropertyDescriptor(ctx, asserterName)
2674
- , functionProtoPD = Object.getOwnPropertyDescriptor(Function.prototype, asserterName);
2675
- // Avoid trying to overwrite things that we can't, like `length` and `arguments`.
2676
- if (functionProtoPD && !functionProtoPD.configurable) return;
2677
- if (asserterName === 'arguments') return; // @see chaijs/chai/issues/69
2678
- Object.defineProperty(assert, asserterName, pd);
2679
- });
2722
+ // Use `__proto__` if available
2723
+ if (hasProtoSupport) {
2724
+ assert.__proto__ = this;
2725
+ }
2726
+ // Otherwise, redefine all properties (slow!)
2727
+ else {
2728
+ var asserterNames = Object.getOwnPropertyNames(ctx);
2729
+ asserterNames.forEach(function (asserterName) {
2730
+ if (!excludeNames.test(asserterName)) {
2731
+ var pd = Object.getOwnPropertyDescriptor(ctx, asserterName);
2732
+ Object.defineProperty(assert, asserterName, pd);
2733
+ }
2734
+ });
2735
+ }
2680
2736
 
2681
2737
  transferFlags(this, assert);
2682
2738
  return assert;
@@ -2690,7 +2746,7 @@
2690
2746
  require.register("chai/utils/addMethod.js", function(module, exports, require){
2691
2747
  /*!
2692
2748
  * Chai - addMethod utility
2693
- * Copyright(c) 2012 Jake Luer <jake@alogicalparadox.com>
2749
+ * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
2694
2750
  * MIT Licensed
2695
2751
  */
2696
2752
 
@@ -2731,7 +2787,7 @@
2731
2787
  require.register("chai/utils/addProperty.js", function(module, exports, require){
2732
2788
  /*!
2733
2789
  * Chai - addProperty utility
2734
- * Copyright(c) 2012 Jake Luer <jake@alogicalparadox.com>
2790
+ * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
2735
2791
  * MIT Licensed
2736
2792
  */
2737
2793
 
@@ -2778,6 +2834,8 @@
2778
2834
 
2779
2835
  module.exports = _deepEqual;
2780
2836
 
2837
+ var getEnumerableProperties = require('./getEnumerableProperties');
2838
+
2781
2839
  // for the browser
2782
2840
  var Buffer;
2783
2841
  try {
@@ -2862,8 +2920,8 @@
2862
2920
  return _deepEqual(a, b, memos);
2863
2921
  }
2864
2922
  try {
2865
- var ka = Object.keys(a),
2866
- kb = Object.keys(b),
2923
+ var ka = getEnumerableProperties(a),
2924
+ kb = getEnumerableProperties(b),
2867
2925
  key;
2868
2926
  } catch (e) {//happens when one is a string literal and the other isn't
2869
2927
  return false;
@@ -2901,7 +2959,7 @@
2901
2959
  require.register("chai/utils/flag.js", function(module, exports, require){
2902
2960
  /*!
2903
2961
  * Chai - flag utility
2904
- * Copyright(c) 2012 Jake Luer <jake@alogicalparadox.com>
2962
+ * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
2905
2963
  * MIT Licensed
2906
2964
  */
2907
2965
 
@@ -2937,7 +2995,7 @@
2937
2995
  require.register("chai/utils/getActual.js", function(module, exports, require){
2938
2996
  /*!
2939
2997
  * Chai - getActual utility
2940
- * Copyright(c) 2012 Jake Luer <jake@alogicalparadox.com>
2998
+ * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
2941
2999
  * MIT Licensed
2942
3000
  */
2943
3001
 
@@ -2957,10 +3015,39 @@
2957
3015
 
2958
3016
  }); // module: chai/utils/getActual.js
2959
3017
 
3018
+ require.register("chai/utils/getEnumerableProperties.js", function(module, exports, require){
3019
+ /*!
3020
+ * Chai - getEnumerableProperties utility
3021
+ * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
3022
+ * MIT Licensed
3023
+ */
3024
+
3025
+ /**
3026
+ * ### .getEnumerableProperties(object)
3027
+ *
3028
+ * This allows the retrieval of enumerable property names of an object,
3029
+ * inherited or not.
3030
+ *
3031
+ * @param {Object} object
3032
+ * @returns {Array}
3033
+ * @name getEnumerableProperties
3034
+ * @api public
3035
+ */
3036
+
3037
+ module.exports = function getEnumerableProperties(object) {
3038
+ var result = [];
3039
+ for (var name in object) {
3040
+ result.push(name);
3041
+ }
3042
+ return result;
3043
+ };
3044
+
3045
+ }); // module: chai/utils/getEnumerableProperties.js
3046
+
2960
3047
  require.register("chai/utils/getMessage.js", function(module, exports, require){
2961
3048
  /*!
2962
3049
  * Chai - message composition utility
2963
- * Copyright(c) 2012 Jake Luer <jake@alogicalparadox.com>
3050
+ * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
2964
3051
  * MIT Licensed
2965
3052
  */
2966
3053
 
@@ -3013,7 +3100,7 @@
3013
3100
  require.register("chai/utils/getName.js", function(module, exports, require){
3014
3101
  /*!
3015
3102
  * Chai - getName utility
3016
- * Copyright(c) 2012 Jake Luer <jake@alogicalparadox.com>
3103
+ * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
3017
3104
  * MIT Licensed
3018
3105
  */
3019
3106
 
@@ -3037,7 +3124,7 @@
3037
3124
  require.register("chai/utils/getPathValue.js", function(module, exports, require){
3038
3125
  /*!
3039
3126
  * Chai - getPathValue utility
3040
- * Copyright(c) 2012 Jake Luer <jake@alogicalparadox.com>
3127
+ * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
3041
3128
  * @see https://github.com/logicalparadox/filtr
3042
3129
  * MIT Licensed
3043
3130
  */
@@ -3140,6 +3227,45 @@
3140
3227
 
3141
3228
  }); // module: chai/utils/getPathValue.js
3142
3229
 
3230
+ require.register("chai/utils/getProperties.js", function(module, exports, require){
3231
+ /*!
3232
+ * Chai - getProperties utility
3233
+ * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
3234
+ * MIT Licensed
3235
+ */
3236
+
3237
+ /**
3238
+ * ### .getProperties(object)
3239
+ *
3240
+ * This allows the retrieval of property names of an object, enumerable or not,
3241
+ * inherited or not.
3242
+ *
3243
+ * @param {Object} object
3244
+ * @returns {Array}
3245
+ * @name getProperties
3246
+ * @api public
3247
+ */
3248
+
3249
+ module.exports = function getProperties(object) {
3250
+ var result = Object.getOwnPropertyNames(subject);
3251
+
3252
+ function addProperty(property) {
3253
+ if (result.indexOf(property) === -1) {
3254
+ result.push(property);
3255
+ }
3256
+ }
3257
+
3258
+ var proto = Object.getPrototypeOf(subject);
3259
+ while (proto !== null) {
3260
+ Object.getOwnPropertyNames(proto).forEach(addProperty);
3261
+ proto = Object.getPrototypeOf(proto);
3262
+ }
3263
+
3264
+ return result;
3265
+ };
3266
+
3267
+ }); // module: chai/utils/getProperties.js
3268
+
3143
3269
  require.register("chai/utils/index.js", function(module, exports, require){
3144
3270
  /*!
3145
3271
  * chai
@@ -3159,6 +3285,12 @@
3159
3285
 
3160
3286
  exports.test = require('./test');
3161
3287
 
3288
+ /*!
3289
+ * type utility
3290
+ */
3291
+
3292
+ exports.type = require('./type');
3293
+
3162
3294
  /*!
3163
3295
  * message utility
3164
3296
  */
@@ -3251,6 +3383,8 @@
3251
3383
  // https://github.com/joyent/node/blob/f8c335d0caf47f16d31413f89aa28eda3878e3aa/lib/util.js
3252
3384
 
3253
3385
  var getName = require('./getName');
3386
+ var getProperties = require('./getProperties');
3387
+ var getEnumerableProperties = require('./getEnumerableProperties');
3254
3388
 
3255
3389
  module.exports = inspect;
3256
3390
 
@@ -3291,7 +3425,7 @@
3291
3425
  return html;
3292
3426
  }
3293
3427
  };
3294
-
3428
+
3295
3429
  // Returns true if object is a DOM element.
3296
3430
  var isDOMElement = function (object) {
3297
3431
  if (typeof HTMLElement === 'object') {
@@ -3327,8 +3461,8 @@
3327
3461
  }
3328
3462
 
3329
3463
  // Look up the keys of the object.
3330
- var visibleKeys = Object.keys(value);
3331
- var keys = ctx.showHidden ? Object.getOwnPropertyNames(value) : visibleKeys;
3464
+ var visibleKeys = getEnumerableProperties(value);
3465
+ var keys = ctx.showHidden ? getProperties(value) : visibleKeys;
3332
3466
 
3333
3467
  // Some type of object without properties can be shortcutted.
3334
3468
  // In IE, errors have a single `stack` property, or if they are vanilla `Error`,
@@ -3567,7 +3701,7 @@
3567
3701
  require.register("chai/utils/objDisplay.js", function(module, exports, require){
3568
3702
  /*!
3569
3703
  * Chai - flag utility
3570
- * Copyright(c) 2012 Jake Luer <jake@alogicalparadox.com>
3704
+ * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
3571
3705
  * MIT Licensed
3572
3706
  */
3573
3707
 
@@ -3594,7 +3728,11 @@
3594
3728
  , type = Object.prototype.toString.call(obj);
3595
3729
 
3596
3730
  if (str.length >= 40) {
3597
- if (type === '[object Array]') {
3731
+ if (type === '[object Function]') {
3732
+ return !obj.name || obj.name === ''
3733
+ ? '[Function]'
3734
+ : '[Function: ' + obj.name + ']';
3735
+ } else if (type === '[object Array]') {
3598
3736
  return '[ Array(' + obj.length + ') ]';
3599
3737
  } else if (type === '[object Object]') {
3600
3738
  var keys = Object.keys(obj)
@@ -3615,7 +3753,7 @@
3615
3753
  require.register("chai/utils/overwriteMethod.js", function(module, exports, require){
3616
3754
  /*!
3617
3755
  * Chai - overwriteMethod utility
3618
- * Copyright(c) 2012 Jake Luer <jake@alogicalparadox.com>
3756
+ * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
3619
3757
  * MIT Licensed
3620
3758
  */
3621
3759
 
@@ -3670,7 +3808,7 @@
3670
3808
  require.register("chai/utils/overwriteProperty.js", function(module, exports, require){
3671
3809
  /*!
3672
3810
  * Chai - overwriteProperty utility
3673
- * Copyright(c) 2012 Jake Luer <jake@alogicalparadox.com>
3811
+ * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
3674
3812
  * MIT Licensed
3675
3813
  */
3676
3814
 
@@ -3728,7 +3866,7 @@
3728
3866
  require.register("chai/utils/test.js", function(module, exports, require){
3729
3867
  /*!
3730
3868
  * Chai - test utility
3731
- * Copyright(c) 2012 Jake Luer <jake@alogicalparadox.com>
3869
+ * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
3732
3870
  * MIT Licensed
3733
3871
  */
3734
3872
 
@@ -3758,7 +3896,7 @@
3758
3896
  require.register("chai/utils/transferFlags.js", function(module, exports, require){
3759
3897
  /*!
3760
3898
  * Chai - transferFlags utility
3761
- * Copyright(c) 2012 Jake Luer <jake@alogicalparadox.com>
3899
+ * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
3762
3900
  * MIT Licensed
3763
3901
  */
3764
3902
 
@@ -3803,6 +3941,55 @@
3803
3941
 
3804
3942
  }); // module: chai/utils/transferFlags.js
3805
3943
 
3944
+ require.register("chai/utils/type.js", function(module, exports, require){
3945
+ /*!
3946
+ * Chai - type utility
3947
+ * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
3948
+ * MIT Licensed
3949
+ */
3950
+
3951
+ /*!
3952
+ * Detectable javascript natives
3953
+ */
3954
+
3955
+ var natives = {
3956
+ '[object Arguments]': 'arguments'
3957
+ , '[object Array]': 'array'
3958
+ , '[object Date]': 'date'
3959
+ , '[object Function]': 'function'
3960
+ , '[object Number]': 'number'
3961
+ , '[object RegExp]': 'regexp'
3962
+ , '[object String]': 'string'
3963
+ };
3964
+
3965
+ /**
3966
+ * ### type(object)
3967
+ *
3968
+ * Better implementation of `typeof` detection that can
3969
+ * be used cross-browser. Handles the inconsistencies of
3970
+ * Array, `null`, and `undefined` detection.
3971
+ *
3972
+ * utils.type({}) // 'object'
3973
+ * utils.type(null) // `null'
3974
+ * utils.type(undefined) // `undefined`
3975
+ * utils.type([]) // `array`
3976
+ *
3977
+ * @param {Mixed} object to detect type of
3978
+ * @name type
3979
+ * @api private
3980
+ */
3981
+
3982
+ module.exports = function (obj) {
3983
+ var str = Object.prototype.toString.call(obj);
3984
+ if (natives[str]) return natives[str];
3985
+ if (obj === null) return 'null';
3986
+ if (obj === undefined) return 'undefined';
3987
+ if (obj === Object(obj)) return 'object';
3988
+ return typeof obj;
3989
+ };
3990
+
3991
+ }); // module: chai/utils/type.js
3992
+
3806
3993
  require.alias("./chai.js", "chai");
3807
3994
 
3808
3995
  return require('chai');
@@ -1,6 +1,5 @@
1
1
  ;(function(){
2
2
 
3
-
4
3
  // CommonJS require()
5
4
 
6
5
  function require(p){
@@ -32,11 +31,11 @@ require.register = function (path, fn){
32
31
  require.relative = function (parent) {
33
32
  return function(p){
34
33
  if ('.' != p.charAt(0)) return require(p);
35
-
34
+
36
35
  var path = parent.split('/')
37
36
  , segs = p.split('/');
38
37
  path.pop();
39
-
38
+
40
39
  for (var i = 0; i < segs.length; i++) {
41
40
  var seg = segs[i];
42
41
  if ('..' == seg) path.pop();
@@ -52,9 +51,9 @@ require.register("browser/debug.js", function(module, exports, require){
52
51
 
53
52
  module.exports = function(type){
54
53
  return function(){
55
-
56
54
  }
57
55
  };
56
+
58
57
  }); // module: browser/debug.js
59
58
 
60
59
  require.register("browser/diff.js", function(module, exports, require){
@@ -805,7 +804,6 @@ Hook.prototype.error = function(err){
805
804
  this._error = err;
806
805
  };
807
806
 
808
-
809
807
  }); // module: hook.js
810
808
 
811
809
  require.register("interfaces/bdd.js", function(module, exports, require){
@@ -819,7 +817,7 @@ var Suite = require('../suite')
819
817
 
820
818
  /**
821
819
  * BDD-style interface:
822
- *
820
+ *
823
821
  * describe('Array', function(){
824
822
  * describe('#indexOf()', function(){
825
823
  * it('should return -1 when not present', function(){
@@ -831,7 +829,7 @@ var Suite = require('../suite')
831
829
  * });
832
830
  * });
833
831
  * });
834
- *
832
+ *
835
833
  */
836
834
 
837
835
  module.exports = function(suite){
@@ -876,7 +874,7 @@ module.exports = function(suite){
876
874
  * and callback `fn` containing nested suites
877
875
  * and/or tests.
878
876
  */
879
-
877
+
880
878
  context.describe = context.context = function(title, fn){
881
879
  var suite = Suite.create(suites[0], title);
882
880
  suites.unshift(suite);
@@ -956,19 +954,19 @@ var Suite = require('../suite')
956
954
 
957
955
  /**
958
956
  * TDD-style interface:
959
- *
957
+ *
960
958
  * exports.Array = {
961
959
  * '#indexOf()': {
962
960
  * 'should return -1 when the value is not present': function(){
963
- *
961
+ *
964
962
  * },
965
963
  *
966
964
  * 'should return the correct index when the value is present': function(){
967
- *
965
+ *
968
966
  * }
969
967
  * }
970
968
  * };
971
- *
969
+ *
972
970
  */
973
971
 
974
972
  module.exports = function(suite){
@@ -1006,6 +1004,7 @@ module.exports = function(suite){
1006
1004
  }
1007
1005
  }
1008
1006
  };
1007
+
1009
1008
  }); // module: interfaces/exports.js
1010
1009
 
1011
1010
  require.register("interfaces/index.js", function(module, exports, require){
@@ -1028,27 +1027,27 @@ var Suite = require('../suite')
1028
1027
 
1029
1028
  /**
1030
1029
  * QUnit-style interface:
1031
- *
1030
+ *
1032
1031
  * suite('Array');
1033
- *
1032
+ *
1034
1033
  * test('#length', function(){
1035
1034
  * var arr = [1,2,3];
1036
1035
  * ok(arr.length == 3);
1037
1036
  * });
1038
- *
1037
+ *
1039
1038
  * test('#indexOf()', function(){
1040
1039
  * var arr = [1,2,3];
1041
1040
  * ok(arr.indexOf(1) == 0);
1042
1041
  * ok(arr.indexOf(2) == 1);
1043
1042
  * ok(arr.indexOf(3) == 2);
1044
1043
  * });
1045
- *
1044
+ *
1046
1045
  * suite('String');
1047
- *
1046
+ *
1048
1047
  * test('#length', function(){
1049
1048
  * ok('foo'.length == 3);
1050
1049
  * });
1051
- *
1050
+ *
1052
1051
  */
1053
1052
 
1054
1053
  module.exports = function(suite){
@@ -1091,7 +1090,7 @@ module.exports = function(suite){
1091
1090
  /**
1092
1091
  * Describe a "suite" with the given `title`.
1093
1092
  */
1094
-
1093
+
1095
1094
  context.suite = function(title){
1096
1095
  if (suites.length > 1) suites.shift();
1097
1096
  var suite = Suite.create(suites[0], title);
@@ -1129,7 +1128,7 @@ var Suite = require('../suite')
1129
1128
  * suiteSetup(function(){
1130
1129
  *
1131
1130
  * });
1132
- *
1131
+ *
1133
1132
  * test('should return -1 when not present', function(){
1134
1133
  *
1135
1134
  * });
@@ -1549,7 +1548,7 @@ Mocha.prototype.run = function(fn){
1549
1548
  var options = this.options;
1550
1549
  var runner = new exports.Runner(suite);
1551
1550
  var reporter = new this._reporter(runner);
1552
- runner.ignoreLeaks = options.ignoreLeaks;
1551
+ runner.ignoreLeaks = false !== options.ignoreLeaks;
1553
1552
  runner.asyncOnly = options.asyncOnly;
1554
1553
  if (options.grep) runner.grep(options.grep, options.invert);
1555
1554
  if (options.globals) runner.globals(options.globals);
@@ -1710,7 +1709,7 @@ exports.colors = {
1710
1709
  /**
1711
1710
  * Default symbol map.
1712
1711
  */
1713
-
1712
+
1714
1713
  exports.symbols = {
1715
1714
  ok: '✓',
1716
1715
  err: '✖',
@@ -2334,8 +2333,6 @@ function HTML(runner, root) {
2334
2333
  });
2335
2334
 
2336
2335
  runner.on('test end', function(test){
2337
- window.scrollTo(0, document.body.scrollHeight);
2338
-
2339
2336
  // TODO: add to stats
2340
2337
  var percent = stats.tests / this.total * 100 | 0;
2341
2338
  if (progress) progress.update(percent).draw(ctx);
@@ -3080,7 +3077,7 @@ exports = module.exports = Min;
3080
3077
 
3081
3078
  function Min(runner) {
3082
3079
  Base.call(this, runner);
3083
-
3080
+
3084
3081
  runner.on('start', function(){
3085
3082
  // clear screen
3086
3083
  process.stdout.write('\u001b[2J');
@@ -3100,10 +3097,10 @@ F.prototype = Base.prototype;
3100
3097
  Min.prototype = new F;
3101
3098
  Min.prototype.constructor = Min;
3102
3099
 
3100
+
3103
3101
  }); // module: reporters/min.js
3104
3102
 
3105
3103
  require.register("reporters/nyan.js", function(module, exports, require){
3106
-
3107
3104
  /**
3108
3105
  * Module dependencies.
3109
3106
  */
@@ -3249,44 +3246,39 @@ NyanCat.prototype.drawRainbow = function(){
3249
3246
  NyanCat.prototype.drawNyanCat = function(status) {
3250
3247
  var self = this;
3251
3248
  var startWidth = this.scoreboardWidth + this.trajectories[0].length;
3252
-
3253
- [0, 1, 2, 3].forEach(function(index) {
3254
- write('\u001b[' + startWidth + 'C');
3255
-
3256
- switch (index) {
3257
- case 0:
3258
- write('_,------,');
3259
- write('\n');
3260
- break;
3261
- case 1:
3262
- var padding = self.tick ? ' ' : ' ';
3263
- write('_|' + padding + '/\\_/\\ ');
3264
- write('\n');
3265
- break;
3266
- case 2:
3267
- var padding = self.tick ? '_' : '__';
3268
- var tail = self.tick ? '~' : '^';
3269
- var face;
3270
- switch (status) {
3271
- case 'pass':
3272
- face = '( ^ .^)';
3273
- break;
3274
- case 'fail':
3275
- face = '( o .o)';
3276
- break;
3277
- default:
3278
- face = '( - .-)';
3279
- }
3280
- write(tail + '|' + padding + face + ' ');
3281
- write('\n');
3282
- break;
3283
- case 3:
3284
- var padding = self.tick ? ' ' : ' ';
3285
- write(padding + '"" "" ');
3286
- write('\n');
3287
- break;
3288
- }
3289
- });
3249
+ var color = '\u001b[' + startWidth + 'C';
3250
+ var padding = '';
3251
+
3252
+ write(color);
3253
+ write('_,------,');
3254
+ write('\n');
3255
+
3256
+ write(color);
3257
+ padding = self.tick ? ' ' : ' ';
3258
+ write('_|' + padding + '/\\_/\\ ');
3259
+ write('\n');
3260
+
3261
+ write(color);
3262
+ padding = self.tick ? '_' : '__';
3263
+ var tail = self.tick ? '~' : '^';
3264
+ var face;
3265
+ switch (status) {
3266
+ case 'pass':
3267
+ face = '( ^ .^)';
3268
+ break;
3269
+ case 'fail':
3270
+ face = '( o .o)';
3271
+ break;
3272
+ default:
3273
+ face = '( - .-)';
3274
+ }
3275
+ write(tail + '|' + padding + face + ' ');
3276
+ write('\n');
3277
+
3278
+ write(color);
3279
+ padding = self.tick ? ' ' : ' ';
3280
+ write(padding + '"" "" ');
3281
+ write('\n');
3290
3282
 
3291
3283
  this.cursorUp(this.numberOfLines);
3292
3284
  };
@@ -3746,7 +3738,7 @@ function XUnit(runner) {
3746
3738
  runner.on('pass', function(test){
3747
3739
  tests.push(test);
3748
3740
  });
3749
-
3741
+
3750
3742
  runner.on('fail', function(test){
3751
3743
  tests.push(test);
3752
3744
  });
@@ -3763,7 +3755,7 @@ function XUnit(runner) {
3763
3755
  }, false));
3764
3756
 
3765
3757
  tests.forEach(test);
3766
- console.log('</testsuite>');
3758
+ console.log('</testsuite>');
3767
3759
  });
3768
3760
  }
3769
3761
 
@@ -4065,8 +4057,7 @@ var EventEmitter = require('browser/events').EventEmitter
4065
4057
  , Test = require('./test')
4066
4058
  , utils = require('./utils')
4067
4059
  , filter = utils.filter
4068
- , keys = utils.keys
4069
- , noop = function(){};
4060
+ , keys = utils.keys;
4070
4061
 
4071
4062
  /**
4072
4063
  * Non-enumerable globals.
@@ -4118,6 +4109,15 @@ function Runner(suite) {
4118
4109
  this.globals(this.globalProps().concat(['errno']));
4119
4110
  }
4120
4111
 
4112
+ /**
4113
+ * Wrapper for setImmediate, process.nextTick, or browser polyfill.
4114
+ *
4115
+ * @param {Function} fn
4116
+ * @api private
4117
+ */
4118
+
4119
+ Runner.immediately = global.setImmediate || process.nextTick;
4120
+
4121
4121
  /**
4122
4122
  * Inherit from `EventEmitter.prototype`.
4123
4123
  */
@@ -4246,7 +4246,7 @@ Runner.prototype.fail = function(test, err){
4246
4246
  if ('string' == typeof err) {
4247
4247
  err = new Error('the string "' + err + '" was thrown, throw an Error :)');
4248
4248
  }
4249
-
4249
+
4250
4250
  this.emit('fail', test, err);
4251
4251
  };
4252
4252
 
@@ -4303,7 +4303,7 @@ Runner.prototype.hook = function(name, fn){
4303
4303
  });
4304
4304
  }
4305
4305
 
4306
- process.nextTick(function(){
4306
+ Runner.immediately(function(){
4307
4307
  next(0);
4308
4308
  });
4309
4309
  };
@@ -4546,14 +4546,16 @@ Runner.prototype.run = function(fn){
4546
4546
  var self = this
4547
4547
  , fn = fn || function(){};
4548
4548
 
4549
+ function uncaught(err){
4550
+ self.uncaught(err);
4551
+ }
4552
+
4549
4553
  debug('start');
4550
4554
 
4551
4555
  // callback
4552
4556
  this.on('end', function(){
4553
4557
  debug('end');
4554
- process.removeListener('uncaughtException', function(err){
4555
- self.uncaught(err);
4556
- });
4558
+ process.removeListener('uncaughtException', uncaught);
4557
4559
  fn(self.failures);
4558
4560
  });
4559
4561
 
@@ -4565,9 +4567,7 @@ Runner.prototype.run = function(fn){
4565
4567
  });
4566
4568
 
4567
4569
  // uncaught exception
4568
- process.on('uncaughtException', function(err){
4569
- self.uncaught(err);
4570
- });
4570
+ process.on('uncaughtException', uncaught);
4571
4571
 
4572
4572
  return this;
4573
4573
  };
@@ -5005,7 +5005,7 @@ exports.indexOf = function(arr, obj, start){
5005
5005
 
5006
5006
  /**
5007
5007
  * Array#reduce (<=IE8)
5008
- *
5008
+ *
5009
5009
  * @param {Array} array
5010
5010
  * @param {Function} fn
5011
5011
  * @param {Object} initial value
@@ -5238,34 +5238,6 @@ process.exit = function(status){};
5238
5238
  process.stdout = {};
5239
5239
  global = window;
5240
5240
 
5241
- /**
5242
- * next tick implementation.
5243
- */
5244
-
5245
- process.nextTick = (function(){
5246
- // postMessage behaves badly on IE8
5247
- if (window.ActiveXObject || !window.postMessage) {
5248
- return function(fn){ fn() };
5249
- }
5250
-
5251
- // based on setZeroTimeout by David Baron
5252
- // - http://dbaron.org/log/20100309-faster-timeouts
5253
- var timeouts = []
5254
- , name = 'mocha-zero-timeout'
5255
-
5256
- window.addEventListener('message', function(e){
5257
- if (e.source == window && e.data == name) {
5258
- if (e.stopPropagation) e.stopPropagation();
5259
- if (timeouts.length) timeouts.shift()();
5260
- }
5261
- }, true);
5262
-
5263
- return function(fn){
5264
- timeouts.push(fn);
5265
- window.postMessage(name, '*');
5266
- }
5267
- })();
5268
-
5269
5241
  /**
5270
5242
  * Remove uncaughtException listener.
5271
5243
  */
@@ -5298,6 +5270,32 @@ process.on = function(e, fn){
5298
5270
  var Mocha = window.Mocha = require('mocha'),
5299
5271
  mocha = window.mocha = new Mocha({ reporter: 'html' });
5300
5272
 
5273
+ var immediateQueue = []
5274
+ , immediateTimeout;
5275
+
5276
+ function timeslice() {
5277
+ var immediateStart = new Date().getTime();
5278
+ while (immediateQueue.length && (new Date().getTime() - immediateStart) < 100) {
5279
+ immediateQueue.shift()();
5280
+ }
5281
+ if (immediateQueue.length) {
5282
+ immediateTimeout = setTimeout(timeslice, 0);
5283
+ } else {
5284
+ immediateTimeout = null;
5285
+ }
5286
+ }
5287
+
5288
+ /**
5289
+ * High-performance override of Runner.immediately.
5290
+ */
5291
+
5292
+ Mocha.Runner.immediately = function(callback) {
5293
+ immediateQueue.push(callback);
5294
+ if (!immediateTimeout) {
5295
+ immediateTimeout = setTimeout(timeslice, 0);
5296
+ }
5297
+ };
5298
+
5301
5299
  /**
5302
5300
  * Override ui to ensure that the ui functions are initialized.
5303
5301
  * Normally this would happen in Mocha.prototype.loadFiles.
@@ -224,8 +224,23 @@ body {
224
224
  padding-top: 11px;
225
225
  }
226
226
 
227
+ #mocha-stats canvas {
228
+ width: 40px;
229
+ height: 40px;
230
+ }
231
+
227
232
  code .comment { color: #ddd }
228
233
  code .init { color: #2F6FAD }
229
234
  code .string { color: #5890AD }
230
235
  code .keyword { color: #8A6343 }
231
236
  code .number { color: #2F6FAD }
237
+
238
+ @media screen and (max-device-width: 480px) {
239
+ body {
240
+ padding: 60px 0px;
241
+ }
242
+
243
+ #stats {
244
+ position: absolute;
245
+ }
246
+ }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: konacha
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.1
4
+ version: 2.6.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-11 00:00:00.000000000 Z
12
+ date: 2013-04-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: railties
@@ -326,21 +326,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
326
326
  - - ! '>='
327
327
  - !ruby/object:Gem::Version
328
328
  version: '0'
329
- segments:
330
- - 0
331
- hash: -79528298761712315
332
329
  required_rubygems_version: !ruby/object:Gem::Requirement
333
330
  none: false
334
331
  requirements:
335
332
  - - ! '>='
336
333
  - !ruby/object:Gem::Version
337
334
  version: '0'
338
- segments:
339
- - 0
340
- hash: -79528298761712315
341
335
  requirements: []
342
336
  rubyforge_project:
343
- rubygems_version: 1.8.24
337
+ rubygems_version: 1.8.23
344
338
  signing_key:
345
339
  specification_version: 3
346
340
  summary: Unit-test your Rails JavaScript with the mocha test framework and chai assertion