ephemeron 0.2.1 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 85b00f989b7f6a03f398cf1bcca07ff5ad6af716d25dfbf4927fcbe6753f51ca
4
- data.tar.gz: c73dbe174fc3b31fcd41e0825a081e2168ee7fa7aa4074dd5d227cf24215a92e
3
+ metadata.gz: c50cea9d34520d0a578c05f81d621b357fc07f233fee202b0031636692e3ce1b
4
+ data.tar.gz: a81052e6ced9fbeb86711a29a7dee2a7cd7a76b4a886ad348dea64ce14dfd672
5
5
  SHA512:
6
- metadata.gz: cfa43027d3191f849a467a54dec03a7228e0c75bec118d737b2b37ea3c2b0e56f8f9b9973cd4f8a6387377305ed1cb7c41352cfd17c5e1430370d3e96b780ab6
7
- data.tar.gz: 54d98852dbb6f365396fb2c3db14b7ccfddb4b5d41dc54935d8c37415d6c3ebc416b0f4ceb6f289747b74234db70cc965e0edca41477c0b967472df30a4ab19f
6
+ metadata.gz: 17aabd88b2067ea3102789827a1215244f8ce3cdc9508f349394b5ec0b707683b02e96aa2dcc1d15214f07fff34704875662f60c3476eee7134c5cb6f1f3c47a
7
+ data.tar.gz: f1d086cddff04cb218da90a094a0c689583dc01077e96c5b7dce35a1b8cd3a61299ecdb29994f374b22e8de594f4a6ce4e114d572a2b648ca31829e414562531
@@ -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
@@ -6,7 +6,7 @@ module Ephemeron
6
6
 
7
7
  included do
8
8
  after_find lambda { |model|
9
- Ephemeron.add model
9
+ Store.add model, log: true
10
10
  }
11
11
 
12
12
  after_validation lambda { |model|
@@ -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
@@ -7,7 +7,7 @@ module Ephemeron
7
7
  module_function
8
8
 
9
9
  def call
10
- model = Ephemeron::Logger::Finders.find_first_allowed_but_unsaved
10
+ model = Ephemeron::Store::Finders.find_first_allowed_but_unsaved
11
11
  return if model.nil?
12
12
 
13
13
  raise(
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Ephemeron
4
- VERSION = '0.2.1'
4
+ VERSION = '0.3.0'
5
5
  end
@@ -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
- key = Convert.call model
23
- in_store = !store[key].nil?
24
- store[key] = model unless in_store
25
- if !opts[:as].nil?
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.2.1
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-25 00:00:00.000000000 Z
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