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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 85b00f989b7f6a03f398cf1bcca07ff5ad6af716d25dfbf4927fcbe6753f51ca
4
- data.tar.gz: c73dbe174fc3b31fcd41e0825a081e2168ee7fa7aa4074dd5d227cf24215a92e
3
+ metadata.gz: ace736b9303d937a44b00aa85605953a10c758a821cdcdd8a9645ac69640379a
4
+ data.tar.gz: 3bc12d1a15769e6270d2f4aa3fbb049bfe6688bd38adf4228346b452c43807aa
5
5
  SHA512:
6
- metadata.gz: cfa43027d3191f849a467a54dec03a7228e0c75bec118d737b2b37ea3c2b0e56f8f9b9973cd4f8a6387377305ed1cb7c41352cfd17c5e1430370d3e96b780ab6
7
- data.tar.gz: 54d98852dbb6f365396fb2c3db14b7ccfddb4b5d41dc54935d8c37415d6c3ebc416b0f4ceb6f289747b74234db70cc965e0edca41477c0b967472df30a4ab19f
6
+ metadata.gz: fbf16a76ebb392addee9d80b821942f76a3dfcf2c30cc7e0c427c55f2525ad120b3b890f60b93e50d6f22c65884fc273d1dd87e7d44848fbd241a9771921c185
7
+ data.tar.gz: 338c9fbb205aea61d902f0be7dbcff341177cf04fc02ae2289121570a4ac92f790472fe3c20b1c6aca7b73b91fb054b1fc9d7e6a66f1c5bf86c710a363ce5238
@@ -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(&: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.6.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
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.2.1
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: 2020-08-25 00:00:00.000000000 Z
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: '7.0'
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: '7.0'
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.7.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.7.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.9'
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.9'
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
- post_install_message:
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.6.0
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.1.2
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: []