ntl-error_data 0.1.0.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.
- checksums.yaml +7 -0
- data/lib/error_data.rb +10 -0
- data/lib/error_data/controls.rb +4 -0
- data/lib/error_data/controls/error.rb +23 -0
- data/lib/error_data/controls/error/backtrace.rb +79 -0
- data/lib/error_data/controls/error/message.rb +15 -0
- data/lib/error_data/controls/error_data.rb +167 -0
- data/lib/error_data/convert.rb +15 -0
- data/lib/error_data/error_data.rb +67 -0
- data/lib/error_data/error_data/backtrace.rb +39 -0
- data/lib/error_data/error_data/backtrace/frame.rb +33 -0
- metadata +108 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f6e0eb4aa4452b9708dc4aa0cada2507fe716d98ed510a19ee6b1c9ee697e4d5
|
4
|
+
data.tar.gz: 2775f7e875f61d21cb9b9a62ab000c02d3dbfb590785e34586fb33060981403c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 39f0882c396b42783d11e92e563d0d6be17f93ba243eb2728014eb7a8bdccc13e6fb0d3fbd23d46886d5a1e73d03df95aa52b7d5e269fc2e0feedfedca114ed1
|
7
|
+
data.tar.gz: 974e4b0fa92eb1191d5ce99a31083f547e9863f93b9dd71870cbbe8e986db25a61ead7835785a5e5bbe416f7515e9644e1f84bc8dda4fbc0727f55feca00060c
|
data/lib/error_data.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
class ErrorData
|
2
|
+
module Controls
|
3
|
+
module Error
|
4
|
+
Example = Class.new(RuntimeError)
|
5
|
+
|
6
|
+
OtherExample = Class.new(RuntimeError)
|
7
|
+
|
8
|
+
def self.example
|
9
|
+
error = Example.new(message)
|
10
|
+
error.set_backtrace(Backtrace.example)
|
11
|
+
error
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.class_name
|
15
|
+
Example.name
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.message
|
19
|
+
Message.example
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
class ErrorData
|
2
|
+
module Controls
|
3
|
+
module Error
|
4
|
+
module Backtrace
|
5
|
+
def self.example
|
6
|
+
[
|
7
|
+
Frames::First.text,
|
8
|
+
Frames::Second.text,
|
9
|
+
Frames::Third.text
|
10
|
+
]
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.other_example
|
14
|
+
[
|
15
|
+
Frames::First.text,
|
16
|
+
Frames::Third.text,
|
17
|
+
Frames::Second.text
|
18
|
+
]
|
19
|
+
end
|
20
|
+
|
21
|
+
module Frames
|
22
|
+
module Text
|
23
|
+
def text
|
24
|
+
"#{filename}:#{line_number}:in `#{method_name}'"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
module First
|
29
|
+
extend Text
|
30
|
+
|
31
|
+
def self.line_number
|
32
|
+
111
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.filename
|
36
|
+
'some_file.rb'
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.method_name
|
40
|
+
'some_method'
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
module Second
|
45
|
+
extend Text
|
46
|
+
|
47
|
+
def self.line_number
|
48
|
+
11
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.filename
|
52
|
+
'some_other_file.rb'
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.method_name
|
56
|
+
'some_other_method'
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
module Third
|
61
|
+
extend Text
|
62
|
+
|
63
|
+
def self.line_number
|
64
|
+
1
|
65
|
+
end
|
66
|
+
|
67
|
+
def self.filename
|
68
|
+
'yet_another_file.rb'
|
69
|
+
end
|
70
|
+
|
71
|
+
def self.method_name
|
72
|
+
'yet_another_method'
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,167 @@
|
|
1
|
+
class ErrorData
|
2
|
+
module Controls
|
3
|
+
module ErrorData
|
4
|
+
def self.example(class_name: nil, message: nil, backtrace: nil)
|
5
|
+
class_name ||= self.class_name
|
6
|
+
message ||= self.message
|
7
|
+
backtrace ||= self.backtrace
|
8
|
+
|
9
|
+
error_data = ::ErrorData.new
|
10
|
+
|
11
|
+
error_data.class_name = class_name
|
12
|
+
error_data.message = message
|
13
|
+
|
14
|
+
error_data.backtrace = backtrace
|
15
|
+
|
16
|
+
error_data
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.class_name
|
20
|
+
Controls::Error.class_name
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.message
|
24
|
+
Controls::Error.message
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.backtrace
|
28
|
+
Backtrace.example
|
29
|
+
end
|
30
|
+
|
31
|
+
module Backtrace
|
32
|
+
def self.example
|
33
|
+
::ErrorData::Backtrace.new.tap do |b|
|
34
|
+
b << Frames::First.example
|
35
|
+
b << Frames::Second.example
|
36
|
+
b << Frames::Third.example
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.other_example
|
41
|
+
::ErrorData::Backtrace.new.tap do |b|
|
42
|
+
b << Frames::First.example
|
43
|
+
b << Frames::Third.example
|
44
|
+
b << Frames::Second.example
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
module Frames
|
49
|
+
module First
|
50
|
+
def self.example
|
51
|
+
::ErrorData::Backtrace::Frame.new.tap do |f|
|
52
|
+
f.line_number = Controls::Error::Backtrace::Frames::First.line_number
|
53
|
+
f.filename = Controls::Error::Backtrace::Frames::First.filename
|
54
|
+
f.method_name = Controls::Error::Backtrace::Frames::First.method_name
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
module Second
|
60
|
+
def self.example
|
61
|
+
::ErrorData::Backtrace::Frame.new.tap do |f|
|
62
|
+
f.line_number = Controls::Error::Backtrace::Frames::Second.line_number
|
63
|
+
f.filename = Controls::Error::Backtrace::Frames::Second.filename
|
64
|
+
f.method_name = Controls::Error::Backtrace::Frames::Second.method_name
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
module Third
|
70
|
+
def self.example
|
71
|
+
::ErrorData::Backtrace::Frame.new.tap do |f|
|
72
|
+
f.line_number = Controls::Error::Backtrace::Frames::Third.line_number
|
73
|
+
f.filename = Controls::Error::Backtrace::Frames::Third.filename
|
74
|
+
f.method_name = Controls::Error::Backtrace::Frames::Third.method_name
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def self.data
|
82
|
+
data = {}
|
83
|
+
|
84
|
+
data[:class_name] = Controls::Error.class_name
|
85
|
+
data[:message] = Controls::Error.message
|
86
|
+
|
87
|
+
backtrace = [
|
88
|
+
{
|
89
|
+
:line_number => Controls::Error::Backtrace::Frames::First.line_number,
|
90
|
+
:filename => Controls::Error::Backtrace::Frames::First.filename,
|
91
|
+
:method_name => Controls::Error::Backtrace::Frames::First.method_name
|
92
|
+
},
|
93
|
+
{
|
94
|
+
:line_number => Controls::Error::Backtrace::Frames::Second.line_number,
|
95
|
+
:filename => Controls::Error::Backtrace::Frames::Second.filename,
|
96
|
+
:method_name => Controls::Error::Backtrace::Frames::Second.method_name
|
97
|
+
},
|
98
|
+
{
|
99
|
+
:line_number => Controls::Error::Backtrace::Frames::Third.line_number,
|
100
|
+
:filename => Controls::Error::Backtrace::Frames::Third.filename,
|
101
|
+
:method_name => Controls::Error::Backtrace::Frames::Third.method_name
|
102
|
+
}
|
103
|
+
]
|
104
|
+
|
105
|
+
data[:backtrace] = backtrace
|
106
|
+
|
107
|
+
data
|
108
|
+
end
|
109
|
+
|
110
|
+
module JSON
|
111
|
+
def self.text
|
112
|
+
::JSON.generate(data)
|
113
|
+
end
|
114
|
+
|
115
|
+
def self.data
|
116
|
+
{
|
117
|
+
'className' => Controls::Error.class_name,
|
118
|
+
'message' => Controls::Error.message,
|
119
|
+
'backtrace' => Backtrace.data
|
120
|
+
}
|
121
|
+
end
|
122
|
+
|
123
|
+
module Backtrace
|
124
|
+
def self.data
|
125
|
+
[
|
126
|
+
Frames::First.data,
|
127
|
+
Frames::Second.data,
|
128
|
+
Frames::Third.data
|
129
|
+
]
|
130
|
+
end
|
131
|
+
|
132
|
+
module Frames
|
133
|
+
module First
|
134
|
+
def self.data
|
135
|
+
{
|
136
|
+
'filename' => Controls::Error::Backtrace::Frames::First.filename,
|
137
|
+
'lineNumber' => Controls::Error::Backtrace::Frames::First.line_number,
|
138
|
+
'methodName' => Controls::Error::Backtrace::Frames::First.method_name
|
139
|
+
}
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
module Second
|
144
|
+
def self.data
|
145
|
+
{
|
146
|
+
'filename' => Controls::Error::Backtrace::Frames::Second.filename,
|
147
|
+
'lineNumber' => Controls::Error::Backtrace::Frames::Second.line_number,
|
148
|
+
'methodName' => Controls::Error::Backtrace::Frames::Second.method_name
|
149
|
+
}
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
module Third
|
154
|
+
def self.data
|
155
|
+
{
|
156
|
+
'filename' => Controls::Error::Backtrace::Frames::Third.filename,
|
157
|
+
'lineNumber' => Controls::Error::Backtrace::Frames::Third.line_number,
|
158
|
+
'methodName' => Controls::Error::Backtrace::Frames::Third.method_name
|
159
|
+
}
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class ErrorData
|
2
|
+
module Convert
|
3
|
+
module Error
|
4
|
+
def self.call(standard_error)
|
5
|
+
error_data = ErrorData.build
|
6
|
+
|
7
|
+
error_data.class_name = standard_error.class.name
|
8
|
+
error_data.message = standard_error.message
|
9
|
+
error_data.set_backtrace(standard_error.backtrace)
|
10
|
+
|
11
|
+
error_data
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
class ErrorData
|
2
|
+
include Schema::DataStructure
|
3
|
+
|
4
|
+
attribute :class_name, String
|
5
|
+
attribute :message, String
|
6
|
+
attribute :backtrace, Backtrace, default: ->{ Backtrace.new }
|
7
|
+
|
8
|
+
def transform_write(data)
|
9
|
+
backtrace = data.delete(:backtrace)
|
10
|
+
|
11
|
+
backtrace_data = backtrace.to_a
|
12
|
+
|
13
|
+
data[:backtrace] = backtrace_data
|
14
|
+
end
|
15
|
+
|
16
|
+
def transform_read(data)
|
17
|
+
backtrace = data.delete(:backtrace)
|
18
|
+
|
19
|
+
return if backtrace.nil?
|
20
|
+
|
21
|
+
backtrace.each do |frame_data|
|
22
|
+
frame = Backtrace::Frame.build(frame_data)
|
23
|
+
|
24
|
+
self.backtrace.add_frame(frame)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def set_backtrace(backtrace)
|
29
|
+
self.backtrace = Backtrace.parse(backtrace)
|
30
|
+
end
|
31
|
+
|
32
|
+
def correspond?(error)
|
33
|
+
error_corresponds =
|
34
|
+
class_name == error.class.name &&
|
35
|
+
message == error.message
|
36
|
+
|
37
|
+
backtrace_corresponds = backtrace.text_frames == error.backtrace
|
38
|
+
|
39
|
+
error_corresponds && backtrace_corresponds
|
40
|
+
end
|
41
|
+
|
42
|
+
module Transform
|
43
|
+
def self.json
|
44
|
+
JSON
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.raw_data(instance)
|
48
|
+
instance.attributes
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.instance(raw_data)
|
52
|
+
ErrorData.build(raw_data)
|
53
|
+
end
|
54
|
+
|
55
|
+
module JSON
|
56
|
+
def self.read(text)
|
57
|
+
formatted_data = ::JSON.parse(text, symbolize_names: true)
|
58
|
+
Casing::Underscore.(formatted_data)
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.write(raw_data)
|
62
|
+
formatted_data = Casing::Camel.(raw_data)
|
63
|
+
::JSON.generate(formatted_data)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
class ErrorData
|
2
|
+
class Backtrace
|
3
|
+
include Schema::DataStructure
|
4
|
+
|
5
|
+
attribute :frames, Array, default: ->{ Array.new }
|
6
|
+
|
7
|
+
def add_frame(frame)
|
8
|
+
frames << frame
|
9
|
+
self
|
10
|
+
end
|
11
|
+
alias :<< :add_frame
|
12
|
+
|
13
|
+
def each(&blk)
|
14
|
+
frames.each &blk
|
15
|
+
end
|
16
|
+
|
17
|
+
def text_frames
|
18
|
+
frames.map do |frame|
|
19
|
+
frame.to_s
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def to_a
|
24
|
+
frames.map do |frame|
|
25
|
+
frame.to_h
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.parse(backtrace)
|
30
|
+
instance = new
|
31
|
+
|
32
|
+
backtrace.each do |frame|
|
33
|
+
instance.add_frame(Frame.parse(frame))
|
34
|
+
end
|
35
|
+
|
36
|
+
instance
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
class ErrorData
|
2
|
+
class Backtrace
|
3
|
+
class Frame
|
4
|
+
include Schema::DataStructure
|
5
|
+
|
6
|
+
attribute :filename, String
|
7
|
+
attribute :line_number, Integer
|
8
|
+
attribute :method_name, String
|
9
|
+
|
10
|
+
def to_s
|
11
|
+
"#{filename}:#{line_number}:in `#{method_name}'"
|
12
|
+
end
|
13
|
+
|
14
|
+
def correspond?(backtrace_text)
|
15
|
+
to_s == backtrace_text
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.parse(frame_text)
|
19
|
+
filename, line_number, method_name = frame_text.split(':')
|
20
|
+
|
21
|
+
line_number = Integer(line_number)
|
22
|
+
|
23
|
+
method_name.gsub!(/^in `(.*?)'$/, "\\1")
|
24
|
+
|
25
|
+
build({
|
26
|
+
:filename => filename,
|
27
|
+
:line_number => line_number,
|
28
|
+
:method_name => method_name
|
29
|
+
})
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
metadata
ADDED
@@ -0,0 +1,108 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ntl-error_data
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- The Eventide Project
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-07-14 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: evt-schema
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: evt-casing
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: evt-transform
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: test_bench
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
description: " "
|
70
|
+
email: opensource@eventide-project.org
|
71
|
+
executables: []
|
72
|
+
extensions: []
|
73
|
+
extra_rdoc_files: []
|
74
|
+
files:
|
75
|
+
- lib/error_data.rb
|
76
|
+
- lib/error_data/controls.rb
|
77
|
+
- lib/error_data/controls/error.rb
|
78
|
+
- lib/error_data/controls/error/backtrace.rb
|
79
|
+
- lib/error_data/controls/error/message.rb
|
80
|
+
- lib/error_data/controls/error_data.rb
|
81
|
+
- lib/error_data/convert.rb
|
82
|
+
- lib/error_data/error_data.rb
|
83
|
+
- lib/error_data/error_data/backtrace.rb
|
84
|
+
- lib/error_data/error_data/backtrace/frame.rb
|
85
|
+
homepage: https://github.com/ntl/error-data
|
86
|
+
licenses:
|
87
|
+
- MIT
|
88
|
+
metadata: {}
|
89
|
+
post_install_message:
|
90
|
+
rdoc_options: []
|
91
|
+
require_paths:
|
92
|
+
- lib
|
93
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '2.4'
|
98
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
requirements: []
|
104
|
+
rubygems_version: 3.1.3
|
105
|
+
signing_key:
|
106
|
+
specification_version: 4
|
107
|
+
summary: Representation of an error as a data structure
|
108
|
+
test_files: []
|