ephemeron 0.2.1 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|