service_objects 0.1.0 → 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/.coveralls.yml +1 -0
- data/.metrics +1 -0
- data/.travis.yml +9 -1
- data/.yardopts +1 -1
- data/Gemfile +1 -1
- data/Guardfile +29 -8
- data/LICENSE +1 -1
- data/README.md +179 -342
- data/Rakefile +3 -3
- data/config/metrics/churn.yml +1 -1
- data/config/metrics/flay.yml +1 -1
- data/config/metrics/metric_fu.yml +1 -0
- data/config/metrics/rubocop.yml +4 -4
- data/config/metrics/simplecov.yml +1 -1
- data/lib/service_objects.rb +6 -9
- data/lib/service_objects/base.rb +190 -17
- data/lib/service_objects/listener.rb +21 -75
- data/lib/service_objects/message.rb +15 -96
- data/lib/service_objects/version.rb +1 -1
- data/service_objects.gemspec +11 -9
- data/spec/lib/base_spec.rb +247 -0
- data/spec/lib/listener_spec.rb +96 -0
- data/spec/lib/message_spec.rb +48 -0
- data/spec/spec_helper.rb +8 -6
- metadata +56 -93
- data/bin/service +0 -17
- data/config/metrics/pippi.yml +0 -3
- data/lib/service_objects/cli.rb +0 -117
- data/lib/service_objects/cli/locale.erb +0 -20
- data/lib/service_objects/cli/service.erb +0 -125
- data/lib/service_objects/cli/spec.erb +0 -87
- data/lib/service_objects/helpers.rb +0 -17
- data/lib/service_objects/helpers/dependable.rb +0 -63
- data/lib/service_objects/helpers/exceptions.rb +0 -64
- data/lib/service_objects/helpers/messages.rb +0 -95
- data/lib/service_objects/helpers/parameterized.rb +0 -85
- data/lib/service_objects/helpers/parameters.rb +0 -71
- data/lib/service_objects/helpers/validations.rb +0 -54
- data/lib/service_objects/invalid.rb +0 -55
- data/lib/service_objects/null.rb +0 -26
- data/lib/service_objects/parsers.rb +0 -13
- data/lib/service_objects/parsers/dependency.rb +0 -69
- data/lib/service_objects/parsers/notification.rb +0 -85
- data/lib/service_objects/rspec.rb +0 -75
- data/lib/service_objects/utils/normal_hash.rb +0 -34
- data/spec/tests/base_spec.rb +0 -43
- data/spec/tests/bin/service_spec.rb +0 -18
- data/spec/tests/cli_spec.rb +0 -179
- data/spec/tests/helpers/dependable_spec.rb +0 -77
- data/spec/tests/helpers/exceptions_spec.rb +0 -112
- data/spec/tests/helpers/messages_spec.rb +0 -64
- data/spec/tests/helpers/parameterized_spec.rb +0 -136
- data/spec/tests/helpers/parameters_spec.rb +0 -71
- data/spec/tests/helpers/validations_spec.rb +0 -60
- data/spec/tests/invalid_spec.rb +0 -69
- data/spec/tests/listener_spec.rb +0 -73
- data/spec/tests/message_spec.rb +0 -191
- data/spec/tests/null_spec.rb +0 -17
- data/spec/tests/parsers/dependency_spec.rb +0 -29
- data/spec/tests/parsers/notification_spec.rb +0 -84
- data/spec/tests/rspec_spec.rb +0 -86
- data/spec/tests/utils/normal_hash_spec.rb +0 -16
@@ -1,136 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
describe ServiceObjects::Helpers::Parameterized do
|
4
|
-
|
5
|
-
let(:parameters) { ServiceObjects::Helpers::Parameters }
|
6
|
-
let(:test_class) { Class.new }
|
7
|
-
before { test_class.extend described_class }
|
8
|
-
subject { test_class.new }
|
9
|
-
|
10
|
-
it "includes ServiceObjects::Helpers::Parameters" do
|
11
|
-
expect(test_class).to include parameters
|
12
|
-
end
|
13
|
-
|
14
|
-
describe ".allows_params" do
|
15
|
-
|
16
|
-
# ==========================================================================
|
17
|
-
# Defines behaviours
|
18
|
-
# ==========================================================================
|
19
|
-
|
20
|
-
shared_examples "white list" do
|
21
|
-
|
22
|
-
# 'allowed_params' taken from context
|
23
|
-
|
24
|
-
let(:whitelist) { Array(allowed_params).flatten.map(&:to_sym) }
|
25
|
-
|
26
|
-
it "[sets whitelist]" do
|
27
|
-
subject
|
28
|
-
expect(test_class.whitelist).to match_array whitelist
|
29
|
-
end
|
30
|
-
|
31
|
-
it "[returns whitelist]" do
|
32
|
-
expect(subject).to eq test_class.whitelist
|
33
|
-
end
|
34
|
-
|
35
|
-
end # behaviour
|
36
|
-
|
37
|
-
shared_examples "attributes creator" do
|
38
|
-
|
39
|
-
# 'allowed_params' taken from context
|
40
|
-
|
41
|
-
let(:whitelist) { Array(allowed_params).flatten.map(&:to_sym) }
|
42
|
-
let(:object) { test_class.new options }
|
43
|
-
let(:options) do
|
44
|
-
whitelist.inject({}) { |a, e| a.merge(e => rand(1..10)) }
|
45
|
-
end
|
46
|
-
|
47
|
-
before { subject }
|
48
|
-
|
49
|
-
it "[defines setters]" do
|
50
|
-
whitelist.each { |name| expect(object).to respond_to name }
|
51
|
-
end
|
52
|
-
|
53
|
-
it "[sets default values]" do
|
54
|
-
whitelist.each { |name| expect(object.send name).to eq options[name] }
|
55
|
-
end
|
56
|
-
|
57
|
-
it "[makes getters aliases to params]" do
|
58
|
-
whitelist.each do |name|
|
59
|
-
value = ("a".."z").to_a.sample
|
60
|
-
|
61
|
-
expect { object.params[name] = value }
|
62
|
-
.to change { object.send name }
|
63
|
-
.to value
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
it "[defines getters]" do
|
68
|
-
whitelist.each { |name| expect(object).to respond_to "#{ name }=" }
|
69
|
-
end
|
70
|
-
|
71
|
-
it "[makes setters aliases to params]" do
|
72
|
-
whitelist.each do |name|
|
73
|
-
value = ("a".."z").to_a.sample
|
74
|
-
|
75
|
-
expect { object.send "#{ name }=", value }
|
76
|
-
.to change { object.params[name] }
|
77
|
-
.to value
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
end # behaviour
|
82
|
-
|
83
|
-
# ==========================================================================
|
84
|
-
# Tests behaviours
|
85
|
-
# ==========================================================================
|
86
|
-
|
87
|
-
context "without arguments" do
|
88
|
-
|
89
|
-
let(:allowed_params) { [] }
|
90
|
-
subject { test_class.allows_params allowed_params }
|
91
|
-
|
92
|
-
it_behaves_like "white list"
|
93
|
-
|
94
|
-
end # context
|
95
|
-
|
96
|
-
context "with one symbolic argument" do
|
97
|
-
|
98
|
-
let(:allowed_params) { :name }
|
99
|
-
subject { test_class.allows_params allowed_params }
|
100
|
-
|
101
|
-
it_behaves_like "white list"
|
102
|
-
it_behaves_like "attributes creator"
|
103
|
-
|
104
|
-
end # context
|
105
|
-
|
106
|
-
context "with one string argument" do
|
107
|
-
|
108
|
-
let(:allowed_params) { "name" }
|
109
|
-
subject { test_class.allows_params allowed_params }
|
110
|
-
|
111
|
-
it_behaves_like "white list"
|
112
|
-
it_behaves_like "attributes creator"
|
113
|
-
|
114
|
-
end # context
|
115
|
-
|
116
|
-
context "with a list of arguments" do
|
117
|
-
|
118
|
-
let(:allowed_params) { [:name, "code"] }
|
119
|
-
subject { test_class.allows_params(*allowed_params) }
|
120
|
-
|
121
|
-
it_behaves_like "white list"
|
122
|
-
it_behaves_like "attributes creator"
|
123
|
-
|
124
|
-
end # context
|
125
|
-
|
126
|
-
context "with an array of arguments" do
|
127
|
-
|
128
|
-
let(:allowed_params) { [:name, "code"] }
|
129
|
-
subject { test_class.allows_params allowed_params }
|
130
|
-
|
131
|
-
it_behaves_like "white list"
|
132
|
-
it_behaves_like "attributes creator"
|
133
|
-
|
134
|
-
end # context
|
135
|
-
end
|
136
|
-
end
|
@@ -1,71 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
describe ServiceObjects::Helpers::Parameters do
|
4
|
-
|
5
|
-
let(:test_class) { Class.new }
|
6
|
-
before { test_class.include described_class }
|
7
|
-
subject { test_class.new }
|
8
|
-
|
9
|
-
describe "#params" do
|
10
|
-
|
11
|
-
subject { test_class.new }
|
12
|
-
|
13
|
-
it "returns a hash" do
|
14
|
-
expect(subject.params).to be_kind_of Hash
|
15
|
-
end
|
16
|
-
|
17
|
-
end # describe #params
|
18
|
-
|
19
|
-
describe ".whitelist" do
|
20
|
-
|
21
|
-
it "is defined" do
|
22
|
-
expect(test_class).to respond_to :whitelist
|
23
|
-
expect { test_class.instance_eval "@whitelist = [:foo]" }
|
24
|
-
.to change { test_class.whitelist }
|
25
|
-
.to [:foo]
|
26
|
-
end
|
27
|
-
|
28
|
-
it "returns empty array by default" do
|
29
|
-
expect(test_class.whitelist).to eq []
|
30
|
-
end
|
31
|
-
|
32
|
-
end # describe #whitelist
|
33
|
-
|
34
|
-
describe ".new" do
|
35
|
-
|
36
|
-
before { allow(test_class).to receive(:whitelist) { [:foo, :bar] } }
|
37
|
-
|
38
|
-
it "allows options" do
|
39
|
-
expect(test_class).to respond_to(:new).with(1).argument
|
40
|
-
end
|
41
|
-
|
42
|
-
it "makes params optional" do
|
43
|
-
expect(test_class).to respond_to(:new).with(0).argument
|
44
|
-
end
|
45
|
-
|
46
|
-
it "assings parameters from options" do
|
47
|
-
options = { foo: "foo" }
|
48
|
-
|
49
|
-
subject = test_class.new options
|
50
|
-
expect(subject.params).to eq options
|
51
|
-
end
|
52
|
-
|
53
|
-
it "symbolizes options keys at any level" do
|
54
|
-
source_options = { "foo" => "foo", "bar" => { "bar" => "baz" } }
|
55
|
-
target_options = { foo: "foo", bar: { bar: "baz" } }
|
56
|
-
|
57
|
-
subject = test_class.new(source_options)
|
58
|
-
expect(subject.params).to eq target_options
|
59
|
-
end
|
60
|
-
|
61
|
-
it "filters options" do
|
62
|
-
source_options = { foo: "foo", baz: "baz" }
|
63
|
-
target_options = { foo: "foo" }
|
64
|
-
|
65
|
-
subject = test_class.new(source_options)
|
66
|
-
expect(subject.params).to eq target_options
|
67
|
-
end
|
68
|
-
|
69
|
-
end # describe .new
|
70
|
-
|
71
|
-
end # describe ServiceObjects::Helpers::Whitelist
|
@@ -1,60 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
describe ServiceObjects::Helpers::Validations do
|
4
|
-
|
5
|
-
let(:invalid) { ServiceObjects::Invalid }
|
6
|
-
let(:message_class) { ServiceObjects::Message }
|
7
|
-
let(:messages_module) { ServiceObjects::Helpers::Messages }
|
8
|
-
let(:test_class) { Class.new }
|
9
|
-
let(:validations) { ActiveModel::Validations }
|
10
|
-
|
11
|
-
before { ServiceObjects::Test = test_class }
|
12
|
-
before { test_class.include described_class }
|
13
|
-
after { ServiceObjects.send :remove_const, :Test }
|
14
|
-
|
15
|
-
it "includes ActiveModel::Validations" do
|
16
|
-
expect(test_class).to include validations
|
17
|
-
end
|
18
|
-
|
19
|
-
it "includes ServiceObjects::Helpers::Messages" do
|
20
|
-
expect(test_class).to include messages_module
|
21
|
-
end
|
22
|
-
|
23
|
-
describe "#validate!" do
|
24
|
-
|
25
|
-
subject { test_class.new }
|
26
|
-
|
27
|
-
context "when the service is valid" do
|
28
|
-
|
29
|
-
it "passes" do
|
30
|
-
expect { subject.validate! }.not_to raise_error
|
31
|
-
end
|
32
|
-
|
33
|
-
end
|
34
|
-
|
35
|
-
context "when the service is invalid" do
|
36
|
-
|
37
|
-
before { subject.errors.add :base, :invalid }
|
38
|
-
before { allow(subject).to receive(:valid?) { false } }
|
39
|
-
|
40
|
-
it "fails" do
|
41
|
-
expect { subject.validate! }.to raise_error invalid
|
42
|
-
end
|
43
|
-
|
44
|
-
it "populates #messages from errors" do
|
45
|
-
begin
|
46
|
-
subject.validate!
|
47
|
-
rescue => err
|
48
|
-
message = subject.messages.first
|
49
|
-
end
|
50
|
-
|
51
|
-
expect(message).to be_kind_of message_class
|
52
|
-
expect(message.type).to eq "error"
|
53
|
-
expect(err.messages).to contain_exactly message
|
54
|
-
end
|
55
|
-
|
56
|
-
end
|
57
|
-
|
58
|
-
end # #validate!
|
59
|
-
|
60
|
-
end # ServiceObjects::Helpers::Validations
|
data/spec/tests/invalid_spec.rb
DELETED
@@ -1,69 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
describe ServiceObjects::Invalid do
|
4
|
-
|
5
|
-
let(:messages) { double :messages }
|
6
|
-
let(:object) { double :object, messages: messages }
|
7
|
-
|
8
|
-
subject { described_class.new object }
|
9
|
-
|
10
|
-
describe ".new" do
|
11
|
-
|
12
|
-
context "without arguments" do
|
13
|
-
|
14
|
-
subject { described_class.new }
|
15
|
-
|
16
|
-
it "fails with ArgumentError" do
|
17
|
-
expect { subject }.to raise_error ArgumentError
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
context "with an object that doesn't responds to :messages" do
|
22
|
-
|
23
|
-
let(:object) { double }
|
24
|
-
subject { described_class.new object }
|
25
|
-
|
26
|
-
it "fails with TypeError" do
|
27
|
-
expect { subject }.to raise_error TypeError
|
28
|
-
end
|
29
|
-
|
30
|
-
it "returns a proper message" do
|
31
|
-
begin
|
32
|
-
subject
|
33
|
-
rescue => err
|
34
|
-
expect(err.message)
|
35
|
-
.to eq "#{ object.inspect } doesn't respond to #messages"
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
context "with an object that responds to :messages" do
|
41
|
-
|
42
|
-
it "doesn't fail" do
|
43
|
-
expect { subject }.not_to raise_error
|
44
|
-
end
|
45
|
-
|
46
|
-
it "initializes a RuntimeError" do
|
47
|
-
expect(subject).to be_kind_of RuntimeError
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
describe "#object" do
|
53
|
-
|
54
|
-
it "is initialized" do
|
55
|
-
expect(subject.object).to eq object
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
describe "#messages" do
|
60
|
-
|
61
|
-
it "returns an array" do
|
62
|
-
expect(subject.messages).to be_kind_of Array
|
63
|
-
end
|
64
|
-
|
65
|
-
it "is delegated to the #object" do
|
66
|
-
expect(subject.messages).to contain_exactly object.messages
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
data/spec/tests/listener_spec.rb
DELETED
@@ -1,73 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
describe ServiceObjects::Listener do
|
4
|
-
|
5
|
-
let(:object) { double :object, foo: nil }
|
6
|
-
subject { described_class.new object }
|
7
|
-
|
8
|
-
describe ".new" do
|
9
|
-
|
10
|
-
it "provides a decorator" do
|
11
|
-
expect(subject).to respond_to :foo
|
12
|
-
expect(object).to receive(:foo)
|
13
|
-
subject.foo
|
14
|
-
end
|
15
|
-
|
16
|
-
end # .new
|
17
|
-
|
18
|
-
describe "#otherwise" do
|
19
|
-
|
20
|
-
it "is defined" do
|
21
|
-
expect(subject).to respond_to :otherwise
|
22
|
-
end
|
23
|
-
|
24
|
-
end # #otherwise
|
25
|
-
|
26
|
-
describe "#finalize" do
|
27
|
-
|
28
|
-
before { subject.singleton_class.send(:define_method, :on_success) { nil } }
|
29
|
-
|
30
|
-
shared_examples "calling #otherwise" do
|
31
|
-
after { subject.finalize }
|
32
|
-
it { is_expected.to receive :otherwise }
|
33
|
-
end
|
34
|
-
|
35
|
-
shared_examples "skipping #otherwise" do
|
36
|
-
after { subject.finalize }
|
37
|
-
it { is_expected.not_to receive :otherwise }
|
38
|
-
end
|
39
|
-
|
40
|
-
shared_examples "mutating" do
|
41
|
-
it "returns self" do
|
42
|
-
expect(subject.finalize).to eq subject
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
context "when no callbacks has been checked" do
|
47
|
-
|
48
|
-
it_behaves_like "calling #otherwise"
|
49
|
-
it_behaves_like "mutating"
|
50
|
-
|
51
|
-
end # context
|
52
|
-
|
53
|
-
context "when undefined callback has been checked" do
|
54
|
-
|
55
|
-
before { subject.respond_to? :on_error }
|
56
|
-
|
57
|
-
it_behaves_like "calling #otherwise"
|
58
|
-
it_behaves_like "mutating"
|
59
|
-
|
60
|
-
end # context
|
61
|
-
|
62
|
-
context "when defined callback has been checked" do
|
63
|
-
|
64
|
-
before { subject.respond_to? :on_success }
|
65
|
-
|
66
|
-
it_behaves_like "skipping #otherwise"
|
67
|
-
it_behaves_like "mutating"
|
68
|
-
|
69
|
-
end # context
|
70
|
-
|
71
|
-
end # #finalize
|
72
|
-
|
73
|
-
end # ServiceObjects::Listener
|
data/spec/tests/message_spec.rb
DELETED
@@ -1,191 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require "json"
|
3
|
-
|
4
|
-
describe ServiceObjects::Message do
|
5
|
-
|
6
|
-
subject { described_class.new type: :foo, text: :bar }
|
7
|
-
|
8
|
-
it "is comparable" do
|
9
|
-
expect(subject).to be_kind_of ::Comparable
|
10
|
-
end
|
11
|
-
|
12
|
-
describe ".new" do
|
13
|
-
|
14
|
-
it "requires the type" do
|
15
|
-
expect { described_class.new text: :bar }.to raise_error ArgumentError
|
16
|
-
end
|
17
|
-
|
18
|
-
it "requires the text" do
|
19
|
-
expect { described_class.new type: :foo }.to raise_error ArgumentError
|
20
|
-
end
|
21
|
-
|
22
|
-
it "freezes the object" do
|
23
|
-
expect(subject).to be_frozen
|
24
|
-
end
|
25
|
-
|
26
|
-
end # .new
|
27
|
-
|
28
|
-
describe "#type" do
|
29
|
-
|
30
|
-
it "is stringified" do
|
31
|
-
expect(subject.type).to eq "foo"
|
32
|
-
end
|
33
|
-
|
34
|
-
it "is frozen" do
|
35
|
-
expect(subject.type).to be_frozen
|
36
|
-
end
|
37
|
-
|
38
|
-
end # #type
|
39
|
-
|
40
|
-
describe "#text" do
|
41
|
-
|
42
|
-
it "is stringified" do
|
43
|
-
expect(subject.text).to eq "bar"
|
44
|
-
end
|
45
|
-
|
46
|
-
it "is frozen" do
|
47
|
-
expect(subject.text).to be_frozen
|
48
|
-
end
|
49
|
-
|
50
|
-
end # #text
|
51
|
-
|
52
|
-
describe "#priority" do
|
53
|
-
|
54
|
-
it "is float" do
|
55
|
-
expect(subject.priority).to be_kind_of Float
|
56
|
-
end
|
57
|
-
|
58
|
-
it "is customizable" do
|
59
|
-
subject = described_class.new type: "foo", text: "bar", priority: 1.5
|
60
|
-
expect(subject.priority).to eq 1.5
|
61
|
-
end
|
62
|
-
|
63
|
-
it "is set by default to 0.0 for non-errors" do
|
64
|
-
subject = described_class.new type: "foo", text: "bar"
|
65
|
-
expect(subject.priority).to eq 0.0
|
66
|
-
end
|
67
|
-
|
68
|
-
it "is set by default to -1.0 for errors" do
|
69
|
-
subject = described_class.new type: "error", text: "bar"
|
70
|
-
expect(subject.priority).to eq(-1.0)
|
71
|
-
end
|
72
|
-
|
73
|
-
end # #priority
|
74
|
-
|
75
|
-
describe "#inspect" do
|
76
|
-
|
77
|
-
it "returns text, type and priority of the message" do
|
78
|
-
expect(subject.inspect)
|
79
|
-
.to eq %W(
|
80
|
-
#<ServiceObjects::Message:#{ subject.object_id }
|
81
|
-
type=\"#{ subject.type }\"
|
82
|
-
text=\"#{ subject.text }\"
|
83
|
-
priority=#{ subject.priority }>
|
84
|
-
).join(" ")
|
85
|
-
end
|
86
|
-
|
87
|
-
end # #inspect
|
88
|
-
|
89
|
-
describe "#==" do
|
90
|
-
|
91
|
-
it "treats messages with the same type, text and priority as equal" do
|
92
|
-
a = described_class.new type: "foo", text: "bar"
|
93
|
-
b = described_class.new type: "foo", text: "bar"
|
94
|
-
expect(a == b).to be_truthy
|
95
|
-
end
|
96
|
-
|
97
|
-
it "treats messages with different types as different" do
|
98
|
-
a = described_class.new type: "bar", text: "foo"
|
99
|
-
b = described_class.new type: "baz", text: "foo"
|
100
|
-
expect(a == b).to be_falsey
|
101
|
-
end
|
102
|
-
|
103
|
-
it "treats messages with different texts as different" do
|
104
|
-
a = described_class.new type: "foo", text: "bar"
|
105
|
-
b = described_class.new type: "foo", text: "baz"
|
106
|
-
expect(a == b).to be_falsey
|
107
|
-
end
|
108
|
-
|
109
|
-
it "treats messages with different priorities as different" do
|
110
|
-
a = described_class.new type: "foo", text: "bar", priority: 1
|
111
|
-
b = described_class.new type: "foo", text: "bar", priority: 1.1
|
112
|
-
expect(a == b).to be_falsey
|
113
|
-
end
|
114
|
-
|
115
|
-
it "treats message as different from non-message" do
|
116
|
-
a = described_class.new type: "foo", text: "bar"
|
117
|
-
b = Struct.new(:type, :text).new("foo", "bar")
|
118
|
-
expect(a == b).to be_falsey
|
119
|
-
end
|
120
|
-
|
121
|
-
end # #==
|
122
|
-
|
123
|
-
describe "#<=>" do
|
124
|
-
|
125
|
-
it "orders messages by priorities" do
|
126
|
-
a = described_class.new type: "foo", text: "bar", priority: 0
|
127
|
-
b = described_class.new type: "foo", text: "bar", priority: 0.1
|
128
|
-
expect(a <=> b).to eq(-1)
|
129
|
-
expect(b <=> a).to eq(1)
|
130
|
-
end
|
131
|
-
|
132
|
-
it "orders messages by type" do
|
133
|
-
a = described_class.new type: "bar", text: "foo"
|
134
|
-
b = described_class.new type: "baz", text: "foo"
|
135
|
-
expect(a <=> b).to eq(-1)
|
136
|
-
expect(b <=> a).to eq(1)
|
137
|
-
end
|
138
|
-
|
139
|
-
it "orders messages by text" do
|
140
|
-
a = described_class.new type: "foo", text: "bar"
|
141
|
-
b = described_class.new type: "foo", text: "baz"
|
142
|
-
expect(a <=> b).to eq(-1)
|
143
|
-
expect(b <=> a).to eq(1)
|
144
|
-
end
|
145
|
-
|
146
|
-
it "orders messages at first by priorities" do
|
147
|
-
a = described_class.new type: "bar", text: "bar", priority: 0
|
148
|
-
b = described_class.new type: "baz", text: "baz", priority: 1
|
149
|
-
expect(a <=> b).to eq(-1)
|
150
|
-
expect(b <=> a).to eq(1)
|
151
|
-
end
|
152
|
-
|
153
|
-
it "orders messages at second by types" do
|
154
|
-
a = described_class.new type: "bar", text: "bar"
|
155
|
-
b = described_class.new type: "baz", text: "baz"
|
156
|
-
expect(a <=> b).to eq(-1)
|
157
|
-
expect(b <=> a).to eq(1)
|
158
|
-
end
|
159
|
-
|
160
|
-
it "treats messages with the same type, text and priority as equal" do
|
161
|
-
a = described_class.new type: "foo", text: "bar"
|
162
|
-
b = described_class.new type: "foo", text: "bar"
|
163
|
-
expect(a <=> b).to eq 0
|
164
|
-
expect(b <=> a).to eq 0
|
165
|
-
end
|
166
|
-
|
167
|
-
it "returns nil if other value is not a message" do
|
168
|
-
expect(subject <=> 1).to be_nil
|
169
|
-
end
|
170
|
-
|
171
|
-
end # #<=>
|
172
|
-
|
173
|
-
describe "#to_h" do
|
174
|
-
|
175
|
-
it "serializes type and text" do
|
176
|
-
hash = { type: subject.type, text: subject.text }
|
177
|
-
expect(subject.to_h).to eq hash
|
178
|
-
end
|
179
|
-
|
180
|
-
end # #to_h
|
181
|
-
|
182
|
-
describe "#to_json" do
|
183
|
-
|
184
|
-
it "serializes type and text" do
|
185
|
-
hash = { type: subject.type, text: subject.text }
|
186
|
-
expect(subject.to_json).to eq hash.to_json
|
187
|
-
end
|
188
|
-
|
189
|
-
end # #to_json
|
190
|
-
|
191
|
-
end # ServiceObjects::Message
|