konacha 2.5.1 → 2.6.0

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/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