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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d06fcfb644ba49b3b3cda9a06e024900f6600427
4
- data.tar.gz: 00189cce747fa87b1f014235f564e9f7a1bda312
3
+ metadata.gz: 1ff06793590de1cf0454ae00e819af7743846bb5
4
+ data.tar.gz: 451ec8528f33174f8e115a37e162f0b5a90686ca
5
5
  SHA512:
6
- metadata.gz: 04c8b1ac98ba33404aa04c9590ce7f9e9ebd1b5db1dd72e8996790f4e674475e337ad640ba0fccaf3f73b1617d23d70fb17f9012f826c173945d9abc6e7a40c0
7
- data.tar.gz: 9c0be5860b62202e64b0f7102097ad17ece7b06932eee4edd99718f028ec1774102c68c0a7abb20895b17a65ca986b0bac5cb02c0b81e9d91edfe272c80bc205
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 rescues block runtime errors and publishes the :error
171
- # notification.
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 do
177
- # errors.add :base, :error
178
- # fail Invalid.new self
179
- # end
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 Service::Invalid => err
193
- publish :error, Message.from(err.service)
210
+ rescue Invalid => err
211
+ raise err
194
212
  rescue => err
195
- publish :error, [Message.new(type: "error", text: err.message)]
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
- # @!attribute messages
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)
@@ -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 # => [#<Hexx::Message... >]
60
- # error.messages.first.type # => "error"
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
- service.errors.values.flatten.map do |text|
65
- Message.new type: "error", text: text
66
- end
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
@@ -2,5 +2,5 @@
2
2
  module Hexx
3
3
 
4
4
  # Current release.
5
- VERSION = "3.2.0"
5
+ VERSION = "3.2.1"
6
6
  end
@@ -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 a list of messages" do
34
- expect(subject.map(&:class).uniq).to eq [Service::Message]
35
- expect(subject.map(&:type).uniq).to eq ["error"]
36
- expect(subject.map(&:text).uniq).to eq %w(1 2)
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
 
@@ -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
- before { subject.errors.add :base, :text }
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 "publishes an :error with service messages" do
193
- expect(listener).to receive(:error)
194
- run
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) { subject.escape { fail "text" } }
193
+ let(:run) { subject.escape { fail "text" } }
194
+ let(:message) { Service::Message.new type: "error", text: "text" }
201
195
 
202
- it "rescues" do
203
- expect { run }.not_to raise_error
196
+ it "re-raises the Service::Invalid" do
197
+ expect { run }.to raise_error { Service::Invalid }
204
198
  end
205
199
 
206
- it "publishes an :error with a message" do
207
- expect(listener).to receive(:error) do |messages|
208
- expect(messages)
209
- .to eq [Service::Message.new(type: "error", text: "text")]
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.0
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-08 00:00:00.000000000 Z
11
+ date: 2014-12-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel