informator 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.
@@ -1,75 +0,0 @@
1
- # encoding: utf-8
2
-
3
- describe Informator::Reporter do
4
-
5
- subject(:reporter) { described_class.new }
6
-
7
- describe ".new" do
8
-
9
- it { is_expected.to be_frozen }
10
-
11
- end # describe .new
12
-
13
- describe "#events" do
14
-
15
- subject { reporter.events }
16
- it { is_expected.to eql [] }
17
-
18
- end # describe #events
19
-
20
- describe "#remember" do
21
-
22
- subject { reporter.remember(*options) }
23
-
24
- let(:options) { [:foo, "bar", baz: :qux] }
25
- let(:event) { Informator::Event.new(*options) }
26
-
27
- it "builds the event and adds it to #events" do
28
- expect { subject }.to change { reporter.events }.by [event]
29
- end
30
-
31
- it { is_expected.to eql reporter }
32
-
33
- end # describe #remember
34
-
35
- describe "#notify" do
36
-
37
- subject { reporter.notify(subscribers) }
38
-
39
- let(:subscribers) { 2.times.map { double notify: nil } }
40
- let!(:events) do
41
- %i(foo bar).each(&reporter.method(:remember))
42
- reporter.events.dup
43
- end
44
-
45
- it "notifies every subscriber on all #events" do
46
- events.each do |event|
47
- subscribers.each do |subscriber|
48
- expect(subscriber).to receive(:notify).with(event).ordered
49
- end
50
- end
51
-
52
- subject
53
- end
54
-
55
- it "clears #events" do
56
- expect { subject }.to change { reporter.events }.to []
57
- end
58
-
59
- context "when error occured while publishing" do
60
-
61
- before { allow(subscribers.first).to receive(:notify) { fail } }
62
-
63
- it "removes tried #events" do
64
- expect { subject rescue nil }
65
- .to change { reporter.events }
66
- .to [events.last]
67
- end
68
-
69
- end # context
70
-
71
- it { is_expected.to eql events }
72
-
73
- end # describe #notify
74
-
75
- end # describe Informator::Reporter
@@ -1,153 +0,0 @@
1
- # encoding: utf-8
2
-
3
- describe Informator do
4
-
5
- subject(:informator) { klass.new }
6
-
7
- let(:klass) { Class.new { include Informator } }
8
- let(:callback) { :on_received }
9
- let(:listener) do
10
- double(
11
- callback => nil,
12
- foo: nil,
13
- bar: nil,
14
- receive: nil,
15
- freeze: nil
16
- )
17
- end
18
-
19
- before { informator.subscribe listener, callback }
20
-
21
- describe "#subscribe" do
22
-
23
- it "subscribes listeners one-by-one" do
24
- informator.subscribe(listener, :foo).subscribe(listener, :bar)
25
-
26
- expect(listener).to receive(callback).ordered
27
- expect(listener).to receive(:foo).ordered
28
- expect(listener).to receive(:bar).ordered
29
- informator.publish :info
30
- end
31
-
32
- it "doesn't duplicate listener's callbacks" do
33
- informator.subscribe(listener, callback)
34
-
35
- expect(listener).to receive(callback).once
36
- informator.publish :info
37
- end
38
-
39
- it "subscribes listener with :receive callback by default" do
40
- informator.subscribe(listener)
41
-
42
- expect(listener).to receive(:receive)
43
- informator.publish :info
44
- end
45
-
46
- end # describe #subscribe
47
-
48
- describe "#remember" do
49
-
50
- it "keeps remembered events unpublished" do
51
- expect(listener).not_to receive(callback)
52
-
53
- informator.remember :info
54
- end
55
-
56
- it "remembers events until publishing" do
57
- expect(listener).to receive(callback).once
58
-
59
- informator.remember :info
60
- informator.publish
61
- end
62
-
63
- it "returns itself to allow chaining" do
64
- expect(informator.remember(:info).remember(:alert)).to eql informator
65
- end
66
-
67
- end # describe #remember
68
-
69
- describe "#publish" do
70
-
71
- it "publishes events" do
72
- expect(listener).to receive(callback) do |event|
73
- expect(event).to be_kind_of Informator::Event
74
- expect(event.type).to eq :alert
75
- expect(event.messages).to eql %w(foo)
76
- expect(event.attributes).to eql(bar: :baz)
77
- end
78
-
79
- informator.publish :alert, "foo", bar: :baz
80
- end
81
-
82
- it "publishes all remembered events at once" do
83
- expect(listener).to receive(callback).twice
84
-
85
- informator.remember :info
86
- informator.publish :alert
87
- end
88
-
89
- it "can publish only remembered events without a new one" do
90
- expect(listener).to receive(callback).once
91
-
92
- informator.remember :info
93
- informator.publish
94
- end
95
-
96
- it "returns events having been published" do
97
- informator.remember :info
98
- events = informator.publish :alert
99
-
100
- expect(events).to be_kind_of Array
101
- expect(events.map(&:class).uniq).to contain_exactly Informator::Event
102
- expect(events.map(&:type)).to eql [:info, :alert]
103
- end
104
-
105
- it "forgets published events" do
106
- informator.publish :info
107
- expect(listener).not_to receive(callback)
108
-
109
- informator.publish
110
- end
111
-
112
- end # describe #publish
113
-
114
- describe "#publish!" do
115
-
116
- it "publishes all remembered events at once" do
117
- expect(listener).to receive(callback).twice
118
-
119
- informator.remember :info
120
- informator.publish!(:alert) rescue nil
121
- end
122
-
123
- it "can publish only remembered events without a new one" do
124
- expect(listener).to receive(callback).once
125
-
126
- informator.remember :info
127
- informator.publish! rescue nil
128
- end
129
-
130
- it "forgets published events" do
131
- informator.publish! :info rescue nil
132
- expect(listener).not_to receive(callback)
133
-
134
- informator.publish
135
- end
136
-
137
- it "throws :published" do
138
- expect { informator.publish! }.to raise_error(ArgumentError)
139
- expect { catch(:published) { informator.publish! } }.not_to raise_error
140
- end
141
-
142
- it "throws events having been published" do
143
- informator.remember :info
144
- events = catch(:published) { informator.publish! :alert }
145
-
146
- expect(events).to be_kind_of Array
147
- expect(events.map(&:class).uniq).to contain_exactly Informator::Event
148
- expect(events.map(&:type)).to eql [:info, :alert]
149
- end
150
-
151
- end # describe #publish!
152
-
153
- end # describe Informator