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.
- checksums.yaml +7 -0
- data/lib/event-ul.rb +52 -0
- 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: []
|