rom-event_store 0.0.2 → 0.0.3
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/Gemfile +1 -0
- data/README.md +3 -0
- data/Rakefile +3 -0
- data/lib/rom/event_store/connection.rb +17 -85
- data/lib/rom/event_store/dataset.rb +10 -3
- data/lib/rom/event_store/version.rb +1 -1
- data/rom-event_store.gemspec +1 -2
- metadata +5 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 66e28ad070bbb91cecc886f361871f203f52592f
|
4
|
+
data.tar.gz: 9ef0b7b5c46512ea40e92a234dc15316aac0c9ba
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 69de8603927a8fbe58d78fdf2115c987078a4fc18cb110e53d85c1a17f0b92d975cce459b03eae6a4e5812874d738e414cf72a7d2ca2c5c32f6ab651d4d9db54
|
7
|
+
data.tar.gz: 1727f6546180fa12442d901140c277b0a226d9797912e2b18cf245478c52bbf1e682283778f2e22211436928dc1a31f4534e5c0e7db51f380c6a698c2edf11af
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
[gemnasium]: https://gemnasium.com/rom-eventstore/rom-event_store
|
4
4
|
[codeclimate]: https://codeclimate.com/github/rom-eventstore/rom-event_store
|
5
5
|
[inchpages]: http://inch-ci.org/github/rom-eventstore/rom-event_store
|
6
|
+
[gitter]: https://gitter.im/rom-eventstore/rom-event_store?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
|
6
7
|
|
7
8
|
# Rom::EventStore
|
8
9
|
|
@@ -13,6 +14,8 @@
|
|
13
14
|
[][codeclimate]
|
14
15
|
[][inchpages]
|
15
16
|
|
17
|
+
[][gitter]
|
18
|
+
|
16
19
|
Event Store support for [Ruby Object Mapper](https://github.com/rom-rb/rom)
|
17
20
|
|
18
21
|
## Installation
|
data/Rakefile
CHANGED
@@ -1,103 +1,35 @@
|
|
1
|
-
require '
|
1
|
+
require 'estore'
|
2
2
|
require 'json'
|
3
|
-
require 'securerandom'
|
4
|
-
require 'transproc/all'
|
5
3
|
|
6
4
|
module ROM
|
7
5
|
module EventStore
|
8
6
|
class Connection
|
9
|
-
EVENTS_CONTENT_TYPE = 'application/vnd.eventstore.events+json'
|
10
|
-
|
11
7
|
def initialize(uri)
|
12
|
-
|
13
|
-
@
|
8
|
+
host_port = uri.split(':')
|
9
|
+
@connection = Estore::Session.new(*host_port)
|
14
10
|
end
|
15
11
|
|
16
|
-
def
|
17
|
-
|
18
|
-
events.map { |event|
|
12
|
+
def read(stream, start, limit)
|
13
|
+
read = @connection.read(stream, start, limit)
|
14
|
+
read.sync.events.map { |event| dehydrate(event) }
|
19
15
|
end
|
20
16
|
|
21
|
-
def append(
|
22
|
-
|
17
|
+
def append(stream, events)
|
18
|
+
@connection.append(stream, events).sync
|
23
19
|
end
|
24
20
|
|
25
21
|
private
|
26
22
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
def stream_uri(category, stream_id)
|
31
|
-
stream = stream_id ? "#{category}-#{stream_id}" : category
|
32
|
-
"/streams/#{stream}?embed=body"
|
33
|
-
end
|
34
|
-
|
35
|
-
def stream_uri!(category, stream_id)
|
36
|
-
raise UndefinedStreamError unless stream_id
|
37
|
-
stream_uri(category, stream_id)
|
38
|
-
end
|
39
|
-
|
40
|
-
def __get__(stream)
|
41
|
-
response = @http.get(stream, 'Accept' => 'application/json')
|
42
|
-
|
43
|
-
case response.code.to_i
|
44
|
-
when 200
|
45
|
-
JSON.parse(response.body)
|
46
|
-
when 404
|
47
|
-
nil
|
48
|
-
else
|
49
|
-
raise ConnectionFailedError
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
def __post__(stream, events)
|
54
|
-
payload = events.map { |event| AtomMapper.prepare(event) }.to_json
|
55
|
-
response = @http.post(stream, payload,
|
56
|
-
'Content-Type' => EVENTS_CONTENT_TYPE)
|
57
|
-
|
58
|
-
case response.code.to_i
|
59
|
-
when 201
|
60
|
-
nil
|
61
|
-
else
|
62
|
-
raise ConnectionFailedError
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
module AtomMapper
|
67
|
-
extend Transproc::Composer
|
68
|
-
|
69
|
-
ALIASES = {
|
70
|
-
eventId: :id,
|
71
|
-
eventType: :type,
|
72
|
-
eventNumber: :number,
|
73
|
-
updated: :created_at
|
74
|
-
}.freeze
|
75
|
-
|
76
|
-
ATTRS = (ALIASES.values + [:data]).freeze
|
77
|
-
|
78
|
-
MAPPER = compose do |ops|
|
79
|
-
ops << t(:symbolize_keys!)
|
80
|
-
ops << t(:map_hash!, ALIASES)
|
81
|
-
ops << t(:map_key!, :created_at, t(:to_time))
|
82
|
-
ops << t(-> event { event.keep_if { |key| ATTRS.include?(key) } })
|
83
|
-
end
|
84
|
-
|
85
|
-
def self.[](event)
|
86
|
-
if event['isJson']
|
87
|
-
event['data'] = JSON.parse(event['data'])
|
88
|
-
t(:symbolize_keys!)[event['data']]
|
89
|
-
end
|
90
|
-
|
91
|
-
MAPPER[event]
|
92
|
-
end
|
23
|
+
def dehydrate(wrapper)
|
24
|
+
event = wrapper.event
|
93
25
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
26
|
+
{
|
27
|
+
id: Estore::Package.parse_uuid(event.event_id),
|
28
|
+
type: event.event_type,
|
29
|
+
data: event.data,
|
30
|
+
number: event.event_number,
|
31
|
+
created_at: Time.at(event.created_epoch / 1000)
|
32
|
+
}
|
101
33
|
end
|
102
34
|
end
|
103
35
|
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
module ROM
|
2
2
|
module EventStore
|
3
3
|
class Dataset
|
4
|
+
attr_reader :name
|
5
|
+
|
4
6
|
def initialize(name, connection, options = {})
|
5
7
|
@name = name
|
6
8
|
@connection = connection
|
@@ -12,15 +14,16 @@ module ROM
|
|
12
14
|
end
|
13
15
|
|
14
16
|
def stream
|
15
|
-
@options[:stream]
|
17
|
+
stream = @options[:stream]
|
18
|
+
stream ? "#{name}-#{stream}" : "$#{name}"
|
16
19
|
end
|
17
20
|
|
18
21
|
def events
|
19
|
-
@connection.
|
22
|
+
@connection.read(stream, option(:start, 0), option(:limit, 20))
|
20
23
|
end
|
21
24
|
|
22
25
|
def append(events)
|
23
|
-
@connection.append(
|
26
|
+
@connection.append(stream, events)
|
24
27
|
end
|
25
28
|
|
26
29
|
def each
|
@@ -36,6 +39,10 @@ module ROM
|
|
36
39
|
def __new__(new_opts = {})
|
37
40
|
self.class.new(@name, @connection, @options.merge(new_opts))
|
38
41
|
end
|
42
|
+
|
43
|
+
def option(option, default)
|
44
|
+
@options.fetch(option, default)
|
45
|
+
end
|
39
46
|
end
|
40
47
|
end
|
41
48
|
end
|
data/rom-event_store.gemspec
CHANGED
@@ -19,9 +19,8 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
20
|
spec.require_paths = ['lib']
|
21
21
|
|
22
|
-
spec.add_dependency 'inflecto', '~> 0.0.2'
|
23
22
|
spec.add_runtime_dependency 'rom', '~> 0.6'
|
24
|
-
spec.add_runtime_dependency '
|
23
|
+
spec.add_runtime_dependency 'estore', '~> 0.0.2'
|
25
24
|
|
26
25
|
spec.add_development_dependency 'bundler'
|
27
26
|
spec.add_development_dependency 'rake'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rom-event_store
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Héctor Ramón
|
@@ -9,22 +9,8 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-04-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
-
- !ruby/object:Gem::Dependency
|
15
|
-
name: inflecto
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
-
requirements:
|
18
|
-
- - "~>"
|
19
|
-
- !ruby/object:Gem::Version
|
20
|
-
version: 0.0.2
|
21
|
-
type: :runtime
|
22
|
-
prerelease: false
|
23
|
-
version_requirements: !ruby/object:Gem::Requirement
|
24
|
-
requirements:
|
25
|
-
- - "~>"
|
26
|
-
- !ruby/object:Gem::Version
|
27
|
-
version: 0.0.2
|
28
14
|
- !ruby/object:Gem::Dependency
|
29
15
|
name: rom
|
30
16
|
requirement: !ruby/object:Gem::Requirement
|
@@ -40,25 +26,19 @@ dependencies:
|
|
40
26
|
- !ruby/object:Gem::Version
|
41
27
|
version: '0.6'
|
42
28
|
- !ruby/object:Gem::Dependency
|
43
|
-
name:
|
29
|
+
name: estore
|
44
30
|
requirement: !ruby/object:Gem::Requirement
|
45
31
|
requirements:
|
46
32
|
- - "~>"
|
47
33
|
- !ruby/object:Gem::Version
|
48
|
-
version:
|
49
|
-
- - ">="
|
50
|
-
- !ruby/object:Gem::Version
|
51
|
-
version: 0.1.2
|
34
|
+
version: 0.0.2
|
52
35
|
type: :runtime
|
53
36
|
prerelease: false
|
54
37
|
version_requirements: !ruby/object:Gem::Requirement
|
55
38
|
requirements:
|
56
39
|
- - "~>"
|
57
40
|
- !ruby/object:Gem::Version
|
58
|
-
version:
|
59
|
-
- - ">="
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: 0.1.2
|
41
|
+
version: 0.0.2
|
62
42
|
- !ruby/object:Gem::Dependency
|
63
43
|
name: bundler
|
64
44
|
requirement: !ruby/object:Gem::Requirement
|