ruby_event_store-protobuf 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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 121764a1339325e2fcb9c412c2b6dc59fa0f622d13a146c47888c7e9867e3934
4
+ data.tar.gz: 4086449bb203b83c116dea628688b40e70a00e7f9679b71c98f2c0bff77ee7b8
5
+ SHA512:
6
+ metadata.gz: 27db1e88a5ea0062eab49fe219d89c335ffbaf51511ccd3689e9b11e28c73e6d4dd02ce13c89a693f64b55042a35708b0d0ec1f538943640a996113418c4e721
7
+ data.tar.gz: 489b8652495a33ae80b7a397b419fe0b705d56402f830af2d099fb51c6975edbeefc06bffb7a872d7355cf1e98f21a6df480d92c992705777300134f94515e09
@@ -0,0 +1,21 @@
1
+ # Ruby Event Store Protobuf
2
+
3
+ Moved from RubyEventStore (based on version 1.3.0).
4
+
5
+ ![Ruby Event Store Protobuf](https://github.com/RailsEventStore/rails_event_store/workflows/ruby_event_store-protobuf/badge.svg)
6
+
7
+
8
+ ## How to use this gem
9
+
10
+ Add to your gemfile in application:
11
+
12
+ ```ruby
13
+ gem "ruby_event_store-protobuf"
14
+ ```
15
+
16
+ Read more about [using Rails Event Store with Protobuf](https://railseventstore.org/docs/v2/protobuf/#configure-protobuf-mapper)
17
+
18
+
19
+ ## Contributing
20
+
21
+ Bug reports and pull requests are welcome on GitHub at https://github.com/RailsEventStore/rails_event_store.
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ruby_event_store'
4
+
5
+ module RubyEventStore
6
+ ProtobufEncodingFailed = Class.new(Error)
7
+
8
+ module Protobuf
9
+ end
10
+ end
11
+
12
+ require_relative 'protobuf/mappers/transformation/proto_event'
13
+ require_relative 'protobuf/mappers/transformation/protobuf_encoder'
14
+ require_relative 'protobuf/mappers/transformation/protobuf_nested_struct_metadata'
15
+ require_relative 'protobuf/mappers/protobuf'
16
+ require_relative 'protobuf/version'
17
+
18
+ module RubyEventStore
19
+ Proto = Protobuf::Proto
20
+
21
+ module Mappers
22
+ Protobuf = RubyEventStore::Protobuf::Mappers::Protobuf
23
+
24
+ module Transformation
25
+ ProtoEvent = RubyEventStore::Protobuf::Mappers::Transformation::ProtoEvent
26
+ ProtobufEncoder = RubyEventStore::Protobuf::Mappers::Transformation::ProtobufEncoder
27
+ ProtobufNestedStructMetadata = RubyEventStore::Protobuf::Mappers::Transformation::ProtobufNestedStructMetadata
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubyEventStore
4
+ module Protobuf
5
+ class Proto < RubyEventStore::Event
6
+ def event_type
7
+ data.class.descriptor.name
8
+ end
9
+ end
10
+
11
+ module Mappers
12
+ class Protobuf < RubyEventStore::Mappers::PipelineMapper
13
+ def initialize(events_class_remapping: {})
14
+ super(RubyEventStore::Mappers::Pipeline.new(
15
+ Transformation::ProtobufEncoder.new,
16
+ RubyEventStore::Mappers::Transformation::EventClassRemapper.new(events_class_remapping),
17
+ Transformation::ProtobufNestedStructMetadata.new,
18
+ to_domain_event: Transformation::ProtoEvent.new,
19
+ ))
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubyEventStore
4
+ module Protobuf
5
+ module Mappers
6
+ module Transformation
7
+ class ProtoEvent < RubyEventStore::Mappers::Transformation::DomainEvent
8
+ def load(record)
9
+ Proto.new(
10
+ event_id: record.event_id,
11
+ data: record.data,
12
+ metadata: record.metadata.merge(
13
+ timestamp: record.timestamp,
14
+ valid_at: record.valid_at,
15
+ ),
16
+ )
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubyEventStore
4
+ module Protobuf
5
+ module Mappers
6
+ module Transformation
7
+ class ProtobufEncoder
8
+ def dump(record)
9
+ Record.new(
10
+ event_id: record.event_id,
11
+ event_type: record.event_type,
12
+ data: encode_data(record.data),
13
+ metadata: record.metadata,
14
+ timestamp: record.timestamp,
15
+ valid_at: record.valid_at,
16
+ )
17
+ end
18
+
19
+ def load(record)
20
+ Record.new(
21
+ event_id: record.event_id,
22
+ event_type: record.event_type,
23
+ data: load_data(record.event_type, record.data),
24
+ metadata: record.metadata,
25
+ timestamp: record.timestamp,
26
+ valid_at: record.valid_at,
27
+ )
28
+ end
29
+
30
+ private
31
+ def encode_data(data)
32
+ begin
33
+ data.class.encode(data)
34
+ rescue NoMethodError
35
+ raise ProtobufEncodingFailed
36
+ end
37
+ end
38
+
39
+ def load_data(event_type, protobuf_data)
40
+ Google::Protobuf::DescriptorPool.generated_pool.lookup(event_type).msgclass.decode(protobuf_data)
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubyEventStore
4
+ module Protobuf
5
+ module Mappers
6
+ module Transformation
7
+ class ProtobufNestedStructMetadata
8
+ def initialize
9
+ require_optional_dependency
10
+ end
11
+
12
+ def dump(record)
13
+ Record.new(
14
+ event_id: record.event_id,
15
+ event_type: record.event_type,
16
+ data: record.data,
17
+ metadata: ProtobufNestedStruct::HashMapStringValue.dump(record.metadata),
18
+ timestamp: record.timestamp,
19
+ valid_at: record.valid_at,
20
+ )
21
+ end
22
+
23
+ def load(record)
24
+ RubyEventStore::Mappers::Transformation::SymbolizeMetadataKeys.new.load(
25
+ Record.new(
26
+ event_id: record.event_id,
27
+ event_type: record.event_type,
28
+ data: record.data,
29
+ metadata: ProtobufNestedStruct::HashMapStringValue.load(record.metadata),
30
+ timestamp: record.timestamp,
31
+ valid_at: record.valid_at,
32
+ )
33
+ )
34
+ end
35
+
36
+ def require_optional_dependency
37
+ require 'protobuf_nested_struct'
38
+ rescue LoadError
39
+ raise LoadError, "cannot load such file -- protobuf_nested_struct. Add protobuf_nested_struct gem to Gemfile"
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubyEventStore
4
+ module Protobuf
5
+ VERSION = "1.0.0"
6
+ end
7
+ end
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruby_event_store-protobuf
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Arkency
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-01-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: ruby_event_store
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 2.0.0
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: 3.0.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 2.0.0
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: 3.0.0
33
+ description:
34
+ email: dev@arkency.com
35
+ executables: []
36
+ extensions: []
37
+ extra_rdoc_files:
38
+ - README.md
39
+ files:
40
+ - README.md
41
+ - lib/ruby_event_store/protobuf.rb
42
+ - lib/ruby_event_store/protobuf/mappers/protobuf.rb
43
+ - lib/ruby_event_store/protobuf/mappers/transformation/proto_event.rb
44
+ - lib/ruby_event_store/protobuf/mappers/transformation/protobuf_encoder.rb
45
+ - lib/ruby_event_store/protobuf/mappers/transformation/protobuf_nested_struct_metadata.rb
46
+ - lib/ruby_event_store/protobuf/version.rb
47
+ homepage: https://railseventstore.org
48
+ licenses:
49
+ - MIT
50
+ metadata:
51
+ homepage_uri: https://railseventstore.org
52
+ source_code_uri: https://github.com/RailsEventStore/rails_event_store
53
+ bug_tracker_uri: https://github.com/RailsEventStore/rails_event_store/issues
54
+ post_install_message:
55
+ rdoc_options: []
56
+ require_paths:
57
+ - lib
58
+ required_ruby_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '2.5'
63
+ required_rubygems_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ requirements: []
69
+ rubygems_version: 3.1.4
70
+ signing_key:
71
+ specification_version: 4
72
+ summary: Protobuf support for Ruby Event Store
73
+ test_files: []