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 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