hexx 0.1.1 → 1.0.0
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/exceptions/not_found_error.rb +4 -2
- data/lib/hexx/exceptions/runtime_error.rb +9 -6
- data/lib/hexx/exceptions/use_case_invalid.rb +4 -2
- data/lib/hexx/message.rb +1 -1
- data/lib/hexx/models.rb +1 -11
- data/lib/hexx/use_case.rb +2 -2
- data/lib/hexx/version.rb +1 -1
- data/spec/hexx/exceptions/not_found_error_spec.rb +5 -1
- data/spec/hexx/exceptions/runtime_error_spec.rb +17 -29
- data/spec/hexx/exceptions/use_case_invalid_spec.rb +5 -1
- data/spec/hexx/models_spec.rb +0 -28
- data/spec/hexx/use_case_spec.rb +4 -13
- data/spec/support/exception_matchers.rb +0 -13
- metadata +2 -5
- data/lib/hexx/exceptions/record_invalid.rb +0 -16
- data/spec/hexx/exceptions/record_invalid_spec.rb +0 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 012517b45eeaa322d1d46183685969bb38abb240
|
4
|
+
data.tar.gz: 793d572f5092196bb9cc9651a7479fa21237ea4c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3286ecf42c146eaa615c104ad13caa867cb722de3b06e068e231d7bb131a1494c4daa24a4353c4d410b03221b68f9b1394d539d4d9fadc96de8dd3ef098a3d7b
|
7
|
+
data.tar.gz: 9f3e70de2e2ea1df43ca3d8d3e1d65f0c753ea77646bdf4bbc9944a4fd0c9ed0e336d08e307d5beb41a9b5e54900e77eae563f27d3049d7a8b3cc2c2deeebc4d
|
@@ -7,18 +7,21 @@ module Hexx
|
|
7
7
|
#
|
8
8
|
class RuntimeError < ::RuntimeError
|
9
9
|
|
10
|
-
attr_reader :
|
10
|
+
attr_reader :messages
|
11
11
|
|
12
12
|
def initialize(object)
|
13
|
-
|
13
|
+
fail ArgumentError unless object.is_a? UseCase
|
14
|
+
@messages ||= object.errors.messages.values
|
14
15
|
end
|
15
16
|
|
16
|
-
def
|
17
|
-
|
17
|
+
def message
|
18
|
+
@message ||= "#{ default }: #{ messages.join("; ") }"
|
18
19
|
end
|
19
20
|
|
20
|
-
|
21
|
-
|
21
|
+
private
|
22
|
+
|
23
|
+
def default
|
24
|
+
"Runtime error"
|
22
25
|
end
|
23
26
|
end
|
24
27
|
end
|
data/lib/hexx/message.rb
CHANGED
data/lib/hexx/models.rb
CHANGED
@@ -2,10 +2,7 @@ require "active_support"
|
|
2
2
|
|
3
3
|
module Hexx
|
4
4
|
|
5
|
-
#
|
6
|
-
#
|
7
|
-
# * <tt>validate!</tt> public instance method
|
8
|
-
# * +attr_coerced+ public class methods.
|
5
|
+
# Contains +attr_coerced+ public class method.
|
9
6
|
#
|
10
7
|
# Include the module into the Rails model:
|
11
8
|
#
|
@@ -22,13 +19,6 @@ module Hexx
|
|
22
19
|
module Models
|
23
20
|
extend ActiveSupport::Concern
|
24
21
|
|
25
|
-
# Runs validations and raises a RecordInvalid exceptions in case of
|
26
|
-
# an invalid case.
|
27
|
-
def validate!
|
28
|
-
return true if valid?
|
29
|
-
fail RecordInvalid.new self
|
30
|
-
end
|
31
|
-
|
32
22
|
# Model class helpers for attributes coercion.
|
33
23
|
module ClassMethods
|
34
24
|
|
data/lib/hexx/use_case.rb
CHANGED
@@ -224,9 +224,9 @@ module Hexx
|
|
224
224
|
def run
|
225
225
|
run!
|
226
226
|
rescue Hexx::NotFoundError => error
|
227
|
-
finish_with :not_found, error.
|
227
|
+
finish_with :not_found, error.messages
|
228
228
|
rescue Hexx::RuntimeError => error
|
229
|
-
finish_with :error, error.
|
229
|
+
finish_with :error, error.messages
|
230
230
|
rescue StandardError => error
|
231
231
|
finish_with :error, [error.message]
|
232
232
|
end
|
data/lib/hexx/version.rb
CHANGED
@@ -11,7 +11,11 @@ module Hexx
|
|
11
11
|
end
|
12
12
|
|
13
13
|
it "has customized message" do
|
14
|
-
|
14
|
+
use_case = Hexx::UseCase.new
|
15
|
+
allow(use_case)
|
16
|
+
.to receive_message_chain(:errors, :messages, :values)
|
17
|
+
.and_return %w(one two)
|
18
|
+
expect(subject.new(use_case).message).to eq "Not found: one; two"
|
15
19
|
end
|
16
20
|
end
|
17
21
|
end
|
@@ -4,51 +4,39 @@ require "support/exception_matchers"
|
|
4
4
|
module Hexx
|
5
5
|
describe RuntimeError do
|
6
6
|
|
7
|
-
subject
|
8
|
-
let
|
9
|
-
let!(:errors) { double "errors" }
|
10
|
-
before { allow(object).to receive(:errors) { errors } }
|
11
|
-
|
12
|
-
let!(:error) { subject.new object }
|
7
|
+
subject { RuntimeError }
|
8
|
+
let(:use_case) { Hexx::UseCase.new }
|
13
9
|
|
14
10
|
it "inherits core RuntimeError" do
|
15
11
|
expect(subject).to inherit ::RuntimeError
|
16
12
|
end
|
17
13
|
|
18
|
-
it "has customized message" do
|
19
|
-
expect(subject).to have_error_message "Runtime error"
|
20
|
-
end
|
21
|
-
|
22
14
|
describe ".new" do
|
23
15
|
|
24
|
-
it "
|
25
|
-
expect
|
16
|
+
it "requires Hexx::UseCase as an argument" do
|
17
|
+
expect { subject.new use_case }.not_to raise_error
|
18
|
+
expect { subject.new "" }.to raise_error
|
19
|
+
expect { subject.new }.to raise_error
|
26
20
|
end
|
27
21
|
end
|
28
22
|
|
29
|
-
describe "#
|
30
|
-
|
31
|
-
it "is public" do
|
32
|
-
expect(error).to respond_to :object
|
33
|
-
end
|
23
|
+
describe "#messages" do
|
34
24
|
|
35
|
-
it "
|
36
|
-
|
25
|
+
it "returns use case's error messages" do
|
26
|
+
allow(use_case)
|
27
|
+
.to receive_message_chain(:errors, :messages, :values)
|
28
|
+
.and_return :messages
|
29
|
+
expect(subject.new(use_case).messages).to eq :messages
|
37
30
|
end
|
38
31
|
end
|
39
32
|
|
40
|
-
describe "#
|
41
|
-
|
42
|
-
it "is public" do
|
43
|
-
expect(error).to respond_to :errors
|
44
|
-
end
|
33
|
+
describe "#message" do
|
45
34
|
|
46
|
-
|
47
|
-
|
48
|
-
end
|
35
|
+
let!(:error) { subject.new use_case }
|
36
|
+
before { allow(error).to receive(:messages).and_return %w(one two) }
|
49
37
|
|
50
|
-
it "
|
51
|
-
expect(
|
38
|
+
it "returns a proper text" do
|
39
|
+
expect(error.message).to eq "Runtime error: one; two"
|
52
40
|
end
|
53
41
|
end
|
54
42
|
end
|
@@ -11,7 +11,11 @@ module Hexx
|
|
11
11
|
end
|
12
12
|
|
13
13
|
it "has customized message" do
|
14
|
-
|
14
|
+
use_case = Hexx::UseCase.new
|
15
|
+
allow(use_case)
|
16
|
+
.to receive_message_chain(:errors, :messages, :values)
|
17
|
+
.and_return %w(one two)
|
18
|
+
expect(subject.new(use_case).message).to eq "Use case invalid: one; two"
|
15
19
|
end
|
16
20
|
end
|
17
21
|
end
|
data/spec/hexx/models_spec.rb
CHANGED
@@ -29,34 +29,6 @@ module Hexx
|
|
29
29
|
# Run tests
|
30
30
|
# ==========================================================================
|
31
31
|
|
32
|
-
describe "#validate!" do
|
33
|
-
|
34
|
-
it "is public" do
|
35
|
-
expect(object).to respond_to(:validate!).with(0).arguments
|
36
|
-
end
|
37
|
-
|
38
|
-
context "with valid object" do
|
39
|
-
|
40
|
-
before { allow(object).to receive(:valid?) { true } }
|
41
|
-
|
42
|
-
it "returns true" do
|
43
|
-
expect(object.validate!).to be_truthy
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
context "with invalid object" do
|
48
|
-
|
49
|
-
before { allow(object).to receive(:valid?) { false } }
|
50
|
-
|
51
|
-
it "fails with Hexx::RecordInvalid" do
|
52
|
-
expect { object.validate! }.to raise_error do |error|
|
53
|
-
expect(error).to be_kind_of Hexx::RecordInvalid
|
54
|
-
expect(error.object).to eq object
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
32
|
describe ".attr_coerced" do
|
61
33
|
|
62
34
|
before { subject.send :attr_coerced, :name, type: TestAttribute }
|
data/spec/hexx/use_case_spec.rb
CHANGED
@@ -132,11 +132,8 @@ module Hexx
|
|
132
132
|
describe "#run" do
|
133
133
|
|
134
134
|
let!(:use_case) { subject.new }
|
135
|
-
let!(:object) { double "entity" }
|
136
|
-
let!(:errors) { { base: :invalid } }
|
137
135
|
let!(:listener) { double "listener" }
|
138
136
|
|
139
|
-
before { allow(object).to receive(:errors) { errors } }
|
140
137
|
before { use_case.subscribe listener }
|
141
138
|
|
142
139
|
it "calls the #run!" do
|
@@ -157,7 +154,7 @@ module Hexx
|
|
157
154
|
context "if the #run! raises NotFoundError" do
|
158
155
|
|
159
156
|
before do
|
160
|
-
allow(use_case).to receive(:run!) { fail NotFoundError.new
|
157
|
+
allow(use_case).to receive(:run!) { fail NotFoundError.new use_case }
|
161
158
|
end
|
162
159
|
|
163
160
|
it "doesn't raise" do
|
@@ -165,10 +162,7 @@ module Hexx
|
|
165
162
|
end
|
166
163
|
|
167
164
|
it "publishes the :not_found notification" do
|
168
|
-
expect(listener).to receive(:not_found)
|
169
|
-
expect(messages.map(&:type)).to eq ["error"]
|
170
|
-
expect(messages.map(&:text)).to eq ["invalid"]
|
171
|
-
end
|
165
|
+
expect(listener).to receive(:not_found)
|
172
166
|
use_case.run
|
173
167
|
end
|
174
168
|
|
@@ -180,7 +174,7 @@ module Hexx
|
|
180
174
|
context "if the #run! raises another Hexx::Runtime error" do
|
181
175
|
|
182
176
|
before do
|
183
|
-
allow(use_case).to receive(:run!) { fail RuntimeError.new
|
177
|
+
allow(use_case).to receive(:run!) { fail RuntimeError.new use_case }
|
184
178
|
end
|
185
179
|
|
186
180
|
it "doesn't raise" do
|
@@ -188,10 +182,7 @@ module Hexx
|
|
188
182
|
end
|
189
183
|
|
190
184
|
it "publishes the :error notification" do
|
191
|
-
expect(listener).to receive(:error)
|
192
|
-
expect(messages.map(&:type)).to eq ["error"]
|
193
|
-
expect(messages.map(&:text)).to eq ["invalid"]
|
194
|
-
end
|
185
|
+
expect(listener).to receive(:error)
|
195
186
|
use_case.run
|
196
187
|
end
|
197
188
|
|
@@ -5,16 +5,3 @@ RSpec::Matchers.define :inherit do |ancestor|
|
|
5
5
|
expect(subject.ancestors).to be_include ancestor
|
6
6
|
end
|
7
7
|
end
|
8
|
-
|
9
|
-
RSpec::Matchers.define :have_error_message do |header|
|
10
|
-
match do |subject|
|
11
|
-
object = double "object"
|
12
|
-
errors = double "errors"
|
13
|
-
allow(object).to receive(:errors) { errors }
|
14
|
-
begin
|
15
|
-
fail subject.new(object)
|
16
|
-
rescue => error
|
17
|
-
expect(error.message).to eq "#{ header }: #{ errors.inspect }"
|
18
|
-
end
|
19
|
-
end
|
20
|
-
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: 0.
|
4
|
+
version: 1.0.0
|
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-10-
|
11
|
+
date: 2014-10-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|
@@ -210,7 +210,6 @@ files:
|
|
210
210
|
- lib/generators/use_case/use_case.rb
|
211
211
|
- lib/hexx.rb
|
212
212
|
- lib/hexx/exceptions/not_found_error.rb
|
213
|
-
- lib/hexx/exceptions/record_invalid.rb
|
214
213
|
- lib/hexx/exceptions/runtime_error.rb
|
215
214
|
- lib/hexx/exceptions/use_case_invalid.rb
|
216
215
|
- lib/hexx/message.rb
|
@@ -219,7 +218,6 @@ files:
|
|
219
218
|
- lib/hexx/use_case.rb
|
220
219
|
- lib/hexx/version.rb
|
221
220
|
- spec/hexx/exceptions/not_found_error_spec.rb
|
222
|
-
- spec/hexx/exceptions/record_invalid_spec.rb
|
223
221
|
- spec/hexx/exceptions/runtime_error_spec.rb
|
224
222
|
- spec/hexx/exceptions/use_case_invalid_spec.rb
|
225
223
|
- spec/hexx/message_spec.rb
|
@@ -262,7 +260,6 @@ test_files:
|
|
262
260
|
- spec/spec_helper.rb
|
263
261
|
- spec/hexx/message_spec.rb
|
264
262
|
- spec/hexx/settings_spec.rb
|
265
|
-
- spec/hexx/exceptions/record_invalid_spec.rb
|
266
263
|
- spec/hexx/exceptions/not_found_error_spec.rb
|
267
264
|
- spec/hexx/exceptions/use_case_invalid_spec.rb
|
268
265
|
- spec/hexx/exceptions/runtime_error_spec.rb
|
@@ -1,16 +0,0 @@
|
|
1
|
-
require_relative "runtime_error"
|
2
|
-
|
3
|
-
module Hexx
|
4
|
-
|
5
|
-
# An exception to be raised by the <tt>Hexx::Models#validate!</tt> method.
|
6
|
-
#
|
7
|
-
# It is expected, that the object stores error messages in its <tt>errors</tt>
|
8
|
-
# collection.
|
9
|
-
#
|
10
|
-
class RecordInvalid < RuntimeError
|
11
|
-
|
12
|
-
def message
|
13
|
-
"Record invalid: #{ errors.inspect }"
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
require "support/exception_matchers"
|
3
|
-
|
4
|
-
module Hexx
|
5
|
-
describe RecordInvalid do
|
6
|
-
|
7
|
-
subject { RecordInvalid }
|
8
|
-
|
9
|
-
it "inherits RuntimeError" do
|
10
|
-
expect(subject).to inherit Hexx::RuntimeError
|
11
|
-
end
|
12
|
-
|
13
|
-
it "has customized message" do
|
14
|
-
expect(subject).to have_error_message "Record invalid"
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|