zgrid 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/lib/class_methods.rb +80 -0
  2. data/lib/zgrid.rb +27 -0
  3. metadata +56 -0
@@ -0,0 +1,80 @@
1
+ module Zgrid
2
+ class << self
3
+ def save_upload_file(temp,opts={})
4
+ filepath=temp.tempfile.path
5
+ filename=temp.original_filename
6
+ content_type=temp.content_type
7
+ metadata=opts[:metadata]
8
+ if opts and (opts[:percent] or opts[:size] or opts[:width])
9
+ Zbox::QmExt.resize(filepath,opts)
10
+ end
11
+
12
+ save(filepath,filename,content_type,metadata)
13
+ end
14
+
15
+ def save_temp(temp)
16
+ save(temp.path)
17
+ end
18
+
19
+ def save(filepath,filename=nil,content_type=nil,metadata=nil)
20
+ filehash={}
21
+ file_id=FileGrid.put(File.open(filepath),:filename=>filename,:metadata=>metadata)
22
+ thefile=FileGrid.get(file_id)
23
+ filehash["grid_id"]=file_id
24
+ filehash["content_type"]=content_type
25
+ filehash["length"]=thefile.file_length
26
+ filehash["filename"]=filename
27
+ filehash["metadata"]=metadata
28
+ return filehash
29
+ end
30
+
31
+ def delete(gid)
32
+ FileGrid.delete(gid)
33
+ end
34
+
35
+ def tempmedias(article=nil)
36
+ if article
37
+ DB["fs.files"].find("$or"=>[{"metadata.temp"=>true},{"metadata.caller_id"=>article.id.to_s,"metadata.embed"=>true}])
38
+ else
39
+ DB["fs.files"].find("metadata.temp"=>true)
40
+ end
41
+ end
42
+
43
+ def temp_usedids(article,tempids)
44
+ embedids=[]
45
+ tempids.each do |id|
46
+ embedids<<id if article.body.include?(id.to_s)
47
+ end
48
+ docs=DB["fs.files"].find("_id"=>{"$in"=>embedids})
49
+ fns=docs.map{|doc| doc["filename"]}
50
+ usedfiles=DB["fs.files"].find("filename"=>{"$in"=>fns},"$or"=>[{"metadata.temp" => true},{"metadata.caller_id"=>article.id.to_s,"metadata.embed"=>true}])
51
+ usedfiles.map{|f| f["_id"]}
52
+ end
53
+
54
+ def handle_tempmedias(article,action=nil)
55
+ medias = action ? tempmedias(article) : tempmedias
56
+ tempids = medias.map{|t| t["_id"]}
57
+ unless medias.count.zero?
58
+ usedids=temp_usedids(article,tempids)
59
+ unusedids=tempids-usedids
60
+ usedids.each do |usedid|
61
+ DB["fs.files"].update({"_id" => usedid}, {"$unset" => {"metadata.temp" => true },"$set"=>{"metadata.caller_id"=>article.id.to_s,"metadata.embed"=>true}})
62
+ end
63
+ unusedids.each do |unusedid|
64
+ delete(unusedid)
65
+ end
66
+ end
67
+ end
68
+
69
+ def rm_caller_files(caller_id)
70
+ cursor=DB["fs.files"].find("metadata.caller_id" => caller_id.to_s)
71
+ if cursor
72
+ ids=[]
73
+ cursor.to_a.each {|h| ids<<h["_id"]}
74
+ ids.each {|id| FileGrid.delete(id)}
75
+ end
76
+ end
77
+
78
+ end
79
+
80
+ end
data/lib/zgrid.rb ADDED
@@ -0,0 +1,27 @@
1
+ #-*- encoding: utf-8 -*-
2
+ require "class_methods"
3
+ require "sinatra/base"
4
+ class Mygrid < Sinatra::Base
5
+ get "/grid/see/:gid" do
6
+ id=BSON::ObjectId.from_string(params[:gid])
7
+ if FileGrid.exist?(id)
8
+ f=FileGrid.get(id)
9
+ send_data f.read,:type=>f.content_type,:filename=>f.filename,:disposition=>"inline"
10
+ response.headers['Content-Type'] = f.content_type
11
+ else
12
+ render :text=>"文件不存在"
13
+ end
14
+ end
15
+
16
+ get "/grid/remove/:gid" do
17
+ id=BSON::ObjectId.from_string(params[:gid])
18
+ if Zgrid.delete(id)
19
+ respond_to do |format|
20
+ # format.html { redirect_to(promotion_types_url) }
21
+ format.html {redirect_to :back}
22
+ #format.js {render :js => "alert('删除成功');"}
23
+ #format.xml { head :ok }
24
+ end
25
+ end
26
+ end
27
+ end
metadata ADDED
@@ -0,0 +1,56 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: zgrid
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - zxy
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-07-06 00:00:00 Z
14
+ dependencies: []
15
+
16
+ description: an engine for handle mongo gridfs
17
+ email:
18
+ - zxy@qq.com
19
+ executables: []
20
+
21
+ extensions: []
22
+
23
+ extra_rdoc_files: []
24
+
25
+ files:
26
+ - lib/zgrid.rb
27
+ - lib/class_methods.rb
28
+ homepage: ""
29
+ licenses: []
30
+
31
+ post_install_message:
32
+ rdoc_options: []
33
+
34
+ require_paths:
35
+ - lib
36
+ required_ruby_version: !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: "0"
42
+ required_rubygems_version: !ruby/object:Gem::Requirement
43
+ none: false
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: "0"
48
+ requirements: []
49
+
50
+ rubyforge_project: zgrid
51
+ rubygems_version: 1.8.5
52
+ signing_key:
53
+ specification_version: 3
54
+ summary: an engine for handle mongo gridfs
55
+ test_files: []
56
+