event-ul 0.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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/event-ul.rb +52 -0
  3. metadata +43 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 65757fa94f41fa402a0832f941753c51625d0d7b3467d2bf81b3c9a6e2be1fe7
4
+ data.tar.gz: 9214f16dd63c1a570e5f5f758f8028bbeb1495ee1e37ba46ad1d8b6c268d161e
5
+ SHA512:
6
+ metadata.gz: 8053c63f5b2acee1d4581d480e13d599f623a09c252b1aa4f280bad483252b32ab382cb55eff6d40e6a73e8bde0d6f8d0686fcf8ec6c0655993c1e5e720fbcac
7
+ data.tar.gz: af0a0066957639b290cdad2ed70857436a58e8b549815ba96eb224b2803c346f5530a1b6336ec52cf0e1696c341c49ca18cf3dbc4fbe39b2497eb57f0ef277f3
data/lib/event-ul.rb ADDED
@@ -0,0 +1,52 @@
1
+ module EventUl
2
+ class Model
3
+ attr_reader :events
4
+ attr_reader :state
5
+
6
+ def initialize
7
+ @events = []
8
+ @state = {}
9
+ @current_event = 0
10
+ end
11
+
12
+ def reset
13
+ @current_event = @events.size
14
+
15
+ @state = {}
16
+ @events.each_with_index do |event, step|
17
+ apply(event[:data]) if step <= @current_event
18
+ end
19
+
20
+ @state
21
+ end
22
+
23
+ def step_back
24
+ return @state if @current_event == 0
25
+
26
+ @current_event = @current_event - 1
27
+
28
+ @state = {}
29
+ @events.each_with_index do |event, step|
30
+ apply(event[:data]) if step <= @current_event
31
+ end
32
+
33
+ @state
34
+ end
35
+
36
+ private
37
+
38
+ def dispatch_and_apply(event_data)
39
+ dispatch(event_data)
40
+ apply(event_data)
41
+ end
42
+
43
+ def dispatch(event_data)
44
+ @events.push(at: Time.now, data: event_data)
45
+ @current_event = @events.size
46
+ end
47
+
48
+ def apply(event_data)
49
+ @state = @state.merge(event_data)
50
+ end
51
+ end
52
+ end
metadata ADDED
@@ -0,0 +1,43 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: event-ul
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Aaron Snyder
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-02-06 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Ultra-Light Event-Sourced Data Models
14
+ email: a453803@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/event-ul.rb
20
+ homepage:
21
+ licenses:
22
+ - MIT
23
+ metadata: {}
24
+ post_install_message:
25
+ rdoc_options: []
26
+ require_paths:
27
+ - lib
28
+ required_ruby_version: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ required_rubygems_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - ">="
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ requirements: []
39
+ rubygems_version: 3.1.2
40
+ signing_key:
41
+ specification_version: 4
42
+ summary: Event Ultra-Light
43
+ test_files: []