mongoid-grid_fs 1.4.0 → 1.7.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.
- data/lib/app/models/mongoid/grid_fs/fs/chunk.rb +2 -0
- data/lib/app/models/mongoid/grid_fs/fs/file.rb +2 -0
- data/lib/app/models/mongoid/grid_fs.rb +2 -0
- data/lib/mongoid-grid_fs.rb +60 -4
- data/mongoid-grid_fs.gemspec +9 -1
- data/test/helper.rb +12 -6
- data/test/mongoid-grid_fs_test.rb +60 -0
- metadata +5 -2
data/lib/mongoid-grid_fs.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
#
|
3
3
|
module Mongoid
|
4
4
|
class GridFS
|
5
|
-
const_set :Version, '1.
|
5
|
+
const_set :Version, '1.7.0'
|
6
6
|
|
7
7
|
class << GridFS
|
8
8
|
def version
|
@@ -269,6 +269,23 @@
|
|
269
269
|
end
|
270
270
|
end
|
271
271
|
|
272
|
+
##
|
273
|
+
#
|
274
|
+
class Defaults < ::Hash
|
275
|
+
def method_missing(method, *args, &block)
|
276
|
+
case method.to_s
|
277
|
+
when /(.*)=/
|
278
|
+
key = $1
|
279
|
+
val = args.first
|
280
|
+
update(key => val)
|
281
|
+
else
|
282
|
+
key = method.to_s
|
283
|
+
super unless has_key?(key)
|
284
|
+
fetch(key)
|
285
|
+
end
|
286
|
+
end
|
287
|
+
end
|
288
|
+
|
272
289
|
##
|
273
290
|
#
|
274
291
|
def GridFS.build_file_model_for(namespace)
|
@@ -283,17 +300,22 @@
|
|
283
300
|
|
284
301
|
singleton_class.instance_eval do
|
285
302
|
define_method(:name){ file_model_name }
|
286
|
-
attr_accessor :chunk_model
|
287
303
|
attr_accessor :namespace
|
304
|
+
attr_accessor :chunk_model
|
305
|
+
attr_accessor :defaults
|
288
306
|
end
|
289
307
|
|
290
308
|
self.default_collection_name = "#{ prefix }.files"
|
309
|
+
self.defaults = Defaults.new
|
310
|
+
|
311
|
+
self.defaults.chunkSize = 4 * (mb = 2**20)
|
312
|
+
self.defaults.contentType = 'application/octet-stream'
|
291
313
|
|
292
314
|
field(:filename, :type => String)
|
293
|
-
field(:contentType, :type => String, :default =>
|
315
|
+
field(:contentType, :type => String, :default => defaults.contentType)
|
294
316
|
|
295
317
|
field(:length, :type => Integer, :default => 0)
|
296
|
-
field(:chunkSize, :type => Integer, :default =>
|
318
|
+
field(:chunkSize, :type => Integer, :default => defaults.chunkSize)
|
297
319
|
field(:uploadDate, :type => Date, :default => Time.now.utc)
|
298
320
|
field(:md5, :type => String, :default => Digest::MD5.hexdigest(''))
|
299
321
|
|
@@ -324,6 +346,32 @@
|
|
324
346
|
end
|
325
347
|
end
|
326
348
|
|
349
|
+
def slice(*args)
|
350
|
+
case args.first
|
351
|
+
when Range
|
352
|
+
range = args.first
|
353
|
+
first_chunk = (range.min / chunkSize).floor
|
354
|
+
last_chunk = (range.max / chunkSize).ceil
|
355
|
+
offset = range.min % chunkSize
|
356
|
+
length = range.max - range.min + 1
|
357
|
+
when Fixnum
|
358
|
+
start = args.first
|
359
|
+
start = self.length + start if start < 0
|
360
|
+
length = args.size == 2 ? args.last : 1
|
361
|
+
first_chunk = (start / chunkSize).floor
|
362
|
+
last_chunk = ((start + length) / chunkSize).ceil
|
363
|
+
offset = start % chunkSize
|
364
|
+
end
|
365
|
+
|
366
|
+
data = ''
|
367
|
+
|
368
|
+
chunks.where(:n => (first_chunk..last_chunk)).order_by(n: 'asc').each do |chunk|
|
369
|
+
data << chunk
|
370
|
+
end
|
371
|
+
|
372
|
+
data[offset, length]
|
373
|
+
end
|
374
|
+
|
327
375
|
def data
|
328
376
|
data = ''
|
329
377
|
each{|chunk| data << chunk}
|
@@ -491,3 +539,11 @@
|
|
491
539
|
GridFs = GridFS
|
492
540
|
GridFS.init!
|
493
541
|
end
|
542
|
+
|
543
|
+
##
|
544
|
+
#
|
545
|
+
if defined?(Rails)
|
546
|
+
class Mongoid::GridFS::Engine < Rails::Engine
|
547
|
+
paths['app/models'] = File.dirname(__FILE__)
|
548
|
+
end
|
549
|
+
end
|
data/mongoid-grid_fs.gemspec
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
|
4
4
|
Gem::Specification::new do |spec|
|
5
5
|
spec.name = "mongoid-grid_fs"
|
6
|
-
spec.version = "1.
|
6
|
+
spec.version = "1.7.0"
|
7
7
|
spec.platform = Gem::Platform::RUBY
|
8
8
|
spec.summary = "mongoid-grid_fs"
|
9
9
|
spec.description = "a mongoid 3/moped compatible implementation of the grid_fs specification"
|
@@ -12,6 +12,14 @@ Gem::Specification::new do |spec|
|
|
12
12
|
["README.md",
|
13
13
|
"Rakefile",
|
14
14
|
"lib",
|
15
|
+
"lib/app",
|
16
|
+
"lib/app/models",
|
17
|
+
"lib/app/models/mongoid",
|
18
|
+
"lib/app/models/mongoid/grid_fs",
|
19
|
+
"lib/app/models/mongoid/grid_fs.rb",
|
20
|
+
"lib/app/models/mongoid/grid_fs/fs",
|
21
|
+
"lib/app/models/mongoid/grid_fs/fs/chunk.rb",
|
22
|
+
"lib/app/models/mongoid/grid_fs/fs/file.rb",
|
15
23
|
"lib/mongoid-grid_fs.rb",
|
16
24
|
"mongoid-grid_fs.gemspec",
|
17
25
|
"test",
|
data/test/helper.rb
CHANGED
@@ -1,10 +1,4 @@
|
|
1
1
|
# -*- encoding : utf-8 -*-
|
2
|
-
require_relative 'testing'
|
3
|
-
require_relative '../lib/mongoid-grid_fs.rb'
|
4
|
-
|
5
|
-
Mongoid.configure do |config|
|
6
|
-
config.connect_to('mongoid-grid_fs_test')
|
7
|
-
end
|
8
2
|
|
9
3
|
require 'stringio'
|
10
4
|
|
@@ -16,3 +10,15 @@ class SIO < StringIO
|
|
16
10
|
super(*args, &block)
|
17
11
|
end
|
18
12
|
end
|
13
|
+
|
14
|
+
# this triggers mongoid to load rails...
|
15
|
+
module Rails; end
|
16
|
+
|
17
|
+
require_relative 'testing'
|
18
|
+
require_relative '../lib/mongoid-grid_fs.rb'
|
19
|
+
|
20
|
+
Mongoid.configure do |config|
|
21
|
+
config.connect_to('mongoid-grid_fs_test')
|
22
|
+
end
|
23
|
+
|
24
|
+
|
@@ -107,6 +107,53 @@ Testing Mongoid::GridFs do
|
|
107
107
|
|
108
108
|
end
|
109
109
|
|
110
|
+
##
|
111
|
+
#
|
112
|
+
context 'slicing and dicing' do
|
113
|
+
|
114
|
+
test 'range' do
|
115
|
+
id = assert { GridFS::File.last.id }
|
116
|
+
g = assert { GridFs.get(id) }
|
117
|
+
assert { g.data[1..3] == g.slice(1..3) }
|
118
|
+
end
|
119
|
+
|
120
|
+
test 'start and length' do
|
121
|
+
id = assert { GridFS::File.last.id }
|
122
|
+
g = assert { GridFs.get(id) }
|
123
|
+
assert { g.data[1, 3] == g.slice(1, 3) }
|
124
|
+
end
|
125
|
+
|
126
|
+
test 'just a single param' do
|
127
|
+
id = assert { GridFS::File.last.id }
|
128
|
+
g = assert {GridFs.get(id) }
|
129
|
+
|
130
|
+
assert {g.data[1] == g.slice(1) }
|
131
|
+
end
|
132
|
+
|
133
|
+
test 'getting the last index' do
|
134
|
+
id = assert { GridFS::File.last.id }
|
135
|
+
g = assert {GridFs.get(id) }
|
136
|
+
assert {g.data[-1] == g.slice(-1) }
|
137
|
+
end
|
138
|
+
|
139
|
+
test 'yanking from the end of the data' do
|
140
|
+
id = assert { GridFS::File.last.id }
|
141
|
+
g = assert {GridFs.get(id) }
|
142
|
+
assert {g.data[-3, 2] == g.slice(-3, 2) }
|
143
|
+
end
|
144
|
+
|
145
|
+
test 'multiple chunks...' do
|
146
|
+
path = 'slice_and_dice.txt'
|
147
|
+
|
148
|
+
assert { GridFs[path] = SIO.new(path, "foobar" * 256 * 1024) }
|
149
|
+
|
150
|
+
g = GridFs[path]
|
151
|
+
|
152
|
+
assert { g.chunks.count > 0 }
|
153
|
+
assert { g.data[10, (256 * 1024 * 2)] == g.slice(10, (256 * 1024 * 2)) }
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
110
157
|
##
|
111
158
|
#
|
112
159
|
context 'namespaces' do
|
@@ -143,6 +190,19 @@ Testing Mongoid::GridFs do
|
|
143
190
|
|
144
191
|
##
|
145
192
|
#
|
193
|
+
context 'rails' do
|
194
|
+
test 'paths' do
|
195
|
+
testdir = File.dirname(__FILE__)
|
196
|
+
gemdir = File.dirname(testdir)
|
197
|
+
libdir = File.join(gemdir, 'lib')
|
198
|
+
|
199
|
+
expanded = proc{|paths| Array(paths).map{|path| File.expand_path(path)}}
|
200
|
+
|
201
|
+
assert{
|
202
|
+
expanded[ Mongoid::GridFS::Engine.paths['app/models'] ] == expanded[ libdir ]
|
203
|
+
}
|
204
|
+
end
|
205
|
+
end
|
146
206
|
|
147
207
|
protected
|
148
208
|
def object_id_re
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid-grid_fs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.7.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-11-
|
12
|
+
date: 2012-11-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mongoid
|
@@ -51,6 +51,9 @@ extra_rdoc_files: []
|
|
51
51
|
files:
|
52
52
|
- README.md
|
53
53
|
- Rakefile
|
54
|
+
- lib/app/models/mongoid/grid_fs.rb
|
55
|
+
- lib/app/models/mongoid/grid_fs/fs/chunk.rb
|
56
|
+
- lib/app/models/mongoid/grid_fs/fs/file.rb
|
54
57
|
- lib/mongoid-grid_fs.rb
|
55
58
|
- mongoid-grid_fs.gemspec
|
56
59
|
- test/helper.rb
|