mongomapper_ext 0.4.0 → 0.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.
- data/VERSION +1 -1
- data/lib/mongomapper_ext/file.rb +2 -1
- data/lib/mongomapper_ext/file_server.rb +69 -0
- data/lib/mongomapper_ext.rb +1 -0
- data/mongomapper_ext.gemspec +5 -4
- metadata +20 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.5.0
|
data/lib/mongomapper_ext/file.rb
CHANGED
@@ -42,7 +42,7 @@ module MongoMapperExt
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def get
|
45
|
-
gridfs.get(grid_filename)
|
45
|
+
@io ||= gridfs.get(grid_filename)
|
46
46
|
end
|
47
47
|
|
48
48
|
def grid_filename
|
@@ -62,6 +62,7 @@ module MongoMapperExt
|
|
62
62
|
end
|
63
63
|
|
64
64
|
def delete
|
65
|
+
@io = nil
|
65
66
|
gridfs.delete(grid_filename)
|
66
67
|
end
|
67
68
|
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'time'
|
2
|
+
require 'rack/utils'
|
3
|
+
|
4
|
+
module MongoMapperExt
|
5
|
+
class FileServer
|
6
|
+
def initialize(app)
|
7
|
+
@app = app
|
8
|
+
end
|
9
|
+
|
10
|
+
def call(env)
|
11
|
+
if env["PATH_INFO"] =~ /^\/_files\/([^\/?]+)/
|
12
|
+
@model = $1.classify.constantize rescue nil
|
13
|
+
return forbidden if @model.nil?
|
14
|
+
|
15
|
+
dup._call(env)
|
16
|
+
else
|
17
|
+
@app.call(env)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def _call(env)
|
22
|
+
request = Rack::Request.new(env)
|
23
|
+
params = request.GET
|
24
|
+
|
25
|
+
@file = @model.find_file_from_params(params, request)
|
26
|
+
return not_found if @file.nil?
|
27
|
+
|
28
|
+
if @file.present?
|
29
|
+
serving
|
30
|
+
else
|
31
|
+
not_found
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def forbidden
|
36
|
+
body = "Forbidden\n"
|
37
|
+
[403, {"Content-Type" => "text/plain",
|
38
|
+
"Content-Length" => body.size.to_s,
|
39
|
+
"X-Cascade" => "pass"},
|
40
|
+
[body]]
|
41
|
+
end
|
42
|
+
|
43
|
+
def serving
|
44
|
+
body = self
|
45
|
+
[200, {
|
46
|
+
"Last-Modified" => Time.now.httpdate,
|
47
|
+
"Content-Type" => @file.content_type,
|
48
|
+
"Content-Length" => @file.size.to_s
|
49
|
+
}, body]
|
50
|
+
end
|
51
|
+
|
52
|
+
def not_found
|
53
|
+
body = "File not found: #{@path_info}\n"
|
54
|
+
[404, {"Content-Type" => "text/plain",
|
55
|
+
"Content-Length" => body.size.to_s,
|
56
|
+
"X-Cascade" => "pass"},
|
57
|
+
[body]]
|
58
|
+
end
|
59
|
+
|
60
|
+
def each
|
61
|
+
f = @file.get
|
62
|
+
while part = f.read(8192)
|
63
|
+
yield part
|
64
|
+
break if part.empty?
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
data/lib/mongomapper_ext.rb
CHANGED
data/mongomapper_ext.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{mongomapper_ext}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.5.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["David A. Cuadrado"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-09-28}
|
13
13
|
s.description = %q{MongoMapper extensions}
|
14
14
|
s.email = %q{krawek@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -35,6 +35,7 @@ Gem::Specification.new do |s|
|
|
35
35
|
"lib/mongomapper_ext.rb",
|
36
36
|
"lib/mongomapper_ext/file.rb",
|
37
37
|
"lib/mongomapper_ext/file_list.rb",
|
38
|
+
"lib/mongomapper_ext/file_server.rb",
|
38
39
|
"lib/mongomapper_ext/filter.rb",
|
39
40
|
"lib/mongomapper_ext/js/filter.js",
|
40
41
|
"lib/mongomapper_ext/js/find_tags.js",
|
@@ -63,7 +64,7 @@ Gem::Specification.new do |s|
|
|
63
64
|
s.homepage = %q{http://github.com/dcu/mongomapper_ext}
|
64
65
|
s.rdoc_options = ["--charset=UTF-8"]
|
65
66
|
s.require_paths = ["lib"]
|
66
|
-
s.rubygems_version = %q{1.3.
|
67
|
+
s.rubygems_version = %q{1.3.7}
|
67
68
|
s.summary = %q{MongoMapper extensions}
|
68
69
|
s.test_files = [
|
69
70
|
"test/test_slugizer.rb",
|
@@ -91,7 +92,7 @@ Gem::Specification.new do |s|
|
|
91
92
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
92
93
|
s.specification_version = 3
|
93
94
|
|
94
|
-
if Gem::Version.new(Gem::
|
95
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
95
96
|
s.add_runtime_dependency(%q<mongo_mapper>, ["~> 0.8"])
|
96
97
|
s.add_runtime_dependency(%q<uuidtools>, [">= 2.0.0"])
|
97
98
|
s.add_development_dependency(%q<shoulda>, [">= 2.10.2"])
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongomapper_ext
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 11
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 0
|
7
|
-
-
|
8
|
+
- 5
|
8
9
|
- 0
|
9
|
-
version: 0.
|
10
|
+
version: 0.5.0
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- David A. Cuadrado
|
@@ -14,16 +15,18 @@ autorequire:
|
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date: 2010-
|
18
|
+
date: 2010-09-28 00:00:00 -05:00
|
18
19
|
default_executable:
|
19
20
|
dependencies:
|
20
21
|
- !ruby/object:Gem::Dependency
|
21
22
|
name: mongo_mapper
|
22
23
|
prerelease: false
|
23
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
24
26
|
requirements:
|
25
27
|
- - ~>
|
26
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 27
|
27
30
|
segments:
|
28
31
|
- 0
|
29
32
|
- 8
|
@@ -34,9 +37,11 @@ dependencies:
|
|
34
37
|
name: uuidtools
|
35
38
|
prerelease: false
|
36
39
|
requirement: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
37
41
|
requirements:
|
38
42
|
- - ">="
|
39
43
|
- !ruby/object:Gem::Version
|
44
|
+
hash: 15
|
40
45
|
segments:
|
41
46
|
- 2
|
42
47
|
- 0
|
@@ -48,9 +53,11 @@ dependencies:
|
|
48
53
|
name: shoulda
|
49
54
|
prerelease: false
|
50
55
|
requirement: &id003 !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
51
57
|
requirements:
|
52
58
|
- - ">="
|
53
59
|
- !ruby/object:Gem::Version
|
60
|
+
hash: 35
|
54
61
|
segments:
|
55
62
|
- 2
|
56
63
|
- 10
|
@@ -62,9 +69,11 @@ dependencies:
|
|
62
69
|
name: jnunemaker-matchy
|
63
70
|
prerelease: false
|
64
71
|
requirement: &id004 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
65
73
|
requirements:
|
66
74
|
- - "="
|
67
75
|
- !ruby/object:Gem::Version
|
76
|
+
hash: 15
|
68
77
|
segments:
|
69
78
|
- 0
|
70
79
|
- 4
|
@@ -76,9 +85,11 @@ dependencies:
|
|
76
85
|
name: mocha
|
77
86
|
prerelease: false
|
78
87
|
requirement: &id005 !ruby/object:Gem::Requirement
|
88
|
+
none: false
|
79
89
|
requirements:
|
80
90
|
- - ">="
|
81
91
|
- !ruby/object:Gem::Version
|
92
|
+
hash: 51
|
82
93
|
segments:
|
83
94
|
- 0
|
84
95
|
- 9
|
@@ -114,6 +125,7 @@ files:
|
|
114
125
|
- lib/mongomapper_ext.rb
|
115
126
|
- lib/mongomapper_ext/file.rb
|
116
127
|
- lib/mongomapper_ext/file_list.rb
|
128
|
+
- lib/mongomapper_ext/file_server.rb
|
117
129
|
- lib/mongomapper_ext/filter.rb
|
118
130
|
- lib/mongomapper_ext/js/filter.js
|
119
131
|
- lib/mongomapper_ext/js/find_tags.js
|
@@ -149,23 +161,27 @@ rdoc_options:
|
|
149
161
|
require_paths:
|
150
162
|
- lib
|
151
163
|
required_ruby_version: !ruby/object:Gem::Requirement
|
164
|
+
none: false
|
152
165
|
requirements:
|
153
166
|
- - ">="
|
154
167
|
- !ruby/object:Gem::Version
|
168
|
+
hash: 3
|
155
169
|
segments:
|
156
170
|
- 0
|
157
171
|
version: "0"
|
158
172
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
173
|
+
none: false
|
159
174
|
requirements:
|
160
175
|
- - ">="
|
161
176
|
- !ruby/object:Gem::Version
|
177
|
+
hash: 3
|
162
178
|
segments:
|
163
179
|
- 0
|
164
180
|
version: "0"
|
165
181
|
requirements: []
|
166
182
|
|
167
183
|
rubyforge_project:
|
168
|
-
rubygems_version: 1.3.
|
184
|
+
rubygems_version: 1.3.7
|
169
185
|
signing_key:
|
170
186
|
specification_version: 3
|
171
187
|
summary: MongoMapper extensions
|