wat_catcher 0.0.5 → 0.0.6

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.
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ wat_catcher
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.0.0-p195
data/Guardfile ADDED
@@ -0,0 +1,5 @@
1
+ #guard automatically ignores some directories including vendor
2
+ ignore! /git/, /bundle/, /log/, /tmp/
3
+
4
+ guard 'coffeescript', :input => 'spec/javascripts', :output => 'spec/javascripts/tmp/'
5
+ guard 'coffeescript', :input => 'vendor/assets/javascripts', :output => 'tmp/vendor/assets/javascripts'
data/Rakefile CHANGED
@@ -1 +1,10 @@
1
1
  require "bundler/gem_tasks"
2
+
3
+ begin
4
+ require 'jasmine'
5
+ load 'jasmine/tasks/jasmine.rake'
6
+ rescue LoadError
7
+ task :jasmine do
8
+ abort "Jasmine is not available. In order to run jasmine, you must: (sudo) gem install jasmine"
9
+ end
10
+ end
@@ -1,3 +1,3 @@
1
1
  module WatCatcher
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -0,0 +1,86 @@
1
+ # src_files
2
+ #
3
+ # Return an array of filepaths relative to src_dir to include before jasmine specs.
4
+ # Default: []
5
+ #
6
+ # EXAMPLE:
7
+ #
8
+ # src_files:
9
+ # - lib/source1.js
10
+ # - lib/source2.js
11
+ # - dist/**/*.js
12
+ #
13
+ src_files:
14
+ - 'tmp/vendor/**/*.js'
15
+
16
+
17
+ # stylesheets
18
+ #
19
+ # Return an array of stylesheet filepaths relative to src_dir to include before jasmine specs.
20
+ # Default: []
21
+ #
22
+ # EXAMPLE:
23
+ #
24
+ # stylesheets:
25
+ # - css/style.css
26
+ # - stylesheets/*.css
27
+ #
28
+ stylesheets:
29
+
30
+ # helpers
31
+ #
32
+ # Return an array of filepaths relative to spec_dir to include before jasmine specs.
33
+ # Default: ["helpers/**/*.js"]
34
+ #
35
+ # EXAMPLE:
36
+ #
37
+ # helpers:
38
+ # - helpers/**/*.js
39
+ #
40
+ helpers:
41
+ - 'helpers/**/*.js'
42
+ # spec_files
43
+ #
44
+ # Return an array of filepaths relative to spec_dir to include.
45
+ # Default: ["**/*[sS]pec.js"]
46
+ #
47
+ # EXAMPLE:
48
+ #
49
+ # spec_files:
50
+ # - **/*[sS]pec.js
51
+ #
52
+ spec_files:
53
+ - '**/*[sS]pec.js'
54
+
55
+ # src_dir
56
+ #
57
+ # Source directory path. Your src_files must be returned relative to this path. Will use root if left blank.
58
+ # Default: project root
59
+ #
60
+ # EXAMPLE:
61
+ #
62
+ # src_dir: public
63
+ #
64
+ src_dir:
65
+
66
+ # spec_dir
67
+ #
68
+ # Spec directory path. Your spec_files must be returned relative to this path.
69
+ # Default: spec/javascripts
70
+ #
71
+ # EXAMPLE:
72
+ #
73
+ # spec_dir: spec/javascripts
74
+ #
75
+ spec_dir:
76
+
77
+ # spec_helper
78
+ #
79
+ # Ruby file that Jasmine server will require before starting.
80
+ # Returned relative to your root path
81
+ # Default spec/support/jasmine_helper.rb
82
+ #
83
+ # EXAMPLE:
84
+ #
85
+ # spec_helper: spec/support/jasmine_helper.rb
86
+ #
@@ -0,0 +1,34 @@
1
+ describe "WatCatcher", ->
2
+ beforeEach ->
3
+ @errorTarget = {}
4
+ @errorTarget.onerror = -> "Howdy"
5
+ @watCatcher = new WatCatcher @errorTarget
6
+ @watCatcher.appEnvsToWorryAbout = ['production', 'staging', 'demo']
7
+ @watCatcher.appEnv = 'production'
8
+
9
+ @xmlhttp = jasmine.createSpyObj('XMLHttpRequest', ['send', 'setRequestHeader', 'open'])
10
+ spyOn(window, 'XMLHttpRequest').andReturn(@xmlhttp)
11
+
12
+ @msg = 'sadly, there was a terrible mistake'
13
+ @line = '42'
14
+
15
+ it "attaches watHandler to onerror argument", ->
16
+ @watCatcher.watHandler(@msg, document.URL, @line)
17
+ expect(@errorTarget.onerror).toEqual @watCatcher.watHandler
18
+
19
+ it "preserves previous onerror handler", ->
20
+ @watCatcher.watHandler(@msg, document.URL, @line)
21
+ expect(@watCatcher.watHandler()).toEqual "Howdy"
22
+
23
+ it "sends xhr on error", ->
24
+ try
25
+ window.goobilygoo()
26
+ catch error
27
+ @watCatcher.watHandler(error.message, document.URL, error.lineNumber)
28
+
29
+ expect(@xmlhttp.send).toHaveBeenCalled()
30
+
31
+ it "doesn't send wats in irrelevant appEnv", ->
32
+ @watCatcher.appEnv = 'development'
33
+ @watCatcher.watHandler(@msg, document.URL, @line)
34
+ expect(@xmlhttp.send).not.toHaveBeenCalled()
@@ -1,16 +1,30 @@
1
1
  #Send the error to the same host that served this file (I think)
2
- window.onerror = (msg,url,line) ->
3
- xmlhttp = if window.XMLHttpRequest
4
- new XMLHttpRequest()
5
- else
6
- new ActiveXObject("Microsoft.XMLHTTP")
2
+ class @WatCatcher
3
+ appEnv: undefined
4
+ appEnvsToWorryAbout: []
7
5
 
8
- params = "wat[page_url]=#{escape(window.location.toString())}"
9
- params += "&wat[message]=#{escape(msg)}"
10
- params += "&wat[backtrace][]=#{escape(url+":"+line)}"
6
+ constructor: (target=window) ->
7
+ @oldErrorHandler = target.onerror
8
+ target.onerror = @watHandler
11
9
 
12
- xmlhttp.open("POST", "/wats", true);
13
- xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
14
- xmlhttp.setRequestHeader("X-Requested-With", "XMLHttpRequest");
15
- xmlhttp.send(params);
16
- return false;
10
+ watHandler: (msg, url, line) =>
11
+ if @appEnvsToWorryAbout.indexOf(@appEnv) >= 0
12
+ xmlhttp = if window.XMLHttpRequest
13
+ new XMLHttpRequest()
14
+ else
15
+ new ActiveXObject("Microsoft.XMLHTTP")
16
+
17
+ params = "wat[page_url]=#{escape(window.location.toString())}"
18
+ params += "&wat[message]=#{escape(msg)}"
19
+ params += "&wat[backtrace][]=#{escape(url+":"+line)}"
20
+ params += "&wat[app_env]=#{escape(@appEnv)}"
21
+
22
+ xmlhttp.open("POST", "/wats", true);
23
+ xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
24
+ xmlhttp.setRequestHeader("X-Requested-With", "XMLHttpRequest");
25
+ xmlhttp.send(params);
26
+
27
+ if typeof @oldErrorHandler == 'function'
28
+ @oldErrorHandler(msg, url, line)
29
+
30
+ window.watCatcher = new WatCatcher()
data/wat_catcher.gemspec CHANGED
@@ -20,5 +20,8 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_development_dependency "bundler", "~> 1.3"
22
22
  spec.add_development_dependency "rake"
23
+ spec.add_development_dependency "jasmine"
24
+ spec.add_development_dependency "guard-coffeescript"
25
+ spec.add_development_dependency "rb-readline"
23
26
  spec.add_runtime_dependency 'coffee-rails'
24
27
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wat_catcher
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
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-06-18 00:00:00.000000000 Z
12
+ date: 2013-06-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -43,6 +43,54 @@ dependencies:
43
43
  - - ! '>='
44
44
  - !ruby/object:Gem::Version
45
45
  version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: jasmine
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: guard-coffeescript
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: rb-readline
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
46
94
  - !ruby/object:Gem::Dependency
47
95
  name: coffee-rails
48
96
  requirement: !ruby/object:Gem::Requirement
@@ -67,9 +115,10 @@ extensions: []
67
115
  extra_rdoc_files: []
68
116
  files:
69
117
  - .gitignore
70
- - .idea/scopes/scope_settings.xml
71
- - .idea/wat_catcher.iml
118
+ - .ruby-gemset
119
+ - .ruby-version
72
120
  - Gemfile
121
+ - Guardfile
73
122
  - LICENSE.txt
74
123
  - README.md
75
124
  - Rakefile
@@ -79,6 +128,8 @@ files:
79
128
  - lib/wat_catcher/middleware.rb
80
129
  - lib/wat_catcher/railtie.rb
81
130
  - lib/wat_catcher/version.rb
131
+ - spec/javascripts/support/jasmine.yml
132
+ - spec/javascripts/wat_catcher_spec.coffee
82
133
  - vendor/assets/javascripts/wat_catcher.coffee
83
134
  - wat_catcher.gemspec
84
135
  homepage: ''
@@ -106,4 +157,6 @@ rubygems_version: 1.8.21
106
157
  signing_key:
107
158
  specification_version: 3
108
159
  summary: A gem for registering Wats from your rails app
109
- test_files: []
160
+ test_files:
161
+ - spec/javascripts/support/jasmine.yml
162
+ - spec/javascripts/wat_catcher_spec.coffee
@@ -1,5 +0,0 @@
1
- <component name="DependencyValidationManager">
2
- <state>
3
- <option name="SKIP_IMPORT_STATEMENTS" value="false" />
4
- </state>
5
- </component>
@@ -1,10 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <module type="RUBY_MODULE" version="4">
3
- <component name="NewModuleRootManager">
4
- <content url="file://$MODULE_DIR$" />
5
- <orderEntry type="inheritedJdk" />
6
- <orderEntry type="sourceFolder" forTests="false" />
7
- <orderEntry type="library" scope="PROVIDED" name="rake (v0.9.2.2, RVM: ruby-1.9.3-p125 [nodeventdemo]) [gem]" level="application" />
8
- </component>
9
- </module>
10
-