zgrid 0.0.1

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.
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
+