datacatalog 0.4.16 → 0.4.17
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/Rakefile +1 -1
- data/datacatalog.gemspec +4 -2
- data/lib/resources/broken_link.rb +4 -0
- data/lib/resources/favorite.rb +4 -0
- data/spec/about_spec.rb +0 -1
- data/spec/base_spec.rb +21 -20
- data/spec/broken_link_spec.rb +101 -0
- data/spec/comment_spec.rb +42 -42
- data/spec/document_spec.rb +30 -40
- data/spec/download_spec.rb +21 -21
- data/spec/favorite_spec.rb +28 -31
- data/spec/import_spec.rb +41 -41
- data/spec/importer_spec.rb +38 -38
- data/spec/note_spec.rb +30 -40
- data/spec/organization_spec.rb +37 -49
- data/spec/rating_spec.rb +46 -58
- data/spec/report_spec.rb +48 -48
- data/spec/source_spec.rb +29 -32
- data/spec/spec_helper.rb +1 -0
- metadata +5 -3
data/Rakefile
CHANGED
|
@@ -5,7 +5,7 @@ begin
|
|
|
5
5
|
require 'jeweler'
|
|
6
6
|
Jeweler::Tasks.new do |gem|
|
|
7
7
|
gem.name = "datacatalog"
|
|
8
|
-
gem.version = '0.4.
|
|
8
|
+
gem.version = '0.4.17'
|
|
9
9
|
gem.rubyforge_project = "datacatalog"
|
|
10
10
|
gem.summary = %Q{Client for the National Data Catalog API}
|
|
11
11
|
gem.description = %Q{A Ruby client library for the National Data Catalog API}
|
data/datacatalog.gemspec
CHANGED
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
|
|
6
6
|
Gem::Specification.new do |s|
|
|
7
7
|
s.name = %q{datacatalog}
|
|
8
|
-
s.version = "0.4.
|
|
8
|
+
s.version = "0.4.17"
|
|
9
9
|
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
11
11
|
s.authors = ["Luigi Montanez", "David James"]
|
|
12
|
-
s.date = %q{2010-08-
|
|
12
|
+
s.date = %q{2010-08-11}
|
|
13
13
|
s.description = %q{A Ruby client library for the National Data Catalog API}
|
|
14
14
|
s.email = %q{luigi@sunlightfoundation.com}
|
|
15
15
|
s.extra_rdoc_files = [
|
|
@@ -46,6 +46,7 @@ Gem::Specification.new do |s|
|
|
|
46
46
|
"spec/about_spec.rb",
|
|
47
47
|
"spec/api_key_spec.rb",
|
|
48
48
|
"spec/base_spec.rb",
|
|
49
|
+
"spec/broken_link_spec.rb",
|
|
49
50
|
"spec/comment_spec.rb",
|
|
50
51
|
"spec/datacatalog_spec.rb",
|
|
51
52
|
"spec/document_spec.rb",
|
|
@@ -77,6 +78,7 @@ Gem::Specification.new do |s|
|
|
|
77
78
|
"spec/about_spec.rb",
|
|
78
79
|
"spec/api_key_spec.rb",
|
|
79
80
|
"spec/base_spec.rb",
|
|
81
|
+
"spec/broken_link_spec.rb",
|
|
80
82
|
"spec/comment_spec.rb",
|
|
81
83
|
"spec/datacatalog_spec.rb",
|
|
82
84
|
"spec/document_spec.rb",
|
data/lib/resources/favorite.rb
CHANGED
data/spec/about_spec.rb
CHANGED
data/spec/base_spec.rb
CHANGED
|
@@ -3,6 +3,13 @@ include DataCatalog
|
|
|
3
3
|
|
|
4
4
|
describe Base do
|
|
5
5
|
|
|
6
|
+
def make_response(body, code)
|
|
7
|
+
response = Object.new
|
|
8
|
+
stub(response).code { code }
|
|
9
|
+
stub(response).body { body }
|
|
10
|
+
response
|
|
11
|
+
end
|
|
12
|
+
|
|
6
13
|
before do
|
|
7
14
|
setup_api
|
|
8
15
|
end
|
|
@@ -22,43 +29,39 @@ describe Base do
|
|
|
22
29
|
end
|
|
23
30
|
|
|
24
31
|
describe ".check_status" do
|
|
25
|
-
it "should return
|
|
26
|
-
response =
|
|
27
|
-
Base.check_status(response).should
|
|
32
|
+
it "should return response on 200 OK" do
|
|
33
|
+
response = make_response("{}", 200)
|
|
34
|
+
Base.check_status(response).should == response
|
|
28
35
|
end
|
|
29
36
|
|
|
30
37
|
it "should raise BadRequest on 400 Bad Request" do
|
|
31
|
-
response = HTTParty::Response.new(nil, '[]', 400, 'Bad Request', {})
|
|
32
38
|
executing do
|
|
33
|
-
Base.check_status(
|
|
39
|
+
Base.check_status(make_response("{}", 400))
|
|
34
40
|
end.should raise_error(BadRequest)
|
|
35
41
|
end
|
|
36
42
|
|
|
37
43
|
it "should raise Unauthorized on 401 Unauthorized" do
|
|
38
|
-
response = HTTParty::Response.new(nil, '', 401, 'Unauthorized', {})
|
|
39
44
|
executing do
|
|
40
|
-
Base.check_status(
|
|
45
|
+
Base.check_status(make_response("{}", 401))
|
|
41
46
|
end.should raise_error(Unauthorized)
|
|
42
47
|
end
|
|
43
48
|
|
|
44
49
|
it "should raise NotFound on 404 Not Found" do
|
|
45
|
-
response = HTTParty::Response.new(nil, '[]', 404, 'Not Found', {})
|
|
46
50
|
executing do
|
|
47
|
-
Base.check_status(
|
|
51
|
+
Base.check_status(make_response("{}", 404))
|
|
48
52
|
end.should raise_error(NotFound)
|
|
49
53
|
end
|
|
50
54
|
|
|
51
55
|
it "should raise InternalServerError on 500 Internal Server Error" do
|
|
52
|
-
response = HTTParty::Response.new(nil, '', 500, 'Internal Server Error', {})
|
|
53
56
|
executing do
|
|
54
|
-
Base.check_status(
|
|
57
|
+
Base.check_status(make_response("{}", 500))
|
|
55
58
|
end.should raise_error(InternalServerError)
|
|
56
59
|
end
|
|
57
60
|
end
|
|
58
|
-
|
|
61
|
+
|
|
59
62
|
describe ".error" do
|
|
60
|
-
it "should
|
|
61
|
-
response =
|
|
63
|
+
it "should be correct when body is blank and code is 404" do
|
|
64
|
+
response = make_response('', 404)
|
|
62
65
|
begin
|
|
63
66
|
e = Base.error(NotFound, response)
|
|
64
67
|
rescue NotFound => e
|
|
@@ -69,7 +72,7 @@ describe Base do
|
|
|
69
72
|
end
|
|
70
73
|
|
|
71
74
|
it "should be correct when body is an empty hash" do
|
|
72
|
-
response =
|
|
75
|
+
response = make_response('{}', 404)
|
|
73
76
|
begin
|
|
74
77
|
e = Base.error(NotFound, response).should == "Response was empty"
|
|
75
78
|
rescue NotFound => e
|
|
@@ -80,7 +83,7 @@ describe Base do
|
|
|
80
83
|
end
|
|
81
84
|
|
|
82
85
|
it "should be correct when body is an empty array" do
|
|
83
|
-
response =
|
|
86
|
+
response = make_response('[]', 404)
|
|
84
87
|
begin
|
|
85
88
|
e = Base.error(NotFound, response)
|
|
86
89
|
rescue NotFound => e
|
|
@@ -91,8 +94,7 @@ describe Base do
|
|
|
91
94
|
end
|
|
92
95
|
|
|
93
96
|
it "should be correct when body has errors hash" do
|
|
94
|
-
|
|
95
|
-
response = HTTParty::Response.new(nil, errors, 400, 'Bad Request', {})
|
|
97
|
+
response = make_response('{"errors":["bad_error"]}', 400)
|
|
96
98
|
begin
|
|
97
99
|
e = Base.error(BadRequest, response)
|
|
98
100
|
rescue BadRequest => e
|
|
@@ -103,8 +105,7 @@ describe Base do
|
|
|
103
105
|
end
|
|
104
106
|
|
|
105
107
|
it "should be correct when body has hash" do
|
|
106
|
-
|
|
107
|
-
response = HTTParty::Response.new(nil, errors, 400, 'Bad Request', {})
|
|
108
|
+
response = make_response('{"foo":["bar"]}', 400)
|
|
108
109
|
begin
|
|
109
110
|
e = Base.error(BadRequest, response)
|
|
110
111
|
rescue BadRequest => e
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
|
2
|
+
include DataCatalog
|
|
3
|
+
|
|
4
|
+
describe BrokenLink do
|
|
5
|
+
|
|
6
|
+
before do
|
|
7
|
+
setup_api
|
|
8
|
+
clean_slate
|
|
9
|
+
@user = User.create(
|
|
10
|
+
:name => "Q. Rater",
|
|
11
|
+
:email => "q_rater@email.com",
|
|
12
|
+
:curator => true
|
|
13
|
+
)
|
|
14
|
+
@source = Source.create(
|
|
15
|
+
:title => "Some FCC Data",
|
|
16
|
+
:url => "http://fcc.gov/somedata.csv",
|
|
17
|
+
:source_type => "dataset"
|
|
18
|
+
)
|
|
19
|
+
DataCatalog.with_key(@user.primary_api_key) do
|
|
20
|
+
@broken_link = BrokenLink.create({
|
|
21
|
+
:source_id => @source.id,
|
|
22
|
+
:field => "url",
|
|
23
|
+
:destination_url => "http://broken.gov/abx834",
|
|
24
|
+
:status => 404,
|
|
25
|
+
})
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
describe ".all" do
|
|
30
|
+
it "should return an enumeration of broken_links" do
|
|
31
|
+
broken_links = BrokenLink.all(:user_id => @user.id)
|
|
32
|
+
broken_links.each do |o|
|
|
33
|
+
o.should be_an_instance_of(BrokenLink)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
describe ".create" do
|
|
39
|
+
# (successful create is exercised in before block)
|
|
40
|
+
|
|
41
|
+
it "should fail with invalid params" do
|
|
42
|
+
begin
|
|
43
|
+
BrokenLink.create(:mad => "hatter")
|
|
44
|
+
rescue BadRequest => e
|
|
45
|
+
e.errors.should == { "invalid_params" => ["mad"] }
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it "should fail when missing params" do
|
|
50
|
+
begin
|
|
51
|
+
BrokenLink.create()
|
|
52
|
+
rescue BadRequest => e
|
|
53
|
+
e.errors.should == {
|
|
54
|
+
"destination_url" => ["can't be empty"],
|
|
55
|
+
"field" => ["can't be empty"],
|
|
56
|
+
"status" => ["can't be empty"],
|
|
57
|
+
"base" => ["source_id or organization_id needed"]
|
|
58
|
+
}
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
describe ".destroy" do
|
|
64
|
+
it "should destroy an existing broken_link as an admin" do
|
|
65
|
+
BrokenLink.destroy(@broken_link.id).should be_true
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it "should destroy an existing broken_link as the user" do
|
|
69
|
+
DataCatalog.with_key(@user.primary_api_key) do
|
|
70
|
+
BrokenLink.destroy(@broken_link.id).should be_true
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
it "should raise NotFound when attempting to destroy non-existing broken_link" do
|
|
75
|
+
executing do
|
|
76
|
+
BrokenLink.destroy(mangle(@broken_link.id))
|
|
77
|
+
end.should raise_error(NotFound)
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
describe ".first" do
|
|
82
|
+
it "should return the first BrokenLink" do
|
|
83
|
+
BrokenLink.first.id.should == @broken_link.id
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
describe ".get" do
|
|
88
|
+
it "should return a broken_link" do
|
|
89
|
+
broken_link = BrokenLink.get(@broken_link.id)
|
|
90
|
+
broken_link.should be_an_instance_of(BrokenLink)
|
|
91
|
+
broken_link.source_id.should == @source.id
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
it "should raise NotFound if no broken_link exists" do
|
|
95
|
+
executing do
|
|
96
|
+
BrokenLink.get(mangle(@broken_link.id))
|
|
97
|
+
end.should raise_error(NotFound)
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
end
|
data/spec/comment_spec.rb
CHANGED
|
@@ -15,39 +15,6 @@ describe Comment do
|
|
|
15
15
|
:source_type => "dataset")
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
-
describe ".create" do
|
|
19
|
-
it "should create a new comment when valid params are passed in" do
|
|
20
|
-
DataCatalog.with_key(@user.primary_api_key) do
|
|
21
|
-
@comment = Comment.create(:source_id => @source.id, :text => "The first comment.")
|
|
22
|
-
end
|
|
23
|
-
@comment.should be_an_instance_of(Comment)
|
|
24
|
-
|
|
25
|
-
refreshed_source = Source.get(@source.id)
|
|
26
|
-
refreshed_source.comments.first.text.should == "The first comment."
|
|
27
|
-
refreshed_source.comments.first.user.name.should == "Ted Smith"
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
describe ".get" do
|
|
32
|
-
before do
|
|
33
|
-
DataCatalog.with_key(@user.primary_api_key) do
|
|
34
|
-
@comment = Comment.create(:source_id => @source.id, :text => "The first comment.")
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
it "should return a comment" do
|
|
39
|
-
comment = Comment.get(@comment.id)
|
|
40
|
-
comment.should be_an_instance_of(Comment)
|
|
41
|
-
comment.text.should == "The first comment."
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
it "should raise NotFound if no comment exists" do
|
|
45
|
-
executing do
|
|
46
|
-
Comment.get(mangle(@comment.id))
|
|
47
|
-
end.should raise_error(NotFound)
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
|
|
51
18
|
describe ".all" do
|
|
52
19
|
before do
|
|
53
20
|
@john = User.create(
|
|
@@ -72,20 +39,15 @@ describe Comment do
|
|
|
72
39
|
end
|
|
73
40
|
end
|
|
74
41
|
|
|
75
|
-
describe ".
|
|
76
|
-
|
|
42
|
+
describe ".create" do
|
|
43
|
+
it "should create a new comment when valid params are passed in" do
|
|
77
44
|
DataCatalog.with_key(@user.primary_api_key) do
|
|
78
45
|
@comment = Comment.create(:source_id => @source.id, :text => "The first comment.")
|
|
79
46
|
end
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
it "should update an existing comment with valid params" do
|
|
83
|
-
DataCatalog.with_key(@user.primary_api_key) do
|
|
84
|
-
Comment.update(@comment.id, :text => "The first comment, updated.")
|
|
85
|
-
end
|
|
47
|
+
@comment.should be_an_instance_of(Comment)
|
|
86
48
|
|
|
87
49
|
refreshed_source = Source.get(@source.id)
|
|
88
|
-
refreshed_source.comments.first.text.should == "The first comment
|
|
50
|
+
refreshed_source.comments.first.text.should == "The first comment."
|
|
89
51
|
refreshed_source.comments.first.user.name.should == "Ted Smith"
|
|
90
52
|
end
|
|
91
53
|
end
|
|
@@ -114,4 +76,42 @@ describe Comment do
|
|
|
114
76
|
end
|
|
115
77
|
end
|
|
116
78
|
|
|
79
|
+
describe ".get" do
|
|
80
|
+
before do
|
|
81
|
+
DataCatalog.with_key(@user.primary_api_key) do
|
|
82
|
+
@comment = Comment.create(:source_id => @source.id, :text => "The first comment.")
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it "should return a comment" do
|
|
87
|
+
comment = Comment.get(@comment.id)
|
|
88
|
+
comment.should be_an_instance_of(Comment)
|
|
89
|
+
comment.text.should == "The first comment."
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
it "should raise NotFound if no comment exists" do
|
|
93
|
+
executing do
|
|
94
|
+
Comment.get(mangle(@comment.id))
|
|
95
|
+
end.should raise_error(NotFound)
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
describe ".update" do
|
|
100
|
+
before do
|
|
101
|
+
DataCatalog.with_key(@user.primary_api_key) do
|
|
102
|
+
@comment = Comment.create(:source_id => @source.id, :text => "The first comment.")
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
it "should update an existing comment with valid params" do
|
|
107
|
+
DataCatalog.with_key(@user.primary_api_key) do
|
|
108
|
+
Comment.update(@comment.id, :text => "The first comment, updated.")
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
refreshed_source = Source.get(@source.id)
|
|
112
|
+
refreshed_source.comments.first.text.should == "The first comment, updated."
|
|
113
|
+
refreshed_source.comments.first.user.name.should == "Ted Smith"
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
117
|
end
|
data/spec/document_spec.rb
CHANGED
|
@@ -23,19 +23,43 @@ describe Document do
|
|
|
23
23
|
end
|
|
24
24
|
end
|
|
25
25
|
|
|
26
|
-
describe ".
|
|
26
|
+
describe ".all" do
|
|
27
|
+
it "should return an enumeration of documents" do
|
|
28
|
+
documents = Document.all(:source_id => @source.id)
|
|
29
|
+
documents.each do |o|
|
|
30
|
+
o.should be_an_instance_of(Document)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
27
34
|
|
|
35
|
+
describe ".create" do
|
|
28
36
|
it "should create a document when valid params are passed in" do
|
|
29
37
|
DataCatalog.with_key(@user.primary_api_key) do
|
|
30
38
|
refreshed_source = Source.get(@source.id)
|
|
31
39
|
refreshed_source.documents.first.text.should == "This is community documentation."
|
|
32
40
|
end
|
|
33
41
|
end
|
|
42
|
+
end
|
|
34
43
|
|
|
35
|
-
|
|
44
|
+
describe ".destroy" do
|
|
45
|
+
it "should destroy an existing document as an admin" do
|
|
46
|
+
Document.destroy(@document.id).should be_true
|
|
47
|
+
end
|
|
36
48
|
|
|
37
|
-
|
|
49
|
+
it "should not destroy an existing document as the user" do
|
|
50
|
+
DataCatalog.with_key(@user.primary_api_key) do
|
|
51
|
+
executing { Document.destroy(@document.id) }.should raise_error(Unauthorized)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it "should raise NotFound when attempting to destroy non-existing document" do
|
|
56
|
+
executing do
|
|
57
|
+
Document.destroy(mangle(@document.id))
|
|
58
|
+
end.should raise_error(NotFound)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
38
61
|
|
|
62
|
+
describe ".get" do
|
|
39
63
|
it "should return a document" do
|
|
40
64
|
document = Document.get(@document.id)
|
|
41
65
|
document.should be_an_instance_of(Document)
|
|
@@ -47,22 +71,9 @@ describe Document do
|
|
|
47
71
|
Document.get(mangle(@document.id))
|
|
48
72
|
end.should raise_error(NotFound)
|
|
49
73
|
end
|
|
50
|
-
|
|
51
|
-
end # describe ".get"
|
|
52
|
-
|
|
53
|
-
describe ".all" do
|
|
54
|
-
|
|
55
|
-
it "should return an enumeration of documents" do
|
|
56
|
-
documents = Document.all(:source_id => @source.id)
|
|
57
|
-
documents.each do |o|
|
|
58
|
-
o.should be_an_instance_of(Document)
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
end # describe ".all"
|
|
74
|
+
end
|
|
63
75
|
|
|
64
76
|
describe ".update" do
|
|
65
|
-
|
|
66
77
|
it "should update an existing document with valid params" do
|
|
67
78
|
@document.previous_id.should be nil
|
|
68
79
|
DataCatalog.with_key(@user.primary_api_key) do
|
|
@@ -73,27 +84,6 @@ describe Document do
|
|
|
73
84
|
refreshed_document.text.should == "This is the updated document."
|
|
74
85
|
refreshed_document.previous_id.should_not be nil
|
|
75
86
|
end
|
|
87
|
+
end
|
|
76
88
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
describe ".destroy" do
|
|
80
|
-
|
|
81
|
-
it "should destroy an existing document as an admin" do
|
|
82
|
-
Document.destroy(@document.id).should be_true
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
it "should not destroy an existing document as the user" do
|
|
86
|
-
DataCatalog.with_key(@user.primary_api_key) do
|
|
87
|
-
executing { Document.destroy(@document.id) }.should raise_error(Unauthorized)
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
it "should raise NotFound when attempting to destroy non-existing document" do
|
|
92
|
-
executing do
|
|
93
|
-
Document.destroy(mangle(@document.id))
|
|
94
|
-
end.should raise_error(NotFound)
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
end # describe ".destroy"
|
|
98
|
-
|
|
99
|
-
end
|
|
89
|
+
end
|