hexx 3.2.0 → 3.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/hexx/service.rb +34 -32
- data/lib/hexx/service/invalid.rb +12 -6
- data/lib/hexx/version.rb +1 -1
- data/spec/hexx/service/invalid_spec.rb +9 -8
- data/spec/hexx/service_spec.rb +20 -26
- 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: 1ff06793590de1cf0454ae00e819af7743846bb5
|
4
|
+
data.tar.gz: 451ec8528f33174f8e115a37e162f0b5a90686ca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1e06adaa3721ecedef8e8c02375aef4ae9e88ad71aed0b51c89153bd211084460170f4ed9f33d31a1de60954b8f6e3bdf2323b83ffdcb2a41eb6db4097066be0
|
7
|
+
data.tar.gz: d2d5ebbe8cda6dcdae090d3214dad875dfd55b32011cd967344bd4fecac0760e322b8bde1deed6945a947978ffad9f24bb506966274a5a24ee19ae8efd0923ef
|
data/lib/hexx/service.rb
CHANGED
@@ -121,6 +121,25 @@ module Hexx
|
|
121
121
|
WithCallbacks.new(self, prefix: prefix)
|
122
122
|
end
|
123
123
|
|
124
|
+
# @!attribute [r] messages
|
125
|
+
# The array of service messages (instances of {Hexx::Service::Message})
|
126
|
+
# with +text+ and +type+ attributes.
|
127
|
+
#
|
128
|
+
# @example
|
129
|
+
# class Test < Hexx::Service
|
130
|
+
# def run
|
131
|
+
# add_message "info", :ok
|
132
|
+
# end
|
133
|
+
# end
|
134
|
+
#
|
135
|
+
# service = Test.new
|
136
|
+
# service.run # adds message
|
137
|
+
# service.messages
|
138
|
+
# # => [#<Hexx::Service::Message @text="ok" @type="info" >]
|
139
|
+
#
|
140
|
+
# @return [Array<Hexx::Service::Message>] The array of messages.
|
141
|
+
attr_reader :messages
|
142
|
+
|
124
143
|
private
|
125
144
|
|
126
145
|
# The helper runs another service object and subscribes +self+ for the
|
@@ -167,32 +186,32 @@ module Hexx
|
|
167
186
|
|
168
187
|
# @!method escape
|
169
188
|
#
|
170
|
-
# The method
|
171
|
-
#
|
189
|
+
# The method:
|
190
|
+
# * rescues +StandardError+ exceptions
|
191
|
+
# * adds error message to the service
|
192
|
+
# * re-raises the <tt>Service::Invalid</tt> exception
|
172
193
|
#
|
173
194
|
# @example
|
174
195
|
# class GetItem < Hexx::Service
|
175
196
|
# def run
|
176
|
-
# escape
|
177
|
-
#
|
178
|
-
#
|
179
|
-
#
|
197
|
+
# escape { do_something_unsafe }
|
198
|
+
# rescue => err
|
199
|
+
# publish :error, err.messages
|
200
|
+
# end
|
201
|
+
# publish :success
|
180
202
|
# end
|
181
203
|
# end
|
182
204
|
#
|
183
|
-
# service = GetItem.new
|
184
|
-
# service.subscribe listener
|
185
|
-
# service.run
|
186
|
-
# # => the listener will be sent the error(messages).
|
187
|
-
#
|
188
205
|
# @yield the block.
|
206
|
+
# @raise [Hexx::Service::Invalid] if the block raised the +StandardError+.
|
189
207
|
# @return the value returned by the block.
|
190
208
|
def escape
|
191
209
|
yield
|
192
|
-
rescue
|
193
|
-
|
210
|
+
rescue Invalid => err
|
211
|
+
raise err
|
194
212
|
rescue => err
|
195
|
-
|
213
|
+
errors.add :base, err.message
|
214
|
+
raise Invalid.new(self)
|
196
215
|
end
|
197
216
|
|
198
217
|
# Translates given key in current service's scope.
|
@@ -220,24 +239,7 @@ module Hexx
|
|
220
239
|
I18n.t text, options.merge(scope: scope)
|
221
240
|
end
|
222
241
|
|
223
|
-
|
224
|
-
# The array of service messages, added by the {#add_message} helper.
|
225
|
-
#
|
226
|
-
# @example
|
227
|
-
# class Test < Hexx::Service
|
228
|
-
# def run
|
229
|
-
# add_message "info", :ok
|
230
|
-
# messages
|
231
|
-
# end
|
232
|
-
# end
|
233
|
-
# result = Test.new.run.first
|
234
|
-
# result.type
|
235
|
-
# # => "info"
|
236
|
-
# result.text
|
237
|
-
# # => "translation not found: en.activemodel.messages.models.test.ok"
|
238
|
-
#
|
239
|
-
# @return [Array<Hexx::Service::Message>] The array of message objects.
|
240
|
-
attr_accessor :messages
|
242
|
+
attr_writer :messages
|
241
243
|
|
242
244
|
# Adds the translated message to the {#messages} array.
|
243
245
|
# @example (see Service#messages)
|
data/lib/hexx/service/invalid.rb
CHANGED
@@ -55,15 +55,21 @@ module Hexx
|
|
55
55
|
# Returns a list of error messages from the service.
|
56
56
|
#
|
57
57
|
# @example
|
58
|
+
# service.errors.add :base, "some error"
|
59
|
+
#
|
58
60
|
# error = Hexx::Service::Invalid.new service
|
59
|
-
# error.messages
|
60
|
-
#
|
61
|
+
# error.messages
|
62
|
+
# # => [#<Hexx::Service::Message @type="error" @text="some error" >]
|
61
63
|
#
|
62
|
-
# @return [Array<Hexx::Service::Message>] The list of messages.
|
64
|
+
# @return [Array<Hexx::Service::Message>] The list of error messages.
|
63
65
|
def messages
|
64
|
-
|
65
|
-
|
66
|
-
|
66
|
+
errors.map { |text| Message.new type: "error", text: text }
|
67
|
+
end
|
68
|
+
|
69
|
+
private
|
70
|
+
|
71
|
+
def errors
|
72
|
+
service.errors.messages.values.flatten
|
67
73
|
end
|
68
74
|
end
|
69
75
|
end
|
data/lib/hexx/version.rb
CHANGED
@@ -24,16 +24,17 @@ module Hexx
|
|
24
24
|
describe "#messages" do
|
25
25
|
|
26
26
|
let(:service) { Service.new }
|
27
|
-
before do
|
28
|
-
allow(service).to receive_message_chain(:errors, :values)
|
29
|
-
.and_return [%w(1 2)]
|
30
|
-
end
|
31
27
|
subject { Invalid.new(service).messages }
|
28
|
+
let(:message) { subject.first }
|
29
|
+
|
30
|
+
it "returns an array" do
|
31
|
+
expect(subject).to be_kind_of Array
|
32
|
+
end
|
32
33
|
|
33
|
-
it "returns
|
34
|
-
|
35
|
-
|
36
|
-
expect(
|
34
|
+
it "returns error messages" do
|
35
|
+
service.errors.send :add, :base, "some error"
|
36
|
+
expected = Service::Message.new(type: "error", text: "some error")
|
37
|
+
expect(message).to eq expected
|
37
38
|
end
|
38
39
|
end
|
39
40
|
|
data/spec/hexx/service_spec.rb
CHANGED
@@ -91,6 +91,13 @@ module Hexx
|
|
91
91
|
end
|
92
92
|
end
|
93
93
|
|
94
|
+
describe "#messages" do
|
95
|
+
|
96
|
+
it "returns an array" do
|
97
|
+
expect(subject.messages).to be_kind_of Array
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
94
101
|
describe "private" do
|
95
102
|
|
96
103
|
let!(:service) { Service.new }
|
@@ -136,13 +143,6 @@ module Hexx
|
|
136
143
|
end
|
137
144
|
end
|
138
145
|
|
139
|
-
describe "#messages" do
|
140
|
-
|
141
|
-
it "returns an array" do
|
142
|
-
expect(subject.messages).to be_kind_of Array
|
143
|
-
end
|
144
|
-
end
|
145
|
-
|
146
146
|
describe "#messages=" do
|
147
147
|
|
148
148
|
it "sets #messages" do
|
@@ -180,35 +180,29 @@ module Hexx
|
|
180
180
|
|
181
181
|
context "when a block raises Service::Invalid error" do
|
182
182
|
|
183
|
-
|
184
|
-
let(:run) do
|
185
|
-
subject.escape { fail Service::Invalid.new(subject) }
|
186
|
-
end
|
187
|
-
|
188
|
-
it "rescues" do
|
189
|
-
expect { run }.not_to raise_error
|
190
|
-
end
|
183
|
+
let!(:exception) { Service::Invalid.new(Service.new) }
|
191
184
|
|
192
|
-
it "
|
193
|
-
expect
|
194
|
-
|
185
|
+
it "re-raises the exception" do
|
186
|
+
expect { subject.escape { fail exception } }
|
187
|
+
.to raise_error { exception }
|
195
188
|
end
|
196
189
|
end
|
197
190
|
|
198
191
|
context "when a block raises StandardError" do
|
199
192
|
|
200
|
-
let(:run)
|
193
|
+
let(:run) { subject.escape { fail "text" } }
|
194
|
+
let(:message) { Service::Message.new type: "error", text: "text" }
|
201
195
|
|
202
|
-
it "
|
203
|
-
expect { run }.
|
196
|
+
it "re-raises the Service::Invalid" do
|
197
|
+
expect { run }.to raise_error { Service::Invalid }
|
204
198
|
end
|
205
199
|
|
206
|
-
it "
|
207
|
-
|
208
|
-
|
209
|
-
|
200
|
+
it "adds error to the messages" do
|
201
|
+
begin
|
202
|
+
run
|
203
|
+
rescue => err
|
204
|
+
expect(err.messages).to eq [message]
|
210
205
|
end
|
211
|
-
run
|
212
206
|
end
|
213
207
|
end
|
214
208
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hexx
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.2.
|
4
|
+
version: 3.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Kozin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-12-
|
11
|
+
date: 2014-12-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|