ruby_event_store 0.9.0 → 0.10.0

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: 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