smt_rails 0.2.4 → 0.2.5

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.
@@ -0,0 +1 @@
1
+ 2.0.0
@@ -1,6 +1,38 @@
1
1
  require 'tilt'
2
+ require 'execjs'
3
+ require 'pathname'
2
4
 
3
5
  module SmtRails
6
+ class MustacheCompile
7
+ class << self
8
+ def compile(source, options = {})
9
+ context.eval("Mustache.compile(#{source.inspect})")
10
+ end
11
+
12
+ def compilePartial(name, source, options = {})
13
+ context.eval("Mustache.compilePartial(#{name.inspect}, #{source.inspect})")
14
+ end
15
+
16
+ private
17
+
18
+ def context
19
+ @context ||= ExecJS.compile(source)
20
+ end
21
+
22
+ def source
23
+ @source ||= path.read
24
+ end
25
+
26
+ def path
27
+ @path ||= assets_path.join('javascripts', 'mustache.js')
28
+ end
29
+
30
+ def assets_path
31
+ @assets_path ||= Pathname(__FILE__).dirname.join('..', '..', 'vendor', 'assets')
32
+ end
33
+ end
34
+ end
35
+
4
36
  class Tilt < Tilt::Template
5
37
  def self.default_mime_type
6
38
  'application/javascript'
@@ -15,24 +47,20 @@ module SmtRails
15
47
  def evaluate(scope, locals, &block)
16
48
  template_key = path_to_key scope
17
49
  <<-MustacheTemplate
18
- (function() {
50
+ (function() {
19
51
  #{namespace} || (#{namespace} = {});
20
- #{namespace}Partials || (#{namespace}Partials = {});
21
-
52
+ #{namespace}Cache || (#{namespace}Cache = {});
53
+ #{namespace}Cache[#{template_key.inspect}] = Mustache.compile(#{data.inspect});
54
+ Mustache.compilePartial(#{template_key.inspect}, #{data.inspect});
55
+
22
56
  #{namespace}[#{template_key.inspect}] = function(object) {
23
- var template = #{data.inspect};
24
- if (object == null){
25
- return template;
26
- } else {
27
- return Mustache.render(template, object, #{SmtRails.template_namespace}Partials);
28
- }
57
+ if (!object){ object = {}; }
58
+ return #{SmtRails.template_namespace}Cache[#{template_key.inspect}](object);
29
59
  };
30
-
31
- #{namespace}Partials[#{template_key.inspect}] = #{namespace}[#{template_key.inspect}]();
32
60
  }).call(this);
33
61
  MustacheTemplate
34
62
  end
35
-
63
+
36
64
  def path_to_key(scope)
37
65
  path = scope.logical_path.to_s.split('/')
38
66
  path.last.gsub!(/^_/, '')
@@ -1,3 +1,3 @@
1
1
  module SmtRails
2
- VERSION = "0.2.4"
2
+ VERSION = "0.2.5"
3
3
  end
@@ -7,12 +7,10 @@ Gem::Specification.new do |gem|
7
7
  gem.description = %q{Shared mustache templates for rails 3}
8
8
  gem.summary = %q{Shared mustache templates for rails 3}
9
9
  gem.homepage = "https://github.com/railsware/smt_rails"
10
-
10
+
11
11
  gem.extra_rdoc_files = [ "LICENSE", "README.md" ]
12
12
  gem.rdoc_options = ["--charset=UTF-8"]
13
13
 
14
- #gem.add_development_dependency "jasmine", ">= 1.0.0"
15
-
16
14
  gem.add_runtime_dependency "rails", ">= 3.1.0"
17
15
  gem.add_runtime_dependency "tilt", ">= 1.3.3"
18
16
  gem.add_runtime_dependency "sprockets", ">= 2.0.3"
@@ -5,22 +5,20 @@
5
5
 
6
6
  /*global define: false*/
7
7
 
8
- var Mustache;
9
-
10
- (function (exports) {
11
- if (typeof module !== "undefined" && module.exports) {
12
- module.exports = exports; // CommonJS
13
- } else if (typeof define === "function") {
14
- define(exports); // AMD
8
+ (function (root, factory) {
9
+ if (typeof exports === "object" && exports) {
10
+ module.exports = factory; // CommonJS
11
+ } else if (typeof define === "function" && define.amd) {
12
+ define(factory); // AMD
15
13
  } else {
16
- Mustache = exports; // <script>
14
+ root.Mustache = factory; // <script>
17
15
  }
18
- }((function () {
16
+ }(this, (function () {
19
17
 
20
18
  var exports = {};
21
19
 
22
20
  exports.name = "mustache.js";
23
- exports.version = "0.7.0";
21
+ exports.version = "0.7.2";
24
22
  exports.tags = ["{{", "}}"];
25
23
 
26
24
  exports.Scanner = Scanner;
@@ -34,10 +32,13 @@ var Mustache;
34
32
  var curlyRe = /\s*\}/;
35
33
  var tagRe = /#|\^|\/|>|\{|&|=|!/;
36
34
 
35
+ var _test = RegExp.prototype.test;
36
+ var _toString = Object.prototype.toString;
37
+
37
38
  // Workaround for https://issues.apache.org/jira/browse/COUCHDB-577
38
39
  // See https://github.com/janl/mustache.js/issues/189
39
40
  function testRe(re, string) {
40
- return RegExp.prototype.test.call(re, string);
41
+ return _test.call(re, string);
41
42
  }
42
43
 
43
44
  function isWhitespace(string) {
@@ -45,7 +46,7 @@ var Mustache;
45
46
  }
46
47
 
47
48
  var isArray = Array.isArray || function (obj) {
48
- return Object.prototype.toString.call(obj) === "[object Array]";
49
+ return _toString.call(obj) === '[object Array]';
49
50
  };
50
51
 
51
52
  function escapeRe(string) {
@@ -128,17 +129,13 @@ var Mustache;
128
129
  function Context(view, parent) {
129
130
  this.view = view;
130
131
  this.parent = parent;
131
- this.clearCache();
132
+ this._cache = {};
132
133
  }
133
134
 
134
135
  Context.make = function (view) {
135
136
  return (view instanceof Context) ? view : new Context(view);
136
137
  };
137
138
 
138
- Context.prototype.clearCache = function () {
139
- this._cache = {};
140
- };
141
-
142
139
  Context.prototype.push = function (view) {
143
140
  return new Context(view, this);
144
141
  };
@@ -147,17 +144,15 @@ var Mustache;
147
144
  var value = this._cache[name];
148
145
 
149
146
  if (!value) {
150
- if (name === ".") {
147
+ if (name == '.') {
151
148
  value = this.view;
152
149
  } else {
153
150
  var context = this;
154
151
 
155
152
  while (context) {
156
- if (name.indexOf(".") > 0) {
157
- var names = name.split("."), i = 0;
158
-
153
+ if (name.indexOf('.') > 0) {
159
154
  value = context.view;
160
-
155
+ var names = name.split('.'), i = 0;
161
156
  while (value && i < names.length) {
162
157
  value = value[names[i++]];
163
158
  }
@@ -165,9 +160,7 @@ var Mustache;
165
160
  value = context.view[name];
166
161
  }
167
162
 
168
- if (value != null) {
169
- break;
170
- }
163
+ if (value != null) break;
171
164
 
172
165
  context = context.parent;
173
166
  }
@@ -176,9 +169,7 @@ var Mustache;
176
169
  this._cache[name] = value;
177
170
  }
178
171
 
179
- if (typeof value === "function") {
180
- value = value.call(this.view);
181
- }
172
+ if (typeof value === 'function') value = value.call(this.view);
182
173
 
183
174
  return value;
184
175
  };
@@ -209,13 +200,19 @@ var Mustache;
209
200
  return fn;
210
201
  };
211
202
 
203
+ Writer.prototype.getPartial = function (name) {
204
+ if (!(name in this._partialCache) && this._loadPartial) {
205
+ this.compilePartial(name, this._loadPartial(name));
206
+ }
207
+
208
+ return this._partialCache[name];
209
+ };
210
+
212
211
  Writer.prototype.compileTokens = function (tokens, template) {
213
- var fn = compileTokens(tokens);
214
212
  var self = this;
215
-
216
213
  return function (view, partials) {
217
214
  if (partials) {
218
- if (typeof partials === "function") {
215
+ if (typeof partials === 'function') {
219
216
  self._loadPartial = partials;
220
217
  } else {
221
218
  for (var name in partials) {
@@ -224,7 +221,7 @@ var Mustache;
224
221
  }
225
222
  }
226
223
 
227
- return fn(self, Context.make(view), template);
224
+ return renderTokens(tokens, self, Context.make(view), template);
228
225
  };
229
226
  };
230
227
 
@@ -232,195 +229,105 @@ var Mustache;
232
229
  return this.compile(template)(view, partials);
233
230
  };
234
231
 
235
- Writer.prototype._section = function (name, context, text, callback) {
236
- var value = context.lookup(name);
237
-
238
- switch (typeof value) {
239
- case "object":
240
- if (isArray(value)) {
241
- var buffer = "";
242
-
243
- for (var i = 0, len = value.length; i < len; ++i) {
244
- buffer += callback(this, context.push(value[i]));
245
- }
246
-
247
- return buffer;
248
- }
249
-
250
- return value ? callback(this, context.push(value)) : "";
251
- case "function":
252
- var self = this;
253
- var scopedRender = function (template) {
254
- return self.render(template, context);
255
- };
256
-
257
- return value.call(context.view, text, scopedRender) || "";
258
- default:
259
- if (value) {
260
- return callback(this, context);
261
- }
262
- }
263
-
264
- return "";
265
- };
266
-
267
- Writer.prototype._inverted = function (name, context, callback) {
268
- var value = context.lookup(name);
269
-
270
- // Use JavaScript's definition of falsy. Include empty arrays.
271
- // See https://github.com/janl/mustache.js/issues/186
272
- if (!value || (isArray(value) && value.length === 0)) {
273
- return callback(this, context);
274
- }
275
-
276
- return "";
277
- };
278
-
279
- Writer.prototype._partial = function (name, context) {
280
- if (!(name in this._partialCache) && this._loadPartial) {
281
- this.compilePartial(name, this._loadPartial(name));
282
- }
283
-
284
- var fn = this._partialCache[name];
285
-
286
- return fn ? fn(context) : "";
287
- };
288
-
289
- Writer.prototype._name = function (name, context) {
290
- var value = context.lookup(name);
291
-
292
- if (typeof value === "function") {
293
- value = value.call(context.view);
294
- }
295
-
296
- return (value == null) ? "" : String(value);
297
- };
298
-
299
- Writer.prototype._escaped = function (name, context) {
300
- return exports.escape(this._name(name, context));
301
- };
302
-
303
232
  /**
304
- * Calculates the bounds of the section represented by the given `token` in
305
- * the original template by drilling down into nested sections to find the
306
- * last token that is part of that section. Returns an array of [start, end].
233
+ * Low-level function that renders the given `tokens` using the given `writer`
234
+ * and `context`. The `template` string is only needed for templates that use
235
+ * higher-order sections to extract the portion of the original template that
236
+ * was contained in that section.
307
237
  */
308
- function sectionBounds(token) {
309
- var start = token[3];
310
- var end = start;
311
-
312
- var tokens;
313
- while ((tokens = token[4]) && tokens.length) {
314
- token = tokens[tokens.length - 1];
315
- end = token[3];
316
- }
238
+ function renderTokens(tokens, writer, context, template) {
239
+ var buffer = '';
317
240
 
318
- return [start, end];
319
- }
241
+ var token, tokenValue, value;
242
+ for (var i = 0, len = tokens.length; i < len; ++i) {
243
+ token = tokens[i];
244
+ tokenValue = token[1];
320
245
 
321
- /**
322
- * Low-level function that compiles the given `tokens` into a function
323
- * that accepts three arguments: a Writer, a Context, and the template.
324
- */
325
- function compileTokens(tokens) {
326
- var subRenders = {};
327
-
328
- function subRender(i, tokens, template) {
329
- if (!subRenders[i]) {
330
- var fn = compileTokens(tokens);
331
- subRenders[i] = function (writer, context) {
332
- return fn(writer, context, template);
333
- };
334
- }
246
+ switch (token[0]) {
247
+ case '#':
248
+ value = context.lookup(tokenValue);
335
249
 
336
- return subRenders[i];
337
- }
250
+ if (typeof value === 'object') {
251
+ if (isArray(value)) {
252
+ for (var j = 0, jlen = value.length; j < jlen; ++j) {
253
+ buffer += renderTokens(token[4], writer, context.push(value[j]), template);
254
+ }
255
+ } else if (value) {
256
+ buffer += renderTokens(token[4], writer, context.push(value), template);
257
+ }
258
+ } else if (typeof value === 'function') {
259
+ var text = template == null ? null : template.slice(token[3], token[5]);
260
+ value = value.call(context.view, text, function (template) {
261
+ return writer.render(template, context);
262
+ });
263
+ if (value != null) buffer += value;
264
+ } else if (value) {
265
+ buffer += renderTokens(token[4], writer, context, template);
266
+ }
338
267
 
339
- return function (writer, context, template) {
340
- var buffer = "";
341
- var token, sectionText;
342
-
343
- for (var i = 0, len = tokens.length; i < len; ++i) {
344
- token = tokens[i];
345
-
346
- switch (token[0]) {
347
- case "#":
348
- sectionText = template.slice.apply(template, sectionBounds(token));
349
- buffer += writer._section(token[1], context, sectionText, subRender(i, token[4], template));
350
- break;
351
- case "^":
352
- buffer += writer._inverted(token[1], context, subRender(i, token[4], template));
353
- break;
354
- case ">":
355
- buffer += writer._partial(token[1], context);
356
- break;
357
- case "&":
358
- buffer += writer._name(token[1], context);
359
- break;
360
- case "name":
361
- buffer += writer._escaped(token[1], context);
362
- break;
363
- case "text":
364
- buffer += token[1];
365
- break;
268
+ break;
269
+ case '^':
270
+ value = context.lookup(tokenValue);
271
+
272
+ // Use JavaScript's definition of falsy. Include empty arrays.
273
+ // See https://github.com/janl/mustache.js/issues/186
274
+ if (!value || (isArray(value) && value.length === 0)) {
275
+ buffer += renderTokens(token[4], writer, context, template);
366
276
  }
277
+
278
+ break;
279
+ case '>':
280
+ value = writer.getPartial(tokenValue);
281
+ if (typeof value === 'function') buffer += value(context);
282
+ break;
283
+ case '&':
284
+ value = context.lookup(tokenValue);
285
+ if (value != null) buffer += value;
286
+ break;
287
+ case 'name':
288
+ value = context.lookup(tokenValue);
289
+ if (value != null) buffer += exports.escape(value);
290
+ break;
291
+ case 'text':
292
+ buffer += tokenValue;
293
+ break;
367
294
  }
295
+ }
368
296
 
369
- return buffer;
370
- };
297
+ return buffer;
371
298
  }
372
299
 
373
300
  /**
374
301
  * Forms the given array of `tokens` into a nested tree structure where
375
- * tokens that represent a section have a fifth item: an array that contains
376
- * all tokens in that section.
302
+ * tokens that represent a section have two additional items: 1) an array of
303
+ * all tokens that appear in that section and 2) the index in the original
304
+ * template that represents the end of that section.
377
305
  */
378
306
  function nestTokens(tokens) {
379
307
  var tree = [];
380
308
  var collector = tree;
381
309
  var sections = [];
382
- var token, section;
383
310
 
384
- for (var i = 0; i < tokens.length; ++i) {
311
+ var token;
312
+ for (var i = 0, len = tokens.length; i < len; ++i) {
385
313
  token = tokens[i];
386
-
387
314
  switch (token[0]) {
388
- case "#":
389
- case "^":
390
- token[4] = [];
315
+ case '#':
316
+ case '^':
391
317
  sections.push(token);
392
318
  collector.push(token);
393
- collector = token[4];
319
+ collector = token[4] = [];
394
320
  break;
395
- case "/":
396
- if (sections.length === 0) {
397
- throw new Error("Unopened section: " + token[1]);
398
- }
399
-
400
- section = sections.pop();
401
-
402
- if (section[1] !== token[1]) {
403
- throw new Error("Unclosed section: " + section[1]);
404
- }
405
-
406
- if (sections.length > 0) {
407
- collector = sections[sections.length - 1][4];
408
- } else {
409
- collector = tree;
410
- }
321
+ case '/':
322
+ var section = sections.pop();
323
+ section[5] = token[2];
324
+ collector = sections.length > 0 ? sections[sections.length - 1][4] : tree;
411
325
  break;
412
326
  default:
413
327
  collector.push(token);
414
328
  }
415
329
  }
416
330
 
417
- // Make sure there were no open sections when we're done.
418
- section = sections.pop();
419
-
420
- if (section) {
421
- throw new Error("Unclosed section: " + section[1]);
422
- }
423
-
424
331
  return tree;
425
332
  }
426
333
 
@@ -429,26 +336,26 @@ var Mustache;
429
336
  * to a single token.
430
337
  */
431
338
  function squashTokens(tokens) {
432
- var token, lastToken;
339
+ var squashedTokens = [];
433
340
 
434
- for (var i = 0; i < tokens.length; ++i) {
341
+ var token, lastToken;
342
+ for (var i = 0, len = tokens.length; i < len; ++i) {
435
343
  token = tokens[i];
436
-
437
- if (lastToken && lastToken[0] === "text" && token[0] === "text") {
438
- lastToken[1] += token[1];
439
- lastToken[3] = token[3];
440
- tokens.splice(i--, 1); // Remove this token from the array.
441
- } else {
442
- lastToken = token;
344
+ if (token) {
345
+ if (token[0] === 'text' && lastToken && lastToken[0] === 'text') {
346
+ lastToken[1] += token[1];
347
+ lastToken[3] = token[3];
348
+ } else {
349
+ lastToken = token;
350
+ squashedTokens.push(token);
351
+ }
443
352
  }
444
353
  }
354
+
355
+ return squashedTokens;
445
356
  }
446
357
 
447
358
  function escapeTags(tags) {
448
- if (tags.length !== 2) {
449
- throw new Error("Invalid tags: " + tags.join(" "));
450
- }
451
-
452
359
  return [
453
360
  new RegExp(escapeRe(tags[0]) + "\\s*"),
454
361
  new RegExp("\\s*" + escapeRe(tags[1]))
@@ -462,22 +369,27 @@ var Mustache;
462
369
  * course, the default is to use mustaches (i.e. Mustache.tags).
463
370
  */
464
371
  exports.parse = function (template, tags) {
372
+ template = template || '';
465
373
  tags = tags || exports.tags;
466
374
 
375
+ if (typeof tags === 'string') tags = tags.split(spaceRe);
376
+ if (tags.length !== 2) throw new Error('Invalid tags: ' + tags.join(', '));
377
+
467
378
  var tagRes = escapeTags(tags);
468
379
  var scanner = new Scanner(template);
469
380
 
470
- var tokens = [], // Buffer to hold the tokens
471
- spaces = [], // Indices of whitespace tokens on the current line
472
- hasTag = false, // Is there a {{tag}} on the current line?
473
- nonSpace = false; // Is there a non-space char on the current line?
381
+ var sections = []; // Stack to hold section tokens
382
+ var tokens = []; // Buffer to hold the tokens
383
+ var spaces = []; // Indices of whitespace tokens on the current line
384
+ var hasTag = false; // Is there a {{tag}} on the current line?
385
+ var nonSpace = false; // Is there a non-space char on the current line?
474
386
 
475
387
  // Strips all whitespace tokens array for the current line
476
388
  // if there was a {{#tag}} on it and otherwise only space.
477
389
  function stripSpace() {
478
390
  if (hasTag && !nonSpace) {
479
391
  while (spaces.length) {
480
- tokens.splice(spaces.pop(), 1);
392
+ delete tokens[spaces.pop()];
481
393
  }
482
394
  } else {
483
395
  spaces = [];
@@ -487,12 +399,12 @@ var Mustache;
487
399
  nonSpace = false;
488
400
  }
489
401
 
490
- var start, type, value, chr;
491
-
402
+ var start, type, value, chr, token;
492
403
  while (!scanner.eos()) {
493
404
  start = scanner.pos;
494
- value = scanner.scanUntil(tagRes[0]);
495
405
 
406
+ // Match any text between tags.
407
+ value = scanner.scanUntil(tagRes[0]);
496
408
  if (value) {
497
409
  for (var i = 0, len = value.length; i < len; ++i) {
498
410
  chr = value.charAt(i);
@@ -503,68 +415,69 @@ var Mustache;
503
415
  nonSpace = true;
504
416
  }
505
417
 
506
- tokens.push(["text", chr, start, start + 1]);
418
+ tokens.push(['text', chr, start, start + 1]);
507
419
  start += 1;
508
420
 
509
- if (chr === "\n") {
510
- stripSpace(); // Check for whitespace on the current line.
511
- }
421
+ // Check for whitespace on the current line.
422
+ if (chr == '\n') stripSpace();
512
423
  }
513
424
  }
514
425
 
515
- start = scanner.pos;
516
-
517
426
  // Match the opening tag.
518
- if (!scanner.scan(tagRes[0])) {
519
- break;
520
- }
521
-
427
+ if (!scanner.scan(tagRes[0])) break;
522
428
  hasTag = true;
523
- type = scanner.scan(tagRe) || "name";
524
429
 
525
- // Skip any whitespace between tag and value.
430
+ // Get the tag type.
431
+ type = scanner.scan(tagRe) || 'name';
526
432
  scanner.scan(whiteRe);
527
433
 
528
- // Extract the tag value.
529
- if (type === "=") {
434
+ // Get the tag value.
435
+ if (type === '=') {
530
436
  value = scanner.scanUntil(eqRe);
531
437
  scanner.scan(eqRe);
532
438
  scanner.scanUntil(tagRes[1]);
533
- } else if (type === "{") {
534
- var closeRe = new RegExp("\\s*" + escapeRe("}" + tags[1]));
535
- value = scanner.scanUntil(closeRe);
439
+ } else if (type === '{') {
440
+ value = scanner.scanUntil(new RegExp('\\s*' + escapeRe('}' + tags[1])));
536
441
  scanner.scan(curlyRe);
537
442
  scanner.scanUntil(tagRes[1]);
538
- type = "&";
443
+ type = '&';
539
444
  } else {
540
445
  value = scanner.scanUntil(tagRes[1]);
541
446
  }
542
447
 
543
448
  // Match the closing tag.
544
- if (!scanner.scan(tagRes[1])) {
545
- throw new Error("Unclosed tag at " + scanner.pos);
546
- }
449
+ if (!scanner.scan(tagRes[1])) throw new Error('Unclosed tag at ' + scanner.pos);
547
450
 
548
- tokens.push([type, value, start, scanner.pos]);
451
+ token = [type, value, start, scanner.pos];
452
+ tokens.push(token);
549
453
 
550
- if (type === "name" || type === "{" || type === "&") {
454
+ if (type === '#' || type === '^') {
455
+ sections.push(token);
456
+ } else if (type === '/') {
457
+ // Check section nesting.
458
+ if (sections.length === 0) throw new Error('Unopened section "' + value + '" at ' + start);
459
+ var openSection = sections.pop();
460
+ if (openSection[1] !== value) throw new Error('Unclosed section "' + openSection[1] + '" at ' + start);
461
+ } else if (type === 'name' || type === '{' || type === '&') {
551
462
  nonSpace = true;
552
- }
553
-
554
- // Set the tags for the next time around.
555
- if (type === "=") {
463
+ } else if (type === '=') {
464
+ // Set the tags for the next time around.
556
465
  tags = value.split(spaceRe);
466
+ if (tags.length !== 2) throw new Error('Invalid tags at ' + start + ': ' + tags.join(', '));
557
467
  tagRes = escapeTags(tags);
558
468
  }
559
469
  }
560
470
 
561
- squashTokens(tokens);
471
+ // Make sure there are no open sections when we're done.
472
+ var openSection = sections.pop();
473
+ if (openSection) throw new Error('Unclosed section "' + openSection[1] + '" at ' + scanner.pos);
474
+
475
+ tokens = squashTokens(tokens);
562
476
 
563
477
  return nestTokens(tokens);
564
478
  };
565
479
 
566
- // The high-level clearCache, compile, compilePartial, and render functions
567
- // use this default writer.
480
+ // All Mustache.* functions use this writer.
568
481
  var _writer = new Writer();
569
482
 
570
483
  /**
@@ -619,4 +532,4 @@ var Mustache;
619
532
 
620
533
  return exports;
621
534
 
622
- }())));
535
+ }())));
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smt_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.2.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,52 +10,72 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-10-29 00:00:00.000000000 Z
13
+ date: 2013-04-04 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rails
17
- requirement: &70257902094220 !ruby/object:Gem::Requirement
17
+ requirement: !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
- - - ! '>='
20
+ - - '>='
21
21
  - !ruby/object:Gem::Version
22
22
  version: 3.1.0
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *70257902094220
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - '>='
29
+ - !ruby/object:Gem::Version
30
+ version: 3.1.0
26
31
  - !ruby/object:Gem::Dependency
27
32
  name: tilt
28
- requirement: &70257902093340 !ruby/object:Gem::Requirement
33
+ requirement: !ruby/object:Gem::Requirement
29
34
  none: false
30
35
  requirements:
31
- - - ! '>='
36
+ - - '>='
32
37
  - !ruby/object:Gem::Version
33
38
  version: 1.3.3
34
39
  type: :runtime
35
40
  prerelease: false
36
- version_requirements: *70257902093340
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - '>='
45
+ - !ruby/object:Gem::Version
46
+ version: 1.3.3
37
47
  - !ruby/object:Gem::Dependency
38
48
  name: sprockets
39
- requirement: &70257902130980 !ruby/object:Gem::Requirement
49
+ requirement: !ruby/object:Gem::Requirement
40
50
  none: false
41
51
  requirements:
42
- - - ! '>='
52
+ - - '>='
43
53
  - !ruby/object:Gem::Version
44
54
  version: 2.0.3
45
55
  type: :runtime
46
56
  prerelease: false
47
- version_requirements: *70257902130980
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - '>='
61
+ - !ruby/object:Gem::Version
62
+ version: 2.0.3
48
63
  - !ruby/object:Gem::Dependency
49
64
  name: mustache
50
- requirement: &70257902130440 !ruby/object:Gem::Requirement
65
+ requirement: !ruby/object:Gem::Requirement
51
66
  none: false
52
67
  requirements:
53
- - - ! '>='
68
+ - - '>='
54
69
  - !ruby/object:Gem::Version
55
70
  version: 0.99.4
56
71
  type: :runtime
57
72
  prerelease: false
58
- version_requirements: *70257902130440
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - '>='
77
+ - !ruby/object:Gem::Version
78
+ version: 0.99.4
59
79
  description: Shared mustache templates for rails 3
60
80
  email:
61
81
  - contacts@railsware.com
@@ -66,6 +86,7 @@ extra_rdoc_files:
66
86
  - README.md
67
87
  files:
68
88
  - .gitignore
89
+ - .ruby-version
69
90
  - Gemfile
70
91
  - LICENSE
71
92
  - README.md
@@ -90,24 +111,24 @@ require_paths:
90
111
  required_ruby_version: !ruby/object:Gem::Requirement
91
112
  none: false
92
113
  requirements:
93
- - - ! '>='
114
+ - - '>='
94
115
  - !ruby/object:Gem::Version
95
116
  version: '0'
96
117
  segments:
97
118
  - 0
98
- hash: 1538246288557208580
119
+ hash: -290175364099614496
99
120
  required_rubygems_version: !ruby/object:Gem::Requirement
100
121
  none: false
101
122
  requirements:
102
- - - ! '>='
123
+ - - '>='
103
124
  - !ruby/object:Gem::Version
104
125
  version: '0'
105
126
  segments:
106
127
  - 0
107
- hash: 1538246288557208580
128
+ hash: -290175364099614496
108
129
  requirements: []
109
130
  rubyforge_project:
110
- rubygems_version: 1.8.16
131
+ rubygems_version: 1.8.25
111
132
  signing_key:
112
133
  specification_version: 3
113
134
  summary: Shared mustache templates for rails 3