errawr 1.0.0 → 1.1.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 +4 -4
- data/README.md +59 -21
- data/lib/errawr/error.rb +12 -4
- data/lib/errawr/mapper.rb +2 -2
- data/lib/errawr/version.rb +1 -1
- data/lib/errawr.rb +1 -0
- data/spec/errawr_spec.rb +59 -3
- data/spec/error_spec.rb +1 -6
- data/spec/mapper_spec.rb +4 -33
- data/spec/spec_helper.rb +8 -1
- data/spec/support/en.yml +7 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a3b043ffb1dcda46e9beb5498e5978b54adf09fc
|
4
|
+
data.tar.gz: c5528e95eb0ce52255fb7f92a77f48efac869686
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a1fa4e75ee111570f0de9ab27778823c0e1c5e746c5c7b765819d6341f025c863d5b0715be5f01bb7ca8fdee0908161c420fa8a49e18841c2eb593c0e1d940b3
|
7
|
+
data.tar.gz: 1cb2fe1943cc8ec4d792fe5047a06bbc5cb91e735a7441d661710098c3b7cc43ab38361f1c0420709de97015cc68350c166d7f2d097ec1eecb0e2fad96efe2a7
|
data/README.md
CHANGED
@@ -44,24 +44,37 @@ Before you can raise an error you'll need to register it first.
|
|
44
44
|
Errawr.register!(:your_error)
|
45
45
|
```
|
46
46
|
|
47
|
-
|
47
|
+
### Raising Errors
|
48
48
|
|
49
49
|
```ruby
|
50
|
-
Errawr.register!(:bad_request, { http_status: 400 })
|
51
50
|
begin
|
52
|
-
Errawr.error!(:
|
51
|
+
Errawr.error!(:your_error)
|
53
52
|
rescue => e
|
54
|
-
puts e.
|
53
|
+
puts e.message # Localized error message defined in locale file
|
55
54
|
end
|
56
55
|
```
|
57
56
|
|
58
|
-
###
|
57
|
+
### Metadata
|
58
|
+
|
59
|
+
It's possible to add additional information to a registered error through metadata. Just specify a ```metadata``` hash when either registering:
|
59
60
|
|
60
61
|
```ruby
|
62
|
+
Errawr.register!(:your_error, metadata: { http_status: 400 })
|
61
63
|
begin
|
62
64
|
Errawr.error!(:your_error)
|
63
65
|
rescue => e
|
64
|
-
puts e.
|
66
|
+
puts e.metadata[:http_status] # Will return 400
|
67
|
+
end
|
68
|
+
```
|
69
|
+
|
70
|
+
or throwing an error:
|
71
|
+
|
72
|
+
```ruby
|
73
|
+
Errawr.register!(:your_error)
|
74
|
+
begin
|
75
|
+
Errawr.error!(:your_error, metadata: { http_status: 400 })
|
76
|
+
rescue => e
|
77
|
+
puts e.metadata[:http_status] # Will return 400
|
65
78
|
end
|
66
79
|
```
|
67
80
|
|
@@ -73,9 +86,9 @@ It's also possible to manage your errors and their metadata purely through local
|
|
73
86
|
en:
|
74
87
|
errawr:
|
75
88
|
your_error:
|
76
|
-
|
77
|
-
|
78
|
-
|
89
|
+
message: My awesome error message
|
90
|
+
metadata:
|
91
|
+
http_status: 400
|
79
92
|
```
|
80
93
|
|
81
94
|
Then just register and raise your exceptions like normal.
|
@@ -85,11 +98,29 @@ Errawr.register!(:your_error)
|
|
85
98
|
begin
|
86
99
|
Errawr.error!(:your_error)
|
87
100
|
rescue => e
|
88
|
-
puts e.
|
101
|
+
puts e.metadata[:http_status] # Will return 400
|
89
102
|
end
|
90
103
|
```
|
91
104
|
|
92
|
-
|
105
|
+
### I18n Interpolation
|
106
|
+
|
107
|
+
You can pass in parameter values to your localized error messages.
|
108
|
+
|
109
|
+
```yaml
|
110
|
+
en
|
111
|
+
errawr:
|
112
|
+
your_error:
|
113
|
+
message: "My awesome error message is: %{error_message}"
|
114
|
+
```
|
115
|
+
|
116
|
+
```ruby
|
117
|
+
Errawr.register!(:your_error, error_message: 'You did it wrong!')
|
118
|
+
begin
|
119
|
+
Errawr.error!(:your_error)
|
120
|
+
rescue => e
|
121
|
+
puts e.message # Will return "My awesome error message is: You did it wrong!"
|
122
|
+
end
|
123
|
+
```
|
93
124
|
|
94
125
|
### Overrides
|
95
126
|
|
@@ -99,25 +130,32 @@ Want to override that metadata you registered? That's cool too.
|
|
99
130
|
en:
|
100
131
|
errawr:
|
101
132
|
your_error:
|
102
|
-
|
103
|
-
|
104
|
-
|
133
|
+
message: My awesome error message
|
134
|
+
metadata:
|
135
|
+
http_status: 400
|
105
136
|
```
|
106
137
|
|
138
|
+
The ```#register!``` method will override the locale file.
|
139
|
+
|
107
140
|
```ruby
|
108
|
-
|
109
|
-
Errawr.register!(:your_error, name: 'my infamous error')
|
141
|
+
Errawr.register!(:your_error, message: 'Some other error message', metadata: { http_status: 403 })
|
110
142
|
begin
|
111
143
|
Errawr.error!(:your_error)
|
112
144
|
rescue => e
|
113
|
-
puts e.
|
145
|
+
puts e.message # => Will return "Some other error message"
|
146
|
+
puts e.metadata[:http_status] # => Will return 403
|
114
147
|
end
|
148
|
+
```
|
149
|
+
|
150
|
+
The ```#error!``` method will override both ```#register!``` and the locale file.
|
115
151
|
|
152
|
+
```ruby
|
153
|
+
Errawr.register!(:your_error, message: 'Some other error message', metadata: { http_status: 403 })
|
116
154
|
begin
|
117
|
-
|
118
|
-
Errawr.error!(:your_error, name: 'my very favorite error')
|
155
|
+
Errawr.error!(:your_error, message: 'Yet another error message', metadata: { http_status: 404 })
|
119
156
|
rescue => e
|
120
|
-
puts e.
|
157
|
+
puts e.message # => Will return "Yet another error message"
|
158
|
+
puts e.metadata[:http_status] # => Will return 404
|
121
159
|
end
|
122
160
|
```
|
123
161
|
|
@@ -133,7 +171,7 @@ class YourError < Errawr::Error
|
|
133
171
|
end
|
134
172
|
|
135
173
|
# Register your error with your custom class
|
136
|
-
Errawr.register!(:your_error,
|
174
|
+
Errawr.register!(:your_error, base_class: YourError)
|
137
175
|
|
138
176
|
# Do something with it
|
139
177
|
begin
|
data/lib/errawr/error.rb
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
module Errawr
|
2
2
|
class Error < StandardError
|
3
|
-
attr_reader :key, :context, :message
|
3
|
+
attr_reader :key, :context, :metadata, :message
|
4
4
|
|
5
5
|
def initialize(key = :unknown, context = {})
|
6
6
|
@key = key
|
7
7
|
@i18n = I18n.t('errawr.' + @key.to_s)
|
8
8
|
process_context(context)
|
9
|
+
process_metadata(context)
|
9
10
|
process_message
|
10
11
|
end
|
11
12
|
|
@@ -13,16 +14,23 @@ module Errawr
|
|
13
14
|
def process_context(context)
|
14
15
|
if @i18n.kind_of?(Hash)
|
15
16
|
@context = @i18n.merge(context)
|
16
|
-
@context.delete(:
|
17
|
+
@context.delete(:metadata)
|
17
18
|
else
|
18
19
|
@context = {}
|
19
20
|
end
|
20
21
|
end
|
21
22
|
|
23
|
+
def process_metadata(context)
|
24
|
+
if @i18n.kind_of?(Hash)
|
25
|
+
context = @i18n.merge(context)
|
26
|
+
end
|
27
|
+
@metadata = context.fetch(:metadata, {})
|
28
|
+
end
|
29
|
+
|
22
30
|
def process_message
|
23
31
|
if @i18n.kind_of?(Hash)
|
24
|
-
key = 'errawr.' + @key.to_s + '.
|
25
|
-
@message = I18n.t(key, @context
|
32
|
+
key = 'errawr.' + @key.to_s + '.message'
|
33
|
+
@message = I18n.t(key, @context.merge({ default: I18n.t('errawr.unknown', @context) }))
|
26
34
|
else
|
27
35
|
@message = I18n.t('errawr.' + @key.to_s, @context)
|
28
36
|
end
|
data/lib/errawr/mapper.rb
CHANGED
@@ -15,9 +15,9 @@ module Errawr
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def self.register!(key, options = {})
|
18
|
-
base_klass = options[:
|
18
|
+
base_klass = options[:base_class] || Error
|
19
19
|
raise(ArgumentError, ':base_class must be a subclass of Errawr::Error') unless base_klass <= Error
|
20
|
-
klass = Class.new(base_klass).new(key, options
|
20
|
+
klass = Class.new(base_klass).new(key, options)
|
21
21
|
add(klass)
|
22
22
|
end
|
23
23
|
|
data/lib/errawr/version.rb
CHANGED
data/lib/errawr.rb
CHANGED
data/spec/errawr_spec.rb
CHANGED
@@ -1,8 +1,64 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Errawr do
|
4
|
-
|
5
|
-
Errawr
|
6
|
-
|
4
|
+
describe 'error!' do
|
5
|
+
it 'should raise an Errawr::Error exception' do
|
6
|
+
Errawr.register!(:dummy_error)
|
7
|
+
expect { Errawr.error!(:dummy_error) }.to raise_error(Errawr::Error)
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'should return custom metadata values using #register!' do
|
11
|
+
Errawr.register!(:some_error, metadata: { name: 'custom_register!_name' })
|
12
|
+
begin
|
13
|
+
Errawr.error!(:some_error)
|
14
|
+
rescue => e
|
15
|
+
e.metadata[:name].should == 'custom_register!_name'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should return custom metadata values using #error!' do
|
20
|
+
Errawr.register!(:some_error, metadata: { name: 'custom_register!_name' })
|
21
|
+
begin
|
22
|
+
Errawr.error!(:some_error, metadata: { name: 'custom_error!_name' })
|
23
|
+
rescue => e
|
24
|
+
e.metadata[:name].should == 'custom_error!_name'
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'should return custom metadata values from locale file' do
|
29
|
+
Errawr.register!(:error_hash)
|
30
|
+
begin
|
31
|
+
Errawr.error!(:error_hash)
|
32
|
+
rescue => e
|
33
|
+
e.metadata.include?(:name).should be_true
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
it '#register! should override custom metadata values from locale file' do
|
38
|
+
Errawr.register!(:error_hash, metadata: { name: 'register!_name' })
|
39
|
+
begin
|
40
|
+
Errawr.error!(:error_hash)
|
41
|
+
rescue => e
|
42
|
+
e.metadata[:name].should == 'register!_name'
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'should override custom metadata values from #register! and locale file' do
|
47
|
+
Errawr.register!(:error_hash, metadata: { name: 'register!_name' })
|
48
|
+
begin
|
49
|
+
Errawr.error!(:error_hash, metadata: { name: 'error!_name' })
|
50
|
+
rescue => e
|
51
|
+
e.metadata[:name].should == 'error!_name'
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'should interpolate locales' do
|
56
|
+
Errawr.register!(:interpolated_error, error_message: 'interpolated message')
|
57
|
+
begin
|
58
|
+
Errawr.error!(:interpolated_error)
|
59
|
+
rescue => e
|
60
|
+
e.message.should == 'Some error has occurred: interpolated message'
|
61
|
+
end
|
62
|
+
end
|
7
63
|
end
|
8
64
|
end
|
data/spec/error_spec.rb
CHANGED
@@ -1,11 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Errawr::Error do
|
4
|
-
before(:each) do
|
5
|
-
I18n.load_path += Dir.glob('spec/support/en.yml')
|
6
|
-
I18n.reload!
|
7
|
-
end
|
8
|
-
|
9
4
|
it 'should return a key of :unknown if no key is set' do
|
10
5
|
error = Errawr::Error.new
|
11
6
|
error.key.should == :unknown
|
@@ -28,6 +23,6 @@ describe Errawr::Error do
|
|
28
23
|
|
29
24
|
it 'should insert custom values into the context if I18n value is a hash' do
|
30
25
|
error = Errawr::Error.new(:error_hash)
|
31
|
-
error.
|
26
|
+
error.metadata[:name].should == 'error_name'
|
32
27
|
end
|
33
28
|
end
|
data/spec/mapper_spec.rb
CHANGED
@@ -20,7 +20,7 @@ describe Errawr::Mapper do
|
|
20
20
|
|
21
21
|
describe 'register!' do
|
22
22
|
it 'should throw an error if base class is not a subclass of Errawr::Error' do
|
23
|
-
expect { Errawr.register!(:dummy_error,
|
23
|
+
expect { Errawr.register!(:dummy_error, base_class: StandardError) }.to raise_error(ArgumentError)
|
24
24
|
end
|
25
25
|
|
26
26
|
it 'should add an error to stored errors' do
|
@@ -28,41 +28,12 @@ describe Errawr::Mapper do
|
|
28
28
|
Errawr::Mapper[:dummy_error].should_not be_nil
|
29
29
|
end
|
30
30
|
|
31
|
-
it 'should not add :
|
32
|
-
Errawr.register!(:dummy_error,
|
31
|
+
it 'should not add :metadata options to context' do
|
32
|
+
Errawr.register!(:dummy_error, metadata: { name: :same_dummy_error })
|
33
33
|
begin
|
34
34
|
Errawr.error!(:dummy_error)
|
35
35
|
rescue => e
|
36
|
-
e.
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
describe 'error!' do
|
42
|
-
it 'should return custom context values from locale file' do
|
43
|
-
Errawr.register!(:error_hash)
|
44
|
-
begin
|
45
|
-
Errawr.error!(:error_hash)
|
46
|
-
rescue => e
|
47
|
-
e.context.include?(:name).should be_true
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
it '#register! should override custom context values from locale file' do
|
52
|
-
Errawr.register!(:error_hash, name: 'register!_name')
|
53
|
-
begin
|
54
|
-
Errawr.error!(:error_hash)
|
55
|
-
rescue => e
|
56
|
-
e.context[:name].should == 'register!_name'
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
it '#error! should override custom context values from #register! and locale file' do
|
61
|
-
Errawr.register!(:error_hash, name: 'register!_name')
|
62
|
-
begin
|
63
|
-
Errawr.error!(:error_hash, name: 'error!_name')
|
64
|
-
rescue => e
|
65
|
-
e.context[:name].should == 'error!_name'
|
36
|
+
e.metadata.include?(:error).should be_false
|
66
37
|
end
|
67
38
|
end
|
68
39
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -5,4 +5,11 @@ require 'errawr'
|
|
5
5
|
|
6
6
|
# Require supporting ruby files with custom matchers and macros, etc,
|
7
7
|
# in spec/support/ and its subdirectories.
|
8
|
-
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| puts f; require f }
|
8
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| puts f; require f }
|
9
|
+
|
10
|
+
RSpec.configure do |config|
|
11
|
+
config.before(:each) do
|
12
|
+
I18n.load_path += Dir.glob('spec/support/en.yml')
|
13
|
+
I18n.reload!
|
14
|
+
end
|
15
|
+
end
|
data/spec/support/en.yml
CHANGED
@@ -2,8 +2,11 @@ en:
|
|
2
2
|
errawr:
|
3
3
|
some_error: Some error has occurred
|
4
4
|
error_hash:
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
message: Some hashed error has occurred
|
6
|
+
metadata:
|
7
|
+
name: error_name
|
8
8
|
bad_error_hash:
|
9
|
-
|
9
|
+
metadata:
|
10
|
+
name: bad_error
|
11
|
+
interpolated_error:
|
12
|
+
message: "Some error has occurred: %{error_message}"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: errawr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anthony Smith
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-11-
|
11
|
+
date: 2013-11-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: i18n
|