euston-projections 1.0.1 → 1.0.2

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