regurgitator 0.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +5 -0
- data/.gitignore +14 -0
- data/.manifest +46 -0
- data/.wrongdoc.yml +4 -0
- data/COPYING +674 -0
- data/ChangeLog +499 -0
- data/GIT-VERSION-FILE +1 -0
- data/GIT-VERSION-GEN +40 -0
- data/GNUmakefile +8 -0
- data/LATEST +1 -0
- data/LICENSE +18 -0
- data/NEWS +1 -0
- data/README +49 -0
- data/examples/domain_host.ru +6 -0
- data/examples/domain_path.ru +5 -0
- data/examples/one_domain.ru +6 -0
- data/lib/regurgitator.rb +43 -0
- data/lib/regurgitator/device.rb +79 -0
- data/lib/regurgitator/domain.rb +37 -0
- data/lib/regurgitator/domain_host.rb +43 -0
- data/lib/regurgitator/domain_path.rb +33 -0
- data/lib/regurgitator/endpoint.rb +97 -0
- data/lib/regurgitator/file_info.rb +53 -0
- data/lib/regurgitator/file_request.rb +48 -0
- data/lib/regurgitator/local.rb +89 -0
- data/lib/regurgitator/local_file.rb +61 -0
- data/lib/regurgitator/one_domain.rb +33 -0
- data/lib/regurgitator/server_settings.rb +55 -0
- data/pkg.mk +175 -0
- data/regurgitator.gemspec +30 -0
- data/setup.rb +1586 -0
- data/t/.gitignore +7 -0
- data/t/GNUmakefile +65 -0
- data/t/bin/unused_listen +40 -0
- data/t/domain_host.ru +8 -0
- data/t/domain_path.ru +5 -0
- data/t/file.ru +2 -0
- data/t/fixtures.sql +59 -0
- data/t/my-tap-lib.sh +200 -0
- data/t/one_domain.ru +8 -0
- data/t/t0001-domain_path.sh +67 -0
- data/t/t0002-domain_host.sh +71 -0
- data/t/t0003-one_domain.sh +52 -0
- data/t/test-lib.sh +119 -0
- data/test/test_local.rb +78 -0
- data/test/test_server_settings.rb +37 -0
- metadata +191 -0
@@ -0,0 +1,71 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
. ./test-lib.sh
|
3
|
+
t_plan 7 "DomainHost tests"
|
4
|
+
|
5
|
+
t_begin "setup" && {
|
6
|
+
setup domain_host.ru
|
7
|
+
}
|
8
|
+
|
9
|
+
t_begin "retrieve empty file" && {
|
10
|
+
test 0 -eq $(curl -sSvf 2> $curl_err \
|
11
|
+
-H Host:d.example.com \
|
12
|
+
http://$listen/blah | wc -c)
|
13
|
+
grep 'E[tT]ag: ' $curl_err && die "ETag not expected"
|
14
|
+
grep 'Last-Modified: ' $curl_err && die "Last-Modified not expected"
|
15
|
+
}
|
16
|
+
|
17
|
+
t_begin "retrieve missing file" && {
|
18
|
+
sqlite3 $db <<EOF
|
19
|
+
UPDATE file SET length = $random_blob_size;
|
20
|
+
EOF
|
21
|
+
ok=$(curl -sSvf \
|
22
|
+
-H Host:d.example.com \
|
23
|
+
2> $curl_err http://$listen/blah || echo ok)
|
24
|
+
test ok = "$ok"
|
25
|
+
grep '\<404\>' $curl_err
|
26
|
+
}
|
27
|
+
|
28
|
+
t_begin "retrieve existing file" && {
|
29
|
+
dir=$TMPDIR/dev1/0/000/000
|
30
|
+
mkdir -p $dir
|
31
|
+
ln random_blob $dir/0000000001.fid
|
32
|
+
cksum="$(curl -sSvf 2> $curl_err \
|
33
|
+
-H Host:d.example.com http://$listen/blah | cksum)"
|
34
|
+
test "$cksum" = "$random_blob_cksum"
|
35
|
+
dbgcat curl_err
|
36
|
+
grep 'E[tT]ag: "1"' $curl_err
|
37
|
+
}
|
38
|
+
|
39
|
+
t_begin "reproxy existing file" && {
|
40
|
+
curl -sSvf -H 'X-Reproxy-Path: /reproxy' 2> $curl_err \
|
41
|
+
-H Host:d.example.com \
|
42
|
+
http://$listen/blah >/dev/null
|
43
|
+
dbgcat curl_err
|
44
|
+
uri=http://$rack_file_listen/dev1/0/000/000/0000000001.fid
|
45
|
+
grep '^< X-Accel-Redirect: /reproxy' $curl_err
|
46
|
+
grep '^< X-Reproxy-Content-Type: application/octet-stream' $curl_err
|
47
|
+
grep "^< Location: $uri" $curl_err
|
48
|
+
grep '^< X-Reproxy-Last-Modified: ' $curl_err
|
49
|
+
grep '^< Content-Length: 0' $curl_err
|
50
|
+
grep '^< Etag: "1"' $curl_err
|
51
|
+
}
|
52
|
+
|
53
|
+
t_begin "using CNAME host name" && {
|
54
|
+
sqlite3 $db <<EOF
|
55
|
+
UPDATE domain SET namespace = 'i-have-a-cname.example.org'
|
56
|
+
WHERE namespace = 'd';
|
57
|
+
EOF
|
58
|
+
cksum="$(curl -sSvf 2> $curl_err \
|
59
|
+
-H Host:i-have-a-cname.example.org \
|
60
|
+
http://$listen/blah | cksum)"
|
61
|
+
test "$cksum" = "$random_blob_cksum"
|
62
|
+
dbgcat curl_err
|
63
|
+
grep 'E[tT]ag: "1"' $curl_err
|
64
|
+
}
|
65
|
+
|
66
|
+
t_begin "kill servers" && {
|
67
|
+
kill -INT $rack_file_pid
|
68
|
+
kill -INT $rack_server_pid
|
69
|
+
}
|
70
|
+
|
71
|
+
t_done
|
@@ -0,0 +1,52 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
. ./test-lib.sh
|
3
|
+
t_plan 6 "OneDomain tests"
|
4
|
+
|
5
|
+
t_begin "setup" && {
|
6
|
+
setup one_domain.ru
|
7
|
+
}
|
8
|
+
|
9
|
+
t_begin "retrieve empty file" && {
|
10
|
+
test 0 -eq $(curl -sSvf 2> $curl_err http://$listen/blah | wc -c)
|
11
|
+
grep 'E[tT]ag: ' $curl_err && die "ETag not expected"
|
12
|
+
grep 'Last-Modified: ' $curl_err && die "Last-Modified not expected"
|
13
|
+
}
|
14
|
+
|
15
|
+
t_begin "retrieve missing file" && {
|
16
|
+
sqlite3 $db <<EOF
|
17
|
+
UPDATE file SET length = $random_blob_size;
|
18
|
+
EOF
|
19
|
+
ok=$(curl -sSvf 2> $curl_err http://$listen/blah || echo ok)
|
20
|
+
test ok = "$ok"
|
21
|
+
grep '\<404\>' $curl_err
|
22
|
+
}
|
23
|
+
|
24
|
+
t_begin "retrieve existing file" && {
|
25
|
+
dir=$TMPDIR/dev1/0/000/000
|
26
|
+
mkdir -p $dir
|
27
|
+
ln random_blob $dir/0000000001.fid
|
28
|
+
cksum="$(curl -sSvf 2> $curl_err http://$listen/blah | cksum)"
|
29
|
+
test "$cksum" = "$random_blob_cksum"
|
30
|
+
dbgcat curl_err
|
31
|
+
grep 'E[tT]ag: "1"' $curl_err
|
32
|
+
}
|
33
|
+
|
34
|
+
t_begin "reproxy existing file" && {
|
35
|
+
curl -sSvf -H 'X-Reproxy-Path: /reproxy' 2> $curl_err \
|
36
|
+
http://$listen/blah >/dev/null
|
37
|
+
dbgcat curl_err
|
38
|
+
uri=http://$rack_file_listen/dev1/0/000/000/0000000001.fid
|
39
|
+
grep '^< X-Accel-Redirect: /reproxy' $curl_err
|
40
|
+
grep '^< X-Reproxy-Content-Type: application/octet-stream' $curl_err
|
41
|
+
grep "^< Location: $uri" $curl_err
|
42
|
+
grep '^< X-Reproxy-Last-Modified: ' $curl_err
|
43
|
+
grep '^< Content-Length: 0' $curl_err
|
44
|
+
grep '^< Etag: "1"' $curl_err
|
45
|
+
}
|
46
|
+
|
47
|
+
t_begin "kill servers" && {
|
48
|
+
kill -INT $rack_file_pid
|
49
|
+
kill -INT $rack_server_pid
|
50
|
+
}
|
51
|
+
|
52
|
+
t_done
|
data/t/test-lib.sh
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
. ./my-tap-lib.sh
|
3
|
+
set -e
|
4
|
+
set -u
|
5
|
+
|
6
|
+
# sometimes we rely on http_proxy to avoid wasting bandwidth with Isolate
|
7
|
+
# and multiple Ruby versions
|
8
|
+
NO_PROXY=${UNICORN_TEST_ADDR-127.0.0.1}
|
9
|
+
export NO_PROXY
|
10
|
+
|
11
|
+
RUBY="${RUBY-ruby}"
|
12
|
+
RUBY_VERSION=${RUBY_VERSION-$($RUBY -e 'puts RUBY_VERSION')}
|
13
|
+
t_pfx=$PWD/trash/$T-$RUBY_VERSION
|
14
|
+
LOCKDIR=${TMPDIR-/tmp}
|
15
|
+
export LOCKDIR
|
16
|
+
TMPDIR=$t_pfx
|
17
|
+
rm -rf $TMPDIR
|
18
|
+
mkdir -p $TMPDIR
|
19
|
+
export TMPDIR
|
20
|
+
|
21
|
+
PATH=$PWD/bin:$PATH
|
22
|
+
export PATH
|
23
|
+
|
24
|
+
test -x $PWD/bin/unused_listen || die "must be run in 't' directory"
|
25
|
+
|
26
|
+
# given a list of variable names, create temporary files and assign
|
27
|
+
# the pathnames to those variables
|
28
|
+
rtmpfiles () {
|
29
|
+
for id in "$@"
|
30
|
+
do
|
31
|
+
name=$id
|
32
|
+
_tmp=$t_pfx/$id
|
33
|
+
eval "$id=$_tmp"
|
34
|
+
|
35
|
+
case $name in
|
36
|
+
*fifo)
|
37
|
+
rm -f $_tmp
|
38
|
+
mkfifo $_tmp
|
39
|
+
T_RM_LIST="$T_RM_LIST $_tmp"
|
40
|
+
;;
|
41
|
+
*socket)
|
42
|
+
rm -f $_tmp
|
43
|
+
T_RM_LIST="$T_RM_LIST $_tmp"
|
44
|
+
;;
|
45
|
+
*)
|
46
|
+
rm -f $_tmp
|
47
|
+
> $_tmp
|
48
|
+
T_OK_RM_LIST="$T_OK_RM_LIST $_tmp"
|
49
|
+
;;
|
50
|
+
esac
|
51
|
+
done
|
52
|
+
}
|
53
|
+
|
54
|
+
dbgcat () {
|
55
|
+
id=$1
|
56
|
+
eval '_file=$'$id
|
57
|
+
echo "==> $id <=="
|
58
|
+
sed -e "s/^/$id:/" < $_file
|
59
|
+
}
|
60
|
+
|
61
|
+
check_stderr () {
|
62
|
+
set +u
|
63
|
+
_r_err=${1-${r_err}}
|
64
|
+
set -u
|
65
|
+
if grep -i Error $_r_err
|
66
|
+
then
|
67
|
+
die "Errors found in $_r_err"
|
68
|
+
elif grep SIGKILL $_r_err
|
69
|
+
then
|
70
|
+
die "SIGKILL found in $_r_err"
|
71
|
+
fi
|
72
|
+
}
|
73
|
+
|
74
|
+
setup () {
|
75
|
+
rtmpfiles r_err r_out r_pid db f_err f_out f_pid curl_err
|
76
|
+
|
77
|
+
random_blob_size=$(wc -c < random_blob | awk '{print $1}')
|
78
|
+
random_blob_cksum="$(cksum < random_blob)"
|
79
|
+
eval $(unused_listen)
|
80
|
+
rack_file_listen=$listen
|
81
|
+
port=$(expr $listen : '[^:]\+:\([0-9]\+\)')
|
82
|
+
rack_file_port=$port
|
83
|
+
|
84
|
+
( rackup -s webrick -P$f_pid -p$port file.ru 2>> $f_err >> $f_out & ) &
|
85
|
+
|
86
|
+
(
|
87
|
+
cat fixtures.sql
|
88
|
+
echo "UPDATE host SET http_get_port = $rack_file_port;"
|
89
|
+
) | sqlite3 $db
|
90
|
+
|
91
|
+
eval $(unused_listen)
|
92
|
+
port=$(expr $listen : '[^:]\+:\([0-9]\+\)')
|
93
|
+
TEST_SEQUEL=sqlite://$db
|
94
|
+
(
|
95
|
+
RACK_ENV=deployment
|
96
|
+
export TEST_SEQUEL RACK_ENV
|
97
|
+
rackup -E none \
|
98
|
+
-s webrick -P$r_pid -p $port "$@" 2>> $r_err >> $r_out &
|
99
|
+
) &
|
100
|
+
|
101
|
+
wait_for_start $r_err
|
102
|
+
wait_for_start $f_err
|
103
|
+
wait
|
104
|
+
rack_server_pid=$(cat $r_pid)
|
105
|
+
test -n "$rack_server_pid" && kill -0 $rack_server_pid
|
106
|
+
rack_file_pid=$(cat $f_pid)
|
107
|
+
test -n "$rack_file_pid" && kill -0 $rack_file_pid
|
108
|
+
}
|
109
|
+
|
110
|
+
wait_for_start () {
|
111
|
+
log_err=$1
|
112
|
+
(
|
113
|
+
renice 19 $$
|
114
|
+
while ! grep 'HTTPServer#start:' $log_err
|
115
|
+
do
|
116
|
+
:
|
117
|
+
done
|
118
|
+
) >/dev/null 2>&1 &
|
119
|
+
}
|
data/test/test_local.rb
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
require "test/unit"
|
2
|
+
require "regurgitator"
|
3
|
+
require "tempfile"
|
4
|
+
require "fileutils"
|
5
|
+
|
6
|
+
class TestLocal < Test::Unit::TestCase
|
7
|
+
include Regurgitator::Local
|
8
|
+
|
9
|
+
def teardown
|
10
|
+
STORE_PATHS.clear
|
11
|
+
FileUtils.rm_rf @tmpdir
|
12
|
+
Regurgitator::Local.refresh_addrs!
|
13
|
+
end
|
14
|
+
|
15
|
+
def setup
|
16
|
+
@local_addrs = Regurgitator::Local.instance_variable_get(:@local_addrs)
|
17
|
+
@local_addrs["127.0.0.1"] = true if @local_addrs.empty?
|
18
|
+
@addr = @local_addrs.keys.first
|
19
|
+
tmp = Tempfile.new('test_local')
|
20
|
+
@tmpdir = tmp.path
|
21
|
+
tmp.close!
|
22
|
+
Dir.mkdir(@tmpdir)
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_device_path_stat
|
26
|
+
port = 1234
|
27
|
+
uri = URI("http://#@addr:#{port}/dev10/0/004/689/0004689631.fid")
|
28
|
+
assert_nil device_path_stat(uri)
|
29
|
+
|
30
|
+
assert_raises(ArgumentError) {
|
31
|
+
Regurgitator::Local.register port, @tmpdir
|
32
|
+
}
|
33
|
+
Dir.mkdir "#@tmpdir/dev10"
|
34
|
+
devs = Regurgitator::Local.register port, @tmpdir
|
35
|
+
assert_equal [ "dev10" ], devs.to_a
|
36
|
+
|
37
|
+
Regurgitator::Local.register port, @tmpdir
|
38
|
+
expect = "#@tmpdir/dev10/0/004/689/0004689631.fid"
|
39
|
+
FileUtils.mkdir_p(File.dirname(expect))
|
40
|
+
|
41
|
+
File.open(expect, "wb") { |fp| fp.write '.' }
|
42
|
+
assert_equal expect, device_path_stat(uri)[0]
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_device_path_stat_ambiguous
|
46
|
+
Dir.mkdir(@a = "#@tmpdir/a")
|
47
|
+
Dir.mkdir(@b = "#@tmpdir/b")
|
48
|
+
port = 1234
|
49
|
+
uri = URI("http://#@addr:#{port}/dev10/0/004/689/0004689631.fid")
|
50
|
+
assert_nil device_path_stat(uri)
|
51
|
+
|
52
|
+
apath = "#@a/dev10/0/004/689/0004689631.fid"
|
53
|
+
bpath = "#@b/dev10/0/004/689/0004689631.fid"
|
54
|
+
FileUtils.mkdir_p([apath, bpath].map! { |x| File.dirname(x) })
|
55
|
+
Regurgitator::Local.register port, @a
|
56
|
+
Regurgitator::Local.register port, @b
|
57
|
+
|
58
|
+
[ apath, bpath ].each do |path|
|
59
|
+
File.open(path, "wb") { |fp| fp.write '.' }
|
60
|
+
end
|
61
|
+
assert_nil device_path_stat(uri)
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_trylocal
|
65
|
+
port = 1233
|
66
|
+
env = { "REQUEST_METHOD" => "GET" }
|
67
|
+
a = URI("http://#@addr:#{port}/dev10/0/004/689/0004689631.fid")
|
68
|
+
b = URI("http://#@addr:#{port + 6}/dev11/0/004/689/0004689631.fid")
|
69
|
+
assert_nil trylocal(env, [ [ a, b ] ])
|
70
|
+
|
71
|
+
path_a = "#@tmpdir#{a.path}"
|
72
|
+
FileUtils.mkdir_p(File.dirname(path_a))
|
73
|
+
Regurgitator::Local.register port, @tmpdir
|
74
|
+
File.open(path_a, "wb") { |fp| fp.write '.' }
|
75
|
+
res = trylocal(env, [ [ a, b ] ])
|
76
|
+
assert_kind_of Regurgitator::LocalFile, res
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'regurgitator'
|
3
|
+
|
4
|
+
class TestServerSettings < Test::Unit::TestCase
|
5
|
+
include Regurgitator::ServerSettings
|
6
|
+
|
7
|
+
attr_accessor :db
|
8
|
+
|
9
|
+
def setup
|
10
|
+
@db = Sequel.connect 'sqlite:///'
|
11
|
+
@db.create_table(:server_settings) do
|
12
|
+
String :field, :size => 50, :null => false, :primary_key => true
|
13
|
+
String :value, :size => 255
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_zones
|
18
|
+
ds = @db[:server_settings]
|
19
|
+
[ %w(network_zones west,east,central),
|
20
|
+
%w(zone_west 10.1.0.0/16),
|
21
|
+
%w(zone_central 10.2.0.0/16),
|
22
|
+
%w(zone_east 10.3.0.0/16)
|
23
|
+
].each { |(field,value)| ds.insert(:field => field, :value => value) }
|
24
|
+
assert_equal 'west', zone_for('10.1.0.8')
|
25
|
+
assert_equal 'central', zone_for('10.2.1.8')
|
26
|
+
assert_equal 'east', zone_for('10.3.1.8')
|
27
|
+
assert_nil zone_for('127.0.0.1')
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_no_zones_defined
|
31
|
+
ds = @db[:server_settings]
|
32
|
+
assert_nil zone_for('10.1.0.8')
|
33
|
+
assert_nil zone_for('10.2.1.8')
|
34
|
+
assert_nil zone_for('10.3.1.8')
|
35
|
+
assert_nil zone_for('127.0.0.1')
|
36
|
+
end
|
37
|
+
end
|
metadata
ADDED
@@ -0,0 +1,191 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: regurgitator
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 31
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 0
|
10
|
+
version: 0.0.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Regurgitators
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-05-10 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: rack
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ~>
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 11
|
29
|
+
segments:
|
30
|
+
- 1
|
31
|
+
- 2
|
32
|
+
version: "1.2"
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: sequel
|
37
|
+
prerelease: false
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ~>
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
hash: 41
|
44
|
+
segments:
|
45
|
+
- 3
|
46
|
+
- 23
|
47
|
+
version: "3.23"
|
48
|
+
type: :runtime
|
49
|
+
version_requirements: *id002
|
50
|
+
- !ruby/object:Gem::Dependency
|
51
|
+
name: http_spew
|
52
|
+
prerelease: false
|
53
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
55
|
+
requirements:
|
56
|
+
- - ~>
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
hash: 9
|
59
|
+
segments:
|
60
|
+
- 0
|
61
|
+
- 1
|
62
|
+
version: "0.1"
|
63
|
+
type: :runtime
|
64
|
+
version_requirements: *id003
|
65
|
+
- !ruby/object:Gem::Dependency
|
66
|
+
name: wrongdoc
|
67
|
+
prerelease: false
|
68
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
69
|
+
none: false
|
70
|
+
requirements:
|
71
|
+
- - ~>
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
hash: 5
|
74
|
+
segments:
|
75
|
+
- 1
|
76
|
+
- 5
|
77
|
+
version: "1.5"
|
78
|
+
type: :development
|
79
|
+
version_requirements: *id004
|
80
|
+
description: |-
|
81
|
+
\Regurgitator is an GPL-licensed library and Rack middleware for
|
82
|
+
serving files stored in MogileFS. It can be embedded inside
|
83
|
+
any existing Rack application or be used as a standalone Rack app.
|
84
|
+
email: barfs@librelist.org
|
85
|
+
executables: []
|
86
|
+
|
87
|
+
extensions: []
|
88
|
+
|
89
|
+
extra_rdoc_files:
|
90
|
+
- ChangeLog
|
91
|
+
- lib/regurgitator.rb
|
92
|
+
- lib/regurgitator/device.rb
|
93
|
+
- lib/regurgitator/domain.rb
|
94
|
+
- lib/regurgitator/domain_host.rb
|
95
|
+
- lib/regurgitator/domain_path.rb
|
96
|
+
- lib/regurgitator/endpoint.rb
|
97
|
+
- lib/regurgitator/file_info.rb
|
98
|
+
- lib/regurgitator/file_request.rb
|
99
|
+
- lib/regurgitator/local.rb
|
100
|
+
- lib/regurgitator/local_file.rb
|
101
|
+
- lib/regurgitator/one_domain.rb
|
102
|
+
- lib/regurgitator/server_settings.rb
|
103
|
+
- NEWS
|
104
|
+
- README
|
105
|
+
- LICENSE
|
106
|
+
files:
|
107
|
+
- .document
|
108
|
+
- .gitignore
|
109
|
+
- .manifest
|
110
|
+
- .wrongdoc.yml
|
111
|
+
- COPYING
|
112
|
+
- ChangeLog
|
113
|
+
- GIT-VERSION-FILE
|
114
|
+
- GIT-VERSION-GEN
|
115
|
+
- GNUmakefile
|
116
|
+
- LATEST
|
117
|
+
- LICENSE
|
118
|
+
- NEWS
|
119
|
+
- README
|
120
|
+
- examples/domain_host.ru
|
121
|
+
- examples/domain_path.ru
|
122
|
+
- examples/one_domain.ru
|
123
|
+
- lib/regurgitator.rb
|
124
|
+
- lib/regurgitator/device.rb
|
125
|
+
- lib/regurgitator/domain.rb
|
126
|
+
- lib/regurgitator/domain_host.rb
|
127
|
+
- lib/regurgitator/domain_path.rb
|
128
|
+
- lib/regurgitator/endpoint.rb
|
129
|
+
- lib/regurgitator/file_info.rb
|
130
|
+
- lib/regurgitator/file_request.rb
|
131
|
+
- lib/regurgitator/local.rb
|
132
|
+
- lib/regurgitator/local_file.rb
|
133
|
+
- lib/regurgitator/one_domain.rb
|
134
|
+
- lib/regurgitator/server_settings.rb
|
135
|
+
- pkg.mk
|
136
|
+
- regurgitator.gemspec
|
137
|
+
- setup.rb
|
138
|
+
- t/.gitignore
|
139
|
+
- t/GNUmakefile
|
140
|
+
- t/bin/unused_listen
|
141
|
+
- t/domain_host.ru
|
142
|
+
- t/domain_path.ru
|
143
|
+
- t/file.ru
|
144
|
+
- t/fixtures.sql
|
145
|
+
- t/my-tap-lib.sh
|
146
|
+
- t/one_domain.ru
|
147
|
+
- t/t0001-domain_path.sh
|
148
|
+
- t/t0002-domain_host.sh
|
149
|
+
- t/t0003-one_domain.sh
|
150
|
+
- t/test-lib.sh
|
151
|
+
- test/test_local.rb
|
152
|
+
- test/test_server_settings.rb
|
153
|
+
homepage: http://bogomips.org/regurgitator/
|
154
|
+
licenses: []
|
155
|
+
|
156
|
+
post_install_message:
|
157
|
+
rdoc_options:
|
158
|
+
- -t
|
159
|
+
- \Regurgitator - read-only Rack endpoints for MogileFS
|
160
|
+
- -W
|
161
|
+
- http://bogomips.org/regurgitator.git/tree/%s
|
162
|
+
require_paths:
|
163
|
+
- lib
|
164
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
165
|
+
none: false
|
166
|
+
requirements:
|
167
|
+
- - ">="
|
168
|
+
- !ruby/object:Gem::Version
|
169
|
+
hash: 3
|
170
|
+
segments:
|
171
|
+
- 0
|
172
|
+
version: "0"
|
173
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
174
|
+
none: false
|
175
|
+
requirements:
|
176
|
+
- - ">="
|
177
|
+
- !ruby/object:Gem::Version
|
178
|
+
hash: 3
|
179
|
+
segments:
|
180
|
+
- 0
|
181
|
+
version: "0"
|
182
|
+
requirements: []
|
183
|
+
|
184
|
+
rubyforge_project: rainbows
|
185
|
+
rubygems_version: 1.8.1
|
186
|
+
signing_key:
|
187
|
+
specification_version: 3
|
188
|
+
summary: read-only Rack endpoints for MogileFS
|
189
|
+
test_files:
|
190
|
+
- test/test_local.rb
|
191
|
+
- test/test_server_settings.rb
|