omgdav 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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