service_objects 0.1.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|