pubba 0.7.2 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,460 @@
1
+ // Underscore.js
2
+ // (c) 2009 Jeremy Ashkenas, DocumentCloud Inc.
3
+ // Underscore is freely distributable under the terms of the MIT license.
4
+ // Portions of Underscore are inspired by or borrowed from Prototype.js,
5
+ // Oliver Steele's Functional, And John Resig's Micro-Templating.
6
+ // For all details and documentation:
7
+ // http://documentcloud.github.com/underscore/
8
+
9
+ (function() {
10
+
11
+ var root = (typeof window != 'undefined') ? window : exports;
12
+
13
+ var previousUnderscore = root._;
14
+
15
+ var _ = root._ = {};
16
+
17
+ _.VERSION = '0.2.0';
18
+
19
+ /*------------------------ Collection Functions: ---------------------------*/
20
+
21
+ // The cornerstone, an each implementation.
22
+ // Handles objects implementing forEach, each, arrays, and raw objects.
23
+ _.each = function(obj, iterator, context) {
24
+ var index = 0;
25
+ try {
26
+ if (obj.forEach) {
27
+ obj.forEach(iterator, context);
28
+ } else if (obj.length) {
29
+ for (var i=0; i<obj.length; i++) iterator.call(context, obj[i], i);
30
+ } else if (obj.each) {
31
+ obj.each(function(value) { iterator.call(context, value, index++); });
32
+ } else {
33
+ var i = 0;
34
+ for (var key in obj) {
35
+ var value = obj[key], pair = [key, value];
36
+ pair.key = key;
37
+ pair.value = value;
38
+ iterator.call(context, pair, i++);
39
+ }
40
+ }
41
+ } catch(e) {
42
+ if (e != '__break__') throw e;
43
+ }
44
+ return obj;
45
+ };
46
+
47
+ // Return the results of applying the iterator to each element. Use Javascript
48
+ // 1.6's version of map, if possible.
49
+ _.map = function(obj, iterator, context) {
50
+ if (obj && obj.map) return obj.map(iterator, context);
51
+ var results = [];
52
+ _.each(obj, function(value, index) {
53
+ results.push(iterator.call(context, value, index));
54
+ });
55
+ return results;
56
+ };
57
+
58
+ // Reduce builds up a single result from a list of values. Also known as
59
+ // inject, or foldl.
60
+ _.reduce = function(obj, memo, iterator, context) {
61
+ _.each(obj, function(value, index) {
62
+ memo = iterator.call(context, memo, value, index);
63
+ });
64
+ return memo;
65
+ };
66
+
67
+ // Return the first value which passes a truth test.
68
+ _.detect = function(obj, iterator, context) {
69
+ var result;
70
+ _.each(obj, function(value, index) {
71
+ if (iterator.call(context, value, index)) {
72
+ result = value;
73
+ throw '__break__';
74
+ }
75
+ });
76
+ return result;
77
+ };
78
+
79
+ // Return all the elements that pass a truth test. Use Javascript 1.6's
80
+ // filter(), if it exists.
81
+ _.select = function(obj, iterator, context) {
82
+ if (obj.filter) return obj.filter(iterator, context);
83
+ var results = [];
84
+ _.each(obj, function(value, index) {
85
+ if (iterator.call(context, value, index)) results.push(value);
86
+ });
87
+ return results;
88
+ };
89
+
90
+ // Return all the elements for which a truth test fails.
91
+ _.reject = function(obj, iterator, context) {
92
+ var results = [];
93
+ _.each(obj, function(value, index) {
94
+ if (!iterator.call(context, value, index)) results.push(value);
95
+ });
96
+ return results;
97
+ };
98
+
99
+ // Determine whether all of the elements match a truth test. Delegate to
100
+ // Javascript 1.6's every(), if it is present.
101
+ _.all = function(obj, iterator, context) {
102
+ iterator = iterator || function(v){ return v; };
103
+ if (obj.every) return obj.every(iterator, context);
104
+ var result = true;
105
+ _.each(obj, function(value, index) {
106
+ result = result && !!iterator.call(context, value, index);
107
+ if (!result) throw '__break__';
108
+ });
109
+ return result;
110
+ };
111
+
112
+ // Determine if at least one element in the object matches a truth test. Use
113
+ // Javascript 1.6's some(), if it exists.
114
+ _.any = function(obj, iterator, context) {
115
+ iterator = iterator || function(v) { return v; };
116
+ if (obj.some) return obj.some(iterator, context);
117
+ var result = false;
118
+ _.each(obj, function(value, index) {
119
+ if (result = !!iterator.call(context, value, index)) throw '__break__';
120
+ });
121
+ return result;
122
+ };
123
+
124
+ // Determine if a given value is included in the array or object,
125
+ // based on '==='.
126
+ _.include = function(obj, target) {
127
+ if (_.isArray(obj)) return _.indexOf(obj, target) != -1;
128
+ var found = false;
129
+ _.each(obj, function(pair) {
130
+ if (pair.value === target) {
131
+ found = true;
132
+ throw '__break__';
133
+ }
134
+ });
135
+ return found;
136
+ };
137
+
138
+ // Invoke a method with arguments on every item in a collection.
139
+ _.invoke = function(obj, method) {
140
+ var args = _.toArray(arguments).slice(2);
141
+ return _.map(obj, function(value) {
142
+ return (method ? value[method] : value).apply(value, args);
143
+ });
144
+ };
145
+
146
+ // Optimized version of a common use case of map: fetching a property.
147
+ _.pluck = function(obj, key) {
148
+ var results = [];
149
+ _.each(obj, function(value){ results.push(value[key]); });
150
+ return results;
151
+ };
152
+
153
+ // Return the maximum item or (item-based computation).
154
+ _.max = function(obj, iterator, context) {
155
+ if (!iterator && _.isArray(obj)) return Math.max.apply(Math, obj);
156
+ var result;
157
+ _.each(obj, function(value, index) {
158
+ var computed = iterator ? iterator.call(context, value, index) : value;
159
+ if (result == null || computed >= result.computed) result = {value : value, computed : computed};
160
+ });
161
+ return result.value;
162
+ };
163
+
164
+ // Return the minimum element (or element-based computation).
165
+ _.min = function(obj, iterator, context) {
166
+ if (!iterator && _.isArray(obj)) return Math.min.apply(Math, obj);
167
+ var result;
168
+ _.each(obj, function(value, index) {
169
+ var computed = iterator ? iterator.call(context, value, index) : value;
170
+ if (result == null || computed < result.computed) result = {value : value, computed : computed};
171
+ });
172
+ return result.value;
173
+ };
174
+
175
+ // Sort the object's values by a criteria produced by an iterator.
176
+ _.sortBy = function(obj, iterator, context) {
177
+ return _.pluck(_.map(obj, function(value, index) {
178
+ return {
179
+ value : value,
180
+ criteria : iterator.call(context, value, index)
181
+ };
182
+ }).sort(function(left, right) {
183
+ var a = left.criteria, b = right.criteria;
184
+ return a < b ? -1 : a > b ? 1 : 0;
185
+ }), 'value');
186
+ };
187
+
188
+ // Use a comparator function to figure out at what index an object should
189
+ // be inserted so as to maintain order. Uses binary search.
190
+ _.sortedIndex = function(array, obj, iterator) {
191
+ iterator = iterator || function(val) { return val; };
192
+ var low = 0, high = array.length;
193
+ while (low < high) {
194
+ var mid = (low + high) >> 1;
195
+ iterator(array[mid]) < iterator(obj) ? low = mid + 1 : high = mid;
196
+ }
197
+ return low;
198
+ };
199
+
200
+ // Convert anything iterable into a real, live array.
201
+ _.toArray = function(iterable) {
202
+ if (!iterable) return [];
203
+ if (_.isArray(iterable)) return iterable;
204
+ return _.map(iterable, function(val){ return val; });
205
+ };
206
+
207
+ // Return the number of elements in an object.
208
+ _.size = function(obj) {
209
+ return _.toArray(obj).length;
210
+ };
211
+
212
+ /*-------------------------- Array Functions: ------------------------------*/
213
+
214
+ // Get the first element of an array.
215
+ _.first = function(array) {
216
+ return array[0];
217
+ };
218
+
219
+ // Get the last element of an array.
220
+ _.last = function(array) {
221
+ return array[array.length - 1];
222
+ };
223
+
224
+ // Trim out all falsy values from an array.
225
+ _.compact = function(array) {
226
+ return _.select(array, function(value){ return !!value; });
227
+ };
228
+
229
+ // Return a completely flattened version of an array.
230
+ _.flatten = function(array) {
231
+ return _.reduce(array, [], function(memo, value) {
232
+ if (_.isArray(value)) return memo.concat(_.flatten(value));
233
+ memo.push(value);
234
+ return memo;
235
+ });
236
+ };
237
+
238
+ // Return a version of the array that does not contain the specified value(s).
239
+ _.without = function(array) {
240
+ var values = array.slice.call(arguments, 0);
241
+ return _.select(array, function(value){ return !_.include(values, value); });
242
+ };
243
+
244
+ // Produce a duplicate-free version of the array. If the array has already
245
+ // been sorted, you have the option of using a faster algorithm.
246
+ _.uniq = function(array, isSorted) {
247
+ return _.reduce(array, [], function(memo, el, i) {
248
+ if (0 == i || (isSorted ? _.last(memo) != el : !_.include(memo, el))) memo.push(el);
249
+ return memo;
250
+ });
251
+ };
252
+
253
+ // Produce an array that contains every item shared between all the
254
+ // passed-in arrays.
255
+ _.intersect = function(array) {
256
+ var rest = _.toArray(arguments).slice(1);
257
+ return _.select(_.uniq(array), function(item) {
258
+ return _.all(rest, function(other) {
259
+ return _.indexOf(other, item) >= 0;
260
+ });
261
+ });
262
+ };
263
+
264
+ // Zip together multiple lists into a single array -- elements that share
265
+ // an index go together.
266
+ _.zip = function() {
267
+ var args = _.toArray(arguments);
268
+ var length = _.max(_.pluck(args, 'length'));
269
+ var results = new Array(length);
270
+ for (var i=0; i<length; i++) results[i] = _.pluck(args, String(i));
271
+ return results;
272
+ };
273
+
274
+ // If the browser doesn't supply us with indexOf (I'm looking at you, MSIE),
275
+ // we need this function. Return the position of the first occurence of an
276
+ // item in an array, or -1 if the item is not included in the array.
277
+ _.indexOf = function(array, item) {
278
+ if (array.indexOf) return array.indexOf(item);
279
+ for (i=0; i<array.length; i++) if (array[i] === item) return i;
280
+ return -1;
281
+ };
282
+
283
+ // Provide Javascript 1.6's lastIndexOf, delegating to the native function,
284
+ // if possible.
285
+ _.lastIndexOf = function(array, item) {
286
+ if (array.lastIndexOf) return array.lastIndexOf(item);
287
+ for (i=array.length - 1; i>=0; i--) if (array[i] === item) return i;
288
+ return -1;
289
+ };
290
+
291
+ /* ----------------------- Function Functions: -----------------------------*/
292
+
293
+ // Create a function bound to a given object (assigning 'this', and arguments,
294
+ // optionally). Binding with arguments is also known as 'curry'.
295
+ _.bind = function(func, context) {
296
+ if (!context) return func;
297
+ var args = _.toArray(arguments).slice(2);
298
+ return function() {
299
+ var a = args.concat(_.toArray(arguments));
300
+ return func.apply(context, a);
301
+ };
302
+ };
303
+
304
+ // Bind all of an object's methods to that object. Useful for ensuring that
305
+ // all callbacks defined on an object belong to it.
306
+ _.bindAll = function() {
307
+ var args = _.toArray(arguments);
308
+ var context = args.pop();
309
+ _.each(args, function(methodName) {
310
+ context[methodName] = _.bind(context[methodName], context);
311
+ });
312
+ };
313
+
314
+ // Delays a function for the given number of milliseconds, and then calls
315
+ // it with the arguments supplied.
316
+ _.delay = function(func, wait) {
317
+ var args = _.toArray(arguments).slice(2);
318
+ return setTimeout(function(){ return func.apply(func, args); }, wait);
319
+ };
320
+
321
+ // Defers a function, scheduling it to run after the current call stack has
322
+ // cleared.
323
+ _.defer = function(func) {
324
+ return _.delay.apply(_, [func, 1].concat(_.toArray(arguments).slice(1)));
325
+ };
326
+
327
+ // Returns the first function passed as an argument to the second,
328
+ // allowing you to adjust arguments, run code before and after, and
329
+ // conditionally execute the original function.
330
+ _.wrap = function(func, wrapper) {
331
+ return function() {
332
+ var args = [func].concat(_.toArray(arguments));
333
+ return wrapper.apply(wrapper, args);
334
+ };
335
+ };
336
+
337
+ // Returns a function that is the composition of a list of functions, each
338
+ // consuming the return value of the function that follows.
339
+ _.compose = function() {
340
+ var funcs = _.toArray(arguments);
341
+ return function() {
342
+ for (var i=funcs.length-1; i >= 0; i--) {
343
+ arguments = [funcs[i].apply(this, arguments)];
344
+ }
345
+ return arguments[0];
346
+ };
347
+ };
348
+
349
+ /* ------------------------- Object Functions: ---------------------------- */
350
+
351
+ // Retrieve the names of an object's properties.
352
+ _.keys = function(obj) {
353
+ return _.pluck(obj, 'key');
354
+ };
355
+
356
+ // Retrieve the values of an object's properties.
357
+ _.values = function(obj) {
358
+ return _.pluck(obj, 'value');
359
+ };
360
+
361
+ // Extend a given object with all of the properties in a source object.
362
+ _.extend = function(destination, source) {
363
+ for (var property in source) destination[property] = source[property];
364
+ return destination;
365
+ };
366
+
367
+ // Create a (shallow-cloned) duplicate of an object.
368
+ _.clone = function(obj) {
369
+ return _.extend({}, obj);
370
+ };
371
+
372
+ // Perform a deep comparison to check if two objects are equal.
373
+ _.isEqual = function(a, b) {
374
+ // Check object identity.
375
+ if (a === b) return true;
376
+ // Different types?
377
+ var atype = typeof(a), btype = typeof(b);
378
+ if (atype != btype) return false;
379
+ // Basic equality test (watch out for coercions).
380
+ if (a == b) return true;
381
+ // One of them implements an isEqual()?
382
+ if (a.isEqual) return a.isEqual(b);
383
+ // If a is not an object by this point, we can't handle it.
384
+ if (atype !== 'object') return false;
385
+ // Nothing else worked, deep compare the contents.
386
+ var aKeys = _.keys(a), bKeys = _.keys(b);
387
+ // Different object sizes?
388
+ if (aKeys.length != bKeys.length) return false;
389
+ // Recursive comparison of contents.
390
+ for (var key in a) if (!_.isEqual(a[key], b[key])) return false;
391
+ return true;
392
+ };
393
+
394
+ // Is a given value a DOM element?
395
+ _.isElement = function(obj) {
396
+ return !!(obj && obj.nodeType == 1);
397
+ };
398
+
399
+ // Is a given value a real Array?
400
+ _.isArray = function(obj) {
401
+ return Object.prototype.toString.call(obj) == '[object Array]';
402
+ };
403
+
404
+ // Is a given value a Function?
405
+ _.isFunction = function(obj) {
406
+ return typeof obj == 'function';
407
+ };
408
+
409
+ // Is a given variable undefined?
410
+ _.isUndefined = function(obj) {
411
+ return typeof obj == 'undefined';
412
+ };
413
+
414
+ /* -------------------------- Utility Functions: -------------------------- */
415
+
416
+ // Run Underscore.js in noConflict mode, returning the '_' variable to its
417
+ // previous owner. Returns a reference to the Underscore object.
418
+ _.noConflict = function() {
419
+ root._ = previousUnderscore;
420
+ return this;
421
+ };
422
+
423
+ // Generate a unique integer id (unique within the entire client session).
424
+ // Useful for temporary DOM ids.
425
+ _.uniqueId = function(prefix) {
426
+ var id = this._idCounter = (this._idCounter || 0) + 1;
427
+ return prefix ? prefix + id : id;
428
+ };
429
+
430
+ // Javascript templating a-la ERB, pilfered from John Resig's
431
+ // "Secrets of the Javascript Ninja", page 83.
432
+ _.template = function(str, data) {
433
+ var fn = new Function('obj',
434
+ 'var p=[],print=function(){p.push.apply(p,arguments);};' +
435
+ 'with(obj){p.push(\'' +
436
+ str
437
+ .replace(/[\r\t\n]/g, " ")
438
+ .split("<%").join("\t")
439
+ .replace(/((^|%>)[^\t]*)'/g, "$1\r")
440
+ .replace(/\t=(.*?)%>/g, "',$1,'")
441
+ .split("\t").join("');")
442
+ .split("%>").join("p.push('")
443
+ .split("\r").join("\\'")
444
+ + "');}return p.join('');");
445
+ return data ? fn(data) : fn;
446
+ };
447
+
448
+ /*------------------------------- Aliases ----------------------------------*/
449
+
450
+ _.forEach = _.each;
451
+ _.inject = _.reduce;
452
+ _.filter = _.select;
453
+ _.every = _.all;
454
+ _.some = _.any;
455
+
456
+ /*------------------------- Export for ServerJS ----------------------------*/
457
+
458
+ if (!_.isUndefined(exports)) exports = _;
459
+
460
+ })();
@@ -18,7 +18,8 @@ global:
18
18
  - "third-party/modernizr"
19
19
  body:
20
20
  - "https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min.js"
21
- - "third-party/backbone"
21
+ - "github:documentcloud:underscore:1.2.4:underscore.js"
22
+ - "github:documentcloud:backbone:0.5.3:backbone.js"
22
23
  - "custom/app"
23
24
  - "custom/tracker"
24
25
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pubba
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.2
4
+ version: 0.8.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-03 00:00:00.000000000 Z
12
+ date: 2012-01-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sprockets
16
- requirement: &2151888720 !ruby/object:Gem::Requirement
16
+ requirement: &2152396280 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 2.1.2
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2151888720
24
+ version_requirements: *2152396280
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: r18n-desktop
27
- requirement: &2151887400 !ruby/object:Gem::Requirement
27
+ requirement: &2152395760 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 0.4.13
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *2151887400
35
+ version_requirements: *2152395760
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: yui-compressor
38
- requirement: &2151902820 !ruby/object:Gem::Requirement
38
+ requirement: &2152395260 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 0.9.4
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *2151902820
46
+ version_requirements: *2152395260
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: fssm
49
- requirement: &2151901860 !ruby/object:Gem::Requirement
49
+ requirement: &2152394760 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 0.2.7
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *2151901860
57
+ version_requirements: *2152394760
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: statica
60
- requirement: &2151901100 !ruby/object:Gem::Requirement
60
+ requirement: &2152394240 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,21 @@ dependencies:
65
65
  version: 0.3.0
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *2151901100
68
+ version_requirements: *2152394240
69
+ - !ruby/object:Gem::Dependency
70
+ name: octopi
71
+ requirement: &2152393600 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: 0.4.5
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: *2152393600
69
80
  - !ruby/object:Gem::Dependency
70
81
  name: rake
71
- requirement: &2151900160 !ruby/object:Gem::Requirement
82
+ requirement: &2152392040 !ruby/object:Gem::Requirement
72
83
  none: false
73
84
  requirements:
74
85
  - - ! '>='
@@ -76,10 +87,10 @@ dependencies:
76
87
  version: 0.9.2
77
88
  type: :development
78
89
  prerelease: false
79
- version_requirements: *2151900160
90
+ version_requirements: *2152392040
80
91
  - !ruby/object:Gem::Dependency
81
92
  name: sinatra
82
- requirement: &2151899260 !ruby/object:Gem::Requirement
93
+ requirement: &2152390320 !ruby/object:Gem::Requirement
83
94
  none: false
84
95
  requirements:
85
96
  - - ! '>='
@@ -87,10 +98,10 @@ dependencies:
87
98
  version: 1.3.1
88
99
  type: :development
89
100
  prerelease: false
90
- version_requirements: *2151899260
101
+ version_requirements: *2152390320
91
102
  - !ruby/object:Gem::Dependency
92
103
  name: sinatra-contrib
93
- requirement: &2151898440 !ruby/object:Gem::Requirement
104
+ requirement: &2152405960 !ruby/object:Gem::Requirement
94
105
  none: false
95
106
  requirements:
96
107
  - - ! '>='
@@ -98,10 +109,10 @@ dependencies:
98
109
  version: 1.3.1
99
110
  type: :development
100
111
  prerelease: false
101
- version_requirements: *2151898440
112
+ version_requirements: *2152405960
102
113
  - !ruby/object:Gem::Dependency
103
114
  name: yard
104
- requirement: &2151897620 !ruby/object:Gem::Requirement
115
+ requirement: &2152403500 !ruby/object:Gem::Requirement
105
116
  none: false
106
117
  requirements:
107
118
  - - ! '>='
@@ -109,7 +120,7 @@ dependencies:
109
120
  version: '0'
110
121
  type: :development
111
122
  prerelease: false
112
- version_requirements: *2151897620
123
+ version_requirements: *2152403500
113
124
  description:
114
125
  email:
115
126
  - andy@stonean.com
@@ -145,6 +156,7 @@ files:
145
156
  - test/pubba/html/test_helpers.rb
146
157
  - test/pubba/test_page.rb
147
158
  - test/pubba/test_site.rb
159
+ - test/resources.rb
148
160
  - test/sinatra/app/assets/css/custom/global.css
149
161
  - test/sinatra/app/assets/css/custom/home.css
150
162
  - test/sinatra/app/assets/css/custom/large.css
@@ -152,9 +164,12 @@ files:
152
164
  - test/sinatra/app/assets/css/custom/small.css
153
165
  - test/sinatra/app/assets/css/third-party/widget.css
154
166
  - test/sinatra/app/assets/js/custom/app.js
167
+ - test/sinatra/app/assets/js/custom/home.js
155
168
  - test/sinatra/app/assets/js/custom/lightbox.js
169
+ - test/sinatra/app/assets/js/custom/search.js
156
170
  - test/sinatra/app/assets/js/custom/tracker.js
157
- - test/sinatra/app/assets/js/third-party/backbone.js
171
+ - test/sinatra/app/assets/js/github/documentcloud/backbone.js
172
+ - test/sinatra/app/assets/js/github/documentcloud/underscore.js
158
173
  - test/sinatra/app/assets/js/third-party/modernizr.js
159
174
  - test/sinatra/app/i18n/en.yml
160
175
  - test/sinatra/config/pubba.yml
@@ -1,3 +0,0 @@
1
- function backbone(){
2
- alert('This is the backbone test file');
3
- }