regurgitator 0.0.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/.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
|