Class: MongoidExt::FileList

Inherits:
EmbeddedHash show all
Defined in:
lib/mongoid_ext/file_list.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from EmbeddedHash

field, #id, #initialize

Constructor Details

This class inherits a constructor from EmbeddedHash

Instance Attribute Details

#parent_documentObject

Returns the value of attribute parent_document.



3
4
5
# File 'lib/mongoid_ext/file_list.rb', line 3

def parent_document
  @parent_document
end

Instance Method Details

#delete(id) ⇒ Object



62
63
64
65
66
# File 'lib/mongoid_ext/file_list.rb', line 62

def delete(id)
  file = self.get(id)
  super(id)
  file.delete
end

#destroy_filesObject



68
69
70
71
72
# File 'lib/mongoid_ext/file_list.rb', line 68

def destroy_files
  each_file do |id, file|
    get(id).delete
  end
end

#each_file(&block) ⇒ Object



28
29
30
31
32
33
# File 'lib/mongoid_ext/file_list.rb', line 28

def each_file(&block)
  (self.keys-["_id"]).each do |key|
    file = self.get(key)
    yield key, file
  end
end

#filesObject



22
23
24
25
26
# File 'lib/mongoid_ext/file_list.rb', line 22

def files
  ids = self.keys
  ids.delete("_id")
  ids.map {|v| get(v) }
end

#get(id) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/mongoid_ext/file_list.rb', line 35

def get(id)
  if id.kind_of?(MongoidExt::File)
    self[id.id] = id
    return id
  end

  id = id.to_s.gsub(".", "_")
  file = self[id]
  if file.nil?
    file = self[id] = MongoidExt::File.new
  elsif file.class == BSON::OrderedHash
    file = self[id] = MongoidExt::File.new(file)
  end

  file._root_document = parent_document
  file
end

#put(id, io, metadata = {}) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/mongoid_ext/file_list.rb', line 5

def put(id, io,  = {})
  if !parent_document.new_record?
    filename = id
    if io.respond_to?(:original_filename)
      filename = io.original_filename
    elsif io.respond_to?(:path) && io.path
      filename = ::File.basename(io.path)
    elsif io.kind_of?(String)
      io = StringIO.new(io)
    end

    get(id).put(filename, io, )
  else
    (@_pending_files ||= {})[id] = [io, ]
  end
end

#sync_filesObject



53
54
55
56
57
58
59
60
# File 'lib/mongoid_ext/file_list.rb', line 53

def sync_files
  if @_pending_files
    @_pending_files.each do |filename, data|
      put(filename, data[0], data[1])
    end
    @_pending_files = nil
  end
end