party_foul 1.5.4 → 1.5.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d2e2c7c88016cdd88cc41490e510338bbfae26cb
4
- data.tar.gz: 84851ff00f7e36dec4797dce9c9a5cd676b1ab2a
3
+ metadata.gz: 142a6e023040c802ba5498b2b36fc886d7260de0
4
+ data.tar.gz: 50bb3d0487009edfd99a561a0740ba752160af34
5
5
  SHA512:
6
- metadata.gz: 2cd78f2f92ec77ddd1c54bd3f7843205a4baa1c003645ea295847ae930e11761bc54a6df60c4798cd21952b85f46ce41235b439df2b10c4c99bf96c5f3b6fae7
7
- data.tar.gz: 75285db4affef7d2445a2c375d37b1d81f9752c41af1c0e00f311ff64925d2e47fdf8c6bb6a237c74167d6aceb780d03207db72031f8813280368d58183ecd66
6
+ metadata.gz: 56148b86400845bedb753c9b4adfe922ab26b34d75546fa81bfa6ba87818463603ce23b083291b7ca5a8d7d106ec8262f390832bca9a2d62aee8c1605f98b0a2
7
+ data.tar.gz: ae7214890a0673c7c6eec9d6a9c6f3e4f66b67ba51aae8af9ffb09d3ff614486a52a4f2d14f03aea33a9a0e70dc0ca2bae0e37044d8fc47085066223e6014509
@@ -2,7 +2,7 @@ require 'octokit'
2
2
 
3
3
  module PartyFoul
4
4
  class << self
5
- attr_accessor :github, :oauth_token, :api_endpoint, :owner, :repo, :blacklisted_exceptions, :processor, :web_url, :branch, :whitelisted_rack_variables, :additional_labels, :comment_limit, :title_prefix
5
+ attr_accessor :github, :oauth_token, :api_endpoint, :owner, :repo, :blacklisted_exceptions, :processor, :web_url, :branch, :additional_labels, :comment_limit, :title_prefix
6
6
  end
7
7
 
8
8
  # The git branch that is used for linking in the stack trace
@@ -50,12 +50,14 @@ class PartyFoul::ExceptionHandler
50
50
  #
51
51
  # @param [Sawyer::Resource]
52
52
  def update_issue(issue)
53
- unless issue.key?(:labels) && issue[:labels].include?('wontfix')
53
+ label_names = issue.key?(:labels) ? issue[:labels].map {|label| label[:name] } : []
54
+
55
+ unless label_names.include?('wontfix')
54
56
  body = rendered_issue.update_body(issue[:body])
55
57
  params = {state: 'open'}
56
58
 
57
59
  if issue[:state] == 'closed'
58
- params[:labels] = (['bug', 'regression'] + issue[:labels]).uniq
60
+ params[:labels] = (['bug', 'regression'] + label_names).uniq
59
61
  end
60
62
 
61
63
  self.sha = PartyFoul.github.references(PartyFoul.repo_path, "heads/#{PartyFoul.branch}").object.sha
@@ -70,7 +72,15 @@ class PartyFoul::ExceptionHandler
70
72
  private
71
73
 
72
74
  def self.clean_env(env)
73
- env.select { |key, value| Marshal.dump(value) rescue false }
75
+ env.select do |key, value|
76
+ begin
77
+ Marshal.dump(value)
78
+ rescue TypeError
79
+ true
80
+ rescue
81
+ false
82
+ end
83
+ end
74
84
  end
75
85
 
76
86
  def fingerprint
@@ -5,7 +5,7 @@ class PartyFoul::IssueRenderers::Rack < PartyFoul::IssueRenderers::Base
5
5
  end
6
6
 
7
7
  def comment_options
8
- super.merge(URL: url, Params: params, Session: session, 'IP Address' => ip_address, 'HTTP Headers' => http_headers)
8
+ super.merge(URL: url, Params: params, Session: session, 'IP Address' => ip_address_locator, 'HTTP Headers' => http_headers)
9
9
  end
10
10
 
11
11
  # Rack params
@@ -15,11 +15,11 @@ class PartyFoul::IssueRenderers::Rack < PartyFoul::IssueRenderers::Base
15
15
  request.params
16
16
  end
17
17
 
18
- # IP address of the client who triggered the exception
18
+ # Link to IP address geolocator of the client who triggered the exception
19
19
  #
20
20
  # @return [String]
21
- def ip_address
22
- request.ip
21
+ def ip_address_locator
22
+ "<a href='http://ipinfo.io/#{request.ip}'>#{request.ip}</a>"
23
23
  end
24
24
 
25
25
  def url
@@ -1,3 +1,3 @@
1
1
  module PartyFoul
2
- VERSION = '1.5.4'
2
+ VERSION = '1.5.5'
3
3
  end
@@ -119,7 +119,7 @@ describe 'Party Foul Exception Handler' do
119
119
  it 'will update the count on the body and re-open the issue' do
120
120
  PartyFoul.github.expects(:search_issues).with('test_fingerprint repo:test_owner/test_repo state:open').returns(no_search_results)
121
121
  PartyFoul.github.expects(:search_issues).with('test_fingerprint repo:test_owner/test_repo state:closed').returns(
122
- sawyer_resource({total_count: 1, incomplete_results: false, items:[{title: 'Test Title', body: 'Test Body', state: 'closed', number: 1, labels: ['staging']}]}) )
122
+ sawyer_resource({total_count: 1, incomplete_results: false, items:[{title: 'Test Title', body: 'Test Body', state: 'closed', number: 1, labels: [{url: 'https://api.github.com/repos/test_owner/test_repo/labels/staging', name: 'staging', color: 'f29513'}]}]}) )
123
123
  PartyFoul.github.expects(:update_issue).with('test_owner/test_repo', 1, 'Test Title', 'New Body', state: 'open', labels: ['bug', 'regression', 'staging'])
124
124
  PartyFoul.github.expects(:add_comment).with('test_owner/test_repo', 1, 'Test Comment')
125
125
  PartyFoul.github.expects(:references).with('test_owner/test_repo', 'heads/deploy').returns(sawyer_resource({object: {sha: 'abcdefg1234567890'}}))
@@ -133,7 +133,7 @@ describe 'Party Foul Exception Handler' do
133
133
  PartyFoul::IssueRenderers::Rails.any_instance.stubs(:body).returns('Test Body')
134
134
  PartyFoul.github.expects(:search_issues).with('test_fingerprint repo:test_owner/test_repo state:open').returns(no_search_results)
135
135
  PartyFoul.github.expects(:search_issues).with('test_fingerprint repo:test_owner/test_repo state:closed').returns(
136
- sawyer_resource({total_count: 1, incomplete_results: false, items:[{title: 'Test Title', body: 'Test Body', state: 'closed', number: 1, labels: ['wontfix']}]}) )
136
+ sawyer_resource({total_count: 1, incomplete_results: false, items:[{title: 'Test Title', body: 'Test Body', state: 'closed', number: 1, labels: [{url: 'https://api.github.com/repos/test_owner/test_repo/labels/wontfix', name: 'wontfix', color: 'f29513'}]}]}) )
137
137
  PartyFoul.github.expects(:create_issue).never
138
138
  PartyFoul.github.expects(:update_issue).never
139
139
  PartyFoul.github.expects(:add_comment).never
@@ -188,4 +188,20 @@ describe 'Party Foul Exception Handler' do
188
188
  end
189
189
  end
190
190
  end
191
+
192
+ describe '.clean_env' do
193
+ context 'when env contains file reference' do
194
+ before do
195
+ @env = {
196
+ 'action_dispatch.request.parameters' => {
197
+ :@tempfile => File.open(__FILE__)
198
+ }
199
+ }
200
+ end
201
+
202
+ it "marshal dump shouldn't reject values when they contain File" do
203
+ PartyFoul::ExceptionHandler.send(:clean_env, @env)['action_dispatch.request.parameters'].must_be_instance_of Hash
204
+ end
205
+ end
206
+ end
191
207
  end
@@ -29,18 +29,20 @@ describe 'Rack Issue Renderer' do
29
29
  end
30
30
  end
31
31
 
32
- describe '#ip_address' do
32
+ describe '#ip_address_geolocator' do
33
33
  # we are delegating to rack, see
34
34
  # https://github.com/rack/rack/blob/master/test/spec_request.rb
35
35
 
36
- it 'returns the IP address when REMOTE_ADDR is set' do
36
+ it 'returns the link to geolocation IP address when REMOTE_ADDR is set' do
37
37
  issue_renderer = PartyFoul::IssueRenderers::Rack.new(nil, { 'REMOTE_ADDR' => '1.2.3.4' })
38
- issue_renderer.ip_address.must_equal '1.2.3.4'
38
+ ip_addr = "<a href='http://ipinfo.io/1.2.3.4'>1.2.3.4</a>"
39
+ issue_renderer.ip_address_locator.must_equal ip_addr
39
40
  end
40
41
 
41
- it 'return the IP address when HTTP_X_FORWARDED_FOR is set' do
42
+ it 'return the link to geolocation IP address when HTTP_X_FORWARDED_FOR is set' do
42
43
  issue_renderer = PartyFoul::IssueRenderers::Rack.new(nil, { 'HTTP_X_FORWARDED_FOR' => '10.0.0.1, 10.0.0.1, 3.4.5.6' })
43
- issue_renderer.ip_address.must_equal '3.4.5.6'
44
+ ip_addr = "<a href='http://ipinfo.io/3.4.5.6'>3.4.5.6</a>"
45
+ issue_renderer.ip_address_locator.must_equal ip_addr
44
46
  end
45
47
  end
46
48
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: party_foul
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.4
4
+ version: 1.5.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Cardarella
@@ -9,132 +9,132 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-04-29 00:00:00.000000000 Z
12
+ date: 2014-10-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: octokit
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - ~>
18
+ - - "~>"
19
19
  - !ruby/object:Gem::Version
20
20
  version: '3.1'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - ~>
25
+ - - "~>"
26
26
  - !ruby/object:Gem::Version
27
27
  version: '3.1'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: actionpack
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - ~>
32
+ - - "~>"
33
33
  - !ruby/object:Gem::Version
34
34
  version: '4.0'
35
35
  type: :development
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - ~>
39
+ - - "~>"
40
40
  - !ruby/object:Gem::Version
41
41
  version: '4.0'
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: activesupport
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - ~>
46
+ - - "~>"
47
47
  - !ruby/object:Gem::Version
48
48
  version: '4.0'
49
49
  type: :development
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - ~>
53
+ - - "~>"
54
54
  - !ruby/object:Gem::Version
55
55
  version: '4.0'
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: railties
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
- - - ~>
60
+ - - "~>"
61
61
  - !ruby/object:Gem::Version
62
62
  version: '4.0'
63
63
  type: :development
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
- - - ~>
67
+ - - "~>"
68
68
  - !ruby/object:Gem::Version
69
69
  version: '4.0'
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: minitest
72
72
  requirement: !ruby/object:Gem::Requirement
73
73
  requirements:
74
- - - ~>
74
+ - - "~>"
75
75
  - !ruby/object:Gem::Version
76
76
  version: '4.7'
77
77
  type: :development
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
- - - ~>
81
+ - - "~>"
82
82
  - !ruby/object:Gem::Version
83
83
  version: '4.7'
84
84
  - !ruby/object:Gem::Dependency
85
85
  name: webmock
86
86
  requirement: !ruby/object:Gem::Requirement
87
87
  requirements:
88
- - - '>='
88
+ - - ">="
89
89
  - !ruby/object:Gem::Version
90
90
  version: '0'
91
91
  type: :development
92
92
  prerelease: false
93
93
  version_requirements: !ruby/object:Gem::Requirement
94
94
  requirements:
95
- - - '>='
95
+ - - ">="
96
96
  - !ruby/object:Gem::Version
97
97
  version: '0'
98
98
  - !ruby/object:Gem::Dependency
99
99
  name: rack-test
100
100
  requirement: !ruby/object:Gem::Requirement
101
101
  requirements:
102
- - - '>='
102
+ - - ">="
103
103
  - !ruby/object:Gem::Version
104
104
  version: '0'
105
105
  type: :development
106
106
  prerelease: false
107
107
  version_requirements: !ruby/object:Gem::Requirement
108
108
  requirements:
109
- - - '>='
109
+ - - ">="
110
110
  - !ruby/object:Gem::Version
111
111
  version: '0'
112
112
  - !ruby/object:Gem::Dependency
113
113
  name: mocha
114
114
  requirement: !ruby/object:Gem::Requirement
115
115
  requirements:
116
- - - '>='
116
+ - - ">="
117
117
  - !ruby/object:Gem::Version
118
118
  version: '0'
119
119
  type: :development
120
120
  prerelease: false
121
121
  version_requirements: !ruby/object:Gem::Requirement
122
122
  requirements:
123
- - - '>='
123
+ - - ">="
124
124
  - !ruby/object:Gem::Version
125
125
  version: '0'
126
126
  - !ruby/object:Gem::Dependency
127
127
  name: m
128
128
  requirement: !ruby/object:Gem::Requirement
129
129
  requirements:
130
- - - '>='
130
+ - - ">="
131
131
  - !ruby/object:Gem::Version
132
132
  version: '0'
133
133
  type: :development
134
134
  prerelease: false
135
135
  version_requirements: !ruby/object:Gem::Requirement
136
136
  requirements:
137
- - - '>='
137
+ - - ">="
138
138
  - !ruby/object:Gem::Version
139
139
  version: '0'
140
140
  description: Auto-submit Rails exceptions as new issues on GitHub
@@ -145,26 +145,26 @@ executables: []
145
145
  extensions: []
146
146
  extra_rdoc_files: []
147
147
  files:
148
+ - README.md
149
+ - Rakefile
148
150
  - lib/generators/party_foul/install_generator.rb
149
151
  - lib/generators/party_foul/templates/party_foul.rb
152
+ - lib/party_foul.rb
150
153
  - lib/party_foul/exception_handler.rb
154
+ - lib/party_foul/issue_renderers.rb
151
155
  - lib/party_foul/issue_renderers/base.rb
152
156
  - lib/party_foul/issue_renderers/rack.rb
153
157
  - lib/party_foul/issue_renderers/rackless.rb
154
158
  - lib/party_foul/issue_renderers/rails.rb
155
- - lib/party_foul/issue_renderers.rb
156
159
  - lib/party_foul/middleware.rb
160
+ - lib/party_foul/processors.rb
157
161
  - lib/party_foul/processors/base.rb
158
162
  - lib/party_foul/processors/delayed_job.rb
159
163
  - lib/party_foul/processors/resque.rb
160
164
  - lib/party_foul/processors/sidekiq.rb
161
165
  - lib/party_foul/processors/sync.rb
162
- - lib/party_foul/processors.rb
163
166
  - lib/party_foul/rackless_exception_handler.rb
164
167
  - lib/party_foul/version.rb
165
- - lib/party_foul.rb
166
- - Rakefile
167
- - README.md
168
168
  - test/generator_test.rb
169
169
  - test/party_foul/configure_test.rb
170
170
  - test/party_foul/exception_handler_test.rb
@@ -186,17 +186,17 @@ require_paths:
186
186
  - lib
187
187
  required_ruby_version: !ruby/object:Gem::Requirement
188
188
  requirements:
189
- - - '>='
189
+ - - ">="
190
190
  - !ruby/object:Gem::Version
191
191
  version: 1.9.3
192
192
  required_rubygems_version: !ruby/object:Gem::Requirement
193
193
  requirements:
194
- - - '>='
194
+ - - ">="
195
195
  - !ruby/object:Gem::Version
196
196
  version: '0'
197
197
  requirements: []
198
198
  rubyforge_project:
199
- rubygems_version: 2.0.3
199
+ rubygems_version: 2.2.2
200
200
  signing_key:
201
201
  specification_version: 4
202
202
  summary: Auto-submit Rails exceptions as new issues on GitHub