Merge branch 'master' into rs_spec_02
Conflicts: lib/remote_storage/riak.rb spec/directories_spec.rb
This commit is contained in:
commit
1603d3d2ff
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,3 +1,5 @@
|
|||||||
config.yml
|
config.yml
|
||||||
cs_credentials.json
|
cs_credentials.json
|
||||||
pids
|
pids
|
||||||
|
.bundle
|
||||||
|
vendor/bundle
|
||||||
|
|||||||
4
Gemfile
4
Gemfile
@ -1,8 +1,8 @@
|
|||||||
source "http://rubygems.org"
|
source "https://rubygems.org"
|
||||||
|
|
||||||
gem "sinatra"
|
gem "sinatra"
|
||||||
gem "sinatra-contrib"
|
gem "sinatra-contrib"
|
||||||
gem "activesupport"
|
gem "activesupport", '~> 3.2'
|
||||||
gem "riak-client", :github => "5apps/riak-ruby-client", :branch => "invalid_uri_error"
|
gem "riak-client", :github => "5apps/riak-ruby-client", :branch => "invalid_uri_error"
|
||||||
gem "fog"
|
gem "fog"
|
||||||
|
|
||||||
|
|||||||
24
Gemfile.lock
24
Gemfile.lock
@ -11,10 +11,10 @@ GIT
|
|||||||
multi_json (~> 1.0)
|
multi_json (~> 1.0)
|
||||||
|
|
||||||
GEM
|
GEM
|
||||||
remote: http://rubygems.org/
|
remote: https://rubygems.org/
|
||||||
specs:
|
specs:
|
||||||
activesupport (3.2.13)
|
activesupport (3.2.18)
|
||||||
i18n (= 0.6.1)
|
i18n (~> 0.6, >= 0.6.4)
|
||||||
multi_json (~> 1.0)
|
multi_json (~> 1.0)
|
||||||
backports (3.3.0)
|
backports (3.3.0)
|
||||||
beefcake (0.3.7)
|
beefcake (0.3.7)
|
||||||
@ -32,20 +32,20 @@ GEM
|
|||||||
nokogiri (~> 1.5.0)
|
nokogiri (~> 1.5.0)
|
||||||
ruby-hmac
|
ruby-hmac
|
||||||
formatador (0.2.4)
|
formatador (0.2.4)
|
||||||
i18n (0.6.1)
|
i18n (0.6.9)
|
||||||
innertube (1.0.2)
|
innertube (1.0.2)
|
||||||
kgio (2.7.4)
|
kgio (2.9.2)
|
||||||
m (1.2.1)
|
m (1.2.1)
|
||||||
method_source (>= 0.6.7)
|
method_source (>= 0.6.7)
|
||||||
rake (>= 0.9.2.2, < 1.0.0)
|
rake (>= 0.9.2.2, < 1.0.0)
|
||||||
method_source (0.8)
|
method_source (0.8)
|
||||||
mime-types (1.23)
|
mime-types (1.23)
|
||||||
minitest (2.10.0)
|
minitest (2.10.0)
|
||||||
multi_json (1.8.0)
|
multi_json (1.10.0)
|
||||||
net-scp (1.0.4)
|
net-scp (1.0.4)
|
||||||
net-ssh (>= 1.99.1)
|
net-ssh (>= 1.99.1)
|
||||||
net-ssh (2.6.7)
|
net-ssh (2.6.7)
|
||||||
nokogiri (1.5.10)
|
nokogiri (1.5.11)
|
||||||
purdytest (1.0.0)
|
purdytest (1.0.0)
|
||||||
minitest (~> 2.2)
|
minitest (~> 2.2)
|
||||||
rack (1.5.2)
|
rack (1.5.2)
|
||||||
@ -53,11 +53,11 @@ GEM
|
|||||||
rack
|
rack
|
||||||
rack-test (0.6.2)
|
rack-test (0.6.2)
|
||||||
rack (>= 1.0)
|
rack (>= 1.0)
|
||||||
rainbows (4.4.3)
|
rainbows (4.6.1)
|
||||||
kgio (~> 2.5)
|
kgio (~> 2.5)
|
||||||
rack (~> 1.1)
|
rack (~> 1.1)
|
||||||
unicorn (~> 4.1)
|
unicorn (~> 4.8)
|
||||||
raindrops (0.10.0)
|
raindrops (0.13.0)
|
||||||
rake (0.9.2.2)
|
rake (0.9.2.2)
|
||||||
ruby-hmac (0.4.0)
|
ruby-hmac (0.4.0)
|
||||||
sinatra (1.4.3)
|
sinatra (1.4.3)
|
||||||
@ -72,7 +72,7 @@ GEM
|
|||||||
sinatra (~> 1.4.2)
|
sinatra (~> 1.4.2)
|
||||||
tilt (~> 1.3)
|
tilt (~> 1.3)
|
||||||
tilt (1.4.1)
|
tilt (1.4.1)
|
||||||
unicorn (4.3.1)
|
unicorn (4.8.2)
|
||||||
kgio (~> 2.6)
|
kgio (~> 2.6)
|
||||||
rack
|
rack
|
||||||
raindrops (~> 0.7)
|
raindrops (~> 0.7)
|
||||||
@ -81,7 +81,7 @@ PLATFORMS
|
|||||||
ruby
|
ruby
|
||||||
|
|
||||||
DEPENDENCIES
|
DEPENDENCIES
|
||||||
activesupport
|
activesupport (~> 3.2)
|
||||||
fog
|
fog
|
||||||
m
|
m
|
||||||
purdytest
|
purdytest
|
||||||
|
|||||||
@ -289,17 +289,19 @@ module RemoteStorage
|
|||||||
|
|
||||||
map_query = <<-EOH
|
map_query = <<-EOH
|
||||||
function(v){
|
function(v){
|
||||||
var values = v.values[0];
|
var metadata = v.values[0]['metadata'];
|
||||||
var metadata = values['metadata'];
|
var dir_name = metadata['index']['directory_bin'];
|
||||||
var keys = v.key.split(':');
|
if (dir_name === '/') {
|
||||||
keys.splice(0, 2);
|
dir_name = '';
|
||||||
var key_name = keys.join(':');
|
}
|
||||||
|
var name = v.key.match(/^[^:]*:(.*)/)[1]; // strip username from key
|
||||||
|
name = name.replace(dir_name + ':', ''); // strip directory from key
|
||||||
var etag = metadata['X-Riak-VTag'];
|
var etag = metadata['X-Riak-VTag'];
|
||||||
var contentType = metadata['content-type'];
|
var contentType = metadata['content-type'];
|
||||||
var contentLength = metadata['X-Riak-Meta']['X-Riak-Meta-Content_length'] || 0;
|
var contentLength = metadata['X-Riak-Meta']['X-Riak-Meta-Content_length'] || 0;
|
||||||
|
|
||||||
return [{
|
return [{
|
||||||
name: key_name,
|
name: name,
|
||||||
etag: etag,
|
etag: etag,
|
||||||
contentType: contentType,
|
contentType: contentType,
|
||||||
contentLength: contentLength
|
contentLength: contentLength
|
||||||
@ -316,12 +318,11 @@ module RemoteStorage
|
|||||||
|
|
||||||
map_query = <<-EOH
|
map_query = <<-EOH
|
||||||
function(v){
|
function(v){
|
||||||
var keys = v.key.split(':');
|
var name = v.key.match(/^[^:]*:(.*)/)[1]; // strip username from key
|
||||||
var key_name = keys[keys.length-1];
|
|
||||||
var etag = v.values[0]['metadata']['X-Riak-VTag'];
|
var etag = v.values[0]['metadata']['X-Riak-VTag'];
|
||||||
|
|
||||||
return [{
|
return [{
|
||||||
name: key_name,
|
name: name,
|
||||||
etag: etag
|
etag: etag
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|||||||
@ -57,6 +57,7 @@ describe "Directories" do
|
|||||||
before do
|
before do
|
||||||
put "/jimmy/tasks/foo", "do the laundry"
|
put "/jimmy/tasks/foo", "do the laundry"
|
||||||
put "/jimmy/tasks/http%3A%2F%2F5apps.com", "prettify design"
|
put "/jimmy/tasks/http%3A%2F%2F5apps.com", "prettify design"
|
||||||
|
put "/jimmy/tasks/%3A/foo%3Abar%40foo.org", "hello world"
|
||||||
end
|
end
|
||||||
|
|
||||||
it "lists the objects with version, length and content-type" do
|
it "lists the objects with version, length and content-type" do
|
||||||
@ -69,6 +70,7 @@ describe "Directories" do
|
|||||||
|
|
||||||
content = JSON.parse(last_response.body)
|
content = JSON.parse(last_response.body)
|
||||||
content["items"]["http://5apps.com"].wont_be_nil
|
content["items"]["http://5apps.com"].wont_be_nil
|
||||||
|
content["items"][":/"].wont_be_nil
|
||||||
content["items"]["foo"].wont_be_nil
|
content["items"]["foo"].wont_be_nil
|
||||||
content["items"]["foo"]["ETag"].must_equal foo.etag.gsub(/"/, "")
|
content["items"]["foo"]["ETag"].must_equal foo.etag.gsub(/"/, "")
|
||||||
content["items"]["foo"]["Content-Type"].must_equal "text/plain"
|
content["items"]["foo"]["Content-Type"].must_equal "text/plain"
|
||||||
@ -104,6 +106,16 @@ describe "Directories" do
|
|||||||
last_response.headers["Expires"].must_equal "0"
|
last_response.headers["Expires"].must_equal "0"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "doesn't choke on colons in the directory name" do
|
||||||
|
get "/jimmy/tasks/%3A/"
|
||||||
|
|
||||||
|
last_response.status.must_equal 200
|
||||||
|
last_response.content_type.must_equal "application/json"
|
||||||
|
|
||||||
|
content = JSON.parse(last_response.body)
|
||||||
|
content["items"]["foo:bar@foo.org"].wont_be_nil
|
||||||
|
end
|
||||||
|
|
||||||
context "when If-None-Match header is set" do
|
context "when If-None-Match header is set" do
|
||||||
before do
|
before do
|
||||||
get "/jimmy/tasks/"
|
get "/jimmy/tasks/"
|
||||||
|
|||||||
@ -543,17 +543,36 @@ describe "App with Riak backend" do
|
|||||||
|
|
||||||
context "with escaped key" do
|
context "with escaped key" do
|
||||||
before do
|
before do
|
||||||
put "/jimmy/documents/http%3A%2F%2F5apps.com", "super website"
|
put "/jimmy/documents/bar%3Abaz/http%3A%2F%2F5apps.com", "super website"
|
||||||
end
|
end
|
||||||
|
|
||||||
it "delivers the data correctly" do
|
it "delivers the data correctly" do
|
||||||
header "Authorization", "Bearer 123"
|
header "Authorization", "Bearer 123"
|
||||||
get "/jimmy/documents/http%3A%2F%2F5apps.com"
|
get "/jimmy/documents/bar%3Abaz/http%3A%2F%2F5apps.com"
|
||||||
|
|
||||||
last_response.body.must_equal 'super website'
|
last_response.body.must_equal 'super website'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "with unescaped key" do
|
||||||
|
before do
|
||||||
|
put "/jimmy/documents/bar:baz/john@doe.com", "John Doe"
|
||||||
|
end
|
||||||
|
|
||||||
|
it "lists the document in the directory" do
|
||||||
|
get "/jimmy/documents/bar:baz/"
|
||||||
|
|
||||||
|
content = JSON.parse(last_response.body)
|
||||||
|
content["items"]["john@doe.com"].wont_be_nil
|
||||||
|
end
|
||||||
|
|
||||||
|
it "delivers the data correctly" do
|
||||||
|
get "/jimmy/documents/bar:baz/john@doe.com"
|
||||||
|
|
||||||
|
last_response.body.must_equal "John Doe"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context "escaped square brackets in key" do
|
context "escaped square brackets in key" do
|
||||||
before do
|
before do
|
||||||
put "/jimmy/documents/gracehopper%5B1%5D.jpg", "super image"
|
put "/jimmy/documents/gracehopper%5B1%5D.jpg", "super image"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user