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.
@@ -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
@@ -1,3 +1,4 @@
1
+ # Version file
1
2
  module Hold
2
- VERSION = '1.0.2'
3
+ VERSION = '1.0.3'
3
4
  end
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.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
- - Matthew Willson
8
- - Nick Griffiths
7
+ - MSP Devs
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2014-12-03 00:00:00.000000000 Z
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: '0.7'
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: '0.7'
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.4
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.4
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