evt-entity_cache 0.6.1.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: aca46d5e864296ec667aad6a7ed0f679aee8463f
4
+ data.tar.gz: 8e13a338781b0a8e32d27206b455a49a99b43fbf
5
+ SHA512:
6
+ metadata.gz: eebfd2ca59a34e6be8df6862fa2a76c8146ed9ce270c644e3a05ad4d7a144712900fede5c9dd7f42dc86978c0b5081c5a44e7cfb7e1bca0f6e61ad29b1298b86
7
+ data.tar.gz: e2ac284094bfc16c56787fb6958730f23f8e79926b4b644f95fe525069a36ebef71a82a440fd650c0cb287fd4a463aa1aabcc7eda821879c7bf0dff1ca920e3a
@@ -0,0 +1,22 @@
1
+ require 'configure'; Configure.activate
2
+ require 'settings'; Settings.activate
3
+ require 'telemetry'
4
+ require 'telemetry/logger'
5
+ require 'virtual'; Virtual.activate
6
+
7
+ require 'entity_cache/record'
8
+
9
+ require 'entity_cache/storage/persistent'
10
+ require 'entity_cache/storage/persistent/none'
11
+ require 'entity_cache/storage/persistent/substitute'
12
+ require 'entity_cache/storage/persistent/telemetry'
13
+
14
+ require 'entity_cache/storage/temporary'
15
+ require 'entity_cache/storage/temporary/factory'
16
+ require 'entity_cache/storage/temporary/scope'
17
+ require 'entity_cache/storage/temporary/scope/exclusive'
18
+ require 'entity_cache/storage/temporary/scope/shared'
19
+
20
+ require 'entity_cache/defaults'
21
+ require 'entity_cache/entity_cache'
22
+ require 'entity_cache/substitute'
@@ -0,0 +1,11 @@
1
+ require 'clock/controls'
2
+ require 'identifier/uuid/controls'
3
+
4
+ require 'entity_cache/controls/entity'
5
+ require 'entity_cache/controls/id'
6
+ require 'entity_cache/controls/record'
7
+ require 'entity_cache/controls/storage/persistent'
8
+ require 'entity_cache/controls/storage/temporary'
9
+ require 'entity_cache/controls/time'
10
+ require 'entity_cache/controls/version'
11
+ require 'entity_cache/controls/write_behind_delay'
@@ -0,0 +1,9 @@
1
+ class EntityCache
2
+ module Controls
3
+ module Entity
4
+ def self.example
5
+ Object.new
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,5 @@
1
+ class EntityCache
2
+ module Controls
3
+ ID = Identifier::UUID::Controls::Incrementing
4
+ end
5
+ end
@@ -0,0 +1,25 @@
1
+ class EntityCache
2
+ module Controls
3
+ module Record
4
+ def self.example(id=nil, version: nil, persisted_version: nil)
5
+ id ||= ID.example
6
+ entity = Entity.example
7
+ version ||= Version.example
8
+ persisted_version ||= Version::Persistent.example
9
+
10
+ time = Time.example
11
+ persisted_time = time
12
+
13
+ EntityCache::Record.new id, entity, version, time, persisted_version, persisted_time
14
+ end
15
+
16
+ module Persisted
17
+ def self.example(id=nil)
18
+ version = Version::Persistent.example
19
+
20
+ Record.example id, version: version
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,39 @@
1
+ class EntityCache
2
+ module Controls
3
+ module Storage
4
+ module Persistent
5
+ class Example
6
+ include EntityCache::Storage::Persistent
7
+
8
+ def get(id)
9
+ entity, version, time = records[id]
10
+
11
+ return entity, version, time
12
+ end
13
+
14
+ def put(id, entity, version, time)
15
+ records[id] = [entity, version, time]
16
+ end
17
+
18
+ def records
19
+ @records ||= {}
20
+ end
21
+
22
+ module Assertions
23
+ def stored?(id, entity, version, time)
24
+ records[id] == [entity, version, time]
25
+ end
26
+ end
27
+ end
28
+
29
+ def self.example
30
+ Example.build :some_subject
31
+ end
32
+
33
+ def self.substitute
34
+ SubstAttr::Substitute.build Example
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,11 @@
1
+ class EntityCache
2
+ module Controls
3
+ module Storage
4
+ module Temporary
5
+ def self.example
6
+ EntityCache::Storage::Temporary::Scope::Exclusive.build :some_subject
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,5 @@
1
+ class EntityCache
2
+ module Controls
3
+ Time = Clock::Controls::Time
4
+ end
5
+ end
@@ -0,0 +1,27 @@
1
+ class EntityCache
2
+ module Controls
3
+ module Version
4
+ def self.example
5
+ 11
6
+ end
7
+
8
+ module Age
9
+ def self.example
10
+ Version.example - Persistent.example
11
+ end
12
+ end
13
+
14
+ module NoStream
15
+ def self.example
16
+ EntityCache::Record::NoStream.version
17
+ end
18
+ end
19
+
20
+ module Persistent
21
+ def self.example
22
+ 1
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,29 @@
1
+ class EntityCache
2
+ module Controls
3
+ module WriteBehindDelay
4
+ module Exceeds
5
+ def self.example
6
+ Version.example - Version::Persistent.example
7
+ end
8
+
9
+ module NoStream
10
+ def self.example
11
+ Version.example
12
+ end
13
+ end
14
+ end
15
+
16
+ module Within
17
+ def self.example
18
+ Exceeds.example + 1
19
+ end
20
+
21
+ module NoStream
22
+ def self.example
23
+ Exceeds::NoStream.example + 1
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,11 @@
1
+ class EntityCache
2
+ module Defaults
3
+ def self.persistent_store
4
+ Storage::Persistent::None
5
+ end
6
+
7
+ def self.write_behind_delay
8
+ 10
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,83 @@
1
+ class EntityCache
2
+ configure :entity_cache
3
+
4
+ attr_reader :write_behind_delay
5
+
6
+ dependency :clock, Clock::UTC
7
+ dependency :logger, Telemetry::Logger
8
+ dependency :persistent_store, Storage::Persistent
9
+ dependency :temporary_store, Storage::Temporary
10
+
11
+ def initialize(write_behind_delay=nil)
12
+ @write_behind_delay = write_behind_delay
13
+ end
14
+
15
+ def self.build(subject, persistent_store: nil, write_behind_delay: nil)
16
+ persistent_store ||= Defaults.persistent_store
17
+ write_behind_delay ||= Defaults.write_behind_delay
18
+
19
+ instance = new write_behind_delay
20
+
21
+ Clock::UTC.configure instance
22
+ Telemetry::Logger.configure instance
23
+ Storage::Temporary.configure instance, subject
24
+
25
+ persistent_store.configure instance, subject
26
+
27
+ instance
28
+ end
29
+
30
+ def get(id)
31
+ logger.opt_trace "Reading cache (ID: #{id.inspect})"
32
+
33
+ record = temporary_store.get id
34
+ record ||= restore id
35
+
36
+ if record.nil?
37
+ logger.opt_debug "Cache miss (ID: #{id.inspect})"
38
+ return nil
39
+ end
40
+
41
+ logger.opt_debug "Cache hit (ID: #{id.inspect}, Entity Class: #{record.entity.class.name}, Version: #{record.version.inspect}, Time: #{record.time})"
42
+
43
+ record
44
+ end
45
+
46
+ def put(id, entity, version, persisted_version=nil, persisted_time=nil, time: nil)
47
+ time ||= clock.iso8601
48
+
49
+ logger.opt_trace "Writing cache (ID: #{id}, Entity Class: #{entity.class.name}, Version: #{version.inspect}, Time: #{time}, Persistent Version: #{persisted_version.inspect}, Persistent Time: #{persisted_time.inspect})"
50
+
51
+ record = Record.new id, entity, version, time, persisted_version, persisted_time
52
+
53
+ put_record record
54
+
55
+ logger.opt_debug "Cache written (ID: #{id}, Entity Class: #{record.entity.class.name}, Version: #{record.version.inspect}, Time: #{record.time}, Persistent Version: #{persisted_version.inspect}, Persistent Time: #{persisted_time.inspect})"
56
+
57
+ record
58
+ end
59
+
60
+ def put_record(record)
61
+ if write_behind_delay && record.age >= write_behind_delay
62
+ persisted_time = clock.iso8601
63
+
64
+ persistent_store.put record.id, record.entity, record.version, persisted_time
65
+
66
+ record.persisted_version = record.version
67
+ record.persisted_time = persisted_time
68
+ end
69
+
70
+ temporary_store.put record
71
+ end
72
+
73
+ def restore(id)
74
+ entity, persisted_version, persisted_time = persistent_store.get id
75
+
76
+ return nil if entity.nil?
77
+
78
+ version = persisted_version
79
+ time = persisted_time
80
+
81
+ put id, entity, version, persisted_version, persisted_time, time: time
82
+ end
83
+ end
@@ -0,0 +1,39 @@
1
+ class EntityCache
2
+ class Record < Struct.new :id, :entity, :version, :time, :persisted_version, :persisted_time
3
+ def age
4
+ persisted_version = self.persisted_version
5
+ persisted_version ||= -1
6
+
7
+ version - persisted_version.to_i
8
+ end
9
+
10
+ def destructure(includes=nil)
11
+ return entity if includes.nil?
12
+
13
+ responses = [entity]
14
+
15
+ includes = Array(includes)
16
+
17
+ includes.each do |attribute|
18
+ value = public_send attribute
19
+
20
+ value = NoStream.version if value.nil? && attribute == :version
21
+
22
+ responses << value
23
+ end
24
+
25
+ responses
26
+ end
27
+
28
+ module NoStream
29
+ def self.destructure(includes=nil)
30
+ record = Record.new
31
+ record.destructure includes
32
+ end
33
+
34
+ def self.version
35
+ :no_stream
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,80 @@
1
+ class EntityCache
2
+ module Storage
3
+ module Persistent
4
+ extend Configure::Macro
5
+
6
+ def self.included(cls)
7
+ cls.class_exec do
8
+ configure :persistent_store
9
+
10
+ dependency :logger, ::Telemetry::Logger
11
+ dependency :telemetry, ::Telemetry
12
+
13
+ extend Build
14
+ extend RegisterTelemetrySink
15
+
16
+ prepend Get
17
+ prepend Put
18
+
19
+ virtual :configure_dependencies unless instance_methods.include?(:configure_dependencies)
20
+ abstract :get unless instance_methods.include?(:get)
21
+ abstract :put unless instance_methods.include?(:put)
22
+ end
23
+ end
24
+
25
+ attr_reader :subject
26
+
27
+ def initialize(subject)
28
+ @subject = subject
29
+ end
30
+
31
+ module Get
32
+ def get(id)
33
+ logger.opt_trace "Getting entity (ID: #{id.inspect})"
34
+
35
+ entity, version, time = super
36
+
37
+ telemetry.record :get, Telemetry::Data.new(id, entity, version, time)
38
+
39
+ logger.opt_debug "Got entity (ID: #{id.inspect}, Entity Class: #{entity.class.name}, Version: #{version.inspect}, Time: #{time.inspect})"
40
+
41
+ return entity, version, time
42
+ end
43
+ end
44
+
45
+ module Put
46
+ def put(id, entity, version, time)
47
+ logger.opt_trace "Putting entity (ID: #{id.inspect}, Entity Class: #{entity.class.name}, Version: #{version.inspect}, Time: #{time.inspect})"
48
+
49
+ super
50
+
51
+ telemetry.record :put, Telemetry::Data.new(id, entity, version, time)
52
+
53
+ logger.opt_debug "Put entity (ID: #{id.inspect}, Entity Class: #{entity.class.name}, Version: #{version.inspect}, Time: #{time.inspect})"
54
+
55
+ time
56
+ end
57
+ end
58
+
59
+ module Build
60
+ def build(subject)
61
+ instance = new subject
62
+ ::Telemetry::Logger.configure instance
63
+ ::Telemetry.configure instance
64
+ instance.configure_dependencies
65
+ instance
66
+ end
67
+ end
68
+
69
+ module RegisterTelemetrySink
70
+ def register_telemetry_sink(storage)
71
+ sink = Telemetry.sink
72
+ storage.telemetry.register sink
73
+ sink
74
+ end
75
+ end
76
+
77
+ Error = Class.new StandardError
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,15 @@
1
+ class EntityCache
2
+ module Storage
3
+ module Persistent
4
+ class None
5
+ include Persistent
6
+
7
+ def get(*)
8
+ end
9
+
10
+ def put(*)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,51 @@
1
+ class EntityCache
2
+ module Storage
3
+ module Persistent
4
+ module Substitute
5
+ def self.build
6
+ substitute = Persistent.build :substitute
7
+ sink = Persistent.register_telemetry_sink substitute
8
+ substitute.sink = sink
9
+ substitute
10
+ end
11
+
12
+ class Persistent
13
+ attr_accessor :sink
14
+
15
+ include Storage::Persistent
16
+
17
+ def get(id)
18
+ entity, version, time = records[id]
19
+ return entity, version,time
20
+ end
21
+
22
+ def put(*)
23
+ end
24
+
25
+ def add(id, entity, version, time=nil)
26
+ time ||= Clock::UTC.iso8601
27
+ records[id] ||= [entity, version, time]
28
+ end
29
+
30
+ def records
31
+ @records ||= {}
32
+ end
33
+
34
+ module Assertions
35
+ def retrieved?(&blk)
36
+ sink.retrieved? &blk
37
+ end
38
+
39
+ def stored?(&blk)
40
+ sink.stored? &blk
41
+ end
42
+
43
+ def stored_nothing?
44
+ sink.put_records.empty?
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,38 @@
1
+ class EntityCache
2
+ module Storage
3
+ module Persistent
4
+ module Telemetry
5
+ def self.sink
6
+ Sink.new
7
+ end
8
+
9
+ Data = Struct.new :id, :entity, :version, :time
10
+
11
+ class Sink
12
+ include ::Telemetry::Sink
13
+
14
+ record :get
15
+ record :put
16
+
17
+ def retrieved?(&blk)
18
+ return get_records if blk.nil?
19
+
20
+ recorded_get? do |record|
21
+ data = record.data
22
+ blk.call(data.id, data.entity, data.version, data.time)
23
+ end
24
+ end
25
+
26
+ def stored?(&blk)
27
+ return put_records if blk.nil?
28
+
29
+ recorded_put? do |record|
30
+ data = record.data
31
+ blk.call(data.id, data.entity, data.version, data.time)
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,57 @@
1
+ class EntityCache
2
+ module Storage
3
+ class Temporary
4
+ attr_reader :subject
5
+
6
+ dependency :logger, Telemetry::Logger
7
+
8
+ def initialize(subject)
9
+ @subject = subject
10
+ end
11
+
12
+ def self.build(subject)
13
+ instance = new subject
14
+ Telemetry::Logger.configure instance
15
+ instance
16
+ end
17
+
18
+ def self.configure(receiver, subject, scope: nil, attr_name: nil)
19
+ attr_name ||= :temporary_store
20
+
21
+ instance = Factory.(subject, scope: scope)
22
+ receiver.public_send "#{attr_name}=", instance
23
+ instance
24
+ end
25
+
26
+ def get(id)
27
+ records[id]
28
+ end
29
+
30
+ def put(record)
31
+ records[record.id] = record
32
+ end
33
+
34
+ abstract :records
35
+
36
+ module Assertions
37
+ def empty?
38
+ records.empty?
39
+ end
40
+
41
+ def put?(&block)
42
+ block ||= proc { true }
43
+
44
+ records.any? do |_, record|
45
+ block.(record)
46
+ end
47
+ end
48
+ end
49
+
50
+ module Substitute
51
+ def self.build
52
+ Scope::Exclusive.build :substitute
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,42 @@
1
+ class EntityCache
2
+ module Storage
3
+ class Temporary
4
+ module Factory
5
+ def self.call(subject, scope: nil)
6
+ scope ||= Scope::Defaults::Name.get
7
+
8
+ scope_class = self.scope_class scope
9
+
10
+ scope_class.build subject
11
+ end
12
+
13
+ def self.scope_class(scope_name)
14
+ scope_class = scopes[scope_name]
15
+
16
+ if scope_class.nil?
17
+ *scopes, final_scope = self.scopes.keys
18
+ scopes = "#{scopes * ', '} or #{scope_name}"
19
+
20
+ error_message = %{Scope "#{scope_name}" is unknown. It must be one of: #{scopes}}
21
+
22
+ logger.error error_message
23
+ raise Scope::Error, error_message
24
+ end
25
+
26
+ scope_class
27
+ end
28
+
29
+ def self.scopes
30
+ @scopes ||= {
31
+ :exclusive => Scope::Exclusive,
32
+ :shared => Scope::Shared
33
+ }
34
+ end
35
+
36
+ def self.logger
37
+ @logger ||= Telemetry::Logger.get self
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,30 @@
1
+ class EntityCache
2
+ module Storage
3
+ class Temporary
4
+ module Scope
5
+ Error = Class.new StandardError
6
+
7
+ module Defaults
8
+ module Name
9
+ def self.get
10
+ value = env_var_value || self.value
11
+ value.to_sym
12
+ end
13
+
14
+ def self.env_var_value
15
+ ENV[env_var_name]
16
+ end
17
+
18
+ def self.env_var_name
19
+ 'ENTITY_CACHE_SCOPE'
20
+ end
21
+
22
+ def self.value
23
+ 'shared'
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,13 @@
1
+ class EntityCache
2
+ module Storage
3
+ class Temporary
4
+ module Scope
5
+ class Exclusive < Temporary
6
+ def records
7
+ @records ||= {}
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,17 @@
1
+ class EntityCache
2
+ module Storage
3
+ class Temporary
4
+ module Scope
5
+ class Shared < Temporary
6
+ def records
7
+ records_registry[subject] ||= {}
8
+ end
9
+
10
+ def records_registry
11
+ @@records_registry ||= {}
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,44 @@
1
+ class EntityCache
2
+ module Substitute
3
+ def self.build
4
+ EntityCache.build
5
+ end
6
+
7
+ class EntityCache < EntityCache
8
+ def self.build
9
+ instance = new
10
+ Telemetry::Logger.configure instance
11
+ instance
12
+ end
13
+
14
+ def add(id, entity, version=nil, persisted_version: nil)
15
+ version ||= 0
16
+ persisted_version ||= version
17
+
18
+ time = clock.iso8601
19
+
20
+ record = Record.new id, entity, version, time, persisted_version, time
21
+
22
+ temporary_store.put record
23
+ end
24
+
25
+ def put_record(record)
26
+ put_records << record
27
+ end
28
+
29
+ def put_records
30
+ @put_records ||= []
31
+ end
32
+
33
+ module Assertions
34
+ def put?(&blk)
35
+ return put_records.any? if blk.nil?
36
+
37
+ put_records.any? do |record|
38
+ blk.(record)
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
metadata ADDED
@@ -0,0 +1,164 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: evt-entity_cache
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.6.1.1
5
+ platform: ruby
6
+ authors:
7
+ - The Eventide Project
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-12-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: evt-configure
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: evt-clock
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: evt-identifier-uuid
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: evt-settings
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: evt-telemetry-logger
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: evt-virtual
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: test_bench
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: " "
112
+ email: opensource@eventide-project.org
113
+ executables: []
114
+ extensions: []
115
+ extra_rdoc_files: []
116
+ files:
117
+ - lib/entity_cache.rb
118
+ - lib/entity_cache/controls.rb
119
+ - lib/entity_cache/controls/entity.rb
120
+ - lib/entity_cache/controls/id.rb
121
+ - lib/entity_cache/controls/record.rb
122
+ - lib/entity_cache/controls/storage/persistent.rb
123
+ - lib/entity_cache/controls/storage/temporary.rb
124
+ - lib/entity_cache/controls/time.rb
125
+ - lib/entity_cache/controls/version.rb
126
+ - lib/entity_cache/controls/write_behind_delay.rb
127
+ - lib/entity_cache/defaults.rb
128
+ - lib/entity_cache/entity_cache.rb
129
+ - lib/entity_cache/record.rb
130
+ - lib/entity_cache/storage/persistent.rb
131
+ - lib/entity_cache/storage/persistent/none.rb
132
+ - lib/entity_cache/storage/persistent/substitute.rb
133
+ - lib/entity_cache/storage/persistent/telemetry.rb
134
+ - lib/entity_cache/storage/temporary.rb
135
+ - lib/entity_cache/storage/temporary/factory.rb
136
+ - lib/entity_cache/storage/temporary/scope.rb
137
+ - lib/entity_cache/storage/temporary/scope/exclusive.rb
138
+ - lib/entity_cache/storage/temporary/scope/shared.rb
139
+ - lib/entity_cache/substitute.rb
140
+ homepage: https://github.com/eventide-project/entity-cache
141
+ licenses:
142
+ - MIT
143
+ metadata: {}
144
+ post_install_message:
145
+ rdoc_options: []
146
+ require_paths:
147
+ - lib
148
+ required_ruby_version: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: 2.2.3
153
+ required_rubygems_version: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - ">="
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ requirements: []
159
+ rubyforge_project:
160
+ rubygems_version: 2.6.8
161
+ signing_key:
162
+ specification_version: 4
163
+ summary: Entity cache
164
+ test_files: []