ephemeron 0.2.1 → 0.3.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.rb +6 -0
- 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
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c50cea9d34520d0a578c05f81d621b357fc07f233fee202b0031636692e3ce1b
|
4
|
+
data.tar.gz: a81052e6ced9fbeb86711a29a7dee2a7cd7a76b4a886ad348dea64ce14dfd672
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 17aabd88b2067ea3102789827a1215244f8ce3cdc9508f349394b5ec0b707683b02e96aa2dcc1d15214f07fff34704875662f60c3476eee7134c5cb6f1f3c47a
|
7
|
+
data.tar.gz: f1d086cddff04cb218da90a094a0c689583dc01077e96c5b7dce35a1b8cd3a61299ecdb29994f374b22e8de594f4a6ce4e114d572a2b648ca31829e414562531
|
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'
|
@@ -64,6 +66,10 @@ module Ephemeron
|
|
64
66
|
model_s
|
65
67
|
end
|
66
68
|
|
69
|
+
def allow_fetch!(model)
|
70
|
+
model.tap { |m| Logger.log m, :fetch_allowed }
|
71
|
+
end
|
72
|
+
|
67
73
|
def allow_save!(model)
|
68
74
|
model.tap { |m| Logger.log m, :save_allowed }
|
69
75
|
end
|
@@ -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 { |line| line.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
|
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.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Zbigniew Humeniuk
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-08-
|
11
|
+
date: 2020-08-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -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
|