large_object_store 1.3.4 → 1.5.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 7330eb4955ee45e4ff4fcad4580a6fcd2f55ad48
4
- data.tar.gz: e61edd740a283e28ec308600a271a095d199a44b
2
+ SHA256:
3
+ metadata.gz: 92be121f082879185822f734dd5fe7935ce04aacb05e900ce4dbfe89b23d712c
4
+ data.tar.gz: 14854eba125bd1837eb444ec25d65da9ae99228455f600bb4c9cb38902d3ac8a
5
5
  SHA512:
6
- metadata.gz: 5a9e62798f1fcc24a298e5d36cf8896c99aed6d3070a0d62dfec72a2c2279949acf003030ed5bbdcd9bd442b30eef9fb56cb9d44b98821f1365024383345403c
7
- data.tar.gz: dfc7717490b507a35ad4020aca46d3dd07dc1d2d773b1b6245ea4da1d06d61de78e4f85420cff6fa47e3d8f112f6cb70b4e57211b6be94fbceec099e2c66cf29
6
+ metadata.gz: 489ecb7a501deda4f45feb995585999717a595ef6e4539641a6866215d23cf89eb3f745aac02d3b95a4581356405acb21f40f79b010954a3a037cd053172fe5d
7
+ data.tar.gz: 6c8ad1eead221be4324a5d6557926b8702469797448d68e62a19ded103ad52a0a1dc146599d2f69b1dd6ab5b237659e275d07f9a1542b9aa7a735dc5bb95acf3
data/Readme.md CHANGED
@@ -33,4 +33,4 @@ acemacu@gmail.com<br/>
33
33
  [Michael Grosser](https://github.com/grosser)<br/>
34
34
  michael@grosser.it<br/>
35
35
  License: MIT<br/>
36
- [![Build Status](https://travis-ci.org/anamartinez/large_object_store.png)](https://travis-ci.org/anamartinez/large_object_store)
36
+ [![CI](https://github.com/anamartinez/large_object_store/actions/workflows/actions.yml/badge.svg)](https://github.com/anamartinez/large_object_store/actions/workflows/actions.yml)
@@ -1,3 +1,3 @@
1
1
  module LargeObjectStore
2
- VERSION = "1.3.4"
2
+ VERSION = "1.5.0"
3
3
  end
@@ -14,20 +14,24 @@ module LargeObjectStore
14
14
  RAW = 2
15
15
  FLAG_RADIX = 32 # we can store 32 different states
16
16
 
17
- def self.wrap(store)
18
- RailsWrapper.new(store)
17
+ def self.wrap(*args)
18
+ RailsWrapper.new(*args)
19
+ end
20
+ class << self
21
+ ruby2_keywords :wrap if respond_to?(:ruby2_keywords, true)
19
22
  end
20
23
 
21
24
  class RailsWrapper
22
25
  attr_reader :store
23
26
 
24
- def initialize(store)
27
+ def initialize(store, serializer: Marshal)
25
28
  @store = store
29
+ @serializer = serializer
26
30
  end
27
31
 
28
- def write(key, value, options = {})
32
+ def write(key, value, **options)
29
33
  options = options.dup
30
- value = serialize(value, options)
34
+ value = serialize(value, **options)
31
35
 
32
36
  # calculate slice size; note that key length is a factor because
33
37
  # the key is stored on the same slab page as the value
@@ -37,11 +41,11 @@ module LargeObjectStore
37
41
  pages = (value.size / slice_size.to_f).ceil
38
42
 
39
43
  if pages == 1
40
- !!@store.write(key(key, 0), value, options)
44
+ !!@store.write(key(key, 0), value, **options)
41
45
  else
42
46
  # store meta
43
47
  uuid = SecureRandom.hex(UUID_BYTES)
44
- return false unless @store.write(key(key, 0), [pages, uuid], options) # invalidates the old cache
48
+ return false unless @store.write(key(key, 0), [pages, uuid], **options) # invalidates the old cache
45
49
 
46
50
  # store object
47
51
  page = 1
@@ -49,7 +53,7 @@ module LargeObjectStore
49
53
  slice = value.slice!(0, slice_size)
50
54
  break if slice.size == 0
51
55
 
52
- return false unless @store.write(key(key, page), slice.prepend(uuid), options.merge(raw: true))
56
+ return false unless @store.write(key(key, page), slice.prepend(uuid), raw: true, **options)
53
57
  page += 1
54
58
  end
55
59
  true
@@ -83,11 +87,11 @@ module LargeObjectStore
83
87
  deserialize(data)
84
88
  end
85
89
 
86
- def fetch(key, options={})
90
+ def fetch(key, **options)
87
91
  value = read(key)
88
92
  return value unless value.nil?
89
93
  value = yield
90
- write(key, value, options)
94
+ write(key, value, **options)
91
95
  value
92
96
  end
93
97
 
@@ -103,17 +107,17 @@ module LargeObjectStore
103
107
 
104
108
  # convert a object to a string
105
109
  # modifies options
106
- def serialize(value, options)
110
+ def serialize(value, **options)
107
111
  flag = NORMAL
108
112
 
109
113
  if options.delete(:raw)
110
114
  flag |= RAW
111
115
  value = value.to_s
112
116
  else
113
- value = Marshal.dump(value)
117
+ value = @serializer.dump(value)
114
118
  end
115
119
 
116
- if compress?(value, options)
120
+ if compress?(value, **options)
117
121
  flag |= COMPRESSED
118
122
  value = Zlib::Deflate.deflate(value)
119
123
  end
@@ -126,12 +130,12 @@ module LargeObjectStore
126
130
  data = raw_data.dup
127
131
  flag = data.slice!(0, 1).to_i(FLAG_RADIX)
128
132
  data = Zlib::Inflate.inflate(data) if flag & COMPRESSED == COMPRESSED
129
- data = Marshal.load(data) if flag & RAW != RAW
133
+ data = @serializer.load(data) if flag & RAW != RAW
130
134
  data
131
135
  end
132
136
 
133
137
  # Don't pass compression on to Rails, we're doing it ourselves.
134
- def compress?(value, options)
138
+ def compress?(value, **options)
135
139
  return unless options.delete(:compress)
136
140
  compress_limit = options.delete(:compress_limit) || DEFAULT_COMPRESS_LIMIT
137
141
  value.bytesize > compress_limit
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: large_object_store
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.4
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ana Martinez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-01-27 00:00:00.000000000 Z
11
+ date: 2023-03-30 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email: acemacu@gmail.com
@@ -31,15 +31,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - ">="
33
33
  - !ruby/object:Gem::Version
34
- version: '2.0'
34
+ version: '2.5'
35
35
  required_rubygems_version: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - ">="
38
38
  - !ruby/object:Gem::Version
39
39
  version: '0'
40
40
  requirements: []
41
- rubyforge_project:
42
- rubygems_version: 2.6.14
41
+ rubygems_version: 3.0.3.1
43
42
  signing_key:
44
43
  specification_version: 4
45
44
  summary: Store large objects in memcache or others