sproutcore 1.11.0.rc1 → 1.11.0.rc2
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.
- checksums.yaml +8 -8
- data/VERSION.yml +1 -1
- data/lib/frameworks/sproutcore/CHANGELOG.md +93 -65
- data/lib/frameworks/sproutcore/apps/showcase/controllers/source_tree_controller.js +17 -7
- data/lib/frameworks/sproutcore/apps/showcase/resources/main_page.js +22 -2
- data/lib/frameworks/sproutcore/apps/showcase/resources/stylesheet.css +14 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/views_page.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/ajax/system/request.js +20 -8
- data/lib/frameworks/sproutcore/frameworks/ajax/system/websocket.js +58 -43
- data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/action_support.js +192 -35
- data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/delegate_support.js +7 -3
- data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/responder_context.js +27 -7
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/browser.js +20 -63
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/color.js +16 -7
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/event.js +279 -159
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/render_context.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/root_responder.js +21 -10
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/mixins/action_support.js +32 -28
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/targetForAction.js +107 -90
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/touch.js +33 -25
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/touch.js +23 -15
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/animation.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/layout.js +12 -6
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/layout_style.js +55 -33
- data/lib/frameworks/sproutcore/frameworks/datastore/system/store.js +7 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/methods.js +228 -72
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/touch.js +54 -100
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/ui.js +15 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/button.js +57 -45
- data/lib/frameworks/sproutcore/frameworks/desktop/views/collection.js +9 -16
- data/lib/frameworks/sproutcore/frameworks/desktop/views/scroll_view.js +111 -44
- data/lib/frameworks/sproutcore/frameworks/desktop/views/segmented.js +2 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/system/module.js +51 -5
- data/lib/frameworks/sproutcore/frameworks/runtime/core.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/runtime/mixins/observable.js +13 -10
- data/lib/frameworks/sproutcore/frameworks/runtime/system/index_set.js +2 -1
- data/lib/frameworks/sproutcore/frameworks/runtime/system/object.js +28 -9
- data/lib/frameworks/sproutcore/frameworks/runtime/system/set.js +7 -5
- data/lib/frameworks/sproutcore/frameworks/statechart/ext/function.js +51 -46
- data/lib/frameworks/sproutcore/frameworks/statechart/system/state.js +8 -5
- data/lib/frameworks/sproutcore/frameworks/statechart/system/statechart.js +12 -3
- metadata +2 -2
@@ -39,7 +39,7 @@ window.SproutCore = window.SproutCore || SC;
|
|
39
39
|
// rest of the methods go into the mixin defined below.
|
40
40
|
|
41
41
|
/**
|
42
|
-
@version 1.11.0.
|
42
|
+
@version 1.11.0.rc2
|
43
43
|
@namespace
|
44
44
|
|
45
45
|
All SproutCore methods and functions are defined
|
@@ -56,7 +56,7 @@ window.SproutCore = window.SproutCore || SC;
|
|
56
56
|
*/
|
57
57
|
SC = window.SC; // This is dumb but necessary for jsdoc to get it right
|
58
58
|
|
59
|
-
SC.VERSION = '1.11.0.
|
59
|
+
SC.VERSION = '1.11.0.rc2';
|
60
60
|
|
61
61
|
/**
|
62
62
|
@private
|
@@ -274,6 +274,7 @@ SC.Observable = /** @scope SC.Observable.prototype */ {
|
|
274
274
|
if (ret.isCacheable) {
|
275
275
|
cache = this._kvo_cache;
|
276
276
|
if (!cache) cache = this._kvo_cache = {};
|
277
|
+
|
277
278
|
return (cache[ret.cacheKey] !== undefined) ? cache[ret.cacheKey] : (cache[ret.cacheKey] = ret.call(this, key));
|
278
279
|
} else return ret.call(this, key);
|
279
280
|
} else return ret;
|
@@ -337,9 +338,9 @@ SC.Observable = /** @scope SC.Observable.prototype */ {
|
|
337
338
|
if (value === undefined && SC.typeOf(key) === SC.T_HASH) {
|
338
339
|
var hash = key;
|
339
340
|
|
340
|
-
for (
|
341
|
-
if (!hash.hasOwnProperty(
|
342
|
-
this.set(
|
341
|
+
for (var hashKey in hash) {
|
342
|
+
if (!hash.hasOwnProperty(hashKey)) continue;
|
343
|
+
this.set(hashKey, hash[hashKey]);
|
343
344
|
}
|
344
345
|
|
345
346
|
return this;
|
@@ -1204,10 +1205,13 @@ SC.Observable = /** @scope SC.Observable.prototype */ {
|
|
1204
1205
|
changes.add('*');
|
1205
1206
|
changes.addEach(this._kvo_for('_kvo_observed_keys', SC.CoreSet));
|
1206
1207
|
|
1207
|
-
} else if (key)
|
1208
|
+
} else if (key) {
|
1209
|
+
changes.add(key);
|
1210
|
+
}
|
1208
1211
|
|
1209
1212
|
// Now go through the set and add all dependent keys...
|
1210
|
-
|
1213
|
+
dependents = this._kvo_dependents;
|
1214
|
+
if (dependents) {
|
1211
1215
|
|
1212
1216
|
// NOTE: each time we loop, we check the changes length, this
|
1213
1217
|
// way any dependent keys added to the set will also be evaluated...
|
@@ -1467,7 +1471,7 @@ SC.Observable = /** @scope SC.Observable.prototype */ {
|
|
1467
1471
|
seenValues = valueCache[context] || {};
|
1468
1472
|
seenRevisions = revisionCache[context] || {};
|
1469
1473
|
|
1470
|
-
// prepare
|
1474
|
+
// prepare to loop!
|
1471
1475
|
ret = false;
|
1472
1476
|
currentRevision = this._kvo_revision;
|
1473
1477
|
idx = arguments.length;
|
@@ -1576,11 +1580,10 @@ SC.Observable = /** @scope SC.Observable.prototype */ {
|
|
1576
1580
|
@returns {Array} Values of property keys.
|
1577
1581
|
*/
|
1578
1582
|
getEach: function () {
|
1579
|
-
var
|
1580
|
-
ret = [], idx, idxLen;
|
1583
|
+
var ret = [], idx, idxLen;
|
1581
1584
|
|
1582
|
-
for (idx = 0, idxLen =
|
1583
|
-
ret[ret.length] = this.getPath(
|
1585
|
+
for (idx = 0, idxLen = arguments.length; idx < idxLen; idx++) {
|
1586
|
+
ret[ret.length] = this.getPath(arguments[idx]);
|
1584
1587
|
}
|
1585
1588
|
return ret;
|
1586
1589
|
},
|
@@ -87,7 +87,8 @@ SC.IndexSet = SC.mixin({},
|
|
87
87
|
if (SC.none(start) && !SC.none(length)) lengthIsValid = NO; // stay invalid.
|
88
88
|
else if (SC.none(length)) lengthIsValid = YES;
|
89
89
|
else if (SC.typeOf(length) === SC.T_NUMBER && !isNaN(length)) lengthIsValid = YES;
|
90
|
-
|
90
|
+
|
91
|
+
// Check validity and throw if needed.
|
91
92
|
if (!startIsValid || !lengthIsValid) {
|
92
93
|
var argsString = SC.A(arguments).join(', ');
|
93
94
|
throw new Error("SC.IndexSet created with invalid parameters (%@). You must call SC.IndexSet with zero, one or two valid numeric arguments.".fmt(argsString));
|
@@ -26,7 +26,9 @@ SC.BENCHMARK_OBJECTS = NO;
|
|
26
26
|
SC._detect_base = function _detect_base(func, parent, name) {
|
27
27
|
|
28
28
|
return function invoke_superclass_method() {
|
29
|
-
var base = parent[name],
|
29
|
+
var base = parent[name],
|
30
|
+
args,
|
31
|
+
i, len;
|
30
32
|
|
31
33
|
//@if(debug)
|
32
34
|
if (!base) {
|
@@ -44,13 +46,16 @@ SC._detect_base = function _detect_base(func, parent, name) {
|
|
44
46
|
//if(base && func === base) { func.base = function () {}; }
|
45
47
|
//else { func.base = base; }
|
46
48
|
|
49
|
+
// Accessing `arguments.length` is just a Number and doesn't materialize the `arguments` object, which is costly.
|
50
|
+
// TODO: Add macro to build tools for this.
|
47
51
|
if (func.isEnhancement) {
|
48
|
-
//
|
49
|
-
// TODO: Add macro to build tools for this.
|
52
|
+
// Fast copy.
|
50
53
|
args = new Array(arguments.length - 1); // Array.prototype.slice.call(arguments, 1)
|
51
|
-
for (
|
54
|
+
for (i = 0, len = args.length; i < len; i++) { args[i] = arguments[i + 1]; }
|
52
55
|
} else {
|
53
|
-
|
56
|
+
// Fast copy.
|
57
|
+
args = new Array(arguments.length);
|
58
|
+
for (i = 0, len = args.length; i < len; i++) { args[i] = arguments[i]; }
|
54
59
|
}
|
55
60
|
|
56
61
|
return base.apply(this, args);
|
@@ -230,16 +235,30 @@ SC._object_extend = function _object_extend(base, ext, proto) {
|
|
230
235
|
|
231
236
|
/** @private */
|
232
237
|
SC._enhance = function (originalFunction, enhancement) {
|
238
|
+
|
233
239
|
return function () {
|
234
240
|
// Accessing `arguments.length` is just a Number and doesn't materialize the `arguments` object, which is costly.
|
235
241
|
// TODO: Add macro to build tools for this.
|
236
|
-
var
|
237
|
-
for (var i = 1, len =
|
242
|
+
var enhancedArgs = new Array(arguments.length + 1); // Array.prototype.slice.call(arguments)
|
243
|
+
for (var i = 1, len = enhancedArgs.length; i < len; i++) {
|
244
|
+
enhancedArgs[i] = arguments[i - 1];
|
245
|
+
}
|
238
246
|
|
247
|
+
// Add the original function as the first argument passed to the enhancement.
|
239
248
|
var self = this;
|
240
|
-
|
241
|
-
|
249
|
+
enhancedArgs[0] = function () {
|
250
|
+
// Fast copy.
|
251
|
+
var originalArgs = new Array(arguments.length);
|
252
|
+
for (var i = 0, len = originalArgs.length; i < len; i++) {
|
253
|
+
originalArgs[i] = arguments[i];
|
254
|
+
}
|
255
|
+
|
256
|
+
return originalFunction.apply(self, originalArgs);
|
257
|
+
}; // args.unshift(function ...
|
258
|
+
|
259
|
+
return enhancement.apply(this, enhancedArgs);
|
242
260
|
};
|
261
|
+
|
243
262
|
};
|
244
263
|
|
245
264
|
/** @class
|
@@ -277,16 +277,18 @@ SC.Set = SC.mixin({},
|
|
277
277
|
add: function(obj) {
|
278
278
|
if (this.isFrozen) throw SC.FROZEN_ERROR;
|
279
279
|
|
280
|
-
//
|
281
|
-
if (SC.none(obj)) return this;
|
282
|
-
|
283
|
-
// Implementation note: SC.hashFor() is inlined because sets are
|
280
|
+
// Implementation note: SC.none() and SC.hashFor() is inlined because sets are
|
284
281
|
// fundamental in SproutCore, and the inlined code is ~ 25% faster than
|
285
282
|
// calling SC.hashFor() in IE8.
|
283
|
+
|
284
|
+
// Cannot add null to a set.
|
285
|
+
if (obj === null || obj === undefined) return this;
|
286
|
+
|
286
287
|
var hashFunc,
|
287
288
|
guid = ((hashFunc = obj.hash) && (typeof hashFunc === "function")) ? hashFunc.call(obj) : SC.guidFor(obj),
|
288
289
|
idx = this[guid],
|
289
290
|
len = this.length;
|
291
|
+
|
290
292
|
if ((idx >= len) || (this[idx] !== obj)) {
|
291
293
|
this[len] = obj;
|
292
294
|
this[guid] = len;
|
@@ -296,7 +298,7 @@ SC.Set = SC.mixin({},
|
|
296
298
|
|
297
299
|
if (this.isObservable) this.enumerableContentDidChange();
|
298
300
|
|
299
|
-
return this
|
301
|
+
return this;
|
300
302
|
},
|
301
303
|
|
302
304
|
/**
|
@@ -11,52 +11,52 @@
|
|
11
11
|
Extends the JS Function object with the handleEvents method that
|
12
12
|
will provide more advanced event handling capabilities when constructing
|
13
13
|
your statechart's states.
|
14
|
-
|
15
|
-
By default, when you add a method to a state, the state will react to
|
14
|
+
|
15
|
+
By default, when you add a method to a state, the state will react to
|
16
16
|
events that matches a method's name, like so:
|
17
|
-
|
17
|
+
|
18
18
|
{{{
|
19
|
-
|
19
|
+
|
20
20
|
state = SC.State.extend({
|
21
|
-
|
21
|
+
|
22
22
|
// Will be invoked when a event named "foo" is sent to this state
|
23
23
|
foo: function(event, sender, context) { ... }
|
24
|
-
|
24
|
+
|
25
25
|
})
|
26
|
-
|
26
|
+
|
27
27
|
}}}
|
28
|
-
|
29
|
-
In some situations, it may be advantageous to use one method that can react to
|
28
|
+
|
29
|
+
In some situations, it may be advantageous to use one method that can react to
|
30
30
|
multiple events instead of having multiple methods that essentially all do the
|
31
31
|
same thing. In order to set a method to handle more than one event you use
|
32
32
|
the handleEvents method which can be supplied a list of string and/or regular
|
33
33
|
expressions. The following example demonstrates the use of handleEvents:
|
34
|
-
|
34
|
+
|
35
35
|
{{{
|
36
|
-
|
36
|
+
|
37
37
|
state = SC.State.extend({
|
38
|
-
|
38
|
+
|
39
39
|
eventHandlerA: function(event, sender, context) {
|
40
|
-
|
40
|
+
|
41
41
|
}.handleEvents('foo', 'bar'),
|
42
|
-
|
42
|
+
|
43
43
|
eventHandlerB: function(event, sender, context) {
|
44
|
-
|
44
|
+
|
45
45
|
}.handleEvents(/num\d/, 'decimal')
|
46
|
-
|
46
|
+
|
47
47
|
})
|
48
|
-
|
48
|
+
|
49
49
|
}}}
|
50
|
-
|
50
|
+
|
51
51
|
Whenever events 'foo' and 'bar' are sent to the state, the method eventHandlerA
|
52
52
|
will be invoked. When there is an event that matches the regular expression
|
53
|
-
/num\d/ or the event is 'decimal' then eventHandlerB is invoked. In both
|
54
|
-
cases, the name of the event will be supplied to the event handler.
|
55
|
-
|
53
|
+
/num\d/ or the event is 'decimal' then eventHandlerB is invoked. In both
|
54
|
+
cases, the name of the event will be supplied to the event handler.
|
55
|
+
|
56
56
|
It should be noted that the use of regular expressions may impact performance
|
57
57
|
since that statechart will not be able to fully optimize the event handling logic based
|
58
|
-
on its use. Therefore the use of regular expression should be used sparingly.
|
59
|
-
|
58
|
+
on its use. Therefore the use of regular expression should be used sparingly.
|
59
|
+
|
60
60
|
@param {(String|RegExp)...} args
|
61
61
|
*/
|
62
62
|
Function.prototype.handleEvents = function() {
|
@@ -67,43 +67,43 @@ Function.prototype.handleEvents = function() {
|
|
67
67
|
|
68
68
|
/**
|
69
69
|
Extends the JS Function object with the stateObserves method that will
|
70
|
-
create a state observe handler on a given state object.
|
71
|
-
|
72
|
-
Use a stateObserves() instead of the common observes() method when you want a
|
73
|
-
state to observer changes to some property on the state itself or some other
|
74
|
-
object.
|
75
|
-
|
70
|
+
create a state observe handler on a given state object.
|
71
|
+
|
72
|
+
Use a stateObserves() instead of the common observes() method when you want a
|
73
|
+
state to observer changes to some property on the state itself or some other
|
74
|
+
object.
|
75
|
+
|
76
76
|
Any method on the state that has stateObserves is considered a state observe
|
77
77
|
handler and behaves just like when you use observes() on a method, but with an
|
78
78
|
important difference. When you apply stateObserves to a method on a state, those
|
79
79
|
methods will be active *only* when the state is entered, otherwise those methods
|
80
80
|
will be inactive. This removes the need for you having to explicitly call
|
81
81
|
addObserver and removeObserver. As an example:
|
82
|
-
|
82
|
+
|
83
83
|
{{{
|
84
|
-
|
84
|
+
|
85
85
|
state = SC.State.extend({
|
86
|
-
|
86
|
+
|
87
87
|
foo: null,
|
88
|
-
|
88
|
+
|
89
89
|
user: null,
|
90
|
-
|
90
|
+
|
91
91
|
observeHandlerA: function(target, key) {
|
92
|
-
|
92
|
+
|
93
93
|
}.stateObserves('MyApp.someController.status'),
|
94
|
-
|
94
|
+
|
95
95
|
observeHandlerB: function(target, key) {
|
96
|
-
|
96
|
+
|
97
97
|
}.stateObserves('foo'),
|
98
|
-
|
98
|
+
|
99
99
|
observeHandlerC: function(target, key) {
|
100
|
-
|
100
|
+
|
101
101
|
}.stateObserves('.user.name', '.user.salary')
|
102
|
-
|
102
|
+
|
103
103
|
})
|
104
|
-
|
104
|
+
|
105
105
|
}}}
|
106
|
-
|
106
|
+
|
107
107
|
Above, state has three state observe handlers: observeHandlerA, observeHandlerB, and
|
108
108
|
observeHandlerC. When state is entered, the state will automatically add itself as
|
109
109
|
an observer for all of its registered state observe handlers. Therefore when
|
@@ -111,12 +111,17 @@ Function.prototype.handleEvents = function() {
|
|
111
111
|
changes then observeHandlerA will be invoked. The moment that state is exited then
|
112
112
|
the state will automatically remove itself as an observer for all of its registered
|
113
113
|
state observe handlers. Therefore none of the state observe handlers will be
|
114
|
-
invoked until the next time the state is entered.
|
115
|
-
|
114
|
+
invoked until the next time the state is entered.
|
115
|
+
|
116
116
|
@param {String...} args
|
117
117
|
*/
|
118
118
|
Function.prototype.stateObserves = function() {
|
119
119
|
this.isStateObserveHandler = YES;
|
120
|
-
|
120
|
+
|
121
|
+
// Fast arguments access.
|
122
|
+
// Accessing `arguments.length` is just a Number and doesn't materialize the `arguments` object, which is costly.
|
123
|
+
this.args = new Array(arguments.length); // SC.A(arguments)
|
124
|
+
for (var i = 0, len = this.args.length; i < len; i++) { this.args[i] = arguments[i]; }
|
125
|
+
|
121
126
|
return this;
|
122
|
-
};
|
127
|
+
};
|
@@ -323,9 +323,6 @@ SC.State = SC.Object.extend(
|
|
323
323
|
matchedInitialSubstate = NO,
|
324
324
|
initialSubstate = this.get('initialSubstate'),
|
325
325
|
substatesAreConcurrent = this.get('substatesAreConcurrent'),
|
326
|
-
statechart = this.get('statechart'),
|
327
|
-
i = 0,
|
328
|
-
len = 0,
|
329
326
|
valueIsFunc = NO,
|
330
327
|
historyState = null;
|
331
328
|
|
@@ -1324,7 +1321,7 @@ SC.State = SC.Object.extend(
|
|
1324
1321
|
statechart framework use.
|
1325
1322
|
*/
|
1326
1323
|
_configureAllStateObserveHandlers: function(action) {
|
1327
|
-
var key, values,
|
1324
|
+
var key, values, dotIndex, path, observer, i, root;
|
1328
1325
|
|
1329
1326
|
for (key in this._registeredStateObserveHandlers) {
|
1330
1327
|
values = this._registeredStateObserveHandlers[key];
|
@@ -1465,7 +1462,13 @@ SC.State = SC.Object.extend(
|
|
1465
1462
|
@param args {Hash,...} Optional. Hash objects to be added to the created state
|
1466
1463
|
*/
|
1467
1464
|
SC.State.plugin = function(value) {
|
1468
|
-
var args
|
1465
|
+
var args;
|
1466
|
+
|
1467
|
+
// Fast arguments access.
|
1468
|
+
// Accessing `arguments.length` is just a Number and doesn't materialize the `arguments` object, which is costly.
|
1469
|
+
args = new Array(arguments.length - 1); // SC.A(arguments).shift()
|
1470
|
+
for (var i = 0, len = args.length; i < len; i++) { args[i] = arguments[i + 1]; }
|
1471
|
+
|
1469
1472
|
var func = function() {
|
1470
1473
|
var klass = SC.objectForPropertyPath(value);
|
1471
1474
|
if (!klass) {
|
@@ -742,7 +742,12 @@ SC.StatechartManager = /** @scope SC.StatechartManager.prototype */{
|
|
742
742
|
return;
|
743
743
|
}
|
744
744
|
|
745
|
-
|
745
|
+
// Fast arguments access.
|
746
|
+
// Accessing `arguments.length` is just a Number and doesn't materialize the `arguments` object, which is costly.
|
747
|
+
var args = new Array(arguments.length); // SC.$A(arguments)
|
748
|
+
for (var i = 0, len = args.length; i < len; i++) { args[i] = arguments[i]; }
|
749
|
+
|
750
|
+
args = this._processGotoStateArgs(args);
|
746
751
|
|
747
752
|
state = args.state;
|
748
753
|
fromCurrentState = args.fromCurrentState;
|
@@ -1130,7 +1135,12 @@ SC.StatechartManager = /** @scope SC.StatechartManager.prototype */{
|
|
1130
1135
|
return;
|
1131
1136
|
}
|
1132
1137
|
|
1133
|
-
|
1138
|
+
// Fast arguments access.
|
1139
|
+
// Accessing `arguments.length` is just a Number and doesn't materialize the `arguments` object, which is costly.
|
1140
|
+
var args = new Array(arguments.length); // SC.$A(arguments)
|
1141
|
+
for (var i = 0, len = args.length; i < len; i++) { args[i] = arguments[i]; }
|
1142
|
+
|
1143
|
+
args = this._processGotoStateArgs(args);
|
1134
1144
|
|
1135
1145
|
state = args.state;
|
1136
1146
|
fromCurrentState = args.fromCurrentState;
|
@@ -1630,7 +1640,6 @@ SC.StatechartManager = /** @scope SC.StatechartManager.prototype */{
|
|
1630
1640
|
len = null,
|
1631
1641
|
value = null;
|
1632
1642
|
|
1633
|
-
args = SC.$A(args);
|
1634
1643
|
args = args.filter(function (item) {
|
1635
1644
|
return item !== undefined;
|
1636
1645
|
});
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sproutcore
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.11.0.
|
4
|
+
version: 1.11.0.rc2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Strobe, Inc., Apple Inc. and contributors
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-12-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|