omgdav 0.0.1 → 0.0.2

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: dc9720d03885d1269642550cceabf47b5fc9e2e8
4
+ data.tar.gz: fa741e1b07b302acd7e1c77bb0812d44bc543c9c
5
+ SHA512:
6
+ metadata.gz: 8ae05ad0fd3588403d2361405e29ce63c8905564e5a731a534d11243e86b4d08cce328ded767ef529476983dc5fa21bc068cd87fd011ba078ab6443647120d01
7
+ data.tar.gz: e5a3ab615aeb24ea760c4ad7331f9410a4206de3b6d4e2b0941f88990b03109e573f8b56d070c87e1538c6ae7d98f24caa465b7b10a1db6dea302a4917972008
data/GIT-VERSION-GEN CHANGED
@@ -2,7 +2,7 @@
2
2
  CONSTANT = "OMGDAV::VERSION"
3
3
  RVF = "lib/omgdav/version.rb"
4
4
  GVF = "GIT-VERSION-FILE"
5
- DEF_VER = "v0.0.1"
5
+ DEF_VER = "v0.0.2"
6
6
  vn = DEF_VER
7
7
 
8
8
  # First see if there is a version file (included in release tarballs),
data/lib/omgdav/app.rb CHANGED
@@ -67,4 +67,8 @@ class OMGDAV::App # :nodoc:
67
67
  e.backtrace.each { |line| l.error(line) }
68
68
  r(500)
69
69
  end
70
+
71
+ def cache_invalidate(key)
72
+ # noop, see get_cache_*
73
+ end
70
74
  end
data/lib/omgdav/db.rb CHANGED
@@ -26,10 +26,6 @@ module OMGDAV::DB
26
26
  node_id = node.delete(:id)
27
27
  @db[:paths].where(id: node_id).update(node)
28
28
 
29
- unless node[:collection]
30
- @db[:paths].where(id: node[:parent_id]).update(mtime: mtime)
31
- end
32
-
33
29
  node[:id] = node_id
34
30
  end
35
31
 
@@ -51,18 +47,21 @@ module OMGDAV::DB
51
47
  node_update_maybe(node, info)
52
48
  else
53
49
  # brand new node
50
+ new = false
54
51
  node = q.dup
55
52
  node[:created] = node[:mtime] = Time.now.to_i
56
53
  node[:collection] = collection
57
54
  node_merge_info(node, info)
58
55
  begin
59
56
  node[:id] = @db[:paths].insert(node)
57
+ new = true
60
58
  rescue Sequel::DatabaseError
61
59
  # we may conflict on insert if we didn't use a transaction
62
60
  raise if @db.in_transaction?
63
61
  node = @db[:paths][q] or raise
64
62
  raise OMGDAV::TypeConflict if node[:collection] != collection
65
63
  end
64
+ update_parent_mtime(node) if new
66
65
  end
67
66
 
68
67
  node
@@ -78,6 +77,10 @@ module OMGDAV::DB
78
77
  node_ensure(parent_id, filename, info)
79
78
  end
80
79
 
80
+ def update_parent_mtime(node, mtime = nil)
81
+ @db[:paths].where(id: node[:parent_id]).update(mtime: mtime || node[:mtime])
82
+ end
83
+
81
84
  def node_lookup(parent_id, name)
82
85
  @db[:paths][name: name, domain_id: @domain_id, parent_id: parent_id]
83
86
  end
data/lib/omgdav/delete.rb CHANGED
@@ -12,6 +12,7 @@ module OMGDAV::Delete
12
12
  def delete_file(node, cache)
13
13
  node_delete(node)
14
14
  key = node_to_key(node, cache)
15
+ cache_invalidate(key)
15
16
  @mogc.delete(key)
16
17
  rescue MogileFS::Backend::UnknownKeyError
17
18
  warn "key=#{key.inspect} missing on delete from domain=#{@mogc.domain}"
data/lib/omgdav/get.rb CHANGED
@@ -9,14 +9,18 @@ module OMGDAV::Get
9
9
  include OMGDAV::DB
10
10
  include OMGDAV::RackUtil
11
11
 
12
- def call_get(env)
13
- parts = path_split(env)
12
+ def resolve_node(key, parts)
14
13
  basename = parts.pop
15
- parent = col_resolve(parts) or return r(404)
16
- node = node_lookup(parent[:id], basename) or return r(404)
17
- length = node[:length]
14
+ parent = col_resolve(parts) or return
18
15
  parts << basename
19
- @mogc.get_uris(parts.join("/"), @get_path_opts).each do |uri|
16
+ node_lookup(parent[:id], basename)
17
+ end
18
+
19
+ def call_get(env)
20
+ parts = path_split(env)
21
+ key = parts.join("/")
22
+ node = resolve_node(key, parts) or return r(404)
23
+ @mogc.get_uris(key, @get_path_opts).each do |uri|
20
24
  case res = OMGDAV::HttpGet.run(env, uri)
21
25
  when Array
22
26
  headers = res[1]
@@ -0,0 +1,33 @@
1
+ # -*- encoding: binary -*-
2
+ # :enddoc:
3
+ # Copyright (C) 2012, Eric Wong <normalperson@yhbt.net>
4
+ # License: AGPLv3 or later (https://www.gnu.org/licenses/agpl-3.0.txt)
5
+
6
+ # Allows optional caching of the most-recently-read URL for GET requests
7
+ # This can helps with fusedav (and possibly other things) which fetch
8
+ # files in many small chunks using partial requests.
9
+ module OMGDAV::GetCache1
10
+ def self.extended(owner)
11
+ owner.instance_eval do
12
+ @last_lock = Mutex.new
13
+ @last_key = nil
14
+ @last_node = nil
15
+ end
16
+ end
17
+
18
+ # see omgdav/get
19
+ def resolve_node(key, parts)
20
+ @last_lock.synchronize do
21
+ return @last_node if @last_key == key
22
+ end
23
+ node = super
24
+ @last_lock.synchronize do
25
+ @last_key = key
26
+ @last_node = node
27
+ end
28
+ end
29
+
30
+ def cache_invalidate(key)
31
+ @last_key = nil # no need to lock for assignment
32
+ end
33
+ end
@@ -0,0 +1,43 @@
1
+ # -*- encoding: binary -*-
2
+ # :enddoc:
3
+ # Copyright (C) 2012, Eric Wong <normalperson@yhbt.net>
4
+ # License: AGPLv3 or later (https://www.gnu.org/licenses/agpl-3.0.txt)
5
+
6
+ # Allows optional caching of recent URLs for GET requests
7
+ # This can helps with fusedav (and possibly other things) which fetch
8
+ # files in many small chunks using partial requests.
9
+ require 'dalli'
10
+ module OMGDAV::GetCacheDalli
11
+ def self.extended(owner)
12
+ owner.instance_eval do
13
+ @dalli_gen = Time.now.to_i.to_s
14
+ @dalli = Dalli::Client.new("localhost:11211")
15
+ end
16
+ end
17
+
18
+ attr_accessor :dalli
19
+
20
+ # see omgdav/get
21
+ def resolve_node(key, parts)
22
+ ckey = "#@dalli_gen#{key}"
23
+ node = @dalli.get(ckey) and return node
24
+ node = super
25
+ @dalli.set(ckey, node)
26
+ node
27
+ rescue Dalli::RingError, Dalli::NetworkError
28
+ node || super
29
+ end
30
+
31
+ def cache_invalidate(key)
32
+ if key
33
+ begin
34
+ @dalli.delete("#@dalli_gen#{key}")
35
+ rescue Dalli::RingError, Dalli::NetworkError
36
+ @dalli_gen.succ!
37
+ end
38
+ else
39
+ # nuke everything by changing prefix
40
+ @dalli_gen.succ!
41
+ end
42
+ end
43
+ end
@@ -115,7 +115,7 @@ class OMGDAV::HttpGet < Kcar::Response # :nodoc:
115
115
  end
116
116
 
117
117
  case status.to_i
118
- when 206, 200
118
+ when 206, 200, 416
119
119
  res
120
120
  else
121
121
  OMGDAV::BadResponse.new(status.to_s)
data/lib/omgdav/move.rb CHANGED
@@ -28,6 +28,12 @@ module OMGDAV::Move
28
28
  @mogc.rename(src[:key], dst_key)
29
29
  end
30
30
  @db[:paths].where(id: src[:node][:id]).update(dst_node)
31
+ if dst_key
32
+ cache_invalidate(src[:key])
33
+ cache_invalidate(dst_key)
34
+ else
35
+ cache_invalidate(nil) # just kill everything
36
+ end
31
37
  r(dst[:node] ? 204 : 201)
32
38
  end
33
39
 
@@ -80,7 +80,8 @@ module OMGDAV::Proppatch
80
80
  end
81
81
 
82
82
  def call_proppatch(env)
83
- node = node_resolve(path_split(env)) or return r(404)
83
+ parts = path_split(env)
84
+ node = node_resolve(parts) or return r(404)
84
85
  input = OMGDAV::InputWrapper.new(env)
85
86
  xml = Nokogiri::XML(input)
86
87
  xmlns = xml.root.namespace
@@ -98,6 +99,7 @@ module OMGDAV::Proppatch
98
99
  end
99
100
  end
100
101
  @db[:paths].where(id: node.delete(:id)).update(node)
102
+ cache_invalidate(parts.join("/"))
101
103
  r(200)
102
104
  rescue Nokogiri::SyntaxError => e
103
105
  r(400, "syntax error #{e.message}")
data/lib/omgdav/put.rb CHANGED
@@ -99,6 +99,7 @@ module OMGDAV::Put
99
99
 
100
100
  if node
101
101
  node_update(node, info)
102
+ cache_invalidate(key)
102
103
  r(204)
103
104
  else
104
105
  file_ensure(parent[:id], basename, info)
data/omgdav.gemspec CHANGED
@@ -26,10 +26,10 @@ Gem::Specification.new do |s|
26
26
  s.add_dependency('fast_xs', ['~> 0.8'])
27
27
  s.add_dependency('mogilefs-client', ['~> 3.4'])
28
28
  s.add_dependency('nokogiri', ['~> 1.5'])
29
- s.add_dependency('sequel', ['~> 3.41', '>= 3.41.0'])
30
- s.required_ruby_version = '~> 1.9'
29
+ s.add_dependency('sequel', ['~> 4.0'])
30
+ s.required_ruby_version = '>= 1.9'
31
31
  s.add_development_dependency('unicorn', '~> 4.4.0')
32
- s.add_development_dependency('wrongdoc', '~> 1.6.1')
32
+ s.add_development_dependency('wrongdoc', '~> 1.8')
33
33
 
34
34
  s.licenses = %w(AGPLv3+)
35
35
  end
data/test/test_litmus.rb CHANGED
@@ -28,6 +28,7 @@ EOF
28
28
  $stderr.reopen(@uni_err.path, "a")
29
29
  uni = Unicorn::HttpServer.new(@app, listeners: ["#@test_host:#{port}"])
30
30
  uni.start.join
31
+ exit! 0
31
32
  end
32
33
  uni_sock.close
33
34
  end
@@ -0,0 +1,52 @@
1
+ # -*- encoding: binary -*-
2
+ # Copyright (C) 2012, Eric Wong <normalperson@yhbt.net>
3
+ # License: AGPLv3 or later (https://www.gnu.org/licenses/agpl-3.0.txt)
4
+ require './test/integration'
5
+ class TestMtime < MiniTest::Unit::TestCase
6
+ include TestMogileFSIntegration
7
+
8
+ def test_mtime
9
+ assert_equal 201, req("MKCOL", "/a")[0].to_i
10
+ assert_equal 201, req("MKCOL", "/a/b")[0].to_i
11
+ now = Time.now
12
+ before = @db[:paths].where(name: "a").to_a
13
+ assert_equal before.size, 1
14
+ before_mtime = Time.at(before[0][:mtime])
15
+ assert_in_delta before_mtime, now, 2
16
+
17
+ # creating a new directory sets mtime in parent (only), not grandparent
18
+ sleep 1
19
+ assert_equal 201, req("MKCOL", "/a/b/c")[0].to_i
20
+ after = @db[:paths].where(name: "a").to_a
21
+ assert_equal after.size, 1
22
+ after_mtime = Time.at(after[0][:mtime])
23
+ assert_equal before_mtime, after_mtime
24
+
25
+ # creating a new file sets mtime in parent (only), not grandparent
26
+ sleep 1
27
+ resp = @req.put("/a/b/f", input: StringIO.new("HELLO"))
28
+ assert_equal 201, resp.status.to_i
29
+ after = @db[:paths].where(name: "a").to_a
30
+ assert_equal after.size, 1
31
+ after_mtime = Time.at(after[0][:mtime])
32
+ assert_equal before_mtime, after_mtime
33
+
34
+ b = @db[:paths].where(name: "b").to_a
35
+ f = @db[:paths].where(name: "f").to_a
36
+ assert_equal b.size, 1
37
+ assert_equal f.size, 1
38
+ assert_equal b[0][:mtime], f[0][:mtime]
39
+
40
+ # updating existing file should not change mtime
41
+ sleep 1
42
+ resp = @req.put("/a/b/f", input: StringIO.new("HELLO"))
43
+ assert_equal 204, resp.status.to_i
44
+ f = @db[:paths].where(name: "f").to_a
45
+ assert_equal f.size, 1
46
+ assert_operator f[0][:mtime], :>, b[0][:mtime]
47
+
48
+ bb = @db[:paths].where(name: "b").to_a
49
+ assert_equal bb.size, 1
50
+ assert_equal bb[0][:mtime], b[0][:mtime]
51
+ end
52
+ end
metadata CHANGED
@@ -1,239 +1,159 @@
1
1
  --- !ruby/object:Gem::Specification
2
- name: !binary |-
3
- b21nZGF2
2
+ name: omgdav
4
3
  version: !ruby/object:Gem::Version
5
- version: 0.0.1
6
- prerelease:
4
+ version: 0.0.2
7
5
  platform: ruby
8
6
  authors:
9
- - !binary |-
10
- T01HREFWIGhhY2tlcnM=
7
+ - OMGDAV hackers
11
8
  autorequire:
12
9
  bindir: bin
13
10
  cert_chain: []
14
- date: 2012-11-15 00:00:00.000000000 Z
11
+ date: 2014-05-27 00:00:00.000000000 Z
15
12
  dependencies:
16
13
  - !ruby/object:Gem::Dependency
17
- name: !binary |-
18
- cmFjaw==
14
+ name: rack
19
15
  requirement: !ruby/object:Gem::Requirement
20
- none: false
21
16
  requirements:
22
- - - !binary |-
23
- fj4=
17
+ - - "~>"
24
18
  - !ruby/object:Gem::Version
25
- version: !binary |-
26
- MS40
19
+ version: '1.4'
27
20
  type: :runtime
28
21
  prerelease: false
29
22
  version_requirements: !ruby/object:Gem::Requirement
30
- none: false
31
23
  requirements:
32
- - - !binary |-
33
- fj4=
24
+ - - "~>"
34
25
  - !ruby/object:Gem::Version
35
- version: !binary |-
36
- MS40
26
+ version: '1.4'
37
27
  - !ruby/object:Gem::Dependency
38
- name: !binary |-
39
- a2dpbw==
28
+ name: kgio
40
29
  requirement: !ruby/object:Gem::Requirement
41
- none: false
42
30
  requirements:
43
- - - !binary |-
44
- fj4=
31
+ - - "~>"
45
32
  - !ruby/object:Gem::Version
46
- version: !binary |-
47
- Mi43
33
+ version: '2.7'
48
34
  type: :runtime
49
35
  prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
- none: false
52
37
  requirements:
53
- - - !binary |-
54
- fj4=
38
+ - - "~>"
55
39
  - !ruby/object:Gem::Version
56
- version: !binary |-
57
- Mi43
40
+ version: '2.7'
58
41
  - !ruby/object:Gem::Dependency
59
- name: !binary |-
60
- a2Nhcg==
42
+ name: kcar
61
43
  requirement: !ruby/object:Gem::Requirement
62
- none: false
63
44
  requirements:
64
- - - !binary |-
65
- fj4=
45
+ - - "~>"
66
46
  - !ruby/object:Gem::Version
67
- version: !binary |-
68
- MC40
47
+ version: '0.4'
69
48
  type: :runtime
70
49
  prerelease: false
71
50
  version_requirements: !ruby/object:Gem::Requirement
72
- none: false
73
51
  requirements:
74
- - - !binary |-
75
- fj4=
52
+ - - "~>"
76
53
  - !ruby/object:Gem::Version
77
- version: !binary |-
78
- MC40
54
+ version: '0.4'
79
55
  - !ruby/object:Gem::Dependency
80
- name: !binary |-
81
- ZmFzdF94cw==
56
+ name: fast_xs
82
57
  requirement: !ruby/object:Gem::Requirement
83
- none: false
84
58
  requirements:
85
- - - !binary |-
86
- fj4=
59
+ - - "~>"
87
60
  - !ruby/object:Gem::Version
88
- version: !binary |-
89
- MC44
61
+ version: '0.8'
90
62
  type: :runtime
91
63
  prerelease: false
92
64
  version_requirements: !ruby/object:Gem::Requirement
93
- none: false
94
65
  requirements:
95
- - - !binary |-
96
- fj4=
66
+ - - "~>"
97
67
  - !ruby/object:Gem::Version
98
- version: !binary |-
99
- MC44
68
+ version: '0.8'
100
69
  - !ruby/object:Gem::Dependency
101
- name: !binary |-
102
- bW9naWxlZnMtY2xpZW50
70
+ name: mogilefs-client
103
71
  requirement: !ruby/object:Gem::Requirement
104
- none: false
105
72
  requirements:
106
- - - !binary |-
107
- fj4=
73
+ - - "~>"
108
74
  - !ruby/object:Gem::Version
109
- version: !binary |-
110
- My40
75
+ version: '3.4'
111
76
  type: :runtime
112
77
  prerelease: false
113
78
  version_requirements: !ruby/object:Gem::Requirement
114
- none: false
115
79
  requirements:
116
- - - !binary |-
117
- fj4=
80
+ - - "~>"
118
81
  - !ruby/object:Gem::Version
119
- version: !binary |-
120
- My40
82
+ version: '3.4'
121
83
  - !ruby/object:Gem::Dependency
122
- name: !binary |-
123
- bm9rb2dpcmk=
84
+ name: nokogiri
124
85
  requirement: !ruby/object:Gem::Requirement
125
- none: false
126
86
  requirements:
127
- - - !binary |-
128
- fj4=
87
+ - - "~>"
129
88
  - !ruby/object:Gem::Version
130
- version: !binary |-
131
- MS41
89
+ version: '1.5'
132
90
  type: :runtime
133
91
  prerelease: false
134
92
  version_requirements: !ruby/object:Gem::Requirement
135
- none: false
136
93
  requirements:
137
- - - !binary |-
138
- fj4=
94
+ - - "~>"
139
95
  - !ruby/object:Gem::Version
140
- version: !binary |-
141
- MS41
96
+ version: '1.5'
142
97
  - !ruby/object:Gem::Dependency
143
- name: !binary |-
144
- c2VxdWVs
98
+ name: sequel
145
99
  requirement: !ruby/object:Gem::Requirement
146
- none: false
147
100
  requirements:
148
- - - !binary |-
149
- fj4=
101
+ - - "~>"
150
102
  - !ruby/object:Gem::Version
151
- version: !binary |-
152
- My40MQ==
153
- - - !binary |-
154
- Pj0=
155
- - !ruby/object:Gem::Version
156
- version: !binary |-
157
- My40MS4w
103
+ version: '4.0'
158
104
  type: :runtime
159
105
  prerelease: false
160
106
  version_requirements: !ruby/object:Gem::Requirement
161
- none: false
162
107
  requirements:
163
- - - !binary |-
164
- fj4=
165
- - !ruby/object:Gem::Version
166
- version: !binary |-
167
- My40MQ==
168
- - - !binary |-
169
- Pj0=
108
+ - - "~>"
170
109
  - !ruby/object:Gem::Version
171
- version: !binary |-
172
- My40MS4w
110
+ version: '4.0'
173
111
  - !ruby/object:Gem::Dependency
174
- name: !binary |-
175
- dW5pY29ybg==
112
+ name: unicorn
176
113
  requirement: !ruby/object:Gem::Requirement
177
- none: false
178
114
  requirements:
179
- - - !binary |-
180
- fj4=
115
+ - - "~>"
181
116
  - !ruby/object:Gem::Version
182
- version: !binary |-
183
- NC40LjA=
117
+ version: 4.4.0
184
118
  type: :development
185
119
  prerelease: false
186
120
  version_requirements: !ruby/object:Gem::Requirement
187
- none: false
188
121
  requirements:
189
- - - !binary |-
190
- fj4=
122
+ - - "~>"
191
123
  - !ruby/object:Gem::Version
192
- version: !binary |-
193
- NC40LjA=
124
+ version: 4.4.0
194
125
  - !ruby/object:Gem::Dependency
195
- name: !binary |-
196
- d3Jvbmdkb2M=
126
+ name: wrongdoc
197
127
  requirement: !ruby/object:Gem::Requirement
198
- none: false
199
128
  requirements:
200
- - - !binary |-
201
- fj4=
129
+ - - "~>"
202
130
  - !ruby/object:Gem::Version
203
- version: !binary |-
204
- MS42LjE=
131
+ version: '1.8'
205
132
  type: :development
206
133
  prerelease: false
207
134
  version_requirements: !ruby/object:Gem::Requirement
208
- none: false
209
135
  requirements:
210
- - - !binary |-
211
- fj4=
136
+ - - "~>"
212
137
  - !ruby/object:Gem::Version
213
- version: !binary |-
214
- MS42LjE=
215
- description: ! 'omgdav exposes an existing MogileFS domain over WebDAV. There is
216
-
138
+ version: '1.8'
139
+ description: |-
140
+ omgdav exposes an existing MogileFS domain over WebDAV. There is
217
141
  absolutely no commitment or modification needed to your existing
218
-
219
- MogileFS installation to try omgdav in read-only mode.'
220
- email: !binary |-
221
- bm9ybWFscGVyc29uQHloYnQubmV0
142
+ MogileFS installation to try omgdav in read-only mode.
143
+ email: normalperson@yhbt.net
222
144
  executables:
223
- - !binary |-
224
- b21nZGF2LXNldHVw
225
- - !binary |-
226
- b21nZGF2LXN5bmM=
145
+ - omgdav-setup
146
+ - omgdav-sync
227
147
  extensions: []
228
148
  extra_rdoc_files:
229
149
  - ChangeLog
230
150
  - NEWS
231
151
  - README
232
152
  files:
233
- - .document
234
- - .gitignore
235
- - .manifest
236
- - .wrongdoc.yml
153
+ - ".document"
154
+ - ".gitignore"
155
+ - ".manifest"
156
+ - ".wrongdoc.yml"
237
157
  - COPYING
238
158
  - ChangeLog
239
159
  - GIT-VERSION-FILE
@@ -251,6 +171,8 @@ files:
251
171
  - lib/omgdav/db.rb
252
172
  - lib/omgdav/delete.rb
253
173
  - lib/omgdav/get.rb
174
+ - lib/omgdav/get_cache1.rb
175
+ - lib/omgdav/get_cache_dalli.rb
254
176
  - lib/omgdav/http_get.rb
255
177
  - lib/omgdav/input_wrapper.rb
256
178
  - lib/omgdav/migrations/0001_initial.rb
@@ -275,6 +197,7 @@ files:
275
197
  - test/test_delete.rb
276
198
  - test/test_litmus.rb
277
199
  - test/test_move.rb
200
+ - test/test_mtime.rb
278
201
  - test/test_omgdav_app.rb
279
202
  - test/test_propfind.rb
280
203
  - test/test_proppatch.rb
@@ -285,58 +208,43 @@ files:
285
208
  - test/test_worm.rb
286
209
  homepage: http://bogomips.org/omgdav/README
287
210
  licenses:
288
- - !binary |-
289
- QUdQTHYzKw==
211
+ - AGPLv3+
212
+ metadata: {}
290
213
  post_install_message:
291
214
  rdoc_options:
292
- - -t
215
+ - "-t"
293
216
  - omgdav - Rack app for bridging WebDAV and MogileFS
294
- - -W
217
+ - "-W"
295
218
  - http://bogomips.org/omgdav.git/tree/%s
296
219
  require_paths:
297
220
  - lib
298
221
  required_ruby_version: !ruby/object:Gem::Requirement
299
- none: false
300
222
  requirements:
301
- - - !binary |-
302
- fj4=
223
+ - - ">="
303
224
  - !ruby/object:Gem::Version
304
- version: !binary |-
305
- MS45
225
+ version: '1.9'
306
226
  required_rubygems_version: !ruby/object:Gem::Requirement
307
- none: false
308
227
  requirements:
309
- - - ! '>='
228
+ - - ">="
310
229
  - !ruby/object:Gem::Version
311
230
  version: '0'
312
231
  requirements: []
313
232
  rubyforge_project:
314
- rubygems_version: 1.8.23
233
+ rubygems_version: 2.2.2
315
234
  signing_key:
316
- specification_version: 3
235
+ specification_version: 4
317
236
  summary: Rack app for bridging WebDAV and MogileFS
318
237
  test_files:
319
- - !binary |-
320
- dGVzdC90ZXN0X2xpdG11cy5yYg==
321
- - !binary |-
322
- dGVzdC90ZXN0X29tZ2Rhdl9hcHAucmI=
323
- - !binary |-
324
- dGVzdC90ZXN0X3N5bmMucmI=
325
- - !binary |-
326
- dGVzdC90ZXN0X21vdmUucmI=
327
- - !binary |-
328
- dGVzdC90ZXN0X3dvcm0ucmI=
329
- - !binary |-
330
- dGVzdC90ZXN0X3B1dC5yYg==
331
- - !binary |-
332
- dGVzdC90ZXN0X3Byb3BmaW5kLnJi
333
- - !binary |-
334
- dGVzdC90ZXN0X3VybG1hcC5yYg==
335
- - !binary |-
336
- dGVzdC90ZXN0X2RlbGV0ZS5yYg==
337
- - !binary |-
338
- dGVzdC90ZXN0X3JlYWRvbmx5LnJi
339
- - !binary |-
340
- dGVzdC90ZXN0X3Byb3BwYXRjaC5yYg==
341
- - !binary |-
342
- dGVzdC90ZXN0X2NvcHkucmI=
238
+ - test/test_copy.rb
239
+ - test/test_readonly.rb
240
+ - test/test_litmus.rb
241
+ - test/test_put.rb
242
+ - test/test_propfind.rb
243
+ - test/test_move.rb
244
+ - test/test_mtime.rb
245
+ - test/test_worm.rb
246
+ - test/test_sync.rb
247
+ - test/test_proppatch.rb
248
+ - test/test_delete.rb
249
+ - test/test_urlmap.rb
250
+ - test/test_omgdav_app.rb