tagful 1.0.1 → 1.0.4
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/lib/tagful/version.rb +1 -1
- data/lib/tagful.rb +34 -21
- data/spec/tagful_spec.rb +106 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a5b681c48a71c6e5cc302881cb7f8b837142d26b
|
4
|
+
data.tar.gz: cae00f8965dbf63edb5a5d2490e3a01b27e302c2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 20687a579bb972a1a8390b965c5b5dd2e9770d5a1448c654e8a55e30cc48d7b07f38244262601a51043a953aa73286f9005c79d67ccb14eb9901278c17f9aa84
|
7
|
+
data.tar.gz: a94463b8039c9dd4950e0aef6bfb24199d0ec607bef6d6bcde5474942de1dab92eae4904e38308ebe2e377b138a62450fa9cff6f835d834d61e663282f87a1f4
|
data/lib/tagful/version.rb
CHANGED
data/lib/tagful.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
require "tagful/version"
|
2
2
|
|
3
3
|
module Tagful
|
4
|
+
DEFAULT_ERROR_MODULE_NAME = 'Error'
|
5
|
+
|
4
6
|
class NotFound < ArgumentError; end
|
5
7
|
|
6
8
|
def self.included(base)
|
@@ -30,7 +32,7 @@ module Tagful
|
|
30
32
|
error_class = @tagful_error_module_or_class
|
31
33
|
else
|
32
34
|
error_module = @tagful_error_module_or_class
|
33
|
-
error_module ||=
|
35
|
+
error_module ||= DEFAULT_ERROR_MODULE_NAME
|
34
36
|
end
|
35
37
|
else
|
36
38
|
if error_module_or_class.is_a?(Class)
|
@@ -41,35 +43,46 @@ module Tagful
|
|
41
43
|
end
|
42
44
|
|
43
45
|
if error_class
|
44
|
-
class_eval(
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
46
|
+
m = class_eval('module TagfulMethods; end; TagfulMethods')
|
47
|
+
|
48
|
+
m.module_eval do
|
49
|
+
define_method(method_id) do |*args, &block|
|
50
|
+
begin
|
51
|
+
super(*args, &block)
|
49
52
|
rescue => e
|
50
|
-
raise
|
53
|
+
raise error_class, e.message
|
51
54
|
end
|
52
55
|
end
|
56
|
+
send visibility, method_id
|
57
|
+
end
|
53
58
|
|
54
|
-
|
55
|
-
|
59
|
+
class_eval do
|
60
|
+
prepend(m)
|
61
|
+
end
|
56
62
|
else
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
63
|
+
if error_module == DEFAULT_ERROR_MODULE_NAME
|
64
|
+
error_module = class_eval(<<-CODE)
|
65
|
+
unless defined?(#{error_module})
|
66
|
+
module #{error_module}; end
|
67
|
+
end
|
68
|
+
#{error_module}
|
69
|
+
CODE
|
70
|
+
end
|
61
71
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
72
|
+
m = class_eval('module TagfulMethods; end; TagfulMethods')
|
73
|
+
m.module_eval do
|
74
|
+
define_method(method_id) do |*args, &block|
|
75
|
+
begin
|
76
|
+
super(*args, &block)
|
66
77
|
rescue => e
|
67
|
-
e.extend(
|
78
|
+
e.extend(error_module) and raise
|
68
79
|
end
|
69
80
|
end
|
70
|
-
|
71
|
-
|
72
|
-
|
81
|
+
send visibility, method_id
|
82
|
+
end
|
83
|
+
class_eval do
|
84
|
+
prepend(m)
|
85
|
+
end
|
73
86
|
end
|
74
87
|
method_id
|
75
88
|
end
|
data/spec/tagful_spec.rb
CHANGED
@@ -97,6 +97,78 @@ RSpec.describe Tagful do
|
|
97
97
|
tagful :take_cheese!, NotFound
|
98
98
|
end
|
99
99
|
|
100
|
+
module Bar
|
101
|
+
def bar
|
102
|
+
'top bar'
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
class Foo
|
107
|
+
module Bar
|
108
|
+
def self.to_s
|
109
|
+
'Bug!'
|
110
|
+
end
|
111
|
+
|
112
|
+
def bar
|
113
|
+
'Foo::Bar'
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
include Tagful
|
118
|
+
|
119
|
+
tagful_with ::Bar
|
120
|
+
|
121
|
+
tagful\
|
122
|
+
def bug
|
123
|
+
raise 'bug'
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
class Buzz < StandardError
|
128
|
+
def buzz
|
129
|
+
'top buzz'
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
class Fizz
|
134
|
+
class Buzz < StandardError
|
135
|
+
def buzz
|
136
|
+
'Buzz::buzz'
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
include Tagful
|
141
|
+
|
142
|
+
tagful_with ::Buzz
|
143
|
+
|
144
|
+
tagful\
|
145
|
+
def fizz
|
146
|
+
raise 'buzz'
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
class Anonymous
|
151
|
+
include Tagful
|
152
|
+
|
153
|
+
def anonymous_module
|
154
|
+
raise 'anonymouse module'
|
155
|
+
end
|
156
|
+
tagful :anonymous_module, Module.new {
|
157
|
+
def anonymous
|
158
|
+
'anonymous module'
|
159
|
+
end
|
160
|
+
}
|
161
|
+
|
162
|
+
def anonymous_class
|
163
|
+
raise 'anonymouse class'
|
164
|
+
end
|
165
|
+
tagful :anonymous_class, Class.new(StandardError) {
|
166
|
+
def anonymous
|
167
|
+
'anonymous class'
|
168
|
+
end
|
169
|
+
}
|
170
|
+
end
|
171
|
+
|
100
172
|
describe '.tagful_with' do
|
101
173
|
it 'tagged method with specified Module' do
|
102
174
|
expect { Robot.new.to_evil }.to raise_error(Robot::Broken, ':(')
|
@@ -113,6 +185,24 @@ RSpec.describe Tagful do
|
|
113
185
|
expect { Pizza.new('bug') }.to raise_error(Pizza::Dirty, 'something wrong in pizza factory: bug')
|
114
186
|
end
|
115
187
|
end
|
188
|
+
|
189
|
+
context 'tagged with top level module, but the same name module exists in class' do
|
190
|
+
it 'tagged by top level module' do
|
191
|
+
expect { Foo.new.bug }.to raise_error do |error|
|
192
|
+
expect(error).to be_an(::Bar)
|
193
|
+
expect(error.bar).to eq 'top bar'
|
194
|
+
end
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
context 'tagged with top level class, but the same name class exists in class' do
|
199
|
+
it 'tagged by top level class' do
|
200
|
+
expect { Fizz.new.fizz }.to raise_error do |error|
|
201
|
+
expect(error).to be_an(::Buzz)
|
202
|
+
expect(error.buzz).to eq 'top buzz'
|
203
|
+
end
|
204
|
+
end
|
205
|
+
end
|
116
206
|
end
|
117
207
|
|
118
208
|
describe '.tagful' do
|
@@ -149,5 +239,21 @@ RSpec.describe Tagful do
|
|
149
239
|
expect { Pizza.new.take_cheese! }.to raise_error(Pizza::NotFound, 'not found: cheese')
|
150
240
|
end
|
151
241
|
end
|
242
|
+
|
243
|
+
context 'tagged with anonymouse class' do
|
244
|
+
it 'raise tagged error class' do
|
245
|
+
expect { Anonymous.new.anonymous_class }.to raise_error do |error|
|
246
|
+
expect(error.anonymous).to eq 'anonymous class'
|
247
|
+
end
|
248
|
+
end
|
249
|
+
end
|
250
|
+
|
251
|
+
context 'tagged with anonymouse module' do
|
252
|
+
it 'raise tagged error module' do
|
253
|
+
expect { Anonymous.new.anonymous_module }.to raise_error do |error|
|
254
|
+
expect(error.anonymous).to eq 'anonymous module'
|
255
|
+
end
|
256
|
+
end
|
257
|
+
end
|
152
258
|
end
|
153
259
|
end
|