hold 1.0.2 → 1.0.3
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 +4 -4
- data/lib/hold.rb +16 -8
- data/lib/hold/error.rb +28 -0
- data/lib/hold/file/hash_repository.rb +49 -42
- data/lib/hold/in_memory.rb +11 -179
- data/lib/hold/in_memory/array_cell.rb +27 -0
- data/lib/hold/in_memory/cell.rb +30 -0
- data/lib/hold/in_memory/hash_repository.rb +28 -0
- data/lib/hold/in_memory/identity_set_repository.rb +49 -0
- data/lib/hold/in_memory/object_cell.rb +30 -0
- data/lib/hold/in_memory/set_repository.rb +28 -0
- data/lib/hold/interfaces.rb +17 -439
- data/lib/hold/interfaces/array_cell.rb +49 -0
- data/lib/hold/interfaces/cell.rb +61 -0
- data/lib/hold/interfaces/hash_repository.rb +63 -0
- data/lib/hold/interfaces/identity_set_repository.rb +118 -0
- data/lib/hold/interfaces/object_cell.rb +103 -0
- data/lib/hold/interfaces/set_repository.rb +37 -0
- data/lib/hold/sequel.rb +12 -11
- data/lib/hold/sequel/identity_set_repository.rb +1 -8
- data/lib/hold/sequel/polymorphic_repository.rb +105 -96
- data/lib/hold/sequel/property_mapper.rb +144 -119
- data/lib/hold/sequel/query_array_cell.rb +19 -14
- data/lib/hold/sequel/repository_observer.rb +25 -21
- data/lib/hold/sequel/with_polymorphic_type_column.rb +145 -99
- data/lib/hold/serialized.rb +2 -104
- data/lib/hold/serialized/hash_repository.rb +50 -0
- data/lib/hold/serialized/identity_set_repository.rb +58 -0
- data/lib/hold/version.rb +2 -1
- metadata +78 -10
@@ -0,0 +1,50 @@
|
|
1
|
+
module Hold
|
2
|
+
module Serialized
|
3
|
+
# A repository which caches serialized versions of an entity in a
|
4
|
+
# string-based key/value cache.
|
5
|
+
#
|
6
|
+
# Wraps a string-based HashRepository, and requires a serializer responding
|
7
|
+
# to 'serialize' and 'deserialize'.
|
8
|
+
#
|
9
|
+
# May optionally have a 'key_prefix', which is a prefixed namespace added
|
10
|
+
# to the cache keys before getting/setting the serialized values in the
|
11
|
+
# underlying cache.
|
12
|
+
class HashRepository
|
13
|
+
include Hold::HashRepository
|
14
|
+
|
15
|
+
attr_reader :cache, :serializer, :key_prefix
|
16
|
+
|
17
|
+
def initialize(cache, serializer, key_prefix=nil)
|
18
|
+
@cache = cache
|
19
|
+
@serializer = serializer
|
20
|
+
@key_prefix = key_prefix
|
21
|
+
end
|
22
|
+
|
23
|
+
def cache_key(key)
|
24
|
+
@key_prefix ? @key_prefix + key.to_s : key.to_s
|
25
|
+
end
|
26
|
+
|
27
|
+
def set_with_key(key, entity)
|
28
|
+
@cache.set_with_key(cache_key(key), @serializer.serialize(entity))
|
29
|
+
end
|
30
|
+
|
31
|
+
def get_with_key(key)
|
32
|
+
json = @cache.get_with_key(cache_key(key)) and @serializer.deserialize(json)
|
33
|
+
end
|
34
|
+
|
35
|
+
def get_many_with_keys(keys)
|
36
|
+
jsons = @cache.get_many_with_keys(*keys.map {|key| cache_key(key)})
|
37
|
+
jsons.map {|json| json && @serializer.deserialize(json)}
|
38
|
+
end
|
39
|
+
|
40
|
+
def has_key?(key)
|
41
|
+
@cache.has_key?(cache_key(key))
|
42
|
+
end
|
43
|
+
alias_method :key?, :has_key?
|
44
|
+
|
45
|
+
def clear_key(key)
|
46
|
+
@cache.clear_key(cache_key(key))
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module Hold
|
2
|
+
module Serialized
|
3
|
+
class IdentitySetRepository
|
4
|
+
include Hold::IdentitySetRepository
|
5
|
+
|
6
|
+
attr_reader :cache, :serializer, :key_prefix
|
7
|
+
|
8
|
+
def initialize(cache, serializer, key_prefix=nil)
|
9
|
+
@cache = cache
|
10
|
+
@serializer = serializer
|
11
|
+
@key_prefix = key_prefix
|
12
|
+
end
|
13
|
+
|
14
|
+
def cache_key(key)
|
15
|
+
@key_prefix ? @key_prefix + key.to_s : key.to_s
|
16
|
+
end
|
17
|
+
|
18
|
+
def allocates_ids?
|
19
|
+
false
|
20
|
+
end
|
21
|
+
|
22
|
+
def store(object)
|
23
|
+
id = object.id or raise MissingIdentity
|
24
|
+
@cache.set_with_key(cache_key(id), @serializer.serialize(object))
|
25
|
+
object
|
26
|
+
end
|
27
|
+
|
28
|
+
def delete(object)
|
29
|
+
id = object.id or raise MissingIdentity
|
30
|
+
delete_id(id)
|
31
|
+
end
|
32
|
+
|
33
|
+
def contains?(object)
|
34
|
+
id = object.id or raise MissingIdentity
|
35
|
+
contains_id?(id)
|
36
|
+
end
|
37
|
+
|
38
|
+
def get_by_id(id)
|
39
|
+
json = @cache.get_with_key(cache_key(id))
|
40
|
+
if json
|
41
|
+
string_hash = @serializer.deserialize(json)
|
42
|
+
string_hash.inject({}) do |memo, (k,v)|
|
43
|
+
memo[k.to_sym] = v
|
44
|
+
memo
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def delete_id(id)
|
50
|
+
@cache.clear_key(cache_key(id))
|
51
|
+
end
|
52
|
+
|
53
|
+
def contains_id?(id)
|
54
|
+
@cache.has_key?(cache_key(id))
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
data/lib/hold/version.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hold
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
8
|
-
- Nick Griffiths
|
7
|
+
- MSP Devs
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2015-03-03 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rake
|
@@ -59,14 +58,14 @@ dependencies:
|
|
59
58
|
requirements:
|
60
59
|
- - "~>"
|
61
60
|
- !ruby/object:Gem::Version
|
62
|
-
version:
|
61
|
+
version: 0.13.0
|
63
62
|
type: :development
|
64
63
|
prerelease: false
|
65
64
|
version_requirements: !ruby/object:Gem::Requirement
|
66
65
|
requirements:
|
67
66
|
- - "~>"
|
68
67
|
- !ruby/object:Gem::Version
|
69
|
-
version:
|
68
|
+
version: 0.13.0
|
70
69
|
- !ruby/object:Gem::Dependency
|
71
70
|
name: json
|
72
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -95,6 +94,62 @@ dependencies:
|
|
95
94
|
- - ">="
|
96
95
|
- !ruby/object:Gem::Version
|
97
96
|
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: pronto
|
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
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: pronto-rubocop
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: pronto-flay
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: pronto-reek
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
98
153
|
- !ruby/object:Gem::Dependency
|
99
154
|
name: sequel
|
100
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -129,20 +184,18 @@ dependencies:
|
|
129
184
|
requirements:
|
130
185
|
- - "~>"
|
131
186
|
- !ruby/object:Gem::Version
|
132
|
-
version: 0.1
|
187
|
+
version: '0.1'
|
133
188
|
type: :runtime
|
134
189
|
prerelease: false
|
135
190
|
version_requirements: !ruby/object:Gem::Requirement
|
136
191
|
requirements:
|
137
192
|
- - "~>"
|
138
193
|
- !ruby/object:Gem::Version
|
139
|
-
version: 0.1
|
194
|
+
version: '0.1'
|
140
195
|
description: |2
|
141
196
|
A persistence library based more closely on the repository model.
|
142
197
|
Used in production for several years.
|
143
198
|
email:
|
144
|
-
- mark@mediasp.com
|
145
|
-
- tom@mediasp.com
|
146
199
|
- devs@mediasp.com
|
147
200
|
executables: []
|
148
201
|
extensions: []
|
@@ -150,9 +203,22 @@ extra_rdoc_files: []
|
|
150
203
|
files:
|
151
204
|
- README.md
|
152
205
|
- lib/hold.rb
|
206
|
+
- lib/hold/error.rb
|
153
207
|
- lib/hold/file/hash_repository.rb
|
154
208
|
- lib/hold/in_memory.rb
|
209
|
+
- lib/hold/in_memory/array_cell.rb
|
210
|
+
- lib/hold/in_memory/cell.rb
|
211
|
+
- lib/hold/in_memory/hash_repository.rb
|
212
|
+
- lib/hold/in_memory/identity_set_repository.rb
|
213
|
+
- lib/hold/in_memory/object_cell.rb
|
214
|
+
- lib/hold/in_memory/set_repository.rb
|
155
215
|
- lib/hold/interfaces.rb
|
216
|
+
- lib/hold/interfaces/array_cell.rb
|
217
|
+
- lib/hold/interfaces/cell.rb
|
218
|
+
- lib/hold/interfaces/hash_repository.rb
|
219
|
+
- lib/hold/interfaces/identity_set_repository.rb
|
220
|
+
- lib/hold/interfaces/object_cell.rb
|
221
|
+
- lib/hold/interfaces/set_repository.rb
|
156
222
|
- lib/hold/sequel.rb
|
157
223
|
- lib/hold/sequel/dataset_lazy_array.rb
|
158
224
|
- lib/hold/sequel/identity_set_repository.rb
|
@@ -175,6 +241,8 @@ files:
|
|
175
241
|
- lib/hold/sequel/repository_observer.rb
|
176
242
|
- lib/hold/sequel/with_polymorphic_type_column.rb
|
177
243
|
- lib/hold/serialized.rb
|
244
|
+
- lib/hold/serialized/hash_repository.rb
|
245
|
+
- lib/hold/serialized/identity_set_repository.rb
|
178
246
|
- lib/hold/serialized/json_serializer.rb
|
179
247
|
- lib/hold/version.rb
|
180
248
|
homepage: https://github.com/mediasp/hold
|