euston-projections 1.0.1 → 1.0.2

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.
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'euston-projections'
3
- s.version = '1.0.1'
3
+ s.version = '1.0.2'
4
4
  s.platform = RUBY_PLATFORM.to_s == 'java' ? 'java' : Gem::Platform::RUBY
5
5
  s.authors = ['Lee Henson', 'Guy Boertje']
6
6
  s.email = ['lee.m.henson@gmail.com', 'guyboertje@gmail.com']
@@ -14,6 +14,7 @@ Gem::Specification.new do |s|
14
14
  Rakefile
15
15
  euston-projections.gemspec
16
16
  lib/euston-projections.rb
17
+ lib/euston-projections/historical_message.rb
17
18
  lib/euston-projections/idempotence.rb
18
19
  lib/euston-projections/mongo_projection.rb
19
20
  lib/euston-projections/mongo_projection_event_handler.rb
@@ -0,0 +1,12 @@
1
+ module Euston
2
+ module Projections
3
+ class HistoricalMessage
4
+ include Mongoid::Document
5
+
6
+ field :message_id
7
+ field :timestamp, type: Float, default: ->{ Time.now.to_f }
8
+
9
+ embedded_in :historical, polymorphic: true
10
+ end
11
+ end
12
+ end
@@ -5,23 +5,25 @@ module Euston
5
5
  include Mongoid::Document
6
6
 
7
7
  included do
8
- field :_history, :type => Hash, :default => {}
8
+ embeds_many :historical_messages, as: :historical, class_name: 'Euston::Projections::HistoricalMessage'
9
9
  end
10
10
 
11
11
  def add_to_history message_id
12
- _history[message_id] = Time.now.to_f unless already_processed_message? message_id
12
+ return if already_processed_message? message_id
13
+
14
+ historical_messages << HistoricalMessage.new(message_id: message_id)
13
15
  end
14
16
 
15
17
  def already_processed_message? message_id
16
- _history.has_key? message_id
18
+ historical_messages.any? { |m| m.message_id == message_id }
17
19
  end
18
20
 
19
21
  def processed_message_ids
20
- _history.keys
22
+ historical_messages.map { |m| m.message_id }
21
23
  end
22
24
 
23
25
  def prune_history_older_than time
24
- _history.reject! { |id, timestamp| timestamp < time }
26
+ historical_messages.reject! { |m| m.timestamp < time }
25
27
  end
26
28
  end
27
29
  end
@@ -1,5 +1,5 @@
1
1
  module Euston
2
2
  module Projections
3
- VERSION = "1.0.1"
3
+ VERSION = "1.0.2"
4
4
  end
5
5
  end
@@ -1,5 +1,6 @@
1
1
  require 'mongoid'
2
2
 
3
3
  require 'euston-projections/idempotence'
4
+ require 'euston-projections/historical_message'
4
5
  require 'euston-projections/mongo_projection'
5
6
  require 'euston-projections/mongo_projection_event_handler'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: euston-projections
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2011-10-18 00:00:00.000000000 Z
13
+ date: 2011-10-24 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
17
- requirement: &74508500 !ruby/object:Gem::Requirement
17
+ requirement: &70276251472860 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: 3.0.10
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *74508500
25
+ version_requirements: *70276251472860
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: euston-eventstore
28
- requirement: &74508260 !ruby/object:Gem::Requirement
28
+ requirement: &70276251472260 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ~>
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: 1.2.2
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *74508260
36
+ version_requirements: *70276251472260
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: mongoid
39
- requirement: &74508030 !ruby/object:Gem::Requirement
39
+ requirement: &70276251471380 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ~>
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: 2.1.0
45
45
  type: :runtime
46
46
  prerelease: false
47
- version_requirements: *74508030
47
+ version_requirements: *70276251471380
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: awesome_print
50
- requirement: &74507800 !ruby/object:Gem::Requirement
50
+ requirement: &70276251470800 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ~>
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: 0.4.0
56
56
  type: :development
57
57
  prerelease: false
58
- version_requirements: *74507800
58
+ version_requirements: *70276251470800
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: fuubar
61
- requirement: &74507570 !ruby/object:Gem::Requirement
61
+ requirement: &70276251470220 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ~>
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: 0.0.0
67
67
  type: :development
68
68
  prerelease: false
69
- version_requirements: *74507570
69
+ version_requirements: *70276251470220
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: rspec
72
- requirement: &74507340 !ruby/object:Gem::Requirement
72
+ requirement: &70276251469540 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ~>
@@ -77,7 +77,7 @@ dependencies:
77
77
  version: 2.6.0
78
78
  type: :development
79
79
  prerelease: false
80
- version_requirements: *74507340
80
+ version_requirements: *70276251469540
81
81
  description: ''
82
82
  email:
83
83
  - lee.m.henson@gmail.com
@@ -90,6 +90,7 @@ files:
90
90
  - Rakefile
91
91
  - euston-projections.gemspec
92
92
  - lib/euston-projections.rb
93
+ - lib/euston-projections/historical_message.rb
93
94
  - lib/euston-projections/idempotence.rb
94
95
  - lib/euston-projections/mongo_projection.rb
95
96
  - lib/euston-projections/mongo_projection_event_handler.rb