rom-event_store 0.0.2 → 0.0.3

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