stringjs-rails 1.5.1 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,35 +5,57 @@ string.js - Copyright (C) 2012-2013, JP Richardson <jprichardson@gmail.com>
5
5
  !(function() {
6
6
  "use strict";
7
7
 
8
- var VERSION = '1.5.1';
8
+ var VERSION = '1.6.0';
9
9
 
10
10
  var ENTITIES = {};
11
11
 
12
- function S(s) {
12
+ //******************************************************************************
13
+ // Added an initialize function which is essentially the code from the S
14
+ // constructor. Now, the S constructor calls this and a new method named
15
+ // setValue calls it as well. The setValue function allows constructors for
16
+ // modules that extend string.js to set the initial value of an object without
17
+ // knowing the internal workings of string.js.
18
+ //
19
+ // Also, all methods which return a new S object now call:
20
+ //
21
+ // return new this.constructor(s);
22
+ //
23
+ // instead of:
24
+ //
25
+ // return new S(s);
26
+ //
27
+ // This allows extended objects to keep their proper instanceOf and constructor.
28
+ //******************************************************************************
29
+
30
+ function initialize (object, s) {
13
31
  if (s !== null && s !== undefined) {
14
32
  if (typeof s === 'string')
15
- this.s = s;
33
+ object.s = s;
16
34
  else
17
- this.s = s.toString();
35
+ object.s = s.toString();
18
36
  } else {
19
- this.s = s; //null or undefined
37
+ object.s = s; //null or undefined
20
38
  }
21
39
 
22
- this.orig = s; //original object, currently only used by toCSV() and toBoolean()
40
+ object.orig = s; //original object, currently only used by toCSV() and toBoolean()
23
41
 
24
42
  if (s !== null && s !== undefined) {
25
- if (this.__defineGetter__) {
26
- this.__defineGetter__('length', function() {
27
- return this.s.length;
43
+ if (object.__defineGetter__) {
44
+ object.__defineGetter__('length', function() {
45
+ return object.s.length;
28
46
  })
29
47
  } else {
30
- this.length = s.length;
48
+ object.length = s.length;
31
49
  }
32
50
  } else {
33
- this.length = -1;
51
+ object.length = -1;
34
52
  }
35
53
  }
36
54
 
55
+ function S(s) {
56
+ initialize(this, s);
57
+ }
58
+
37
59
  var __nsp = String.prototype;
38
60
  var __sp = S.prototype = {
39
61
 
@@ -42,7 +64,7 @@ string.js - Copyright (C) 2012-2013, JP Richardson <jprichardson@gmail.com>
42
64
  var startPos = s.indexOf(left);
43
65
  var endPos = s.indexOf(right);
44
66
  var start = startPos + left.length;
45
- return new S(endPos > startPos ? s.slice(start, endPos) : "");
67
+ return new this.constructor(endPos > startPos ? s.slice(start, endPos) : "");
46
68
  },
47
69
 
48
70
  //# modified slightly from https://github.com/epeli/underscore.string
@@ -50,11 +72,11 @@ string.js - Copyright (C) 2012-2013, JP Richardson <jprichardson@gmail.com>
50
72
  var s = this.trim().s.replace(/(\-|_|\s)+(.)?/g, function(mathc, sep, c) {
51
73
  return (c ? c.toUpperCase() : '');
52
74
  });
53
- return new S(s);
75
+ return new this.constructor(s);
54
76
  },
55
77
 
56
78
  capitalize: function() {
57
- return new S(this.s.substr(0, 1).toUpperCase() + this.s.substring(1).toLowerCase());
79
+ return new this.constructor(this.s.substr(0, 1).toUpperCase() + this.s.substring(1).toLowerCase());
58
80
  },
59
81
 
60
82
  charAt: function(index) {
@@ -65,7 +87,7 @@ string.js - Copyright (C) 2012-2013, JP Richardson <jprichardson@gmail.com>
65
87
  var s = this.s;
66
88
  if (s.indexOf(prefix) === 0) {
67
89
  s = s.slice(prefix.length);
68
- return new S(s);
90
+ return new this.constructor(s);
69
91
  } else {
70
92
  return this;
71
93
  }
@@ -75,7 +97,7 @@ string.js - Copyright (C) 2012-2013, JP Richardson <jprichardson@gmail.com>
75
97
  if (this.endsWith(suffix)) {
76
98
  var s = this.s;
77
99
  s = s.slice(0, s.length - suffix.length);
78
- return new S(s);
100
+ return new this.constructor(s);
79
101
  } else {
80
102
  return this;
81
103
  }
@@ -84,7 +106,7 @@ string.js - Copyright (C) 2012-2013, JP Richardson <jprichardson@gmail.com>
84
106
  //#thanks Google
85
107
  collapseWhitespace: function() {
86
108
  var s = this.s.replace(/[\s\xa0]+/g, ' ').replace(/^\s+|\s+$/g, '');
87
- return new S(s);
109
+ return new this.constructor(s);
88
110
  },
89
111
 
90
112
  contains: function(ss) {
@@ -106,7 +128,7 @@ string.js - Copyright (C) 2012-2013, JP Richardson <jprichardson@gmail.com>
106
128
  //#modified from https://github.com/epeli/underscore.string
107
129
  dasherize: function() {
108
130
  var s = this.trim().s.replace(/[_\s]+/g, '-').replace(/([A-Z])/g, '-$1').replace(/-+/g, '-').toLowerCase();
109
- return new S(s);
131
+ return new this.constructor(s);
110
132
  },
111
133
 
112
134
  decodeHtmlEntities: function() { //https://github.com/substack/node-ent/blob/master/index.js
@@ -132,7 +154,7 @@ string.js - Copyright (C) 2012-2013, JP Richardson <jprichardson@gmail.com>
132
154
  }
133
155
  })
134
156
 
135
- return new S(s);
157
+ return new this.constructor(s);
136
158
  },
137
159
 
138
160
  endsWith: function(suffix) {
@@ -141,7 +163,7 @@ string.js - Copyright (C) 2012-2013, JP Richardson <jprichardson@gmail.com>
141
163
  },
142
164
 
143
165
  escapeHTML: function() { //from underscore.string
144
- return new S(this.s.replace(/[&<>"']/g, function(m){ return '&' + reversedEscapeChars[m] + ';'; }));
166
+ return new this.constructor(this.s.replace(/[&<>"']/g, function(m){ return '&' + reversedEscapeChars[m] + ';'; }));
145
167
  },
146
168
 
147
169
  ensureLeft: function(prefix) {
@@ -149,7 +171,7 @@ string.js - Copyright (C) 2012-2013, JP Richardson <jprichardson@gmail.com>
149
171
  if (s.indexOf(prefix) === 0) {
150
172
  return this;
151
173
  } else {
152
- return new S(prefix + s);
174
+ return new this.constructor(prefix + s);
153
175
  }
154
176
  },
155
177
 
@@ -158,15 +180,15 @@ string.js - Copyright (C) 2012-2013, JP Richardson <jprichardson@gmail.com>
158
180
  if (this.endsWith(suffix)) {
159
181
  return this;
160
182
  } else {
161
- return new S(s + suffix);
183
+ return new this.constructor(s + suffix);
162
184
  }
163
185
  },
164
186
 
165
187
  humanize: function() { //modified from underscore.string
166
188
  if (this.s === null || this.s === undefined)
167
- return new S('')
189
+ return new this.constructor('')
168
190
  var s = this.underscore().replace(/_id$/,'').replace(/_/g, ' ').trim().capitalize()
169
- return new S(s)
191
+ return new this.constructor(s)
170
192
  },
171
193
 
172
194
  isAlpha: function() {
@@ -196,7 +218,7 @@ string.js - Copyright (C) 2012-2013, JP Richardson <jprichardson@gmail.com>
196
218
  left: function(N) {
197
219
  if (N >= 0) {
198
220
  var s = this.s.substr(0, N);
199
- return new S(s);
221
+ return new this.constructor(s);
200
222
  } else {
201
223
  return this.right(-N);
202
224
  }
@@ -208,23 +230,23 @@ string.js - Copyright (C) 2012-2013, JP Richardson <jprichardson@gmail.com>
208
230
 
209
231
  pad: function(len, ch) { //https://github.com/component/pad
210
232
  ch = ch || ' ';
211
- if (this.s.length >= len) return new S(this.s);
233
+ if (this.s.length >= len) return new this.constructor(this.s);
212
234
  len = len - this.s.length;
213
235
  var left = Array(Math.ceil(len / 2) + 1).join(ch);
214
236
  var right = Array(Math.floor(len / 2) + 1).join(ch);
215
- return new S(left + this.s + right);
237
+ return new this.constructor(left + this.s + right);
216
238
  },
217
239
 
218
240
  padLeft: function(len, ch) { //https://github.com/component/pad
219
241
  ch = ch || ' ';
220
- if (this.s.length >= len) return new S(this.s);
221
- return new S(Array(len - this.s.length + 1).join(ch) + this.s);
242
+ if (this.s.length >= len) return new this.constructor(this.s);
243
+ return new this.constructor(Array(len - this.s.length + 1).join(ch) + this.s);
222
244
  },
223
245
 
224
246
  padRight: function(len, ch) { //https://github.com/component/pad
225
247
  ch = ch || ' ';
226
- if (this.s.length >= len) return new S(this.s);
227
- return new S(this.s + Array(len - this.s.length + 1).join(ch));
248
+ if (this.s.length >= len) return new this.constructor(this.s);
249
+ return new this.constructor(this.s + Array(len - this.s.length + 1).join(ch));
228
250
  },
229
251
 
230
252
  parseCSV: function(delimiter, qualifier, escape, lineDelimiter) { //try to parse no matter what
@@ -293,23 +315,28 @@ string.js - Copyright (C) 2012-2013, JP Richardson <jprichardson@gmail.com>
293
315
  replaceAll: function(ss, r) {
294
316
  //var s = this.s.replace(new RegExp(ss, 'g'), r);
295
317
  var s = this.s.split(ss).join(r)
296
- return new S(s);
318
+ return new this.constructor(s);
297
319
  },
298
320
 
299
321
  right: function(N) {
300
322
  if (N >= 0) {
301
323
  var s = this.s.substr(this.s.length - N, N);
302
- return new S(s);
324
+ return new this.constructor(s);
303
325
  } else {
304
326
  return this.left(-N);
305
327
  }
306
328
  },
307
329
 
330
+ setValue: function (s) {
331
+ initialize(this, s);
332
+ return this;
333
+ },
334
+
308
335
  slugify: function() {
309
336
  var sl = (new S(this.s.replace(/[^\w\s-]/g, '').toLowerCase())).dasherize().s;
310
337
  if (sl.charAt(0) === '-')
311
338
  sl = sl.substr(1);
312
- return new S(sl);
339
+ return new this.constructor(sl);
313
340
  },
314
341
 
315
342
  startsWith: function(prefix) {
@@ -317,8 +344,8 @@ string.js - Copyright (C) 2012-2013, JP Richardson <jprichardson@gmail.com>
317
344
  },
318
345
 
319
346
  stripPunctuation: function() {
320
- //return new S(this.s.replace(/[\.,-\/#!$%\^&\*;:{}=\-_`~()]/g,""));
321
- return new S(this.s.replace(/[^\w\s]|_/g, "").replace(/\s+/g, " "));
347
+ //return new this.constructor(this.s.replace(/[\.,-\/#!$%\^&\*;:{}=\-_`~()]/g,""));
348
+ return new this.constructor(this.s.replace(/[^\w\s]|_/g, "").replace(/\s+/g, " "));
322
349
  },
323
350
 
324
351
  stripTags: function() { //from sugar.js
@@ -326,7 +353,7 @@ string.js - Copyright (C) 2012-2013, JP Richardson <jprichardson@gmail.com>
326
353
  multiArgs(args, function(tag) {
327
354
  s = s.replace(RegExp('<\/?' + tag + '[^<>]*>', 'gi'), '');
328
355
  });
329
- return new S(s);
356
+ return new this.constructor(s);
330
357
  },
331
358
 
332
359
  template: function(values, opening, closing) {
@@ -342,11 +369,11 @@ string.js - Copyright (C) 2012-2013, JP Richardson <jprichardson@gmail.com>
342
369
  if (typeof values[key] != 'undefined')
343
370
  s = s.replace(match, values[key]);
344
371
  });
345
- return new S(s);
372
+ return new this.constructor(s);
346
373
  },
347
374
 
348
375
  times: function(n) {
349
- return new S(new Array(n + 1).join(this.s));
376
+ return new this.constructor(new Array(n + 1).join(this.s));
350
377
  },
351
378
 
352
379
  toBoolean: function() {
@@ -376,7 +403,7 @@ string.js - Copyright (C) 2012-2013, JP Richardson <jprichardson@gmail.com>
376
403
  s = this.s.replace(/(^\s*|\s*$)/g, '')
377
404
  else
378
405
  s = this.s.trim()
379
- return new S(s);
406
+ return new this.constructor(s);
380
407
  },
381
408
 
382
409
  trimLeft: function() {
@@ -385,7 +412,7 @@ string.js - Copyright (C) 2012-2013, JP Richardson <jprichardson@gmail.com>
385
412
  s = this.s.trimLeft();
386
413
  else
387
414
  s = this.s.replace(/(^\s*)/g, '');
388
- return new S(s);
415
+ return new this.constructor(s);
389
416
  },
390
417
 
391
418
  trimRight: function() {
@@ -394,7 +421,7 @@ string.js - Copyright (C) 2012-2013, JP Richardson <jprichardson@gmail.com>
394
421
  s = this.s.trimRight();
395
422
  else
396
423
  s = this.s.replace(/\s+$/, '');
397
- return new S(s);
424
+ return new this.constructor(s);
398
425
  },
399
426
 
400
427
  truncate: function(length, pruneStr) { //from underscore.string, author: github.com/rwz
@@ -403,7 +430,7 @@ string.js - Copyright (C) 2012-2013, JP Richardson <jprichardson@gmail.com>
403
430
  length = ~~length;
404
431
  pruneStr = pruneStr || '...';
405
432
 
406
- if (str.length <= length) return new S(str);
433
+ if (str.length <= length) return new this.constructor(str);
407
434
 
408
435
  var tmpl = function(c){ return c.toUpperCase() !== c.toLowerCase() ? 'A' : ' '; },
409
436
  template = str.slice(0, length+1).replace(/.(?=\W*\w*$)/g, tmpl); // 'Hello, world' -> 'HellAA AAAAA'
@@ -478,7 +505,7 @@ string.js - Copyright (C) 2012-2013, JP Richardson <jprichardson@gmail.com>
478
505
  //chop last delim
479
506
  //console.log(buildString.length)
480
507
  buildString.length = buildString.length - 1;
481
- return new S(buildString.join(''));
508
+ return new this.constructor(buildString.join(''));
482
509
  },
483
510
 
484
511
  toString: function() {
@@ -491,11 +518,11 @@ string.js - Copyright (C) 2012-2013, JP Richardson <jprichardson@gmail.com>
491
518
  if ((new S(this.s.charAt(0))).isUpper()) {
492
519
  s = '_' + s;
493
520
  }
494
- return new S(s);
521
+ return new this.constructor(s);
495
522
  },
496
523
 
497
524
  unescapeHTML: function() { //from underscore.string
498
- return new S(this.s.replace(/\&([^;]+);/g, function(entity, entityCode){
525
+ return new this.constructor(this.s.replace(/\&([^;]+);/g, function(entity, entityCode){
499
526
  var match;
500
527
 
501
528
  if (entityCode in escapeChars) {
@@ -553,7 +580,7 @@ string.js - Copyright (C) 2012-2013, JP Richardson <jprichardson@gmail.com>
553
580
  if (nativeProperties[name] === 'string') {
554
581
  __sp[name] = function() {
555
582
  //console.log(name)
556
- return new S(stringProp.apply(this, arguments));
583
+ return new this.constructor(stringProp.apply(this, arguments));
557
584
  }
558
585
  } else {
559
586
  __sp[name] = stringProp;
@@ -575,6 +602,14 @@ string.js - Copyright (C) 2012-2013, JP Richardson <jprichardson@gmail.com>
575
602
  __sp.decodeHTMLEntities = __sp.decodeHtmlEntities //ensure consistent casing scheme of 'HTML'
576
603
 
577
604
 
605
+ //******************************************************************************
606
+ // Set the constructor. Without this, string.js objects are instances of
607
+ // Object instead of S.
608
+ //******************************************************************************
609
+
610
+ __sp.constructor = S;
611
+
612
+
578
613
  /*************************************
579
614
  /* Private Functions
580
615
  /*************************************/
@@ -1,3 +1,3 @@
1
1
  /*
2
2
  string.js - Copyright (C) 2012-2013, JP Richardson <jprichardson@gmail.com>
3
- */!function(){"use strict";function n(e){e!==null&&e!==undefined?typeof e=="string"?this.s=e:this.s=e.toString():this.s=e,this.orig=e,e!==null&&e!==undefined?this.__defineGetter__?this.__defineGetter__("length",function(){return this.s.length}):this.length=e.length:this.length=-1}function o(){for(var e in i)(function(e){var t=i[e];r.hasOwnProperty(e)||(s.push(e),r[e]=function(){return String.prototype.s=this,t.apply(this,arguments)})})(e)}function u(){for(var e=0;e<s.length;++e)delete String.prototype[s[e]];s.length=0}function l(){var e=c(),t={};for(var n=0;n<e.length;++n){var i=e[n],s=r[i];try{var o=typeof s.apply("teststring",[]);t[i]=o}catch(u){}}return t}function c(){var e=[];if(Object.getOwnPropertyNames)return e=Object.getOwnPropertyNames(r),e.splice(e.indexOf("valueOf"),1),e.splice(e.indexOf("toString"),1),e;var t={},n=[];for(var i in String.prototype)t[i]=i;for(var i in Object.prototype)delete t[i];for(var i in t)e.push(i);return e}function h(e){return new n(e)}function p(e,t){var n=[],r;for(r=0;r<e.length;r++)n.push(e[r]),t&&t.call(e,e[r],r);return n}var e="1.5.1",t={},r=String.prototype,i=n.prototype={between:function(e,t){var r=this.s,i=r.indexOf(e),s=r.indexOf(t),o=i+e.length;return new n(s>i?r.slice(o,s):"")},camelize:function(){var e=this.trim().s.replace(/(\-|_|\s)+(.)?/g,function(e,t,n){return n?n.toUpperCase():""});return new n(e)},capitalize:function(){return new n(this.s.substr(0,1).toUpperCase()+this.s.substring(1).toLowerCase())},charAt:function(e){return this.s.charAt(e)},chompLeft:function(e){var t=this.s;return t.indexOf(e)===0?(t=t.slice(e.length),new n(t)):this},chompRight:function(e){if(this.endsWith(e)){var t=this.s;return t=t.slice(0,t.length-e.length),new n(t)}return this},collapseWhitespace:function(){var e=this.s.replace(/[\s\xa0]+/g," ").replace(/^\s+|\s+$/g,"");return new n(e)},contains:function(e){return this.s.indexOf(e)>=0},count:function(e){var t=0,n=this.s.indexOf(e);while(n>=0)t+=1,n=this.s.indexOf(e,n+1);return t},dasherize:function(){var e=this.trim().s.replace(/[_\s]+/g,"-").replace(/([A-Z])/g,"-$1").replace(/-+/g,"-").toLowerCase();return new n(e)},decodeHtmlEntities:function(){var e=this.s;return e=e.replace(/&#(\d+);?/g,function(e,t){return String.fromCharCode(t)}).replace(/&#[xX]([A-Fa-f0-9]+);?/g,function(e,t){return String.fromCharCode(parseInt(t,16))}).replace(/&([^;\W]+;?)/g,function(e,n){var r=n.replace(/;$/,""),i=t[n]||n.match(/;$/)&&t[r];return typeof i=="number"?String.fromCharCode(i):typeof i=="string"?i:e}),new n(e)},endsWith:function(e){var t=this.s.length-e.length;return t>=0&&this.s.indexOf(e,t)===t},escapeHTML:function(){return new n(this.s.replace(/[&<>"']/g,function(e){return"&"+v[e]+";"}))},ensureLeft:function(e){var t=this.s;return t.indexOf(e)===0?this:new n(e+t)},ensureRight:function(e){var t=this.s;return this.endsWith(e)?this:new n(t+e)},humanize:function(){if(this.s===null||this.s===undefined)return new n("");var e=this.underscore().replace(/_id$/,"").replace(/_/g," ").trim().capitalize();return new n(e)},isAlpha:function(){return!/[^a-z\xC0-\xFF]/.test(this.s.toLowerCase())},isAlphaNumeric:function(){return!/[^0-9a-z\xC0-\xFF]/.test(this.s.toLowerCase())},isEmpty:function(){return this.s===null||this.s===undefined?!0:/^[\s\xa0]*$/.test(this.s)},isLower:function(){return this.isAlpha()&&this.s.toLowerCase()===this.s},isNumeric:function(){return!/[^0-9]/.test(this.s)},isUpper:function(){return this.isAlpha()&&this.s.toUpperCase()===this.s},left:function(e){if(e>=0){var t=this.s.substr(0,e);return new n(t)}return this.right(-e)},lines:function(){return this.replaceAll("\r\n","\n").s.split("\n")},pad:function(e,t){t=t||" ";if(this.s.length>=e)return new n(this.s);e-=this.s.length;var r=Array(Math.ceil(e/2)+1).join(t),i=Array(Math.floor(e/2)+1).join(t);return new n(r+this.s+i)},padLeft:function(e,t){return t=t||" ",this.s.length>=e?new n(this.s):new n(Array(e-this.s.length+1).join(t)+this.s)},padRight:function(e,t){return t=t||" ",this.s.length>=e?new n(this.s):new n(this.s+Array(e-this.s.length+1).join(t))},parseCSV:function(e,t,n,r){e=e||",",n=n||"\\",typeof t=="undefined"&&(t='"');var i=0,s=[],o=[],u=this.s.length,a=!1,f=this,l=function(e){return f.s.charAt(e)};if(typeof r!="undefined")var c=[];t||(a=!0);while(i<u){var h=l(i);switch(h){case n:if(a&&(n!==t||l(i+1)===t)){i+=1,s.push(l(i));break}if(n!==t)break;case t:a=!a;break;case e:a&&t?s.push(h):(o.push(s.join("")),s.length=0);break;case r:a?s.push(h):c&&(o.push(s.join("")),c.push(o),o=[],s.length=0);break;default:a&&s.push(h)}i+=1}return o.push(s.join("")),c?(c.push(o),c):o},replaceAll:function(e,t){var r=this.s.split(e).join(t);return new n(r)},right:function(e){if(e>=0){var t=this.s.substr(this.s.length-e,e);return new n(t)}return this.left(-e)},slugify:function(){var e=(new n(this.s.replace(/[^\w\s-]/g,"").toLowerCase())).dasherize().s;return e.charAt(0)==="-"&&(e=e.substr(1)),new n(e)},startsWith:function(e){return this.s.lastIndexOf(e,0)===0},stripPunctuation:function(){return new n(this.s.replace(/[^\w\s]|_/g,"").replace(/\s+/g," "))},stripTags:function(){var e=this.s,t=arguments.length>0?arguments:[""];return p(t,function(t){e=e.replace(RegExp("</?"+t+"[^<>]*>","gi"),"")}),new n(e)},template:function(e,t,r){var i=this.s,t=t||h.TMPL_OPEN,r=r||h.TMPL_CLOSE,s=new RegExp(t+"(.+?)"+r,"g"),o=i.match(s)||[];return o.forEach(function(n){var s=n.substring(t.length,n.length-r.length);typeof e[s]!="undefined"&&(i=i.replace(n,e[s]))}),new n(i)},times:function(e){return new n((new Array(e+1)).join(this.s))},toBoolean:function(){if(typeof this.orig=="string"){var e=this.s.toLowerCase();return e==="true"||e==="yes"||e==="on"}return this.orig===!0||this.orig===1},toFloat:function(e){var t=parseFloat(this.s);return e?parseFloat(t.toFixed(e)):t},toInt:function(){return/^\s*-?0x/i.test(this.s)?parseInt(this.s,16):parseInt(this.s,10)},trim:function(){var e;return typeof r.trim=="undefined"?e=this.s.replace(/(^\s*|\s*$)/g,""):e=this.s.trim(),new n(e)},trimLeft:function(){var e;return r.trimLeft?e=this.s.trimLeft():e=this.s.replace(/(^\s*)/g,""),new n(e)},trimRight:function(){var e;return r.trimRight?e=this.s.trimRight():e=this.s.replace(/\s+$/,""),new n(e)},truncate:function(e,t){var r=this.s;e=~~e,t=t||"...";if(r.length<=e)return new n(r);var i=function(e){return e.toUpperCase()!==e.toLowerCase()?"A":" "},s=r.slice(0,e+1).replace(/.(?=\W*\w*$)/g,i);return s.slice(s.length-2).match(/\w\w/)?s=s.replace(/\s*\S+$/,""):s=(new n(s.slice(0,s.length-1))).trimRight().s,(s+t).length>r.length?new n(r):new n(r.slice(0,s.length)+t)},toCSV:function(){function u(e){return e!==null&&e!==""}var e=",",t='"',r="\\",i=!0,s=!1,o=[];typeof arguments[0]=="object"?(e=arguments[0].delimiter||e,e=arguments[0].separator||e,t=arguments[0].qualifier||t,i=!!arguments[0].encloseNumbers,r=arguments[0].escape||r,s=!!arguments[0].keys):typeof arguments[0]=="string"&&(e=arguments[0]),typeof arguments[1]=="string"&&(t=arguments[1]),arguments[1]===null&&(t=null);if(this.orig instanceof Array)o=this.orig;else for(var a in this.orig)this.orig.hasOwnProperty(a)&&(s?o.push(a):o.push(this.orig[a]));var f=r+t,l=[];for(var c=0;c<o.length;++c){var h=u(t);typeof o[c]=="number"&&(h&=i),h&&l.push(t);if(o[c]!==null&&o[c]!==undefined){var p=(new n(o[c])).replaceAll(t,f).s;l.push(p)}else l.push("");h&&l.push(t),e&&l.push(e)}return l.length=l.length-1,new n(l.join(""))},toString:function(){return this.s},underscore:function(){var e=this.trim().s.replace(/([a-z\d])([A-Z]+)/g,"$1_$2").replace(/[-\s]+/g,"_").toLowerCase();return(new n(this.s.charAt(0))).isUpper()&&(e="_"+e),new n(e)},unescapeHTML:function(){return new n(this.s.replace(/\&([^;]+);/g,function(e,t){var n;return t in d?d[t]:(n=t.match(/^#x([\da-fA-F]+)$/))?String.fromCharCode(parseInt(n[1],16)):(n=t.match(/^#(\d+)$/))?String.fromCharCode(~~n[1]):e}))},valueOf:function(){return this.s.valueOf()}},s=[],a=l();for(var f in a)(function(e){var t=r[e];typeof t=="function"&&(i[e]||(a[e]==="string"?i[e]=function(){return new n(t.apply(this,arguments))}:i[e]=t))})(f);i.repeat=i.times,i.include=i.contains,i.toInteger=i.toInt,i.toBool=i.toBoolean,i.decodeHTMLEntities=i.decodeHtmlEntities,h.extendPrototype=o,h.restorePrototype=u,h.VERSION=e,h.TMPL_OPEN="{{",h.TMPL_CLOSE="}}",h.ENTITIES=t,typeof module!="undefined"&&typeof module.exports!="undefined"?module.exports=h:typeof define=="function"&&define.amd?define([],function(){return h}):window.S=h;var d={lt:"<",gt:">",quot:'"',apos:"'",amp:"&"},v={};for(var m in d)v[d[m]]=m;t={amp:"&",gt:">",lt:"<",quot:'"',apos:"'",AElig:198,Aacute:193,Acirc:194,Agrave:192,Aring:197,Atilde:195,Auml:196,Ccedil:199,ETH:208,Eacute:201,Ecirc:202,Egrave:200,Euml:203,Iacute:205,Icirc:206,Igrave:204,Iuml:207,Ntilde:209,Oacute:211,Ocirc:212,Ograve:210,Oslash:216,Otilde:213,Ouml:214,THORN:222,Uacute:218,Ucirc:219,Ugrave:217,Uuml:220,Yacute:221,aacute:225,acirc:226,aelig:230,agrave:224,aring:229,atilde:227,auml:228,ccedil:231,eacute:233,ecirc:234,egrave:232,eth:240,euml:235,iacute:237,icirc:238,igrave:236,iuml:239,ntilde:241,oacute:243,ocirc:244,ograve:242,oslash:248,otilde:245,ouml:246,szlig:223,thorn:254,uacute:250,ucirc:251,ugrave:249,uuml:252,yacute:253,yuml:255,copy:169,reg:174,nbsp:160,iexcl:161,cent:162,pound:163,curren:164,yen:165,brvbar:166,sect:167,uml:168,ordf:170,laquo:171,not:172,shy:173,macr:175,deg:176,plusmn:177,sup1:185,sup2:178,sup3:179,acute:180,micro:181,para:182,middot:183,cedil:184,ordm:186,raquo:187,frac14:188,frac12:189,frac34:190,iquest:191,times:215,divide:247,"OElig;":338,"oelig;":339,"Scaron;":352,"scaron;":353,"Yuml;":376,"fnof;":402,"circ;":710,"tilde;":732,"Alpha;":913,"Beta;":914,"Gamma;":915,"Delta;":916,"Epsilon;":917,"Zeta;":918,"Eta;":919,"Theta;":920,"Iota;":921,"Kappa;":922,"Lambda;":923,"Mu;":924,"Nu;":925,"Xi;":926,"Omicron;":927,"Pi;":928,"Rho;":929,"Sigma;":931,"Tau;":932,"Upsilon;":933,"Phi;":934,"Chi;":935,"Psi;":936,"Omega;":937,"alpha;":945,"beta;":946,"gamma;":947,"delta;":948,"epsilon;":949,"zeta;":950,"eta;":951,"theta;":952,"iota;":953,"kappa;":954,"lambda;":955,"mu;":956,"nu;":957,"xi;":958,"omicron;":959,"pi;":960,"rho;":961,"sigmaf;":962,"sigma;":963,"tau;":964,"upsilon;":965,"phi;":966,"chi;":967,"psi;":968,"omega;":969,"thetasym;":977,"upsih;":978,"piv;":982,"ensp;":8194,"emsp;":8195,"thinsp;":8201,"zwnj;":8204,"zwj;":8205,"lrm;":8206,"rlm;":8207,"ndash;":8211,"mdash;":8212,"lsquo;":8216,"rsquo;":8217,"sbquo;":8218,"ldquo;":8220,"rdquo;":8221,"bdquo;":8222,"dagger;":8224,"Dagger;":8225,"bull;":8226,"hellip;":8230,"permil;":8240,"prime;":8242,"Prime;":8243,"lsaquo;":8249,"rsaquo;":8250,"oline;":8254,"frasl;":8260,"euro;":8364,"image;":8465,"weierp;":8472,"real;":8476,"trade;":8482,"alefsym;":8501,"larr;":8592,"uarr;":8593,"rarr;":8594,"darr;":8595,"harr;":8596,"crarr;":8629,"lArr;":8656,"uArr;":8657,"rArr;":8658,"dArr;":8659,"hArr;":8660,"forall;":8704,"part;":8706,"exist;":8707,"empty;":8709,"nabla;":8711,"isin;":8712,"notin;":8713,"ni;":8715,"prod;":8719,"sum;":8721,"minus;":8722,"lowast;":8727,"radic;":8730,"prop;":8733,"infin;":8734,"ang;":8736,"and;":8743,"or;":8744,"cap;":8745,"cup;":8746,"int;":8747,"there4;":8756,"sim;":8764,"cong;":8773,"asymp;":8776,"ne;":8800,"equiv;":8801,"le;":8804,"ge;":8805,"sub;":8834,"sup;":8835,"nsub;":8836,"sube;":8838,"supe;":8839,"oplus;":8853,"otimes;":8855,"perp;":8869,"sdot;":8901,"lceil;":8968,"rceil;":8969,"lfloor;":8970,"rfloor;":8971,"lang;":9001,"rang;":9002,"loz;":9674,"spades;":9824,"clubs;":9827,"hearts;":9829,"diams;":9830}}.call(this);
3
+ */!function(){"use strict";function n(e,t){t!==null&&t!==undefined?typeof t=="string"?e.s=t:e.s=t.toString():e.s=t,e.orig=t,t!==null&&t!==undefined?e.__defineGetter__?e.__defineGetter__("length",function(){return e.s.length}):e.length=t.length:e.length=-1}function r(e){n(this,e)}function u(){for(var e in s)(function(e){var t=s[e];i.hasOwnProperty(e)||(o.push(e),i[e]=function(){return String.prototype.s=this,t.apply(this,arguments)})})(e)}function a(){for(var e=0;e<o.length;++e)delete String.prototype[o[e]];o.length=0}function c(){var e=h(),t={};for(var n=0;n<e.length;++n){var r=e[n],s=i[r];try{var o=typeof s.apply("teststring",[]);t[r]=o}catch(u){}}return t}function h(){var e=[];if(Object.getOwnPropertyNames)return e=Object.getOwnPropertyNames(i),e.splice(e.indexOf("valueOf"),1),e.splice(e.indexOf("toString"),1),e;var t={},n=[];for(var r in String.prototype)t[r]=r;for(var r in Object.prototype)delete t[r];for(var r in t)e.push(r);return e}function p(e){return new r(e)}function d(e,t){var n=[],r;for(r=0;r<e.length;r++)n.push(e[r]),t&&t.call(e,e[r],r);return n}var e="1.6.0",t={},i=String.prototype,s=r.prototype={between:function(e,t){var n=this.s,r=n.indexOf(e),i=n.indexOf(t),s=r+e.length;return new this.constructor(i>r?n.slice(s,i):"")},camelize:function(){var e=this.trim().s.replace(/(\-|_|\s)+(.)?/g,function(e,t,n){return n?n.toUpperCase():""});return new this.constructor(e)},capitalize:function(){return new this.constructor(this.s.substr(0,1).toUpperCase()+this.s.substring(1).toLowerCase())},charAt:function(e){return this.s.charAt(e)},chompLeft:function(e){var t=this.s;return t.indexOf(e)===0?(t=t.slice(e.length),new this.constructor(t)):this},chompRight:function(e){if(this.endsWith(e)){var t=this.s;return t=t.slice(0,t.length-e.length),new this.constructor(t)}return this},collapseWhitespace:function(){var e=this.s.replace(/[\s\xa0]+/g," ").replace(/^\s+|\s+$/g,"");return new this.constructor(e)},contains:function(e){return this.s.indexOf(e)>=0},count:function(e){var t=0,n=this.s.indexOf(e);while(n>=0)t+=1,n=this.s.indexOf(e,n+1);return t},dasherize:function(){var e=this.trim().s.replace(/[_\s]+/g,"-").replace(/([A-Z])/g,"-$1").replace(/-+/g,"-").toLowerCase();return new this.constructor(e)},decodeHtmlEntities:function(){var e=this.s;return e=e.replace(/&#(\d+);?/g,function(e,t){return String.fromCharCode(t)}).replace(/&#[xX]([A-Fa-f0-9]+);?/g,function(e,t){return String.fromCharCode(parseInt(t,16))}).replace(/&([^;\W]+;?)/g,function(e,n){var r=n.replace(/;$/,""),i=t[n]||n.match(/;$/)&&t[r];return typeof i=="number"?String.fromCharCode(i):typeof i=="string"?i:e}),new this.constructor(e)},endsWith:function(e){var t=this.s.length-e.length;return t>=0&&this.s.indexOf(e,t)===t},escapeHTML:function(){return new this.constructor(this.s.replace(/[&<>"']/g,function(e){return"&"+m[e]+";"}))},ensureLeft:function(e){var t=this.s;return t.indexOf(e)===0?this:new this.constructor(e+t)},ensureRight:function(e){var t=this.s;return this.endsWith(e)?this:new this.constructor(t+e)},humanize:function(){if(this.s===null||this.s===undefined)return new this.constructor("");var e=this.underscore().replace(/_id$/,"").replace(/_/g," ").trim().capitalize();return new this.constructor(e)},isAlpha:function(){return!/[^a-z\xC0-\xFF]/.test(this.s.toLowerCase())},isAlphaNumeric:function(){return!/[^0-9a-z\xC0-\xFF]/.test(this.s.toLowerCase())},isEmpty:function(){return this.s===null||this.s===undefined?!0:/^[\s\xa0]*$/.test(this.s)},isLower:function(){return this.isAlpha()&&this.s.toLowerCase()===this.s},isNumeric:function(){return!/[^0-9]/.test(this.s)},isUpper:function(){return this.isAlpha()&&this.s.toUpperCase()===this.s},left:function(e){if(e>=0){var t=this.s.substr(0,e);return new this.constructor(t)}return this.right(-e)},lines:function(){return this.replaceAll("\r\n","\n").s.split("\n")},pad:function(e,t){t=t||" ";if(this.s.length>=e)return new this.constructor(this.s);e-=this.s.length;var n=Array(Math.ceil(e/2)+1).join(t),r=Array(Math.floor(e/2)+1).join(t);return new this.constructor(n+this.s+r)},padLeft:function(e,t){return t=t||" ",this.s.length>=e?new this.constructor(this.s):new this.constructor(Array(e-this.s.length+1).join(t)+this.s)},padRight:function(e,t){return t=t||" ",this.s.length>=e?new this.constructor(this.s):new this.constructor(this.s+Array(e-this.s.length+1).join(t))},parseCSV:function(e,t,n,r){e=e||",",n=n||"\\",typeof t=="undefined"&&(t='"');var i=0,s=[],o=[],u=this.s.length,a=!1,f=this,l=function(e){return f.s.charAt(e)};if(typeof r!="undefined")var c=[];t||(a=!0);while(i<u){var h=l(i);switch(h){case n:if(a&&(n!==t||l(i+1)===t)){i+=1,s.push(l(i));break}if(n!==t)break;case t:a=!a;break;case e:a&&t?s.push(h):(o.push(s.join("")),s.length=0);break;case r:a?s.push(h):c&&(o.push(s.join("")),c.push(o),o=[],s.length=0);break;default:a&&s.push(h)}i+=1}return o.push(s.join("")),c?(c.push(o),c):o},replaceAll:function(e,t){var n=this.s.split(e).join(t);return new this.constructor(n)},right:function(e){if(e>=0){var t=this.s.substr(this.s.length-e,e);return new this.constructor(t)}return this.left(-e)},setValue:function(e){return n(this,e),this},slugify:function(){var e=(new r(this.s.replace(/[^\w\s-]/g,"").toLowerCase())).dasherize().s;return e.charAt(0)==="-"&&(e=e.substr(1)),new this.constructor(e)},startsWith:function(e){return this.s.lastIndexOf(e,0)===0},stripPunctuation:function(){return new this.constructor(this.s.replace(/[^\w\s]|_/g,"").replace(/\s+/g," "))},stripTags:function(){var e=this.s,t=arguments.length>0?arguments:[""];return d(t,function(t){e=e.replace(RegExp("</?"+t+"[^<>]*>","gi"),"")}),new this.constructor(e)},template:function(e,t,n){var r=this.s,t=t||p.TMPL_OPEN,n=n||p.TMPL_CLOSE,i=new RegExp(t+"(.+?)"+n,"g"),s=r.match(i)||[];return s.forEach(function(i){var s=i.substring(t.length,i.length-n.length);typeof e[s]!="undefined"&&(r=r.replace(i,e[s]))}),new this.constructor(r)},times:function(e){return new this.constructor((new Array(e+1)).join(this.s))},toBoolean:function(){if(typeof this.orig=="string"){var e=this.s.toLowerCase();return e==="true"||e==="yes"||e==="on"}return this.orig===!0||this.orig===1},toFloat:function(e){var t=parseFloat(this.s);return e?parseFloat(t.toFixed(e)):t},toInt:function(){return/^\s*-?0x/i.test(this.s)?parseInt(this.s,16):parseInt(this.s,10)},trim:function(){var e;return typeof i.trim=="undefined"?e=this.s.replace(/(^\s*|\s*$)/g,""):e=this.s.trim(),new this.constructor(e)},trimLeft:function(){var e;return i.trimLeft?e=this.s.trimLeft():e=this.s.replace(/(^\s*)/g,""),new this.constructor(e)},trimRight:function(){var e;return i.trimRight?e=this.s.trimRight():e=this.s.replace(/\s+$/,""),new this.constructor(e)},truncate:function(e,t){var n=this.s;e=~~e,t=t||"...";if(n.length<=e)return new this.constructor(n);var i=function(e){return e.toUpperCase()!==e.toLowerCase()?"A":" "},s=n.slice(0,e+1).replace(/.(?=\W*\w*$)/g,i);return s.slice(s.length-2).match(/\w\w/)?s=s.replace(/\s*\S+$/,""):s=(new r(s.slice(0,s.length-1))).trimRight().s,(s+t).length>n.length?new r(n):new r(n.slice(0,s.length)+t)},toCSV:function(){function u(e){return e!==null&&e!==""}var e=",",t='"',n="\\",i=!0,s=!1,o=[];typeof arguments[0]=="object"?(e=arguments[0].delimiter||e,e=arguments[0].separator||e,t=arguments[0].qualifier||t,i=!!arguments[0].encloseNumbers,n=arguments[0].escape||n,s=!!arguments[0].keys):typeof arguments[0]=="string"&&(e=arguments[0]),typeof arguments[1]=="string"&&(t=arguments[1]),arguments[1]===null&&(t=null);if(this.orig instanceof Array)o=this.orig;else for(var a in this.orig)this.orig.hasOwnProperty(a)&&(s?o.push(a):o.push(this.orig[a]));var f=n+t,l=[];for(var c=0;c<o.length;++c){var h=u(t);typeof o[c]=="number"&&(h&=i),h&&l.push(t);if(o[c]!==null&&o[c]!==undefined){var p=(new r(o[c])).replaceAll(t,f).s;l.push(p)}else l.push("");h&&l.push(t),e&&l.push(e)}return l.length=l.length-1,new this.constructor(l.join(""))},toString:function(){return this.s},underscore:function(){var e=this.trim().s.replace(/([a-z\d])([A-Z]+)/g,"$1_$2").replace(/[-\s]+/g,"_").toLowerCase();return(new r(this.s.charAt(0))).isUpper()&&(e="_"+e),new this.constructor(e)},unescapeHTML:function(){return new this.constructor(this.s.replace(/\&([^;]+);/g,function(e,t){var n;return t in v?v[t]:(n=t.match(/^#x([\da-fA-F]+)$/))?String.fromCharCode(parseInt(n[1],16)):(n=t.match(/^#(\d+)$/))?String.fromCharCode(~~n[1]):e}))},valueOf:function(){return this.s.valueOf()}},o=[],f=c();for(var l in f)(function(e){var t=i[e];typeof t=="function"&&(s[e]||(f[e]==="string"?s[e]=function(){return new this.constructor(t.apply(this,arguments))}:s[e]=t))})(l);s.repeat=s.times,s.include=s.contains,s.toInteger=s.toInt,s.toBool=s.toBoolean,s.decodeHTMLEntities=s.decodeHtmlEntities,s.constructor=r,p.extendPrototype=u,p.restorePrototype=a,p.VERSION=e,p.TMPL_OPEN="{{",p.TMPL_CLOSE="}}",p.ENTITIES=t,typeof module!="undefined"&&typeof module.exports!="undefined"?module.exports=p:typeof define=="function"&&define.amd?define([],function(){return p}):window.S=p;var v={lt:"<",gt:">",quot:'"',apos:"'",amp:"&"},m={};for(var g in v)m[v[g]]=g;t={amp:"&",gt:">",lt:"<",quot:'"',apos:"'",AElig:198,Aacute:193,Acirc:194,Agrave:192,Aring:197,Atilde:195,Auml:196,Ccedil:199,ETH:208,Eacute:201,Ecirc:202,Egrave:200,Euml:203,Iacute:205,Icirc:206,Igrave:204,Iuml:207,Ntilde:209,Oacute:211,Ocirc:212,Ograve:210,Oslash:216,Otilde:213,Ouml:214,THORN:222,Uacute:218,Ucirc:219,Ugrave:217,Uuml:220,Yacute:221,aacute:225,acirc:226,aelig:230,agrave:224,aring:229,atilde:227,auml:228,ccedil:231,eacute:233,ecirc:234,egrave:232,eth:240,euml:235,iacute:237,icirc:238,igrave:236,iuml:239,ntilde:241,oacute:243,ocirc:244,ograve:242,oslash:248,otilde:245,ouml:246,szlig:223,thorn:254,uacute:250,ucirc:251,ugrave:249,uuml:252,yacute:253,yuml:255,copy:169,reg:174,nbsp:160,iexcl:161,cent:162,pound:163,curren:164,yen:165,brvbar:166,sect:167,uml:168,ordf:170,laquo:171,not:172,shy:173,macr:175,deg:176,plusmn:177,sup1:185,sup2:178,sup3:179,acute:180,micro:181,para:182,middot:183,cedil:184,ordm:186,raquo:187,frac14:188,frac12:189,frac34:190,iquest:191,times:215,divide:247,"OElig;":338,"oelig;":339,"Scaron;":352,"scaron;":353,"Yuml;":376,"fnof;":402,"circ;":710,"tilde;":732,"Alpha;":913,"Beta;":914,"Gamma;":915,"Delta;":916,"Epsilon;":917,"Zeta;":918,"Eta;":919,"Theta;":920,"Iota;":921,"Kappa;":922,"Lambda;":923,"Mu;":924,"Nu;":925,"Xi;":926,"Omicron;":927,"Pi;":928,"Rho;":929,"Sigma;":931,"Tau;":932,"Upsilon;":933,"Phi;":934,"Chi;":935,"Psi;":936,"Omega;":937,"alpha;":945,"beta;":946,"gamma;":947,"delta;":948,"epsilon;":949,"zeta;":950,"eta;":951,"theta;":952,"iota;":953,"kappa;":954,"lambda;":955,"mu;":956,"nu;":957,"xi;":958,"omicron;":959,"pi;":960,"rho;":961,"sigmaf;":962,"sigma;":963,"tau;":964,"upsilon;":965,"phi;":966,"chi;":967,"psi;":968,"omega;":969,"thetasym;":977,"upsih;":978,"piv;":982,"ensp;":8194,"emsp;":8195,"thinsp;":8201,"zwnj;":8204,"zwj;":8205,"lrm;":8206,"rlm;":8207,"ndash;":8211,"mdash;":8212,"lsquo;":8216,"rsquo;":8217,"sbquo;":8218,"ldquo;":8220,"rdquo;":8221,"bdquo;":8222,"dagger;":8224,"Dagger;":8225,"bull;":8226,"hellip;":8230,"permil;":8240,"prime;":8242,"Prime;":8243,"lsaquo;":8249,"rsaquo;":8250,"oline;":8254,"frasl;":8260,"euro;":8364,"image;":8465,"weierp;":8472,"real;":8476,"trade;":8482,"alefsym;":8501,"larr;":8592,"uarr;":8593,"rarr;":8594,"darr;":8595,"harr;":8596,"crarr;":8629,"lArr;":8656,"uArr;":8657,"rArr;":8658,"dArr;":8659,"hArr;":8660,"forall;":8704,"part;":8706,"exist;":8707,"empty;":8709,"nabla;":8711,"isin;":8712,"notin;":8713,"ni;":8715,"prod;":8719,"sum;":8721,"minus;":8722,"lowast;":8727,"radic;":8730,"prop;":8733,"infin;":8734,"ang;":8736,"and;":8743,"or;":8744,"cap;":8745,"cup;":8746,"int;":8747,"there4;":8756,"sim;":8764,"cong;":8773,"asymp;":8776,"ne;":8800,"equiv;":8801,"le;":8804,"ge;":8805,"sub;":8834,"sup;":8835,"nsub;":8836,"sube;":8838,"supe;":8839,"oplus;":8853,"otimes;":8855,"perp;":8869,"sdot;":8901,"lceil;":8968,"rceil;":8969,"lfloor;":8970,"rfloor;":8971,"lang;":9001,"rang;":9002,"loz;":9674,"spades;":9824,"clubs;":9827,"hearts;":9829,"diams;":9830}}.call(this);
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stringjs-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.1
4
+ version: 1.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-08-23 00:00:00.000000000 Z
12
+ date: 2013-09-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: railties
@@ -86,7 +86,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
86
86
  version: '0'
87
87
  segments:
88
88
  - 0
89
- hash: 3178142926715215922
89
+ hash: -1196221594382779845
90
90
  required_rubygems_version: !ruby/object:Gem::Requirement
91
91
  none: false
92
92
  requirements:
@@ -95,7 +95,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
95
95
  version: '0'
96
96
  segments:
97
97
  - 0
98
- hash: 3178142926715215922
98
+ hash: -1196221594382779845
99
99
  requirements: []
100
100
  rubyforge_project:
101
101
  rubygems_version: 1.8.25