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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7cf49a845b2891de79c5be6b742089243f0a8afb
4
- data.tar.gz: 872a3a6f385f8262afa37a8fe53c2c96c14dc861
3
+ metadata.gz: 66e28ad070bbb91cecc886f361871f203f52592f
4
+ data.tar.gz: 9ef0b7b5c46512ea40e92a234dc15316aac0c9ba
5
5
  SHA512:
6
- metadata.gz: 89f984a4f66ed78410a7a0dee95c3fbe484de11c246ea837a0b3f18815edcb905eb2da6a3d34f0e1b1352070e6509f09d8f3f477c6d406c05568d2ba0a09a0c3
7
- data.tar.gz: 84dee31899fca106b31c004b1490c728ba1c5bd69b1053c6197b97af14e96fb99b0727f539a5c7941c1f33a7ca02cb076682067a6858d5ddcb2ce3e96dbc5188
6
+ metadata.gz: 69de8603927a8fbe58d78fdf2115c987078a4fc18cb110e53d85c1a17f0b92d975cce459b03eae6a4e5812874d738e414cf72a7d2ca2c5c32f6ab651d4d9db54
7
+ data.tar.gz: 1727f6546180fa12442d901140c277b0a226d9797912e2b18cf245478c52bbf1e682283778f2e22211436928dc1a31f4534e5c0e7db51f380c6a698c2edf11af
data/Gemfile CHANGED
@@ -4,6 +4,7 @@ source 'https://rubygems.org'
4
4
  gemspec
5
5
 
6
6
  group :test do
7
+ gem 'inflecto'
7
8
  gem 'rom', git: 'https://github.com/rom-rb/rom.git', branch: 'master'
8
9
  gem 'rspec', '~> 3.1'
9
10
  gem 'codeclimate-test-reporter', require: false
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
  [![Test Coverage](https://codeclimate.com/github/rom-eventstore/rom-event_store/badges/coverage.svg)][codeclimate]
14
15
  [![Inline docs](http://inch-ci.org/github/rom-eventstore/rom-event_store.svg?branch=master)][inchpages]
15
16
 
17
+ [![Join the chat at https://gitter.im/rom-eventstore/rom-event_store](https://badges.gitter.im/Join%20Chat.svg)][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,5 +1,8 @@
1
+ require 'bundler'
1
2
  require 'rspec/core/rake_task'
2
3
 
4
+ Bundler.setup
5
+
3
6
  RSpec::Core::RakeTask.new(:spec)
4
7
  task default: [:ci]
5
8
 
@@ -1,103 +1,35 @@
1
- require 'net/http'
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
- uri = URI("http://#{uri}")
13
- @http = Net::HTTP.new(uri.host, uri.port)
8
+ host_port = uri.split(':')
9
+ @connection = Estore::Session.new(*host_port)
14
10
  end
15
11
 
16
- def events(category, stream_id = nil)
17
- events = __get__(stream_uri(category, stream_id))['entries'] || []
18
- events.map { |event| AtomMapper[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(category, stream_id, events)
22
- __post__(stream_uri!(category, stream_id), events)
17
+ def append(stream, events)
18
+ @connection.append(stream, events).sync
23
19
  end
24
20
 
25
21
  private
26
22
 
27
- ConnectionFailedError = Class.new(StandardError)
28
- UndefinedStreamError = Class.new(StandardError)
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
- def self.prepare(event)
95
- {
96
- eventId: SecureRandom.uuid,
97
- eventType: event[:type],
98
- data: event[:data]
99
- }
100
- end
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.events(@name, stream)
22
+ @connection.read(stream, option(:start, 0), option(:limit, 20))
20
23
  end
21
24
 
22
25
  def append(events)
23
- @connection.append(@name, stream, events)
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
@@ -1,5 +1,5 @@
1
1
  module Rom
2
2
  module EventStore
3
- VERSION = '0.0.2'
3
+ VERSION = '0.0.3'
4
4
  end
5
5
  end
@@ -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 'transproc', '~> 0.1', '>= 0.1.2'
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.2
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-03-31 00:00:00.000000000 Z
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: transproc
29
+ name: estore
44
30
  requirement: !ruby/object:Gem::Requirement
45
31
  requirements:
46
32
  - - "~>"
47
33
  - !ruby/object:Gem::Version
48
- version: '0.1'
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: '0.1'
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