squash_javascript 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ Yzg2ZTI5ZWVkNzI4NmQ4NzQ3MzA5OTc4ZGJlNGE0OGNjZDdlMGY4Yw==
5
+ data.tar.gz: !binary |-
6
+ NWVkMTA3NTMzYTQyZDExYjlmMDdiNzNmNDJhM2IzMTgxNjYzMmM4NA==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ NGU0MmQ1MDc5MjNjNTYzNDlkZmY2Mzk0NmRhNWQwNGEwMDRkOWQ5ZTBmNGVl
10
+ OWI3ZTkyZDgyMmMzNjg1OTdjMGI0NTc5OWIwMzdlMGNmMzQ1OGMwMGZjZjI1
11
+ ODc0MjE1NzA0NjkwMmU2ZGM5YjAzZjAyNmI0ZDAxYTRjMzEwYmI=
12
+ data.tar.gz: !binary |-
13
+ MzhkODM0MzVmNjM0YmI4NTE2NmRmNzcxODZmOTVhODU1NmUzZmI1NjkwNmRj
14
+ NDA0ZjQxOWE0NmM0NmVlZDBmNzZlM2EwMGEwMzJhZDk2ODk1YTIwOWI0ZDgz
15
+ ODNlNzkzNzNiMWZkOTk2MDNkNjU5Y2ZhYjBlZWU1NmE5NWQ3OTk=
data/README.md CHANGED
@@ -22,7 +22,7 @@ install with `rake setup`.
22
22
 
23
23
  ### Ruby library
24
24
 
25
- Markdown-formatted YARD documentation is available by running 'rake doc:ruby`.
25
+ Markdown-formatted YARD documentation is available by running `rake doc:ruby`.
26
26
  The documentation is written to the `doc/ruby` directory.
27
27
 
28
28
  Compatibility
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- # Copyright 2012 Square Inc.
3
+ # Copyright 2013 Square Inc.
4
4
  #
5
5
  # Licensed under the Apache License, Version 2.0 (the "License");
6
6
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2012 Square Inc.
1
+ # Copyright 2013 Square Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2012 Square Inc.
1
+ # Copyright 2013 Square Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -97,7 +97,7 @@ class Squash::Javascript::SourceMap
97
97
  while index < mappings.length
98
98
  entry = mappings[index]
99
99
  mapping = entry if entry.route == route && entry.compiled_line == line && entry.compiled_column <= column
100
- break if entry.route > route || entry.compiled_line > line
100
+ break if entry.route > route || (entry.route == route && entry.compiled_line > line)
101
101
  index += 1
102
102
  end
103
103
 
@@ -1,4 +1,4 @@
1
- # Copyright 2012 Square Inc.
1
+ # Copyright 2013 Square Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2012 Square Inc.
1
+ # Copyright 2013 Square Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -29,7 +29,7 @@ class root.SquashJavascript
29
29
  class _SquashJavascript
30
30
  # @private
31
31
  constructor: ->
32
- TraceKit.report.subscribe (error) -> SquashJavascript.instance().report(error)
32
+ TraceKit.report.subscribe (info, error) -> SquashJavascript.instance().report(info, error)
33
33
 
34
34
  # Sets configuration options. See the README file for a list of accepted
35
35
  # configuration options. Multiple calls will merge new options in.
@@ -55,15 +55,17 @@ class _SquashJavascript
55
55
  # installs a listener that notifies the server for thrown exceptions.
56
56
  #
57
57
  # @param [Error] error The error to record.
58
+ # @param [Object] user_data Additional user data to send up with the error.
58
59
  #
59
- notify: (error) ->
60
+ notify: (error, user_data) ->
60
61
  if error instanceof Error
62
+ error._squash_user_data = user_data
61
63
  TraceKit.report(error)
62
64
  else
63
65
  throw error
64
66
 
65
67
  # @private
66
- report: (error) ->
68
+ report: (info, error) ->
67
69
  try
68
70
  return false if @options?.disabled
69
71
  if !@options?.APIKey || !@options?.environment ||
@@ -71,28 +73,28 @@ class _SquashJavascript
71
73
  console.error "Missing required Squash configuration keys"
72
74
  return false
73
75
 
74
- return false if this.shouldIgnoreError(error)
75
- return false unless error.stack
76
+ return false if this.shouldIgnoreError(info)
77
+ return false unless info.stack
76
78
 
77
- fields = arguments[1] || new Object()
79
+ fields = new Object()
78
80
  fields.api_key = @options.APIKey
79
81
  fields.environment = @options.environment
80
82
  fields.client = "javascript"
81
83
  fields.revision = @options.revision
82
84
 
83
- fields.class_name = error.type || error.name
85
+ fields.class_name = info.type ? info.name
84
86
  # errors that make it up to window.onerror get stupidly rewritten: their
85
87
  # class is set to "Error" and the ACTUAL class is integrated into the
86
88
  # message (e.g., "Uncaught TypeError: [message]")
87
- if !error.name && (matches = error.message.match(/^(Uncaught )?(\w+): (.+)/))
89
+ if !info.name && (matches = info.message.match(/^(Uncaught )?(\w+): (.+)/))
88
90
  fields.class_name = matches[2]
89
91
  fields.message = matches[3]
90
92
  else
91
- fields.message = error.message
93
+ fields.message = info.message
92
94
  fields.class_name ?= 'Error' # when all else fails
93
95
 
94
- fields.backtraces = buildBacktrace(error.stack)
95
- fields.capture_method = error.mode
96
+ fields.backtraces = buildBacktrace(info.stack)
97
+ fields.capture_method = info.mode
96
98
  fields.occurred_at = ISODateString(new Date())
97
99
 
98
100
  fields.schema = window.location.protocol.replace(/:$/, '')
@@ -110,6 +112,9 @@ class _SquashJavascript
110
112
  fields.window_height = window.innerHeight
111
113
  fields.color_depth = screen.colorDepth
112
114
 
115
+ if error
116
+ (fields[k] = v for own k, v of error._squash_user_data)
117
+
113
118
  body = JSON.stringify(fields)
114
119
  this.HTTPTransmit (@options.APIHost + @options.notifyPath),
115
120
  [ ['Content-Type', 'application/json'] ],
@@ -118,7 +123,7 @@ class _SquashJavascript
118
123
  return true
119
124
  catch internal_error
120
125
  console.error "Error while trying to notify Squash:", internal_error.stack
121
- console.error "-- original error:", error
126
+ console.error "-- original error:", info
122
127
 
123
128
  # Runs the given `block`. If an exception is thrown within the function, adds
124
129
  # the given user data to the exception and re-throws it.
@@ -173,8 +178,8 @@ class _SquashJavascript
173
178
  # @private
174
179
  HTTPTransmit: (url, headers, body) ->
175
180
  request = new XMLHttpRequest()
176
- request.timeout = @options.transmitTimeout
177
181
  request.open "POST", url, true
182
+ request.timeout = @options.transmitTimeout
178
183
  for header in headers
179
184
  request.setRequestHeader header[0], header[1]
180
185
  request.send body
@@ -197,7 +202,7 @@ class _SquashJavascript
197
202
  backtraces = []
198
203
  for line in stack
199
204
  context = line.context
200
- context = null if context && any(context, (cline) -> cline.length > 200)
205
+ context = null if context && any(context, (cline) -> cline && cline.length > 200)
201
206
  backtraces.push {url: line.url, line: line.line, column: line.column, symbol: line.func, context: context, type: 'minified'}
202
207
  return [ {name: "Active Thread", faulted: true, backtrace: backtraces} ]
203
208
 
@@ -1,4 +1,4 @@
1
- // Copyright 2012 Square Inc.
1
+ // Copyright 2013 Square Inc.
2
2
  //
3
3
  // Licensed under the Apache License, Version 2.0 (the "License");
4
4
  // you may not use this file except in compliance with the License.
@@ -74,13 +74,14 @@ TraceKit.report = (function () {
74
74
  /**
75
75
  * Dispatch stack information to all handlers.
76
76
  * @param {Object.<string, *>} stack
77
+ * @param {Error} e
77
78
  */
78
- function notifyHandlers(stack) {
79
+ function notifyHandlers(stack, e) {
79
80
  var exception = null;
80
81
  for (var i in handlers) {
81
82
  if (handlers.hasOwnProperty(i)) {
82
83
  try {
83
- handlers[i](stack);
84
+ handlers[i](stack, e);
84
85
  }
85
86
  catch (inner) {
86
87
  exception = inner;
@@ -105,10 +106,12 @@ TraceKit.report = (function () {
105
106
  */
106
107
  window.onerror = function (message, url, lineNo) {
107
108
  var stack = null;
109
+ var ex = null;
108
110
 
109
111
  if (lastExceptionStack) {
110
112
  TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(lastExceptionStack, url, lineNo, message);
111
113
  stack = lastExceptionStack;
114
+ ex = lastException;
112
115
  lastExceptionStack = null;
113
116
  lastException = null;
114
117
  }
@@ -119,7 +122,7 @@ TraceKit.report = (function () {
119
122
  stack = { 'mode': 'onerror', 'message': message, 'stack': [ location ] };
120
123
  }
121
124
 
122
- notifyHandlers(stack);
125
+ notifyHandlers(stack, ex);
123
126
 
124
127
  if (_oldOnerrorHandler) {
125
128
  return _oldOnerrorHandler.apply(this, arguments);
@@ -141,7 +144,7 @@ TraceKit.report = (function () {
141
144
  var s = lastExceptionStack;
142
145
  lastExceptionStack = null;
143
146
  lastException = null;
144
- notifyHandlers(s);
147
+ notifyHandlers(s, ex);
145
148
  }
146
149
  }
147
150
 
@@ -157,7 +160,7 @@ TraceKit.report = (function () {
157
160
  if (lastException === ex) {
158
161
  lastExceptionStack = null;
159
162
  lastException = null;
160
- notifyHandlers(stack);
163
+ notifyHandlers(stack, ex);
161
164
  }
162
165
  }, (stack.incomplete ? 2000 : 0));
163
166
 
@@ -545,7 +548,7 @@ TraceKit.computeStackTrace = (function () {
545
548
  return null;
546
549
  }
547
550
 
548
- var chrome = /^\s*at (\S+) \(((?:file|http):.*?):(\d+)(?::(\d+))?\)\s*$/i,
551
+ var chrome = /^\s*at (?:new )?(.+) (?:\[as \S+\] )?\(((?:file|http):.*?):(\d+)(?::(\d+))?\)\s*$/i,
549
552
  gecko = /^\s*(\S*)(?:\((.*?)\))?@((?:file|http).*?):(\d+)(?::(\d+))?\s*$/i,
550
553
  lines = ex.stack.split("\n"),
551
554
  stack = [],
@@ -1,24 +1,24 @@
1
- (function(){var h,k={}.hasOwnProperty,f=[].slice,e="undefined"!==typeof exports&&null!==exports?exports:this,j=function(){},v;v=void 0;j.instance=function(){return null!=v?v:v=new h};e.SquashJavascript=j;var e=function(){TraceKit.report.subscribe(function(b){return SquashJavascript.instance().report(b)})},r,u,C,l;e.prototype.configure=function(b){var d,c,a;this.options||(this.options={disabled:!1,notifyPath:"/api/1.0/notify",transmitTimeout:15E3,ignoredExceptionClasses:[],ignoredExceptionMessages:{}});
2
- a=[];for(d in b)k.call(b,d)&&(c=b[d],a.push(this.options[d]=c));return a};e.prototype.notify=function(b){if(b instanceof Error)return TraceKit.report(b);throw b;};e.prototype.report=function(b,d){var c,a,g,n,z,A,p,i;try{if(null!=(n=this.options)&&n.disabled)return!1;if(!(null!=(z=this.options)&&z.APIKey)||!(null!=(A=this.options)&&A.environment)||!(null!=(p=this.options)&&p.revision)||!(null!=(i=this.options)&&i.APIHost))return console.error("Missing required Squash configuration keys"),!1;if(this.shouldIgnoreError(b)||
3
- !b.stack)return!1;a=d||{};a.api_key=this.options.APIKey;a.environment=this.options.environment;a.client="javascript";a.revision=this.options.revision;a.class_name=b.type||b.name;!b.name&&(g=b.message.match(/^(Uncaught )?(\w+): (.+)/))?(a.class_name=g[2],a.message=g[3]):a.message=b.message;null==a.class_name&&(a.class_name="Error");a.backtraces=C(b.stack);a.capture_method=b.mode;a.occurred_at=r(new Date);a.schema=window.location.protocol.replace(/:$/,"");a.host=window.location.hostname;0<window.location.port.length&&
4
- (a.port=window.location.port);a.path=window.location.pathname;a.query=window.location.search;""!==window.location.hash&&(a.fragment=window.location.hash);a.user_agent=navigator.userAgent;a.screen_width=screen.width;a.screen_height=screen.height;a.window_width=window.innerWidth;a.window_height=window.innerHeight;a.color_depth=screen.colorDepth;c=JSON.stringify(a);this.HTTPTransmit(this.options.APIHost+this.options.notifyPath,[["Content-Type","application/json"]],c);return!0}catch(e){return console.error("Error while trying to notify Squash:",
5
- e.stack),console.error("-- original error:",b)}};e.prototype.addUserData=function(b,d){try{return d()}catch(c){throw null==c._squash_user_data&&(c._squash_user_data={}),l(c._squash_user_data,b),c;}};e.prototype.addingUserData=function(b,d){return function(){var c;c=1<=arguments.length?f.call(arguments,0):[];return SquashJavascript.instance().addUserData(b,function(){return d.apply(null,c)})}};e.prototype.ignoreExceptions=function(){var b,d;d=2<=arguments.length?f.call(arguments,0,b=arguments.length-
6
- 1):(b=0,[]);b=arguments[b++];try{return b()}catch(c){throw c._squash_ignored_exceptions=(c._squash_ignored_exceptions||[]).concat(d),c;}};e.prototype.ignoringExceptions=function(){var b,d,c;d=2<=arguments.length?f.call(arguments,0,c=arguments.length-1):(c=0,[]);b=arguments[c++];return function(){var a,g;a=1<=arguments.length?f.call(arguments,0):[];return(g=SquashJavascript.instance()).ignoreExceptions.apply(g,f.call(d).concat([function(){return b.apply(null,a)}]))}};e.prototype.HTTPTransmit=function(b,
7
- d,c){var a,g,n;a=new XMLHttpRequest;a.timeout=this.options.transmitTimeout;a.open("POST",b,!0);g=0;for(n=d.length;g<n;g++)b=d[g],a.setRequestHeader(b[0],b[1]);a.send(c);return a};e.prototype.shouldIgnoreError=function(b){var d;d=this.options.ignoredExceptionClasses.concat(b._squash_ignored_exceptions||[]);return u(d,function(c){return b.name===c})?!0:u(this.options.ignoredExceptionMessages,function(c,a){return b.name===c?u(a,function(a){return b.message.match(a)}):!1})};C=function(b){var d,c,a,g,
8
- n;d=[];g=0;for(n=b.length;g<n;g++)a=b[g],(c=a.context)&&u(c,function(a){return 200<a.length})&&(c=null),d.push({url:a.url,line:a.line,column:a.column,symbol:a.func,context:c,type:"minified"});return[{name:"Active Thread",faulted:!0,backtrace:d}]};r=function(b){var d;d=function(b){return 10>b?"0"+b:b};return""+b.getUTCFullYear()+"-"+d(b.getUTCMonth()+1)+"-"+d(b.getUTCDate())+"T"+d(b.getUTCHours())+":"+d(b.getUTCMinutes())+":"+d(b.getUTCSeconds())+"Z"};u=function(b,d){var c,a,g;if(b instanceof Array){a=
9
- 0;for(g=b.length;a<g;a++)if(c=b[a],d(c))return!0}else for(c in b)if(k.call(b,c)&&(a=b[c],d(c,a)))return!0;return!1};l=function(b,d){var c,a,g;g=[];for(c in d)k.call(d,c)&&(a=d[c],g.push(b[c]=a));return g};h=e}).call(this);var TraceKit={};
10
- TraceKit.report=function(){function h(e){var j=null,h;for(h in f)if(f.hasOwnProperty(h))try{f[h](e)}catch(l){j=l}if(j)throw j;}function k(r){if(j){if(e===r)return;var f=j;e=j=null;h(f)}var k=TraceKit.computeStackTrace(r);j=k;e=r;window.setTimeout(function(){e===r&&(e=j=null,h(k))},k.incomplete?2E3:0);throw r;}var f=[],e=null,j=null,v=window.onerror;window.onerror=function(r,f,k){var l=null;j?(TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(j,f,k,r),l=j,e=j=null):(l={url:f,line:k},l.func=
11
- TraceKit.computeStackTrace.guessFunctionName(l.url,l.line),l.context=TraceKit.computeStackTrace.gatherContext(l.url,l.line),l={mode:"onerror",message:r,stack:[l]});h(l);return v?v.apply(this,arguments):!1};k.subscribe=function(e){f.push(e)};k.unsubscribe=function(e){for(var j=f.length-1;0<=j;--j)f[j]===e&&f.splice(j,1)};return k}();
12
- TraceKit.computeStackTrace=function(){function h(a){if(!c.hasOwnProperty(a)){var g,b=a.split("/");if(2<b.length&&b[2]===document.domain)try{void 0===XMLHttpRequest&&(XMLHttpRequest=function(){try{return new ActiveXObject("Msxml2.XMLHTTP.6.0")}catch(a){}try{return new ActiveXObject("Msxml2.XMLHTTP.3.0")}catch(g){}try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(b){}try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(n){}throw Error("No XHR.");});var z=new XMLHttpRequest;z.open("GET",a,!1);
13
- z.send("");g=z.responseText}catch(d){g=""}else g=[];c[a]=g.length?g.split("\n"):[]}return c[a]}function k(a,g){var b=/function ([^(]*)\(([^)]*)\)/,z=/['"]?([0-9A-Za-z$_]+)['"]?\s*[:=]\s*(function|eval|new Function)/,c="",d=h(a),i;if(!d.length)return"?";for(var e=0;10>e;++e)if(c=d[g-e]+c,void 0!==c&&((i=z.exec(c))||(i=b.exec(c))))return i[1];return"?"}function f(a,g){var b=h(a),c=[],d=!1;if(!b.length)return null;for(var g=g-1,e=g-2,i=g+2;e<i;++e)c.push(b[e]),void 0!==b[e]&&(d=!0);return d?c:null}function e(a){return a.replace(/[\-\[\]{}()*+?.,\\\^$|#]/g,
14
- "\\$&")}function j(a){return e(a).replace("<","(?:<|&lt;)").replace(">","(?:>|&gt;)").replace("&","(?:&|&amp;)").replace('"','(?:"|&quot;)').replace(/\s+/g,"\\s+")}function v(a,b){for(var n,c,d=0,e=b.length;d<e;++d)if((n=h(b[d])).length)if(n=n.join("\n"),c=a.exec(n))return{url:b[d],line:n.substring(0,c.index).split("\n").length,column:c.index-n.lastIndexOf("\n",c.index)-1};return null}function r(a,b,c){var b=h(b),a=RegExp("\\b"+e(a)+"\\b"),d,c=c-1;return b&&b.length>c&&(d=a.exec(b[c]))?d.index:null}
15
- function u(a){var b=[window.location.href],c=document.getElementsByTagName("script"),a=""+a,d;for(d=0;d<c.length;++d){var f=c[d];f.src&&b.push(f.src)}(c=/^function(?:\s+([\w$]+))?\s*\(([\w\s,]*)\)\s*\{\s*(\S[\s\S]*\S)\s*\}\s*$/.exec(a))?(d=c[1]?"\\s+"+c[1]:"",f=c[2].split(",").join("\\s*,\\s*"),c=e(c[3]).replace(/;$/,";?").replace(/\s+/g,"\\s+"),d=RegExp("function"+d+"\\s*\\(\\s*"+f+"\\s*\\)\\s*{\\s*"+c+"\\s*}")):d=RegExp(e(a).replace(/\s+/g,"\\s+"));if(d=v(d,b))return d;if(c=/^function on([\w$]+)\s*\(event\)\s*\{\s*(\S[\s\S]*\S)\s*\}\s*$/.exec(a)){a=
16
- c[1];c=j(c[2]);d=RegExp("on"+a+"=[\\'\"]\\s*"+c+"\\s*[\\'\"]","i");if(d=v(d,b[0]))return d;d=RegExp(c);if(d=v(d,b))return d}return null}function C(a,b,c,d){b={url:b,line:c};if(b.url&&b.line){a.incomplete=!1;b.func||(b.func=k(b.url,b.line));b.context||(b.context=f(b.url,b.line));if(d=/ '([^']+)' /.exec(d))b.column=r(d[1],b.url,b.line);if(0<a.stack.length&&a.stack[0].url===b.url){if(a.stack[0].line===b.line)return!1;if(!a.stack[0].line&&a.stack[0].func===b.func)return a.stack[0].line=b.line,a.stack[0].context=
17
- b.context,!1}a.stack.unshift(b);return a.partial=!0}a.incomplete=!0;return!1}function l(a,c){for(var d=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,e=[],j={},f,i,h=arguments.callee.caller;h;h=h.caller)if(!(h===b||h===TraceKit.report)){i={url:null,func:"?",line:null,column:null};if(h.name)i.func=h.name;else if(f=d.exec(h.toString()))i.func=f[1];if(f=u(h)){i.url=f.url;i.line=f.line;"?"===i.func&&(i.func=k(i.url,i.line));var l=/ '([^']+)' /.exec(a.message||a.description);l&&(i.column=
18
- r(l[1],f.url,f.line))}j[""+h]&&(i.recursion=!0);e.push(i)}c&&e.splice(0,c);d={mode:"callers",name:a.name,message:a.message,stack:e};C(d,a.sourceURL||a.fileName,a.line||a.lineNumber,a.message||a.description);return d}function b(a,b){var c=null,b=void 0===b?0:+b;try{for(var e=/ line (\d+), column (\d+) in (?:<anonymous function: ([^>]+)>|([^\)]+))\((.*)\) in (.*):\s*$/i,A=a.stacktrace.split("\n"),p=[],i,u=0,C=A.length;u<C;u+=2)if(i=e.exec(A[u])){var w={line:+i[1],column:+i[2],func:i[3]||i[4],args:i[5]?
19
- i[5].split(","):[],url:i[6]};!w.func&&w.line&&(w.func=k(w.url,w.line));if(w.line)try{w.context=f(w.url,w.line)}catch(T){}w.context||(w.context=[A[u+1]]);p.push(w)}c=p.length?{mode:"stacktrace",name:a.name,message:a.message,stack:p}:null;if(c)return c}catch(L){if(d)throw L;}try{if(a.stack){var e=/^\s*at (\S+) \(((?:file|http):.*?):(\d+)(?::(\d+))?\)\s*$/i,A=/^\s*(\S*)(?:\((.*?)\))?@((?:file|http).*?):(\d+)(?::(\d+))?\s*$/i,E=a.stack.split("\n"),p=[],q,s,D=/^(.*) is undefined$/.exec(a.message);i=0;
20
- for(var G=E.length;i<G;++i){if(q=A.exec(E[i]))s={url:q[3],func:q[1],args:q[2]?q[2].split(","):"",line:+q[4],column:q[5]?+q[5]:null};else if(q=e.exec(E[i]))s={url:q[2],func:q[1],line:+q[3],column:q[4]?+q[4]:null};else continue;!s.func&&s.line&&(s.func=k(s.url,s.line));s.line&&(s.context=f(s.url,s.line));p.push(s)}p[0]&&(p[0].line&&!p[0].column&&D)&&(p[0].column=r(D[1],p[0].url,p[0].line));c=p.length?{mode:"stack",name:a.name,message:a.message,stack:p}:null}else c=null;if(c)return c}catch(M){if(d)throw M;
21
- }try{var y=a.message.split("\n");if(4>y.length)c=null;else{E=/^\s*Line (\d+) of linked script ((?:file|http)\S+)(?:: in function (\S+))?\s*$/i;q=/^\s*Line (\d+) of inline#(\d+) script in ((?:file|http)\S+)(?:: in function (\S+))?\s*$/i;s=/^\s*Line (\d+) of function script\s*$/i;var D=[],m=document.getElementsByTagName("script"),G=[],x,t,H,B;for(t in m)m.hasOwnProperty(t)&&!m[t].src&&G.push(m[t]);t=2;for(H=y.length;t<H;t+=2){m=null;if(x=E.exec(y[t]))m={url:x[2],func:x[3],line:+x[1]};else if(x=q.exec(y[t])){var m=
22
- {url:x[3],func:x[4]},N=+x[1],I=G[x[2]-1];if(I&&(B=h(m.url))){B=B.join("\n");var J=B.indexOf(I.innerText);0<=J&&(m.line=N+B.substring(0,J).split("\n").length)}}else if(x=s.exec(y[t])){var K=window.location.href.replace(/#.*$/,""),O=x[1],P=RegExp(j(y[t+1]));B=v(P,[K]);m={url:K,line:B?B.line:O,func:""}}if(m){m.func||(m.func=k(m.url,m.line));var F=f(m.url,m.line),Q=F?F[Math.floor(F.length/2)]:null;m.context=F&&Q.replace(/^\s*/,"")===y[t+1].replace(/^\s*/,"")?F:[y[t+1]];D.push(m)}}c=D.length?{mode:"multiline",
23
- name:a.name,message:y[0],stack:D}:null}if(c)return c}catch(R){if(d)throw R;}try{if(c=l(a,b+1))return c}catch(S){if(d)throw S;}return{mode:"failed"}}var d=!1,c={};b.augmentStackTraceWithInitialElement=C;b.guessFunctionName=k;b.gatherContext=f;b.ofCaller=function(a){a=(void 0===a?0:+a)+1;try{0()}catch(c){return b(c,a+1)}return null};return b}();
24
- (function(h){var k=Array.prototype.slice,f=h.setTimeout;h.setTimeout=function(){var e=k.call(arguments,0),h=e[0];e[0]=function(){try{h.apply(this,arguments)}catch(e){throw TraceKit.report(e),e;}};return f.apply(this,e)};var e=h.setInterval;h.setInterval=function(){var f=k.call(arguments,0),h=f[0];f[0]=function(){try{h.apply(this,arguments)}catch(e){throw TraceKit.report(e),e;}};return e.apply(this,f)}})(window);
1
+ (function(){var m,f={}.hasOwnProperty,h=[].slice,e="undefined"!==typeof exports&&null!==exports?exports:this,k=function(){},v;v=void 0;k.instance=function(){return null!=v?v:v=new m};e.SquashJavascript=k;var e=function(){TraceKit.report.subscribe(function(b,d){return SquashJavascript.instance().report(b,d)})},p,s,x,g;e.prototype.configure=function(b){var d,c,a;this.options||(this.options={disabled:!1,notifyPath:"/api/1.0/notify",transmitTimeout:15E3,ignoredExceptionClasses:[],ignoredExceptionMessages:{}});
2
+ a=[];for(d in b)f.call(b,d)&&(c=b[d],a.push(this.options[d]=c));return a};e.prototype.notify=function(b,d){if(b instanceof Error)return b._squash_user_data=d,TraceKit.report(b);throw b;};e.prototype.report=function(b,d){var c,a,i,l,B,G,q,j,e,k,h,g;try{if(null!=(G=this.options)&&G.disabled)return!1;if(!(null!=(q=this.options)&&q.APIKey)||!(null!=(j=this.options)&&j.environment)||!(null!=(e=this.options)&&e.revision)||!(null!=(k=this.options)&&k.APIHost))return console.error("Missing required Squash configuration keys"),
3
+ !1;if(this.shouldIgnoreError(b)||!b.stack)return!1;a={};a.api_key=this.options.APIKey;a.environment=this.options.environment;a.client="javascript";a.revision=this.options.revision;a.class_name=null!=(h=b.type)?h:b.name;!b.name&&(l=b.message.match(/^(Uncaught )?(\w+): (.+)/))?(a.class_name=l[2],a.message=l[3]):a.message=b.message;null==a.class_name&&(a.class_name="Error");a.backtraces=x(b.stack);a.capture_method=b.mode;a.occurred_at=p(new Date);a.schema=window.location.protocol.replace(/:$/,"");a.host=
4
+ window.location.hostname;0<window.location.port.length&&(a.port=window.location.port);a.path=window.location.pathname;a.query=window.location.search;""!==window.location.hash&&(a.fragment=window.location.hash);a.user_agent=navigator.userAgent;a.screen_width=screen.width;a.screen_height=screen.height;a.window_width=window.innerWidth;a.window_height=window.innerHeight;a.color_depth=screen.colorDepth;if(d)for(i in g=d._squash_user_data,g)f.call(g,i)&&(B=g[i],a[i]=B);c=JSON.stringify(a);this.HTTPTransmit(this.options.APIHost+
5
+ this.options.notifyPath,[["Content-Type","application/json"]],c);return!0}catch(s){return console.error("Error while trying to notify Squash:",s.stack),console.error("-- original error:",b)}};e.prototype.addUserData=function(b,d){try{return d()}catch(c){throw null==c._squash_user_data&&(c._squash_user_data={}),g(c._squash_user_data,b),c;}};e.prototype.addingUserData=function(b,d){return function(){var c;c=1<=arguments.length?h.call(arguments,0):[];return SquashJavascript.instance().addUserData(b,
6
+ function(){return d.apply(null,c)})}};e.prototype.ignoreExceptions=function(){var b,d;d=2<=arguments.length?h.call(arguments,0,b=arguments.length-1):(b=0,[]);b=arguments[b++];try{return b()}catch(c){throw c._squash_ignored_exceptions=(c._squash_ignored_exceptions||[]).concat(d),c;}};e.prototype.ignoringExceptions=function(){var b,d,c;d=2<=arguments.length?h.call(arguments,0,c=arguments.length-1):(c=0,[]);b=arguments[c++];return function(){var a,i;a=1<=arguments.length?h.call(arguments,0):[];return(i=
7
+ SquashJavascript.instance()).ignoreExceptions.apply(i,h.call(d).concat([function(){return b.apply(null,a)}]))}};e.prototype.HTTPTransmit=function(b,d,c){var a,i,l;a=new XMLHttpRequest;a.open("POST",b,!0);a.timeout=this.options.transmitTimeout;i=0;for(l=d.length;i<l;i++)b=d[i],a.setRequestHeader(b[0],b[1]);a.send(c);return a};e.prototype.shouldIgnoreError=function(b){var d;d=this.options.ignoredExceptionClasses.concat(b._squash_ignored_exceptions||[]);return s(d,function(c){return b.name===c})?!0:
8
+ s(this.options.ignoredExceptionMessages,function(c,a){return b.name===c?s(a,function(a){return b.message.match(a)}):!1})};x=function(b){var d,c,a,i,l;d=[];i=0;for(l=b.length;i<l;i++)a=b[i],(c=a.context)&&s(c,function(a){return a&&200<a.length})&&(c=null),d.push({url:a.url,line:a.line,column:a.column,symbol:a.func,context:c,type:"minified"});return[{name:"Active Thread",faulted:!0,backtrace:d}]};p=function(b){var d;d=function(b){return 10>b?"0"+b:b};return""+b.getUTCFullYear()+"-"+d(b.getUTCMonth()+
9
+ 1)+"-"+d(b.getUTCDate())+"T"+d(b.getUTCHours())+":"+d(b.getUTCMinutes())+":"+d(b.getUTCSeconds())+"Z"};s=function(b,d){var c,a,i;if(b instanceof Array){a=0;for(i=b.length;a<i;a++)if(c=b[a],d(c))return!0}else for(c in b)if(f.call(b,c)&&(a=b[c],d(c,a)))return!0;return!1};g=function(b,d){var c,a,i;i=[];for(c in d)f.call(d,c)&&(a=d[c],i.push(b[c]=a));return i};m=e}).call(this);var TraceKit={};
10
+ TraceKit.report=function(){function m(e,k){var f=null,g;for(g in h)if(h.hasOwnProperty(g))try{h[g](e,k)}catch(b){f=b}if(f)throw f;}function f(p){if(k){if(e===p)return;var h=k;e=k=null;m(h,p)}var f=TraceKit.computeStackTrace(p);k=f;e=p;window.setTimeout(function(){e===p&&(e=k=null,m(f,p))},f.incomplete?2E3:0);throw p;}var h=[],e=null,k=null,v=window.onerror;window.onerror=function(p,f,h){var g=null,b=null;k?(TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(k,f,h,p),g=k,b=e,e=k=null):
11
+ (g={url:f,line:h},g.func=TraceKit.computeStackTrace.guessFunctionName(g.url,g.line),g.context=TraceKit.computeStackTrace.gatherContext(g.url,g.line),g={mode:"onerror",message:p,stack:[g]});m(g,b);return v?v.apply(this,arguments):!1};f.subscribe=function(e){h.push(e)};f.unsubscribe=function(e){for(var f=h.length-1;0<=f;--f)h[f]===e&&h.splice(f,1)};return f}();
12
+ TraceKit.computeStackTrace=function(){function m(a){if(!c.hasOwnProperty(a)){var i,b=a.split("/");if(2<b.length&&b[2]===document.domain)try{void 0===XMLHttpRequest&&(XMLHttpRequest=function(){try{return new ActiveXObject("Msxml2.XMLHTTP.6.0")}catch(a){}try{return new ActiveXObject("Msxml2.XMLHTTP.3.0")}catch(i){}try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(b){}try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(l){}throw Error("No XHR.");});var B=new XMLHttpRequest;B.open("GET",a,!1);
13
+ B.send("");i=B.responseText}catch(d){i=""}else i=[];c[a]=i.length?i.split("\n"):[]}return c[a]}function f(a,i){var b=/function ([^(]*)\(([^)]*)\)/,d=/['"]?([0-9A-Za-z$_]+)['"]?\s*[:=]\s*(function|eval|new Function)/,c="",e=m(a),j;if(!e.length)return"?";for(var f=0;10>f;++f)if(c=e[i-f]+c,void 0!==c&&((j=d.exec(c))||(j=b.exec(c))))return j[1];return"?"}function h(a,b){var l=m(a),c=[],d=!1;if(!l.length)return null;for(var b=b-1,e=b-2,f=b+2;e<f;++e)c.push(l[e]),void 0!==l[e]&&(d=!0);return d?c:null}function e(a){return a.replace(/[\-\[\]{}()*+?.,\\\^$|#]/g,
14
+ "\\$&")}function k(a){return e(a).replace("<","(?:<|&lt;)").replace(">","(?:>|&gt;)").replace("&","(?:&|&amp;)").replace('"','(?:"|&quot;)').replace(/\s+/g,"\\s+")}function v(a,b){for(var l,c,d=0,e=b.length;d<e;++d)if((l=m(b[d])).length)if(l=l.join("\n"),c=a.exec(l))return{url:b[d],line:l.substring(0,c.index).split("\n").length,column:c.index-l.lastIndexOf("\n",c.index)-1};return null}function p(a,b,l){var b=m(b),a=RegExp("\\b"+e(a)+"\\b"),c,l=l-1;return b&&b.length>l&&(c=a.exec(b[l]))?c.index:null}
15
+ function s(a){var b=[window.location.href],c=document.getElementsByTagName("script"),a=""+a,d;for(d=0;d<c.length;++d){var f=c[d];f.src&&b.push(f.src)}(c=/^function(?:\s+([\w$]+))?\s*\(([\w\s,]*)\)\s*\{\s*(\S[\s\S]*\S)\s*\}\s*$/.exec(a))?(d=c[1]?"\\s+"+c[1]:"",f=c[2].split(",").join("\\s*,\\s*"),c=e(c[3]).replace(/;$/,";?").replace(/\s+/g,"\\s+"),d=RegExp("function"+d+"\\s*\\(\\s*"+f+"\\s*\\)\\s*{\\s*"+c+"\\s*}")):d=RegExp(e(a).replace(/\s+/g,"\\s+"));if(d=v(d,b))return d;if(c=/^function on([\w$]+)\s*\(event\)\s*\{\s*(\S[\s\S]*\S)\s*\}\s*$/.exec(a)){a=
16
+ c[1];c=k(c[2]);d=RegExp("on"+a+"=[\\'\"]\\s*"+c+"\\s*[\\'\"]","i");if(d=v(d,b[0]))return d;d=RegExp(c);if(d=v(d,b))return d}return null}function x(a,b,d,c){b={url:b,line:d};if(b.url&&b.line){a.incomplete=!1;b.func||(b.func=f(b.url,b.line));b.context||(b.context=h(b.url,b.line));if(c=/ '([^']+)' /.exec(c))b.column=p(c[1],b.url,b.line);if(0<a.stack.length&&a.stack[0].url===b.url){if(a.stack[0].line===b.line)return!1;if(!a.stack[0].line&&a.stack[0].func===b.func)return a.stack[0].line=b.line,a.stack[0].context=
17
+ b.context,!1}a.stack.unshift(b);return a.partial=!0}a.incomplete=!0;return!1}function g(a,c){for(var d=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,e=[],h={},k,j,g=arguments.callee.caller;g;g=g.caller)if(!(g===b||g===TraceKit.report)){j={url:null,func:"?",line:null,column:null};if(g.name)j.func=g.name;else if(k=d.exec(g.toString()))j.func=k[1];if(k=s(g)){j.url=k.url;j.line=k.line;"?"===j.func&&(j.func=f(j.url,j.line));var m=/ '([^']+)' /.exec(a.message||a.description);m&&(j.column=
18
+ p(m[1],k.url,k.line))}h[""+g]&&(j.recursion=!0);e.push(j)}c&&e.splice(0,c);d={mode:"callers",name:a.name,message:a.message,stack:e};x(d,a.sourceURL||a.fileName,a.line||a.lineNumber,a.message||a.description);return d}function b(a,b){var c=null,b=void 0===b?0:+b;try{for(var e=/ line (\d+), column (\d+) in (?:<anonymous function: ([^>]+)>|([^\)]+))\((.*)\) in (.*):\s*$/i,s=a.stacktrace.split("\n"),q=[],j,x=0,L=s.length;x<L;x+=2)if(j=e.exec(s[x])){var w={line:+j[1],column:+j[2],func:j[3]||j[4],args:j[5]?
19
+ j[5].split(","):[],url:j[6]};!w.func&&w.line&&(w.func=f(w.url,w.line));if(w.line)try{w.context=h(w.url,w.line)}catch(U){}w.context||(w.context=[s[x+1]]);q.push(w)}c=q.length?{mode:"stacktrace",name:a.name,message:a.message,stack:q}:null;if(c)return c}catch(M){if(d)throw M;}try{if(a.stack){var e=/^\s*at (?:new )?(.+) (?:\[as \S+\] )?\(((?:file|http):.*?):(\d+)(?::(\d+))?\)\s*$/i,s=/^\s*(\S*)(?:\((.*?)\))?@((?:file|http).*?):(\d+)(?::(\d+))?\s*$/i,D=a.stack.split("\n"),q=[],r,t,C=/^(.*) is undefined$/.exec(a.message);
20
+ j=0;for(var F=D.length;j<F;++j){if(r=s.exec(D[j]))t={url:r[3],func:r[1],args:r[2]?r[2].split(","):"",line:+r[4],column:r[5]?+r[5]:null};else if(r=e.exec(D[j]))t={url:r[2],func:r[1],line:+r[3],column:r[4]?+r[4]:null};else continue;!t.func&&t.line&&(t.func=f(t.url,t.line));t.line&&(t.context=h(t.url,t.line));q.push(t)}q[0]&&(q[0].line&&!q[0].column&&C)&&(q[0].column=p(C[1],q[0].url,q[0].line));c=q.length?{mode:"stack",name:a.name,message:a.message,stack:q}:null}else c=null;if(c)return c}catch(N){if(d)throw N;
21
+ }try{var z=a.message.split("\n");if(4>z.length)c=null;else{D=/^\s*Line (\d+) of linked script ((?:file|http)\S+)(?:: in function (\S+))?\s*$/i;r=/^\s*Line (\d+) of inline#(\d+) script in ((?:file|http)\S+)(?:: in function (\S+))?\s*$/i;t=/^\s*Line (\d+) of function script\s*$/i;var C=[],n=document.getElementsByTagName("script"),F=[],y,u,H,A;for(u in n)n.hasOwnProperty(u)&&!n[u].src&&F.push(n[u]);u=2;for(H=z.length;u<H;u+=2){n=null;if(y=D.exec(z[u]))n={url:y[2],func:y[3],line:+y[1]};else if(y=r.exec(z[u])){var n=
22
+ {url:y[3],func:y[4]},O=+y[1],I=F[y[2]-1];if(I&&(A=m(n.url))){A=A.join("\n");var J=A.indexOf(I.innerText);0<=J&&(n.line=O+A.substring(0,J).split("\n").length)}}else if(y=t.exec(z[u])){var K=window.location.href.replace(/#.*$/,""),P=y[1],Q=RegExp(k(z[u+1]));A=v(Q,[K]);n={url:K,line:A?A.line:P,func:""}}if(n){n.func||(n.func=f(n.url,n.line));var E=h(n.url,n.line),R=E?E[Math.floor(E.length/2)]:null;n.context=E&&R.replace(/^\s*/,"")===z[u+1].replace(/^\s*/,"")?E:[z[u+1]];C.push(n)}}c=C.length?{mode:"multiline",
23
+ name:a.name,message:z[0],stack:C}:null}if(c)return c}catch(S){if(d)throw S;}try{if(c=g(a,b+1))return c}catch(T){if(d)throw T;}return{mode:"failed"}}var d=!1,c={};b.augmentStackTraceWithInitialElement=x;b.guessFunctionName=f;b.gatherContext=h;b.ofCaller=function(a){a=(void 0===a?0:+a)+1;try{0()}catch(c){return b(c,a+1)}return null};return b}();
24
+ (function(m){var f=Array.prototype.slice,h=m.setTimeout;m.setTimeout=function(){var e=f.call(arguments,0),m=e[0];e[0]=function(){try{m.apply(this,arguments)}catch(e){throw TraceKit.report(e),e;}};return h.apply(this,e)};var e=m.setInterval;m.setInterval=function(){var k=f.call(arguments,0),h=k[0];k[0]=function(){try{h.apply(this,arguments)}catch(e){throw TraceKit.report(e),e;}};return e.apply(this,k)}})(window);
@@ -25,8 +25,8 @@
25
25
  var ISODateString, any, buildBacktrace, mergeBang;
26
26
 
27
27
  function _SquashJavascript() {
28
- TraceKit.report.subscribe(function(error) {
29
- return SquashJavascript.instance().report(error);
28
+ TraceKit.report.subscribe(function(info, error) {
29
+ return SquashJavascript.instance().report(info, error);
30
30
  });
31
31
  }
32
32
 
@@ -48,16 +48,17 @@
48
48
  return _results;
49
49
  };
50
50
 
51
- _SquashJavascript.prototype.notify = function(error) {
51
+ _SquashJavascript.prototype.notify = function(error, user_data) {
52
52
  if (error instanceof Error) {
53
+ error._squash_user_data = user_data;
53
54
  return TraceKit.report(error);
54
55
  } else {
55
56
  throw error;
56
57
  }
57
58
  };
58
59
 
59
- _SquashJavascript.prototype.report = function(error) {
60
- var body, fields, matches, _ref, _ref1, _ref2, _ref3, _ref4, _ref5;
60
+ _SquashJavascript.prototype.report = function(info, error) {
61
+ var body, fields, k, matches, v, _ref, _ref1, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7;
61
62
  try {
62
63
  if ((_ref = this.options) != null ? _ref.disabled : void 0) {
63
64
  return false;
@@ -66,29 +67,29 @@
66
67
  console.error("Missing required Squash configuration keys");
67
68
  return false;
68
69
  }
69
- if (this.shouldIgnoreError(error)) {
70
+ if (this.shouldIgnoreError(info)) {
70
71
  return false;
71
72
  }
72
- if (!error.stack) {
73
+ if (!info.stack) {
73
74
  return false;
74
75
  }
75
- fields = arguments[1] || new Object();
76
+ fields = new Object();
76
77
  fields.api_key = this.options.APIKey;
77
78
  fields.environment = this.options.environment;
78
79
  fields.client = "javascript";
79
80
  fields.revision = this.options.revision;
80
- fields.class_name = error.type || error.name;
81
- if (!error.name && (matches = error.message.match(/^(Uncaught )?(\w+): (.+)/))) {
81
+ fields.class_name = (_ref5 = info.type) != null ? _ref5 : info.name;
82
+ if (!info.name && (matches = info.message.match(/^(Uncaught )?(\w+): (.+)/))) {
82
83
  fields.class_name = matches[2];
83
84
  fields.message = matches[3];
84
85
  } else {
85
- fields.message = error.message;
86
+ fields.message = info.message;
86
87
  }
87
- if ((_ref5 = fields.class_name) == null) {
88
+ if ((_ref6 = fields.class_name) == null) {
88
89
  fields.class_name = 'Error';
89
90
  }
90
- fields.backtraces = buildBacktrace(error.stack);
91
- fields.capture_method = error.mode;
91
+ fields.backtraces = buildBacktrace(info.stack);
92
+ fields.capture_method = info.mode;
92
93
  fields.occurred_at = ISODateString(new Date());
93
94
  fields.schema = window.location.protocol.replace(/:$/, '');
94
95
  fields.host = window.location.hostname;
@@ -106,12 +107,20 @@
106
107
  fields.window_width = window.innerWidth;
107
108
  fields.window_height = window.innerHeight;
108
109
  fields.color_depth = screen.colorDepth;
110
+ if (error) {
111
+ _ref7 = error._squash_user_data;
112
+ for (k in _ref7) {
113
+ if (!__hasProp.call(_ref7, k)) continue;
114
+ v = _ref7[k];
115
+ fields[k] = v;
116
+ }
117
+ }
109
118
  body = JSON.stringify(fields);
110
119
  this.HTTPTransmit(this.options.APIHost + this.options.notifyPath, [['Content-Type', 'application/json']], body);
111
120
  return true;
112
121
  } catch (internal_error) {
113
122
  console.error("Error while trying to notify Squash:", internal_error.stack);
114
- return console.error("-- original error:", error);
123
+ return console.error("-- original error:", info);
115
124
  }
116
125
  };
117
126
 
@@ -164,8 +173,8 @@
164
173
  _SquashJavascript.prototype.HTTPTransmit = function(url, headers, body) {
165
174
  var header, request, _i, _len;
166
175
  request = new XMLHttpRequest();
167
- request.timeout = this.options.transmitTimeout;
168
176
  request.open("POST", url, true);
177
+ request.timeout = this.options.transmitTimeout;
169
178
  for (_i = 0, _len = headers.length; _i < _len; _i++) {
170
179
  header = headers[_i];
171
180
  request.setRequestHeader(header[0], header[1]);
@@ -200,7 +209,7 @@
200
209
  line = stack[_i];
201
210
  context = line.context;
202
211
  if (context && any(context, function(cline) {
203
- return cline.length > 200;
212
+ return cline && cline.length > 200;
204
213
  })) {
205
214
  context = null;
206
215
  }
metadata CHANGED
@@ -1,36 +1,34 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: squash_javascript
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
5
- prerelease:
4
+ version: 1.0.3
6
5
  platform: ruby
7
6
  authors:
8
7
  - Tim Morgan
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-03-11 00:00:00.000000000 Z
11
+ date: 2014-01-23 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: railties
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ! '>='
20
18
  - !ruby/object:Gem::Version
21
- version: '3.1'
19
+ version: !binary |-
20
+ My4x
22
21
  type: :runtime
23
22
  prerelease: false
24
23
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
24
  requirements:
27
25
  - - ! '>='
28
26
  - !ruby/object:Gem::Version
29
- version: '3.1'
27
+ version: !binary |-
28
+ My4x
30
29
  - !ruby/object:Gem::Dependency
31
30
  name: json
32
31
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
32
  requirements:
35
33
  - - ! '>='
36
34
  - !ruby/object:Gem::Version
@@ -38,7 +36,6 @@ dependencies:
38
36
  type: :runtime
39
37
  prerelease: false
40
38
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
39
  requirements:
43
40
  - - ! '>='
44
41
  - !ruby/object:Gem::Version
@@ -46,7 +43,6 @@ dependencies:
46
43
  - !ruby/object:Gem::Dependency
47
44
  name: squash_uploader
48
45
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
46
  requirements:
51
47
  - - ! '>='
52
48
  - !ruby/object:Gem::Version
@@ -54,7 +50,6 @@ dependencies:
54
50
  type: :runtime
55
51
  prerelease: false
56
52
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
53
  requirements:
59
54
  - - ! '>='
60
55
  - !ruby/object:Gem::Version
@@ -62,7 +57,6 @@ dependencies:
62
57
  - !ruby/object:Gem::Dependency
63
58
  name: yard
64
59
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
60
  requirements:
67
61
  - - ! '>='
68
62
  - !ruby/object:Gem::Version
@@ -70,7 +64,6 @@ dependencies:
70
64
  type: :development
71
65
  prerelease: false
72
66
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
67
  requirements:
75
68
  - - ! '>='
76
69
  - !ruby/object:Gem::Version
@@ -78,7 +71,6 @@ dependencies:
78
71
  - !ruby/object:Gem::Dependency
79
72
  name: redcarpet
80
73
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
74
  requirements:
83
75
  - - ! '>='
84
76
  - !ruby/object:Gem::Version
@@ -86,7 +78,6 @@ dependencies:
86
78
  type: :development
87
79
  prerelease: false
88
80
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
81
  requirements:
91
82
  - - ! '>='
92
83
  - !ruby/object:Gem::Version
@@ -94,7 +85,6 @@ dependencies:
94
85
  - !ruby/object:Gem::Dependency
95
86
  name: jeweler
96
87
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
88
  requirements:
99
89
  - - ! '>='
100
90
  - !ruby/object:Gem::Version
@@ -102,7 +92,6 @@ dependencies:
102
92
  type: :development
103
93
  prerelease: false
104
94
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
95
  requirements:
107
96
  - - ! '>='
108
97
  - !ruby/object:Gem::Version
@@ -110,7 +99,6 @@ dependencies:
110
99
  - !ruby/object:Gem::Dependency
111
100
  name: rspec
112
101
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
102
  requirements:
115
103
  - - ! '>='
116
104
  - !ruby/object:Gem::Version
@@ -118,7 +106,6 @@ dependencies:
118
106
  type: :development
119
107
  prerelease: false
120
108
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
109
  requirements:
123
110
  - - ! '>='
124
111
  - !ruby/object:Gem::Version
@@ -147,29 +134,25 @@ files:
147
134
  homepage: http://github.com/SquareSquash/javascript
148
135
  licenses:
149
136
  - Apache 2.0
137
+ metadata: {}
150
138
  post_install_message:
151
139
  rdoc_options: []
152
140
  require_paths:
153
141
  - lib
154
142
  required_ruby_version: !ruby/object:Gem::Requirement
155
- none: false
156
143
  requirements:
157
144
  - - ! '>='
158
145
  - !ruby/object:Gem::Version
159
146
  version: '0'
160
- segments:
161
- - 0
162
- hash: 2284752948071690059
163
147
  required_rubygems_version: !ruby/object:Gem::Requirement
164
- none: false
165
148
  requirements:
166
149
  - - ! '>='
167
150
  - !ruby/object:Gem::Version
168
151
  version: '0'
169
152
  requirements: []
170
153
  rubyforge_project:
171
- rubygems_version: 1.8.25
154
+ rubygems_version: 2.2.1
172
155
  signing_key:
173
- specification_version: 3
156
+ specification_version: 4
174
157
  summary: Squash client for JavaScript projects
175
158
  test_files: []