ixtlan-error-handler 0.3.1 → 0.4.0
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/lib/ixtlan/errors/cuba.rb +4 -1
- data/lib/ixtlan/errors/dumper.rb +9 -7
- data/lib/ixtlan/errors/rack.rb +5 -3
- data/lib/ixtlan/errors/resource.rb +14 -6
- data/spec/dumper_spec.rb +3 -50
- metadata +135 -147
data/lib/ixtlan/errors/cuba.rb
CHANGED
@@ -25,6 +25,9 @@ module Ixtlan
|
|
25
25
|
module Errors
|
26
26
|
class Cuba < ::CubaAPI
|
27
27
|
define do
|
28
|
+
on get, 'last' do
|
29
|
+
write Ixtlan::Errors::Error.last
|
30
|
+
end
|
28
31
|
on get, :number do |number|
|
29
32
|
write Ixtlan::Errors::Error.get!( number )
|
30
33
|
end
|
@@ -34,4 +37,4 @@ module Ixtlan
|
|
34
37
|
end
|
35
38
|
end
|
36
39
|
end
|
37
|
-
end
|
40
|
+
end
|
data/lib/ixtlan/errors/dumper.rb
CHANGED
@@ -68,7 +68,7 @@ module Ixtlan
|
|
68
68
|
session,
|
69
69
|
params )
|
70
70
|
|
71
|
-
if not @to_emails.blank? and not @from_email.blank?
|
71
|
+
if not error.id.nil? and not @to_emails.blank? and not @from_email.blank?
|
72
72
|
Mailer.error_notification( @from_email,
|
73
73
|
@to_emails,
|
74
74
|
exception,
|
@@ -88,9 +88,7 @@ module Ixtlan
|
|
88
88
|
def dump_environment( exception, request, response, session , params )
|
89
89
|
dump = model.new
|
90
90
|
|
91
|
-
dump.request = dump_hashmap( request )
|
92
|
-
|
93
|
-
dump.response = dump_hashmap( response )
|
91
|
+
dump.request = dump_hashmap( request, '', true )
|
94
92
|
|
95
93
|
dump.session = dump_hashmap( session )
|
96
94
|
|
@@ -101,13 +99,15 @@ module Ixtlan
|
|
101
99
|
dump.clazz = exception.class.to_s
|
102
100
|
|
103
101
|
dump.backtrace = exception.backtrace.join("\n") if exception.backtrace
|
104
|
-
|
105
|
-
dump
|
102
|
+
|
103
|
+
dump.save
|
104
|
+
dump
|
106
105
|
end
|
107
106
|
|
108
|
-
def dump_hashmap(map, indent = '')
|
107
|
+
def dump_hashmap(map, indent = '', capital_keys_only = false )
|
109
108
|
result = ''
|
110
109
|
map.each do |key,value|
|
110
|
+
if !capital_keys_only || (key =~ /^[A-Z_]+$/) != nil
|
111
111
|
if value.is_a? Hash
|
112
112
|
result << "#{indent}#{key} => {\n"
|
113
113
|
result << dump_hashmap(value, "#{indent} ")
|
@@ -115,7 +115,9 @@ module Ixtlan
|
|
115
115
|
else
|
116
116
|
result << "#{indent}#{key} => #{value.nil? ? 'nil': value}\n"
|
117
117
|
end
|
118
|
+
end
|
118
119
|
end
|
120
|
+
result.strip!
|
119
121
|
result
|
120
122
|
end
|
121
123
|
|
data/lib/ixtlan/errors/rack.rb
CHANGED
@@ -18,6 +18,7 @@
|
|
18
18
|
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
19
19
|
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
20
20
|
#
|
21
|
+
require 'rack/request'
|
21
22
|
module Ixtlan
|
22
23
|
module Errors
|
23
24
|
class Rack
|
@@ -61,8 +62,9 @@ module Ixtlan
|
|
61
62
|
@app.call(env)
|
62
63
|
rescue Exception => e
|
63
64
|
status = @map[ e.class ] || 500
|
64
|
-
if status >= 500
|
65
|
-
|
65
|
+
if status >= 500
|
66
|
+
req = ::Rack::Request.new env
|
67
|
+
@dumper.dump( e, env, {}, req.session, req.params )
|
66
68
|
end
|
67
69
|
if @dump_to_console
|
68
70
|
warn "[Ixtlan] #{e.class}: #{e.message}"
|
@@ -76,4 +78,4 @@ module Ixtlan
|
|
76
78
|
|
77
79
|
end
|
78
80
|
end
|
79
|
-
end
|
81
|
+
end
|
@@ -25,21 +25,29 @@ module Ixtlan
|
|
25
25
|
|
26
26
|
include DataMapper::Resource
|
27
27
|
|
28
|
+
def self.storage_name(arg)
|
29
|
+
'ixtlan_errors'
|
30
|
+
end
|
31
|
+
|
28
32
|
property :id, Serial
|
29
33
|
|
30
34
|
property :clazz, String, :required => true, :length => 64
|
31
35
|
property :message, String, :required => true, :length => 255
|
32
|
-
property :backtrace, Text, :required =>
|
33
|
-
property :request, Text, :required =>
|
34
|
-
property :
|
35
|
-
property :
|
36
|
-
property :
|
36
|
+
property :backtrace, Text, :required => false, :length => 32768
|
37
|
+
property :request, Text, :required => false, :length => 32768
|
38
|
+
property :session, Text, :required => false, :length => 16384
|
39
|
+
property :parameters, Text, :required => false, :length => 32768
|
40
|
+
#property :body, Text, :required => false, :length => 64536
|
37
41
|
|
38
42
|
property :created_at, DateTime
|
39
43
|
|
40
44
|
before :save do
|
41
45
|
self.created_at = DateTime.now
|
42
46
|
end
|
47
|
+
|
48
|
+
def to_s
|
49
|
+
"#{clazz}: #{message}"
|
50
|
+
end
|
43
51
|
end
|
44
52
|
end
|
45
|
-
end
|
53
|
+
end
|
data/spec/dumper_spec.rb
CHANGED
@@ -1,26 +1,9 @@
|
|
1
1
|
require 'dm-core'
|
2
2
|
require 'dm-migrations'
|
3
3
|
require 'slf4r/ruby_logger'
|
4
|
+
require 'ixtlan/errors/resource'
|
4
5
|
|
5
|
-
|
6
|
-
include DataMapper::Resource
|
7
|
-
|
8
|
-
property :id, Serial
|
9
|
-
|
10
|
-
property :message, String
|
11
|
-
property :clazz, String
|
12
|
-
property :request, Text
|
13
|
-
property :response, Text
|
14
|
-
property :session, Text
|
15
|
-
property :parameters, Text
|
16
|
-
property :backtrace, Text
|
17
|
-
|
18
|
-
property :created_at, DateTime
|
19
|
-
|
20
|
-
before :save do
|
21
|
-
self.created_at = DateTime.now
|
22
|
-
end
|
23
|
-
end
|
6
|
+
Error = Ixtlan::Errors::Error
|
24
7
|
|
25
8
|
require 'pony'
|
26
9
|
Pony.options = { :via => :test }
|
@@ -55,36 +38,6 @@ class Controller < Hash
|
|
55
38
|
end
|
56
39
|
end
|
57
40
|
|
58
|
-
class NilClass
|
59
|
-
def blank?
|
60
|
-
true
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
class String
|
65
|
-
def blank?
|
66
|
-
size == 0
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
class Fixnum
|
71
|
-
def days
|
72
|
-
self
|
73
|
-
end
|
74
|
-
def ago
|
75
|
-
DateTime.now - 86000 * self
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
class DateTime
|
80
|
-
def tv_sec
|
81
|
-
sec
|
82
|
-
end
|
83
|
-
def tv_usec
|
84
|
-
0
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
41
|
DataMapper.setup(:default, "sqlite3::memory:")
|
89
42
|
DataMapper.finalize
|
90
43
|
DataMapper.auto_migrate!
|
@@ -113,7 +66,7 @@ describe Ixtlan::Errors::Dumper do
|
|
113
66
|
end
|
114
67
|
|
115
68
|
it "should clean up error dumps" do
|
116
|
-
Error.create(:message => 'msg')
|
69
|
+
Error.create(:message => 'msg', :clazz => StandardError.to_s)
|
117
70
|
Error.all.size.should > 0
|
118
71
|
@dumper.keep_dumps = 0
|
119
72
|
Error.all.size.should == 0
|
metadata
CHANGED
@@ -1,158 +1,151 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: ixtlan-error-handler
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 3
|
9
|
-
- 1
|
10
|
-
version: 0.3.1
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.4.0
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Christian Meier
|
14
|
-
autorequire:
|
9
|
+
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2013-01-30 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: slf4r
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
- 2
|
16
|
+
version_requirements: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - "~>"
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: 0.4.2
|
21
|
+
none: false
|
22
|
+
requirement: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
33
26
|
version: 0.4.2
|
27
|
+
none: false
|
28
|
+
prerelease: false
|
34
29
|
type: :runtime
|
35
|
-
|
36
|
-
- !ruby/object:Gem::Dependency
|
30
|
+
- !ruby/object:Gem::Dependency
|
37
31
|
name: rspec
|
32
|
+
version_requirements: !ruby/object:Gem::Requirement
|
33
|
+
requirements:
|
34
|
+
- - "~>"
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '2.11'
|
37
|
+
none: false
|
38
|
+
requirement: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - "~>"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '2.11'
|
43
|
+
none: false
|
38
44
|
prerelease: false
|
39
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
40
|
-
none: false
|
41
|
-
requirements:
|
42
|
-
- - ~>
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
hash: 21
|
45
|
-
segments:
|
46
|
-
- 2
|
47
|
-
- 11
|
48
|
-
version: "2.11"
|
49
45
|
type: :development
|
50
|
-
|
51
|
-
- !ruby/object:Gem::Dependency
|
46
|
+
- !ruby/object:Gem::Dependency
|
52
47
|
name: rake
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
- 2
|
48
|
+
version_requirements: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - "~>"
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 10.0.2
|
53
|
+
none: false
|
54
|
+
requirement: !ruby/object:Gem::Requirement
|
55
|
+
requirements:
|
56
|
+
- - "~>"
|
57
|
+
- !ruby/object:Gem::Version
|
64
58
|
version: 10.0.2
|
59
|
+
none: false
|
60
|
+
prerelease: false
|
65
61
|
type: :development
|
66
|
-
|
67
|
-
- !ruby/object:Gem::Dependency
|
62
|
+
- !ruby/object:Gem::Dependency
|
68
63
|
name: dm-core
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
- 0
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 1.2.0
|
69
|
+
none: false
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
80
74
|
version: 1.2.0
|
75
|
+
none: false
|
76
|
+
prerelease: false
|
81
77
|
type: :development
|
82
|
-
|
83
|
-
- !ruby/object:Gem::Dependency
|
78
|
+
- !ruby/object:Gem::Dependency
|
84
79
|
name: dm-migrations
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
- 0
|
80
|
+
version_requirements: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - "~>"
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: 1.2.0
|
85
|
+
none: false
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - "~>"
|
89
|
+
- !ruby/object:Gem::Version
|
96
90
|
version: 1.2.0
|
91
|
+
none: false
|
92
|
+
prerelease: false
|
97
93
|
type: :development
|
98
|
-
|
99
|
-
- !ruby/object:Gem::Dependency
|
94
|
+
- !ruby/object:Gem::Dependency
|
100
95
|
name: dm-sqlite-adapter
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
- 0
|
96
|
+
version_requirements: !ruby/object:Gem::Requirement
|
97
|
+
requirements:
|
98
|
+
- - "~>"
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: 1.2.0
|
101
|
+
none: false
|
102
|
+
requirement: !ruby/object:Gem::Requirement
|
103
|
+
requirements:
|
104
|
+
- - "~>"
|
105
|
+
- !ruby/object:Gem::Version
|
112
106
|
version: 1.2.0
|
107
|
+
none: false
|
108
|
+
prerelease: false
|
113
109
|
type: :development
|
114
|
-
|
115
|
-
- !ruby/object:Gem::Dependency
|
110
|
+
- !ruby/object:Gem::Dependency
|
116
111
|
name: pony
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - "~>"
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '1.4'
|
117
|
+
none: false
|
118
|
+
requirement: !ruby/object:Gem::Requirement
|
119
|
+
requirements:
|
120
|
+
- - "~>"
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: '1.4'
|
123
|
+
none: false
|
117
124
|
prerelease: false
|
118
|
-
requirement: &id007 !ruby/object:Gem::Requirement
|
119
|
-
none: false
|
120
|
-
requirements:
|
121
|
-
- - ~>
|
122
|
-
- !ruby/object:Gem::Version
|
123
|
-
hash: 7
|
124
|
-
segments:
|
125
|
-
- 1
|
126
|
-
- 4
|
127
|
-
version: "1.4"
|
128
125
|
type: :development
|
129
|
-
|
130
|
-
- !ruby/object:Gem::Dependency
|
126
|
+
- !ruby/object:Gem::Dependency
|
131
127
|
name: copyright-header
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
- 7
|
128
|
+
version_requirements: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - "~>"
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: 1.0.7
|
133
|
+
none: false
|
134
|
+
requirement: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
143
138
|
version: 1.0.7
|
139
|
+
none: false
|
140
|
+
prerelease: false
|
144
141
|
type: :development
|
145
|
-
version_requirements: *id008
|
146
142
|
description: dump errors on filesystem and notify developers, map different errors to specific pages
|
147
|
-
email:
|
143
|
+
email:
|
148
144
|
- m.kristian@web.de
|
149
145
|
executables: []
|
150
|
-
|
151
146
|
extensions: []
|
152
|
-
|
153
147
|
extra_rdoc_files: []
|
154
|
-
|
155
|
-
files:
|
148
|
+
files:
|
156
149
|
- MIT-LICENSE
|
157
150
|
- README.textile
|
158
151
|
- lib/ixtlan-error-handler.rb
|
@@ -161,7 +154,6 @@ files:
|
|
161
154
|
- lib/ixtlan/errors/cuba.rb
|
162
155
|
- lib/ixtlan/errors/dumper.rb
|
163
156
|
- lib/ixtlan/errors/error_handling.rb~
|
164
|
-
- lib/ixtlan/errors/mailer/error_notification.erb
|
165
157
|
- lib/ixtlan/errors/error.rb~
|
166
158
|
- lib/ixtlan/errors/resource.rb~
|
167
159
|
- lib/ixtlan/errors/rescue_module.rb~
|
@@ -178,44 +170,40 @@ files:
|
|
178
170
|
- lib/ixtlan/errors/rack.rb~
|
179
171
|
- lib/ixtlan/errors/rack.rb
|
180
172
|
- lib/ixtlan/errors/serializer.rb
|
173
|
+
- lib/ixtlan/errors/mailer/error_notification.erb
|
181
174
|
- spec/error_handler_spec.rb
|
182
175
|
- spec/dumper_spec.rb
|
183
176
|
- spec/error_dumper_spec.rb~
|
184
177
|
- spec/error_handler_spec.rb~
|
185
178
|
homepage: http://github.com/mkristian/ixtlan-error-handler
|
186
|
-
licenses:
|
179
|
+
licenses:
|
187
180
|
- MIT
|
188
|
-
post_install_message:
|
189
|
-
rdoc_options:
|
190
|
-
- --main
|
181
|
+
post_install_message:
|
182
|
+
rdoc_options:
|
183
|
+
- "--main"
|
191
184
|
- README.textile
|
192
|
-
require_paths:
|
185
|
+
require_paths:
|
193
186
|
- lib
|
194
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
195
|
-
|
196
|
-
requirements:
|
187
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
188
|
+
requirements:
|
197
189
|
- - ">="
|
198
|
-
- !ruby/object:Gem::Version
|
199
|
-
|
200
|
-
|
201
|
-
- 0
|
202
|
-
version: "0"
|
203
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
190
|
+
- !ruby/object:Gem::Version
|
191
|
+
version: !binary |-
|
192
|
+
MA==
|
204
193
|
none: false
|
205
|
-
|
194
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
195
|
+
requirements:
|
206
196
|
- - ">="
|
207
|
-
- !ruby/object:Gem::Version
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
version: "0"
|
197
|
+
- !ruby/object:Gem::Version
|
198
|
+
version: !binary |-
|
199
|
+
MA==
|
200
|
+
none: false
|
212
201
|
requirements: []
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
signing_key:
|
202
|
+
rubyforge_project:
|
203
|
+
rubygems_version: 1.8.24
|
204
|
+
signing_key:
|
217
205
|
specification_version: 3
|
218
206
|
summary: dump errors on filesystem and notify developers
|
219
|
-
test_files:
|
207
|
+
test_files:
|
220
208
|
- spec/error_handler_spec.rb
|
221
209
|
- spec/dumper_spec.rb
|