mustache-js-rails 0.0.4 → 0.0.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.

Potentially problematic release.


This version of mustache-js-rails might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2c8950f57591cccc2b9141b87adab0a59c666483
4
- data.tar.gz: 7ca4c4bd78834a9a228229807b60fffb81205efa
3
+ metadata.gz: 5016f09bb6a7d5d85e61bbed6a6ef13248db23fa
4
+ data.tar.gz: 677f8b752d447377da5f320f463965e0fe168795
5
5
  SHA512:
6
- metadata.gz: 2b35fc37a6c0d75e7b2e9f1cdbcf0259bee2000c18976601ead750b13718dd9750ed576ef40b6b937211cd4c6db5969ef19369e219ec721a214bb0db52d0293f
7
- data.tar.gz: 54f60d7614ab3b7ffca8c343ca87b80390aac995eb0164d4ef8b1e034748b1fd05ff146b3361b83368f6db3e9a765b08b288c55a6bc25b7ece8be08ca97162c3
6
+ metadata.gz: 451118b3037b7ea473b6e00daa927f0eec1423d3d955b2529f45adab32732d7376542bbc66025a3061b3e0587f6d917b97621186002141ddc82456b933f6eca1
7
+ data.tar.gz: e8e40d3914ca288375bb2566185ac0e87054f39bd230a780729e21e4690751d2fa36b56e9360921b2c6667e0a16a622e5975a0152da57838e484bd109fbb9d41
data/README.md CHANGED
@@ -5,7 +5,7 @@ and [mustache jQuery integration](https://github.com/jonnyreeves/jquery-Mustache
5
5
 
6
6
  Integrated versions are:
7
7
 
8
- * mustache.js - <b id="mustache-js-version">0.7.2</b>
8
+ * mustache.js - <b id="mustache-js-version">0.7.3</b>
9
9
  * jQuery mustache - <b id="jQuery-mustache-version">0.2.7</b>
10
10
 
11
11
  ### Installation
@@ -1,3 +1,3 @@
1
1
  module MustacheJsRails
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
@@ -38,10 +38,14 @@
38
38
  }
39
39
 
40
40
  var Object_toString = Object.prototype.toString;
41
- var isArray = Array.isArray || function (obj) {
42
- return Object_toString.call(obj) === '[object Array]';
41
+ var isArray = Array.isArray || function (object) {
42
+ return Object_toString.call(object) === '[object Array]';
43
43
  };
44
44
 
45
+ function isFunction(object) {
46
+ return typeof object === 'function';
47
+ }
48
+
45
49
  function escapeRegExp(string) {
46
50
  return string.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
47
51
  }
@@ -82,9 +86,10 @@
82
86
  var match = this.tail.match(re);
83
87
 
84
88
  if (match && match.index === 0) {
85
- this.tail = this.tail.substring(match[0].length);
86
- this.pos += match[0].length;
87
- return match[0];
89
+ var string = match[0];
90
+ this.tail = this.tail.substring(string.length);
91
+ this.pos += string.length;
92
+ return string;
88
93
  }
89
94
 
90
95
  return "";
@@ -95,30 +100,30 @@
95
100
  * the skipped string, which is the entire tail if no match can be made.
96
101
  */
97
102
  Scanner.prototype.scanUntil = function (re) {
98
- var match, pos = this.tail.search(re);
103
+ var index = this.tail.search(re), match;
99
104
 
100
- switch (pos) {
105
+ switch (index) {
101
106
  case -1:
102
107
  match = this.tail;
103
- this.pos += this.tail.length;
104
108
  this.tail = "";
105
109
  break;
106
110
  case 0:
107
111
  match = "";
108
112
  break;
109
113
  default:
110
- match = this.tail.substring(0, pos);
111
- this.tail = this.tail.substring(pos);
112
- this.pos += pos;
114
+ match = this.tail.substring(0, index);
115
+ this.tail = this.tail.substring(index);
113
116
  }
114
117
 
118
+ this.pos += match.length;
119
+
115
120
  return match;
116
121
  };
117
122
 
118
123
  function Context(view, parent) {
119
- this.view = view || {};
124
+ this.view = view == null ? {} : view;
120
125
  this.parent = parent;
121
- this._cache = {};
126
+ this._cache = { '.': this.view };
122
127
  }
123
128
 
124
129
  Context.make = function (view) {
@@ -130,35 +135,35 @@
130
135
  };
131
136
 
132
137
  Context.prototype.lookup = function (name) {
133
- var value = this._cache[name];
138
+ var value;
139
+ if (name in this._cache) {
140
+ value = this._cache[name];
141
+ } else {
142
+ var context = this;
134
143
 
135
- if (!value) {
136
- if (name == '.') {
137
- value = this.view;
138
- } else {
139
- var context = this;
140
-
141
- while (context) {
142
- if (name.indexOf('.') > 0) {
143
- value = context.view;
144
- var names = name.split('.'), i = 0;
145
- while (value && i < names.length) {
146
- value = value[names[i++]];
147
- }
148
- } else {
149
- value = context.view[name];
144
+ while (context) {
145
+ if (name.indexOf('.') > 0) {
146
+ value = context.view;
147
+
148
+ var names = name.split('.'), i = 0;
149
+ while (value != null && i < names.length) {
150
+ value = value[names[i++]];
150
151
  }
152
+ } else {
153
+ value = context.view[name];
154
+ }
151
155
 
152
- if (value != null) break;
156
+ if (value != null) break;
153
157
 
154
- context = context.parent;
155
- }
158
+ context = context.parent;
156
159
  }
157
160
 
158
161
  this._cache[name] = value;
159
162
  }
160
163
 
161
- if (typeof value === 'function') value = value.call(this.view);
164
+ if (isFunction(value)) {
165
+ value = value.call(this.view);
166
+ }
162
167
 
163
168
  return value;
164
169
  };
@@ -201,7 +206,7 @@
201
206
  var self = this;
202
207
  return function (view, partials) {
203
208
  if (partials) {
204
- if (typeof partials === 'function') {
209
+ if (isFunction(partials)) {
205
210
  self._loadPartial = partials;
206
211
  } else {
207
212
  for (var name in partials) {
@@ -227,6 +232,12 @@
227
232
  function renderTokens(tokens, writer, context, template) {
228
233
  var buffer = '';
229
234
 
235
+ // This function is used to render an artbitrary template
236
+ // in the current context by higher-order functions.
237
+ function subRender(template) {
238
+ return writer.render(template, context);
239
+ }
240
+
230
241
  var token, tokenValue, value;
231
242
  for (var i = 0, len = tokens.length; i < len; ++i) {
232
243
  token = tokens[i];
@@ -236,7 +247,7 @@
236
247
  case '#':
237
248
  value = context.lookup(tokenValue);
238
249
 
239
- if (typeof value === 'object') {
250
+ if (typeof value === 'object' || typeof value === 'string') {
240
251
  if (isArray(value)) {
241
252
  for (var j = 0, jlen = value.length; j < jlen; ++j) {
242
253
  buffer += renderTokens(token[4], writer, context.push(value[j]), template);
@@ -244,11 +255,9 @@
244
255
  } else if (value) {
245
256
  buffer += renderTokens(token[4], writer, context.push(value), template);
246
257
  }
247
- } else if (typeof value === 'function') {
258
+ } else if (isFunction(value)) {
248
259
  var text = template == null ? null : template.slice(token[3], token[5]);
249
- value = value.call(context.view, text, function (template) {
250
- return writer.render(template, context);
251
- });
260
+ value = value.call(context.view, text, subRender);
252
261
  if (value != null) buffer += value;
253
262
  } else if (value) {
254
263
  buffer += renderTokens(token[4], writer, context, template);
@@ -267,7 +276,7 @@
267
276
  break;
268
277
  case '>':
269
278
  value = writer.getPartial(tokenValue);
270
- if (typeof value === 'function') buffer += value(context);
279
+ if (isFunction(value)) buffer += value(context);
271
280
  break;
272
281
  case '&':
273
282
  value = context.lookup(tokenValue);
@@ -388,7 +397,7 @@
388
397
  nonSpace = false;
389
398
  }
390
399
 
391
- var start, type, value, chr, token;
400
+ var start, type, value, chr, token, openSection;
392
401
  while (!scanner.eos()) {
393
402
  start = scanner.pos;
394
403
 
@@ -444,30 +453,36 @@
444
453
  sections.push(token);
445
454
  } else if (type === '/') {
446
455
  // Check section nesting.
447
- if (sections.length === 0) throw new Error('Unopened section "' + value + '" at ' + start);
448
- var openSection = sections.pop();
449
- if (openSection[1] !== value) throw new Error('Unclosed section "' + openSection[1] + '" at ' + start);
456
+ openSection = sections.pop();
457
+ if (!openSection) {
458
+ throw new Error('Unopened section "' + value + '" at ' + start);
459
+ }
460
+ if (openSection[1] !== value) {
461
+ throw new Error('Unclosed section "' + openSection[1] + '" at ' + start);
462
+ }
450
463
  } else if (type === 'name' || type === '{' || type === '&') {
451
464
  nonSpace = true;
452
465
  } else if (type === '=') {
453
466
  // Set the tags for the next time around.
454
467
  tags = value.split(spaceRe);
455
- if (tags.length !== 2) throw new Error('Invalid tags at ' + start + ': ' + tags.join(', '));
468
+ if (tags.length !== 2) {
469
+ throw new Error('Invalid tags at ' + start + ': ' + tags.join(', '));
470
+ }
456
471
  tagRes = escapeTags(tags);
457
472
  }
458
473
  }
459
474
 
460
475
  // Make sure there are no open sections when we're done.
461
- var openSection = sections.pop();
462
- if (openSection) throw new Error('Unclosed section "' + openSection[1] + '" at ' + scanner.pos);
463
-
464
- tokens = squashTokens(tokens);
476
+ openSection = sections.pop();
477
+ if (openSection) {
478
+ throw new Error('Unclosed section "' + openSection[1] + '" at ' + scanner.pos);
479
+ }
465
480
 
466
- return nestTokens(tokens);
481
+ return nestTokens(squashTokens(tokens));
467
482
  }
468
483
 
469
484
  mustache.name = "mustache.js";
470
- mustache.version = "0.7.2";
485
+ mustache.version = "0.7.3";
471
486
  mustache.tags = ["{{", "}}"];
472
487
 
473
488
  mustache.Scanner = Scanner;
@@ -526,7 +541,7 @@
526
541
  mustache.to_html = function (template, view, partials, send) {
527
542
  var result = mustache.render(template, view, partials);
528
543
 
529
- if (typeof send === "function") {
544
+ if (isFunction(send)) {
530
545
  send(result);
531
546
  } else {
532
547
  return result;
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mustache-js-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Krzysztof Knapik
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-06-25 00:00:00.000000000 Z
11
+ date: 2013-11-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties