hexx 3.2.0 → 3.2.1
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/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
|