ruby_event_store 0.9.0 → 0.10.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
  SHA1:
3
- metadata.gz: ccc76d1623b794eed62f855d2e8639cfb1e8448a
4
- data.tar.gz: d23636b51426bfc1318b5b3b2fa6f66f7a11bd88
3
+ metadata.gz: 38cf4f49d0019cc3d1c4d613c6c29730dda6941f
4
+ data.tar.gz: fa880c595c0adaf4a45b6ff13cbaf1f38d1718d6
5
5
  SHA512:
6
- metadata.gz: fdc4e73526e305ee7009f18a49a867d9c3c94dc26ce8c9a50b4449443a99339742f72404764e1b35ef274b4b7aed5d875987658a6a5ce2107446fbf251ba9956
7
- data.tar.gz: 0c23c71f915e4666c8e3f2fa5ebd82ed92e2010295ff824c3b7d53d49a61b56d36e50f0f9346754cf96417bd75e2a811c6b39e1e7a291a03dd686f911d4f6d6d
6
+ metadata.gz: c6f0017ba2975ebf997db54d1fb21ae721ee805cebfaccf55b4723f435f7bd626bd3dad3cdf14276ff4a6a6c94dcb9a1e4f2105750473cfb7f9bb39c9779f42e
7
+ data.tar.gz: 8fbb2c47e171ee20c180643108ec77c5684afab845062a158d5ea60a7216cb1b082238fdb6f7da31985441f164aa0334ebddf279eabf8745b8032861431b1dcd
data/.travis.yml CHANGED
@@ -1,6 +1,8 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.1.5
3
+ - 2.1.10
4
+ - 2.2.5
5
+ - 2.3.1
4
6
  before_install: gem install bundler
5
7
  gemfile: Gemfile
6
8
  script: make mutate
@@ -8,4 +10,4 @@ notifications:
8
10
  slack:
9
11
  secure: qCcGv1MmryEhPoHzTvZvgSv21UcC7j2Cfq0b0hmQWuYHrHN+jhqjhg7PuElNyr0mk6N1acIcVqOAWpS20ZkG/mipW2RBBXVEc9zVR10pvJnlKDmGKd4Vmj394VgIknn8ciruglw1LoJManf1bV7/Wm4ITMt3zCQqTMGclRUqA0l/dzK2z9zU35cT4v38nTGnoGVrPQx29FvpU3J/h9qC6kGllw3Bkic2nmpFABYOI49LQFF3/vdrbnK3Zo1rudHMV0lNoPg5Ntrbd6XHXUKrBGBcZmGSh3wW/mfYf9Tcft+5MwtCu4b70KnFknx7oFmBlU8JFYg2x5f1xNSIoRkDmLI5/jNDWJ3oLAtYjgY5CdBMlxnhhfnCBmbaxEJhTuscm2sIp+S+4+ggm8x/daIK3BUaBAV5BT8An52BXhQ/F6cdnYiSVn+5lGap/1wF2TWwnN/oVc+JVfATouG9FCygzMekUaji94JMKBtS+QgoLdAE5ufEGBeDONJELRD8Lca1R4uWSg2snf93GWoONca9aJfkIfXj3m+VaoAM9Bq9DGcOXwZESkltE2E+31Fznh5qYCRH1zgtgB0Hx8x7sdaxNQyybvgNS1R0lGnIU/NrUmREcUi5BYEI5YqygBtkTZ7F/nlYQgydKjjHJ6FG3oLc3ggxffE8oAdpuxvlUQ8ZN6o=
10
12
  env:
11
- - CODECLIMATE_REPO_TOKEN=164ccfacd5c379b0113f81b055179574f55d8611bac432b3e9bd5f7c5858084a
13
+ - CODECLIMATE_REPO_TOKEN=164ccfacd5c379b0113f81b055179574f55d8611bac432b3e9bd5f7c5858084a
data/CHANGELOG.md CHANGED
@@ -1,3 +1,14 @@
1
+ ### 0.10.0 (12.07.2016)
2
+
3
+ * Fix: When using `append_to_stream`, expected version is no longer compared using `equal?` commit bdbe4600073d278cbf1024e8d49801fec768f6a7
4
+ * Change: Creating events with data is now done using `data` keyword argument. Previously events were created using the syntax `OrderCreated.new(order_id: 123)`, now it has to be `OrderCreated.new(data: { order_id: 123 })`. PR #24
5
+ * Change: Access to `data` attributes in an event is now using `event.data.some_attribute` syntax PR #24
6
+ * Change: Only events with the same name, event_id and data are equal - metadata is no longer taken into account PR #24
7
+ * Change: `metadata[:timestamp]` is now set when event is appended to the stream, not when it is initialized PR #24
8
+ * Change: Initialization of `RubyEventStore::Facade` is now using keyword arguments PR #24
9
+ * Add support to `metadata_proc` PR #24
10
+ * `ClosedStruct` is now a dependency PR #24
11
+
1
12
  ### 0.9.0 (24.06.2016)
2
13
 
3
14
  * Change: Call instead of handle_event, handle_event stays for now but is deprecated PR #18
@@ -1,34 +1,31 @@
1
1
  require 'securerandom'
2
+ require 'closed_struct'
2
3
 
3
4
  module RubyEventStore
4
5
  class Event
5
-
6
- def initialize(event_id: SecureRandom.uuid, metadata: {}, **data)
7
- data.each do |key, value|
8
- singleton_class.__send__(:define_method, key) { value }
9
- end
10
-
6
+ def initialize(event_id: SecureRandom.uuid, metadata: {}, data: {})
11
7
  @event_id = event_id.to_s
12
- @metadata = metadata
13
- @data = data
14
- @metadata[:timestamp] ||= Time.now.utc
8
+ @metadata = ClosedStruct.new(metadata)
9
+ @data = ClosedStruct.new(data)
15
10
  end
16
11
  attr_reader :event_id, :metadata, :data
17
12
 
18
13
  def to_h
19
14
  {
20
15
  event_id: event_id,
21
- metadata: metadata,
22
- data: data
16
+ metadata: metadata.to_h,
17
+ data: data.to_h
23
18
  }
24
19
  end
25
20
 
26
21
  def timestamp
27
- metadata[:timestamp]
22
+ metadata.timestamp rescue nil
28
23
  end
29
24
 
30
25
  def ==(other_event)
31
- other_event.instance_of?(self.class) && other_event.to_h.eql?(to_h)
26
+ other_event.instance_of?(self.class) &&
27
+ other_event.event_id.eql?(event_id) &&
28
+ other_event.data.eql?(data)
32
29
  end
33
30
 
34
31
  alias_method :eql?, :==
@@ -1,8 +1,11 @@
1
1
  module RubyEventStore
2
2
  class Facade
3
- def initialize(repository, event_broker = PubSub::Broker.new)
4
- @repository = repository
5
- @event_broker = event_broker
3
+ def initialize(repository,
4
+ event_broker: PubSub::Broker.new,
5
+ metadata_proc: nil)
6
+ @repository = repository
7
+ @event_broker = event_broker
8
+ @metadata_proc = metadata_proc
6
9
  end
7
10
  attr_reader :repository, :event_broker
8
11
 
@@ -14,7 +17,8 @@ module RubyEventStore
14
17
 
15
18
  def append_to_stream(stream_name, event, expected_version = :any)
16
19
  validate_expected_version(stream_name, expected_version)
17
- repository.create(event, stream_name)
20
+ enriched_event = enrich_event_metadata(event)
21
+ repository.create(enriched_event, stream_name)
18
22
  :ok
19
23
  end
20
24
 
@@ -69,6 +73,16 @@ module RubyEventStore
69
73
  end
70
74
 
71
75
  private
76
+ attr_reader :metadata_proc
77
+
78
+ def enrich_event_metadata(event)
79
+ metadata = event.metadata.to_h
80
+ metadata[:timestamp] ||= Time.now.utc
81
+ metadata.merge!(metadata_proc.call || {}) if metadata_proc
82
+
83
+ event.class.new(event_id: event.event_id, metadata: metadata, data: event.data.to_h)
84
+ end
85
+
72
86
  def handle_subscribe(unsub)
73
87
  if block_given?
74
88
  yield
@@ -100,7 +114,7 @@ module RubyEventStore
100
114
  when :none
101
115
  return if last_stream_event_id(stream_name).nil?
102
116
  else
103
- return if last_stream_event_id(stream_name).equal?(expected_version)
117
+ return if last_stream_event_id(stream_name).eql?(expected_version)
104
118
  end
105
119
  raise WrongExpectedEventVersion
106
120
  end
@@ -1,3 +1,3 @@
1
1
  module RubyEventStore
2
- VERSION = '0.9.0'
2
+ VERSION = '0.10.0'
3
3
  end
@@ -19,6 +19,7 @@ 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 "closed_struct", "~> 0.1"
22
23
  spec.add_development_dependency "bundler", "~> 1.8"
23
24
  spec.add_development_dependency "rake", "~> 10.0"
24
25
  spec.add_development_dependency 'rspec', "~> 3.2"
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_event_store
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arkency
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-06-24 00:00:00.000000000 Z
11
+ date: 2016-07-12 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: closed_struct
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.1'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement