ephemeron 0.2.1 → 0.6.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 +4 -4
- data/lib/ephemeron/addons/model_addons.rb +1 -1
- data/lib/ephemeron/logger/finders.rb +0 -10
- data/lib/ephemeron/store/allow_fetch.rb +18 -0
- data/lib/ephemeron/store/finders.rb +19 -0
- data/lib/ephemeron/validators/store/allowed_but_unsaved.rb +1 -1
- data/lib/ephemeron/version.rb +1 -1
- data/lib/ephemeron/writers/logger.rb +1 -1
- data/lib/ephemeron/writers/store.rb +22 -8
- data/lib/ephemeron.rb +13 -1
- metadata +17 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ace736b9303d937a44b00aa85605953a10c758a821cdcdd8a9645ac69640379a
|
4
|
+
data.tar.gz: 3bc12d1a15769e6270d2f4aa3fbb049bfe6688bd38adf4228346b452c43807aa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fbf16a76ebb392addee9d80b821942f76a3dfcf2c30cc7e0c427c55f2525ad120b3b890f60b93e50d6f22c65884fc273d1dd87e7d44848fbd241a9771921c185
|
7
|
+
data.tar.gz: 338c9fbb205aea61d902f0be7dbcff341177cf04fc02ae2289121570a4ac92f790472fe3c20b1c6aca7b73b91fb054b1fc9d7e6a66f1c5bf86c710a363ce5238
|
@@ -9,16 +9,6 @@ module Ephemeron
|
|
9
9
|
Logger.logs
|
10
10
|
.filter { |l| events.any? { |e| l == Logger::Convert.call(model, e) } }
|
11
11
|
end
|
12
|
-
|
13
|
-
def find_first_allowed_but_unsaved
|
14
|
-
ary = Logger.logs
|
15
|
-
.reverse
|
16
|
-
.map { |line| line.split ' ' }
|
17
|
-
.find { |arr| %w[save_allowed saved].include?(arr[1]) }
|
18
|
-
return nil if ary.nil? || ary[1] == 'saved'
|
19
|
-
|
20
|
-
Store.store[ary[0]]
|
21
|
-
end
|
22
12
|
end
|
23
13
|
end
|
24
14
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Ephemeron
|
4
|
+
class Store
|
5
|
+
module AllowFetch
|
6
|
+
module_function
|
7
|
+
|
8
|
+
def call(model)
|
9
|
+
last_events = Ephemeron::Logger::Finders
|
10
|
+
.find_all_events_for(model, :fetch_allowed, :fetched)
|
11
|
+
.last(2)
|
12
|
+
cond1 = last_events[0] == Logger::Convert.call(model, :fetch_allowed)
|
13
|
+
cond2 = last_events[1] == Logger::Convert.call(model, :fetched)
|
14
|
+
cond1 && cond2
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Ephemeron
|
4
|
+
class Store
|
5
|
+
module Finders
|
6
|
+
module_function
|
7
|
+
|
8
|
+
def find_first_allowed_but_unsaved
|
9
|
+
ary = Logger.logs
|
10
|
+
.reverse
|
11
|
+
.map(&:split)
|
12
|
+
.find { |arr| %w[save_allowed saved].include?(arr[1]) }
|
13
|
+
return nil if ary.nil? || ary[1] == 'saved'
|
14
|
+
|
15
|
+
Store.store[ary[0]]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/ephemeron/version.rb
CHANGED
@@ -5,7 +5,7 @@ module Ephemeron
|
|
5
5
|
attribute :ts_logs
|
6
6
|
|
7
7
|
PROXY_EVENTS = %i[proxy_start proxy_end].freeze
|
8
|
-
VALID_EVENTS = %i[saved save_allowed skip_save used] + PROXY_EVENTS
|
8
|
+
VALID_EVENTS = %i[fetched fetch_allowed saved save_allowed skip_save used] + PROXY_EVENTS
|
9
9
|
|
10
10
|
def logs
|
11
11
|
self.ts_logs ||= []
|
@@ -19,14 +19,10 @@ module Ephemeron
|
|
19
19
|
def add(model, opts = {})
|
20
20
|
return unless Validators::StoreElement.call(model)
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
aliases[opts[:as]] = key
|
27
|
-
elsif in_store
|
28
|
-
raise StoreError, "#{key} is already in the store"
|
29
|
-
end
|
22
|
+
in_store_before = stored?(model)
|
23
|
+
store[to_store_key(model)] = model unless stored?(model)
|
24
|
+
Logger.log(model, :fetched) if opts[:log]
|
25
|
+
add_alias(model, opts[:as], in_store_before)
|
30
26
|
model
|
31
27
|
end
|
32
28
|
|
@@ -63,5 +59,23 @@ module Ephemeron
|
|
63
59
|
self.ts_store = {}
|
64
60
|
self.ts_aliases = {}
|
65
61
|
end
|
62
|
+
|
63
|
+
private
|
64
|
+
|
65
|
+
def to_store_key(model)
|
66
|
+
Convert.call(model)
|
67
|
+
end
|
68
|
+
|
69
|
+
def stored?(model)
|
70
|
+
!store[to_store_key(model)].nil?
|
71
|
+
end
|
72
|
+
|
73
|
+
def add_alias(model, as, in_store_before)
|
74
|
+
if !as.nil?
|
75
|
+
aliases[as] = to_store_key(model)
|
76
|
+
elsif in_store_before && !Store::AllowFetch.call(model)
|
77
|
+
raise StoreError, "#{to_store_key(model)} is already in the store"
|
78
|
+
end
|
79
|
+
end
|
66
80
|
end
|
67
81
|
end
|
data/lib/ephemeron.rb
CHANGED
@@ -14,7 +14,9 @@ require 'ephemeron/errors'
|
|
14
14
|
require 'ephemeron/logger/convert'
|
15
15
|
require 'ephemeron/logger/finders'
|
16
16
|
require 'ephemeron/settings'
|
17
|
+
require 'ephemeron/store/allow_fetch'
|
17
18
|
require 'ephemeron/store/convert'
|
19
|
+
require 'ephemeron/store/finders'
|
18
20
|
require 'ephemeron/store/update'
|
19
21
|
require 'ephemeron/validators/before_save'
|
20
22
|
require 'ephemeron/validators/store'
|
@@ -46,8 +48,9 @@ module Ephemeron
|
|
46
48
|
|
47
49
|
def proxy
|
48
50
|
Logger.log nil, :proxy_start
|
49
|
-
yield
|
51
|
+
res = yield
|
50
52
|
Logger.log nil, :proxy_end
|
53
|
+
res
|
51
54
|
end
|
52
55
|
|
53
56
|
def get(key)
|
@@ -64,6 +67,15 @@ module Ephemeron
|
|
64
67
|
model_s
|
65
68
|
end
|
66
69
|
|
70
|
+
def allow_fetch!(model_or_key)
|
71
|
+
model = if model_or_key.is_a?(String)
|
72
|
+
Ephemeron.get(model_or_key)
|
73
|
+
else
|
74
|
+
model_or_key
|
75
|
+
end
|
76
|
+
model.tap { |m| Logger.log m, :fetch_allowed }
|
77
|
+
end
|
78
|
+
|
67
79
|
def allow_save!(model)
|
68
80
|
model.tap { |m| Logger.log m, :save_allowed }
|
69
81
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ephemeron
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Zbigniew Humeniuk
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-02-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
version: '5.0'
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '
|
22
|
+
version: '8.0'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -29,35 +29,35 @@ dependencies:
|
|
29
29
|
version: '5.0'
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '
|
32
|
+
version: '8.0'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: jb
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
37
|
- - "~>"
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: 0.
|
39
|
+
version: '0.8'
|
40
40
|
type: :development
|
41
41
|
prerelease: false
|
42
42
|
version_requirements: !ruby/object:Gem::Requirement
|
43
43
|
requirements:
|
44
44
|
- - "~>"
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: 0.
|
46
|
+
version: '0.8'
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rspec-mocks
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
50
50
|
requirements:
|
51
51
|
- - "~>"
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: '3.
|
53
|
+
version: '3.10'
|
54
54
|
type: :development
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
57
|
requirements:
|
58
58
|
- - "~>"
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
version: '3.
|
60
|
+
version: '3.10'
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
62
|
name: rubocop
|
63
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -126,7 +126,9 @@ files:
|
|
126
126
|
- lib/ephemeron/logger/finders.rb
|
127
127
|
- lib/ephemeron/railtie.rb
|
128
128
|
- lib/ephemeron/settings.rb
|
129
|
+
- lib/ephemeron/store/allow_fetch.rb
|
129
130
|
- lib/ephemeron/store/convert.rb
|
131
|
+
- lib/ephemeron/store/finders.rb
|
130
132
|
- lib/ephemeron/store/update.rb
|
131
133
|
- lib/ephemeron/validators/before_save.rb
|
132
134
|
- lib/ephemeron/validators/store.rb
|
@@ -142,8 +144,9 @@ files:
|
|
142
144
|
homepage: https://artofcode.co
|
143
145
|
licenses:
|
144
146
|
- MIT
|
145
|
-
metadata:
|
146
|
-
|
147
|
+
metadata:
|
148
|
+
rubygems_mfa_required: 'true'
|
149
|
+
post_install_message:
|
147
150
|
rdoc_options: []
|
148
151
|
require_paths:
|
149
152
|
- lib
|
@@ -151,15 +154,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
151
154
|
requirements:
|
152
155
|
- - ">="
|
153
156
|
- !ruby/object:Gem::Version
|
154
|
-
version: 2.
|
157
|
+
version: 2.7.0
|
155
158
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
156
159
|
requirements:
|
157
160
|
- - ">="
|
158
161
|
- !ruby/object:Gem::Version
|
159
162
|
version: '0'
|
160
163
|
requirements: []
|
161
|
-
rubygems_version: 3.
|
162
|
-
signing_key:
|
164
|
+
rubygems_version: 3.3.3
|
165
|
+
signing_key:
|
163
166
|
specification_version: 4
|
164
167
|
summary: The organic DDD
|
165
168
|
test_files: []
|