large_object_store 1.3.2 → 1.3.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/large_object_store.rb +12 -5
- data/lib/large_object_store/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fa3354f66bbf118e295bdbb97df3ae3888f597d1
|
4
|
+
data.tar.gz: 5e1017c6505b0af50dbe8fdcf7cf6fbc2e834a5b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b5822c54bd33b67647f1b313335a1e6dfe19ab2ecc0e93cb8e43efe7fea858f8978aceaa4b3781dde541f902e19e7686e2efb29ffabf67ac851a7c238c154b1b
|
7
|
+
data.tar.gz: e7e9a2d1816777a5e06a73b924b1671bd437d1ed721d029e9f1e470d0a2cf11106a9c42b617933ca73fc1f02bc1f7022e605c03511642383f45270368450467e
|
data/lib/large_object_store.rb
CHANGED
@@ -12,7 +12,7 @@ module LargeObjectStore
|
|
12
12
|
NORMAL = 0
|
13
13
|
COMPRESSED = 1
|
14
14
|
RAW = 2
|
15
|
-
|
15
|
+
FLAG_RADIX = 32 # we can store 32 different states
|
16
16
|
|
17
17
|
def self.wrap(store)
|
18
18
|
RailsWrapper.new(store)
|
@@ -67,8 +67,14 @@ module LargeObjectStore
|
|
67
67
|
# use values_at to enforce key order because read_multi doesn't guarantee a return order
|
68
68
|
slices = @store.read_multi(*keys).values_at(*keys)
|
69
69
|
return nil if slices.compact.size != pages
|
70
|
-
|
70
|
+
|
71
|
+
slices = slices.map do |slice|
|
72
|
+
s = slice.dup
|
73
|
+
[s.slice!(0, UUID_SIZE), s]
|
74
|
+
end
|
75
|
+
|
71
76
|
return nil unless slices.map(&:first).uniq == [uuid]
|
77
|
+
|
72
78
|
slices.map!(&:last).join("")
|
73
79
|
else
|
74
80
|
pages
|
@@ -112,12 +118,13 @@ module LargeObjectStore
|
|
112
118
|
value = Zlib::Deflate.deflate(value)
|
113
119
|
end
|
114
120
|
|
115
|
-
value.prepend(flag.to_s(
|
121
|
+
value.prepend(flag.to_s(FLAG_RADIX))
|
116
122
|
end
|
117
123
|
|
118
124
|
# opposite operations and order of serialize
|
119
|
-
def deserialize(
|
120
|
-
|
125
|
+
def deserialize(raw_data)
|
126
|
+
data = raw_data.dup
|
127
|
+
flag = data.slice!(0, 1).to_i(FLAG_RADIX)
|
121
128
|
data = Zlib::Inflate.inflate(data) if flag & COMPRESSED == COMPRESSED
|
122
129
|
data = Marshal.load(data) if flag & RAW != RAW
|
123
130
|
data
|