rails_event_store-rspec 0.30.0 → 0.31.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 390b1d981a082e02362684ad51daa1236313bc6126ec5585c8e17a854f0c3131
4
- data.tar.gz: 141370fd5d39f1eb5d317ea88e658d28dc75cc0c37f1e5a0c76e9b7ed69305ed
3
+ metadata.gz: cb9a52d06b29f2a7a988faca6b6afcea7f924cd2cc9ea2c275a623ebf4b3baa5
4
+ data.tar.gz: 918a68a7eb907a49d7e46cfdd442bf745041278a35cda3c5eaa3bb43eb97cb3b
5
5
  SHA512:
6
- metadata.gz: d1480b7aa2c2076b915dad1a577f01be0f90ab04e12c534137a73921cf9bac45dbf5aec911dfad1bb85791a95b5894b6ce7f973608cf3bcb30dc75d125775500
7
- data.tar.gz: 836935f2e46c5709a3eb2a4e84885d06622e9ef0739bfd6f21294c9b01ce2eb61d7264ef31e4c3921eba9aba578272110027c929541f6a233f5118526a13a6e0
6
+ metadata.gz: 558ca421234b71bbdff9d26277b7847b3b651fbd74cea055b11fdad4f94c2474aa15306f3adbc427d09391ce5882a04b0403aee4e32b718b002400cad7fad9f8
7
+ data.tar.gz: 59b5c894b412ac0aa5a7504604da0cf6f8eac590b3d258ac4b9fd0118eb8f778e905d7b911e0e27badd445664e5ee95163de054e266b6bb894e05edf4ea4fa1a
data/Makefile CHANGED
@@ -5,7 +5,9 @@ IGNORE = RailsEventStore::RSpec::Matchers\#differ \
5
5
  RailsEventStore::RSpec::Matchers\#formatter \
6
6
  RailsEventStore::RSpec::Matchers\#have_published \
7
7
  RailsEventStore::RSpec::Matchers\#have_applied \
8
- RailsEventStore::RSpec::Matchers\#be_an_event
8
+ RailsEventStore::RSpec::Matchers\#publish \
9
+ RailsEventStore::RSpec::Matchers\#be_an_event \
10
+ RailsEventStore::RSpec::Publish\#last_event
9
11
  SUBJECT ?= RailsEventStore::RSpec*
10
12
 
11
13
  install: ## Install gem dependencies
data/README.md CHANGED
@@ -86,7 +86,7 @@ In a simplest form it would read all streams backward up to a page limit (100 ev
86
86
 
87
87
  ```ruby
88
88
  event_store = RailsEventStore::Client.new
89
- event_store.publish_event(OrderPlaced.new(data: { order_id: 42 }))
89
+ event_store.publish(OrderPlaced.new(data: { order_id: 42 }))
90
90
 
91
91
  expect(event_store).to have_published(an_event(OrderPlaced))
92
92
  ```
@@ -95,7 +95,7 @@ Expectation can be narrowed to the specific stream.
95
95
 
96
96
  ```ruby
97
97
  event_store = RailsEventStore::Client.new
98
- event_store.publish_event(OrderPlaced.new(data: { order_id: 42 }), stream_name: "Order$42")
98
+ event_store.publish(OrderPlaced.new(data: { order_id: 42 }), stream_name: "Order$42")
99
99
 
100
100
  expect(event_store).to have_published(an_event(OrderPlaced)).in_stream("Order$42")
101
101
  ```
@@ -10,6 +10,7 @@ require "rails_event_store/rspec/version"
10
10
  require "rails_event_store/rspec/be_event"
11
11
  require "rails_event_store/rspec/have_published"
12
12
  require "rails_event_store/rspec/have_applied"
13
+ require "rails_event_store/rspec/publish"
13
14
  require "rails_event_store/rspec/matchers"
14
15
 
15
16
  ::RSpec.configure do |config|
@@ -38,6 +38,10 @@ module RailsEventStore
38
38
  HaveApplied.new(*expected, differ: differ, phraser: phraser)
39
39
  end
40
40
 
41
+ def publish(*expected)
42
+ Publish.new(*expected)
43
+ end
44
+
41
45
  private
42
46
 
43
47
  def formatter
@@ -0,0 +1,90 @@
1
+ require 'rspec/matchers/built_in/base_matcher'
2
+
3
+ module RailsEventStore
4
+ module RSpec
5
+ class Publish
6
+ def in(event_store)
7
+ @event_store = event_store
8
+ self
9
+ end
10
+
11
+ def in_stream(stream)
12
+ @stream = stream
13
+ self
14
+ end
15
+
16
+ def matches?(event_proc)
17
+ raise_event_store_not_set unless @event_store
18
+ spec = @event_store.read
19
+ spec = spec.stream(@stream) if @stream
20
+ last_event_before_block = last_event(spec)
21
+ event_proc.call
22
+ spec = spec.from(last_event_before_block.event_id) if last_event_before_block
23
+ @published_events = spec.each.to_a
24
+ if match_events?
25
+ ::RSpec::Matchers::BuiltIn::Include.new(*@expected).matches?(@published_events)
26
+ else
27
+ !@published_events.empty?
28
+ end
29
+ end
30
+
31
+ def failure_message
32
+ if match_events?
33
+ <<-EOS
34
+ expected block to have published:
35
+
36
+ #{@expected}
37
+
38
+ #{"in stream #{@stream} " if @stream}but published:
39
+
40
+ #{@published_events}
41
+ EOS
42
+ else
43
+ "expected block to have published any events"
44
+ end
45
+ end
46
+
47
+ def failure_message_when_negated
48
+ if match_events?
49
+ <<-EOS
50
+ expected block not to have published:
51
+
52
+ #{@expected}
53
+
54
+ #{"in stream #{@stream} " if @stream}but published:
55
+
56
+ #{@published_events}
57
+ EOS
58
+ else
59
+ "expected block not to have published any events"
60
+ end
61
+ end
62
+
63
+ def description
64
+ "publish events"
65
+ end
66
+
67
+ def supports_block_expectations?
68
+ true
69
+ end
70
+
71
+ private
72
+
73
+ def initialize(*expected)
74
+ @expected = expected
75
+ end
76
+
77
+ def match_events?
78
+ !@expected.empty?
79
+ end
80
+
81
+ def last_event(spec)
82
+ spec.backward.limit(1).each.first
83
+ end
84
+
85
+ def raise_event_store_not_set
86
+ raise SyntaxError, "You have to set the event store instance with `in`, e.g. `expect { ... }.to publish(an_event(MyEvent)).in(event_store)`"
87
+ end
88
+ end
89
+ end
90
+ end
@@ -1,5 +1,5 @@
1
1
  module RailsEventStore
2
2
  module RSpec
3
- VERSION = "0.30.0"
3
+ VERSION = "0.31.0"
4
4
  end
5
5
  end
@@ -31,7 +31,7 @@ Gem::Specification.new do |spec|
31
31
  spec.add_development_dependency 'rspec', '~> 3.6'
32
32
  spec.add_development_dependency 'mutant-rspec', '~> 0.8.14'
33
33
  spec.add_development_dependency 'rails', '~> 5.1'
34
- spec.add_development_dependency 'rails_event_store', '= 0.30.0'
34
+ spec.add_development_dependency 'rails_event_store', '= 0.31.0'
35
35
 
36
36
  spec.add_runtime_dependency 'rspec', '~> 3.0'
37
37
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_event_store-rspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.30.0
4
+ version: 0.31.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arkency
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-05-31 00:00:00.000000000 Z
11
+ date: 2018-07-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -86,14 +86,14 @@ dependencies:
86
86
  requirements:
87
87
  - - '='
88
88
  - !ruby/object:Gem::Version
89
- version: 0.30.0
89
+ version: 0.31.0
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - '='
95
95
  - !ruby/object:Gem::Version
96
- version: 0.30.0
96
+ version: 0.31.0
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rspec
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -127,6 +127,7 @@ files:
127
127
  - lib/rails_event_store/rspec/have_applied.rb
128
128
  - lib/rails_event_store/rspec/have_published.rb
129
129
  - lib/rails_event_store/rspec/matchers.rb
130
+ - lib/rails_event_store/rspec/publish.rb
130
131
  - lib/rails_event_store/rspec/version.rb
131
132
  - rails_event_store-rspec.gemspec
132
133
  homepage: https://railseventstore.org