dspace_rest_client 1.2.0 → 2.1.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.
- checksums.yaml +4 -4
- data/.gitignore +11 -0
- data/.rbenv +1 -0
- data/.rspec +2 -0
- data/Gemfile +13 -0
- data/README.md +58 -0
- data/Rakefile +1 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/dspace_rest_client.gemspec +30 -0
- data/lib/dspace.rb +31 -0
- data/lib/{dspacerest → dspace}/bitstream.rb +4 -5
- data/lib/{dspacerest → dspace}/builders/hash_builder.rb +10 -6
- data/lib/{dspacerest → dspace}/builders/model_builder.rb +7 -7
- data/lib/dspace/builders/tempfile_builder.rb +26 -0
- data/lib/dspace/client.rb +78 -0
- data/lib/{dspacerest → dspace}/collection.rb +6 -13
- data/lib/{dspacerest → dspace}/community.rb +6 -8
- data/lib/{dspacerest → dspace}/item.rb +11 -19
- data/lib/{dspacerest → dspace}/metadata.rb +1 -2
- data/lib/{dspacerest → dspace}/policy.rb +2 -4
- data/lib/dspace/resources/authentication_resource.rb +22 -0
- data/lib/dspace/resources/bitstream_resource.rb +63 -0
- data/lib/dspace/resources/collection_resource.rb +50 -0
- data/lib/dspace/resources/community_resource.rb +78 -0
- data/lib/dspace/resources/item_resource.rb +66 -0
- data/lib/dspace/resources/status_resource.rb +19 -0
- data/lib/dspace/version.rb +3 -0
- data/spec/lib/dspace/resources/authentication_resource_spec.rb +34 -0
- data/spec/lib/dspace/resources/bitstream_resource_spec.rb +45 -0
- data/spec/lib/dspace/resources/collection_resource_spec.rb +50 -0
- data/spec/lib/dspace/resources/community_resource_spec.rb +81 -0
- data/spec/lib/dspace/resources/item_resource_spec.rb +69 -0
- data/spec/spec_helper.rb +5 -0
- metadata +171 -43
- data/lib/dspace_client.rb +0 -64
- data/lib/dspace_rest_client.rb +0 -17
- data/lib/dspacerest/repositories/abstract_repository.rb +0 -37
- data/lib/dspacerest/repositories/bitstream_repository.rb +0 -62
- data/lib/dspacerest/repositories/collection_repository.rb +0 -78
- data/lib/dspacerest/repositories/community_repository.rb +0 -76
- data/lib/dspacerest/repositories/dspace_repository.rb +0 -27
- data/lib/dspacerest/repositories/item_repository.rb +0 -80
- data/lib/dspacerest/strategies/uploads/curl_strategy.rb +0 -27
- data/lib/dspacerest/strategies/uploads/rest_strategy.rb +0 -17
@@ -1,4 +1,4 @@
|
|
1
|
-
module
|
1
|
+
module Dspace
|
2
2
|
class Community
|
3
3
|
|
4
4
|
attr_accessor :name, :logo, :copyright_text,
|
@@ -14,19 +14,19 @@ module DSpaceRest
|
|
14
14
|
@type = args['type']
|
15
15
|
@link = args['link']
|
16
16
|
@logo = args['logo']
|
17
|
-
@parent_community =
|
17
|
+
@parent_community = Dspace::Community.new(args['parentCommunity']) unless args['parentCommunity'].nil?
|
18
18
|
@copyright_text = args['copyrightText']
|
19
19
|
@introductory_text = args['introductoryText']
|
20
20
|
@short_description = args['shortDescription']
|
21
21
|
@sidebar_text = args['sidebarText']
|
22
22
|
@count_items = args['countItems']
|
23
|
-
@sub_communities =
|
24
|
-
@collections =
|
23
|
+
@sub_communities = Dspace::Builders::ModelBuilder.build_communities(args['subcommunities']) unless args['subcommunities'].nil?
|
24
|
+
@collections = Dspace::Builders::ModelBuilder.build_collections(args['collections']) unless args['collections'].nil?
|
25
25
|
@expand = args['expand']
|
26
26
|
end
|
27
27
|
|
28
28
|
def to_h
|
29
|
-
|
29
|
+
{
|
30
30
|
id: @id,
|
31
31
|
name: @name,
|
32
32
|
handle: @handle,
|
@@ -43,14 +43,12 @@ module DSpaceRest
|
|
43
43
|
countItems: @count_items,
|
44
44
|
expand: @expand
|
45
45
|
}
|
46
|
-
|
47
|
-
h
|
48
46
|
end
|
49
47
|
|
50
48
|
private
|
51
49
|
|
52
50
|
def obj2hash(list)
|
53
|
-
|
51
|
+
Dspace::Builders::HashBuilder.models2hash list if list.is_a? Array
|
54
52
|
end
|
55
53
|
|
56
54
|
end
|
@@ -1,7 +1,6 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
module DSpaceRest
|
1
|
+
module Dspace
|
4
2
|
class Item
|
3
|
+
include Dspace::Builders::HashBuilder
|
5
4
|
|
6
5
|
attr_accessor :name, :archived, :withdrawn
|
7
6
|
|
@@ -16,18 +15,18 @@ module DSpaceRest
|
|
16
15
|
@type = args['type']
|
17
16
|
@link = args['link']
|
18
17
|
@last_modified = args['lastModified']
|
19
|
-
@parent_collection =
|
20
|
-
@parent_collection_list =
|
21
|
-
@parent_community_list =
|
22
|
-
@bit_streams =
|
18
|
+
@parent_collection = Dspace::Collection.new(args['parentCollection']) unless args['parentCollection'].nil?
|
19
|
+
@parent_collection_list = Dspace::Builders::ModelBuilder.build_collections(args['parentCollectionList'])
|
20
|
+
@parent_community_list = Dspace::Builders::ModelBuilder.build_communities(args['parentCommunityList'])
|
21
|
+
@bit_streams = Dspace::Builders::ModelBuilder.build_bitstreams(args['bitstreams'])
|
23
22
|
@archived = args['archived']
|
24
23
|
@withdrawn = args['withdrawn']
|
25
24
|
@expand = args['expand']
|
26
|
-
@metadata =
|
25
|
+
@metadata = Dspace::Builders::ModelBuilder.build_metadatas(args['metadata'])
|
27
26
|
end
|
28
27
|
|
29
28
|
def to_h
|
30
|
-
|
29
|
+
{
|
31
30
|
id: @id,
|
32
31
|
name: @name,
|
33
32
|
handle: @handle,
|
@@ -43,8 +42,6 @@ module DSpaceRest
|
|
43
42
|
expand: @expand,
|
44
43
|
metadata: obj2hash(@metadata)
|
45
44
|
}
|
46
|
-
|
47
|
-
h
|
48
45
|
end
|
49
46
|
|
50
47
|
def add_metadata(key, value, language)
|
@@ -52,7 +49,8 @@ module DSpaceRest
|
|
52
49
|
m['key'] = key
|
53
50
|
m['value'] = value
|
54
51
|
m['language'] = language || ""
|
55
|
-
|
52
|
+
|
53
|
+
@metadata << Dspace::Metadata.new(m)
|
56
54
|
@metadata
|
57
55
|
end
|
58
56
|
|
@@ -60,11 +58,5 @@ module DSpaceRest
|
|
60
58
|
@metadata = []
|
61
59
|
end
|
62
60
|
|
63
|
-
private
|
64
|
-
|
65
|
-
def obj2hash(list)
|
66
|
-
DSpaceRest::Builders::HashBuilder.models2hash list
|
67
|
-
end
|
68
|
-
|
69
61
|
end
|
70
|
-
end
|
62
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
module
|
1
|
+
module Dspace
|
2
2
|
class Policy
|
3
3
|
|
4
4
|
attr_reader :id, :action, :eperson_id, :group_id,
|
@@ -20,7 +20,7 @@ module DSpaceRest
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def to_h
|
23
|
-
|
23
|
+
{
|
24
24
|
id: @id,
|
25
25
|
action: @action,
|
26
26
|
epersonId: @eperson_id,
|
@@ -33,8 +33,6 @@ module DSpaceRest
|
|
33
33
|
startDate: @start_date,
|
34
34
|
endDate: @end_date
|
35
35
|
}
|
36
|
-
|
37
|
-
h
|
38
36
|
end
|
39
37
|
|
40
38
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Dspace
|
2
|
+
module Resources
|
3
|
+
class AuthenticationResource < ResourceKit::Resource
|
4
|
+
|
5
|
+
resources do
|
6
|
+
default_handler(400) { raise InvalidTokenError, 'Invalid access token.' }
|
7
|
+
default_handler(403) { raise InvalidCredentialsError, 'Wrong Dspace credentials.' }
|
8
|
+
|
9
|
+
action :login, 'POST /rest/login' do
|
10
|
+
body { |email, password| JSON.generate({email: email, password: password}) }
|
11
|
+
handler(200, 201) { |response| access_token = response.body }
|
12
|
+
end
|
13
|
+
|
14
|
+
action :logout, 'POST /rest/logout' do
|
15
|
+
body { |object| JSON.generate(object.to_h) }
|
16
|
+
handler(200, 201, 203, 204) { |response| true }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module Dspace
|
2
|
+
module Resources
|
3
|
+
class BitstreamResource < ResourceKit::Resource
|
4
|
+
|
5
|
+
resources do
|
6
|
+
default_handler(401) { raise NotAuthorizedError, 'This request requires authentication' }
|
7
|
+
|
8
|
+
action :all, 'GET /rest/bitstreams' do
|
9
|
+
query_keys :expand, :limit, :offset
|
10
|
+
handler(200) do |response|
|
11
|
+
Dspace::Builders::ModelBuilder.build_items(JSON.parse(response.body))
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
action :find, 'GET /rest/bitstreams/:id' do
|
16
|
+
query_keys :expand
|
17
|
+
handler(200) do |response|
|
18
|
+
Dspace::Bitstream.new(JSON.parse(response.body))
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
action :policy, 'GET /rest/bitstreams/:id/policy' do
|
23
|
+
handler(200) do |response|
|
24
|
+
Dspace::Policy.new(JSON.parse(response.body))
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
action :retrieve, 'GET /rest/bitstreams/:id/retrieve' do
|
29
|
+
handler(200) { |response| response.body }
|
30
|
+
end
|
31
|
+
|
32
|
+
action :delete, 'DELETE /rest/bitstreams/:id' do
|
33
|
+
handler(200, 201, 204) { |response| true }
|
34
|
+
end
|
35
|
+
|
36
|
+
action :delete_policy, 'DELETE /rest/bitstreams/:id/policy/:policy_id' do
|
37
|
+
handler(200, 201, 204) { |response| true }
|
38
|
+
end
|
39
|
+
|
40
|
+
action :add_policy, 'POST /rest/bitstreams/:id/policy' do
|
41
|
+
body { |object| JSON.generate(object.to_h) }
|
42
|
+
handler(200, 201) { |response| true }
|
43
|
+
end
|
44
|
+
|
45
|
+
action :update, 'PUT /rest/bitstreams/:id' do
|
46
|
+
body { |object| JSON.generate(object.to_h) }
|
47
|
+
handler(200, 201) { |response| true }
|
48
|
+
end
|
49
|
+
|
50
|
+
action :update_data, 'PUT /rest/bitstreams/:id/data' do
|
51
|
+
body { |file| Base64.encode64(file.read) }
|
52
|
+
handler(200, 201) { |response| true }
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def retrieve(args={})
|
57
|
+
bitstream = ResourceKit::ActionInvoker.call(action(:find), self, id: args.fetch(:id))
|
58
|
+
Dspace::Builders::TempfileBuilder.build(bitstream.name, ResourceKit::ActionInvoker.call(action(:retrieve), self))
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Dspace
|
2
|
+
module Resources
|
3
|
+
class CollectionResource < ResourceKit::Resource
|
4
|
+
|
5
|
+
resources do
|
6
|
+
default_handler(401) { raise NotAuthorizedError, 'This request requires authentication' }
|
7
|
+
|
8
|
+
action :all, 'GET /rest/collections' do
|
9
|
+
query_keys :expand
|
10
|
+
handler(200) do |response|
|
11
|
+
Dspace::Builders::ModelBuilder.build_collections(JSON.parse(response.body))
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
action :find, 'GET /rest/collections/:id' do
|
16
|
+
query_keys :expand
|
17
|
+
handler(200) do |response|
|
18
|
+
Dspace::Collection.new(JSON.parse(response.body))
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
action :update, 'PUT /rest/collections/:id' do
|
23
|
+
body { |object| JSON.generate(object.to_h) }
|
24
|
+
handler(200, 201) { |response| true }
|
25
|
+
end
|
26
|
+
|
27
|
+
action :delete, 'DELETE /rest/collections/:id' do
|
28
|
+
handler(200, 201, 204) { |response| true }
|
29
|
+
end
|
30
|
+
|
31
|
+
action :delete_item, 'DELETE /rest/collections/:id/items/:item_id' do
|
32
|
+
handler(200, 201, 204) { |response| true }
|
33
|
+
end
|
34
|
+
|
35
|
+
action :items, 'GET /rest/collections/:id/items' do
|
36
|
+
query_keys :expand, :limit, :offset
|
37
|
+
handler(200) do |response|
|
38
|
+
Dspace::Builders::ModelBuilder.build_items(JSON.parse(response.body))
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
action :create_item, 'POST /rest/collections/:id/items' do
|
43
|
+
body { |object| JSON.generate(object.to_h) }
|
44
|
+
handler(200, 201) { |response| true }
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
module Dspace
|
2
|
+
module Resources
|
3
|
+
class CommunityResource < ResourceKit::Resource
|
4
|
+
|
5
|
+
resources do
|
6
|
+
default_handler(401) { raise NotAuthorizedError, 'This request requires authentication' }
|
7
|
+
|
8
|
+
action :all, 'GET /rest/communities' do
|
9
|
+
query_keys :expand
|
10
|
+
handler(200) do |response|
|
11
|
+
Dspace::Builders::ModelBuilder.build_communities(JSON.parse(response.body))
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
action :top_communities, 'GET /rest/communities/top-communities' do
|
16
|
+
query_keys :expand
|
17
|
+
handler(200) do |response|
|
18
|
+
Dspace::Builders::ModelBuilder.build_communities(JSON.parse(response.body))
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
action :find, 'GET /rest/communities/:id' do
|
23
|
+
query_keys :expand
|
24
|
+
handler(200) do |response|
|
25
|
+
Dspace::Community.new(JSON.parse(response.body))
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
action :collections, 'GET /rest/communities/:id/collections' do
|
30
|
+
query_keys :expand
|
31
|
+
handler(200) do |response|
|
32
|
+
Dspace::Builders::ModelBuilder.build_collections(JSON.parse(response.body))
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
action :sub_communities, 'GET /rest/communities/:id/communities' do
|
37
|
+
query_keys :expand
|
38
|
+
handler(200) do |response|
|
39
|
+
Dspace::Builders::ModelBuilder.build_communities(JSON.parse(response.body))
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
action :create, 'POST /rest/communities' do
|
44
|
+
body { |object| JSON.generate(object.to_h) }
|
45
|
+
handler(200, 201) { |response| true }
|
46
|
+
end
|
47
|
+
|
48
|
+
action :create_subcommunity, 'POST /rest/communities/:id/communities' do
|
49
|
+
body { |object| JSON.generate(object.to_h) }
|
50
|
+
handler(200, 201) { |response| true }
|
51
|
+
end
|
52
|
+
|
53
|
+
action :create_collection, 'POST /rest/communities/:id/collections' do
|
54
|
+
body { |object| JSON.generate(object.to_h) }
|
55
|
+
handler(200, 201) { |response| true }
|
56
|
+
end
|
57
|
+
|
58
|
+
action :update, 'PUT /rest/communities/:id' do
|
59
|
+
body { |object| JSON.generate(object.to_h) }
|
60
|
+
handler(200, 201) { |response| true }
|
61
|
+
end
|
62
|
+
|
63
|
+
action :delete, 'DELETE /rest/communities/:id' do
|
64
|
+
handler(200, 201, 204) { |response| true }
|
65
|
+
end
|
66
|
+
|
67
|
+
action :delete_collection, 'DELETE /rest/communities/:id/collections/:collection_id' do
|
68
|
+
handler(200, 201, 204) { |response| true }
|
69
|
+
end
|
70
|
+
|
71
|
+
action :delete_subcommunity, 'DELETE /rest/communities/:id/communities/:subcommunity_id' do
|
72
|
+
handler(200, 201, 204) { |response| true }
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
module Dspace
|
2
|
+
module Resources
|
3
|
+
class ItemResource < ResourceKit::Resource
|
4
|
+
|
5
|
+
resources do
|
6
|
+
default_handler(401) { raise NotAuthorizedError, 'This request requires authentication' }
|
7
|
+
|
8
|
+
action :all, 'GET /rest/items' do
|
9
|
+
query_keys :expand
|
10
|
+
handler(200) do |response|
|
11
|
+
Dspace::Builders::ModelBuilder.build_items(JSON.parse(response.body))
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
action :find, 'GET /rest/items/:id' do
|
16
|
+
query_keys :expand
|
17
|
+
handler(200) do |response|
|
18
|
+
Dspace::Item.new(JSON.parse(response.body))
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
action :metadata, 'GET /rest/items/:id/metadata' do
|
23
|
+
handler(200) do |response|
|
24
|
+
Dspace::Builders::ModelBuilder.build_metadatas(JSON.parse(response.body))
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
action :bitstreams, 'GET /rest/items/:id/bitstreams' do
|
29
|
+
query_keys :expand, :limit, :offset
|
30
|
+
handler(200) do |response|
|
31
|
+
Dspace::Builders::ModelBuilder.build_bitstreams(JSON.parse(response.body))
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
action :delete, 'DELETE /rest/items/:id' do
|
36
|
+
handler(200, 201, 204) { |response| true }
|
37
|
+
end
|
38
|
+
|
39
|
+
action :clear_metadata, 'DELETE /rest/items/:id/metadata' do
|
40
|
+
handler(200, 201, 204) { |response| true }
|
41
|
+
end
|
42
|
+
|
43
|
+
action :delete_bitstream, 'DELETE /rest/items/:id/bitstreams/:bitstream_id' do
|
44
|
+
handler(200, 201, 204) { |response| true }
|
45
|
+
end
|
46
|
+
|
47
|
+
action :add_metadata, 'POST /rest/items/:id/metadata' do
|
48
|
+
body { |objects| Dspace::Builders::HashBuilder.models2hash(objects) }
|
49
|
+
handler(200, 201) { |response| true }
|
50
|
+
end
|
51
|
+
|
52
|
+
action :add_bitstream, 'POST /rest/items/:id/bitstreams' do
|
53
|
+
query_keys :name, :description
|
54
|
+
body { |file| Base64.encode64(file.read) }
|
55
|
+
handler(200) { |response| Dspace::Bitstream.new(JSON.parse(response.body)) }
|
56
|
+
end
|
57
|
+
|
58
|
+
action :update_metadata, 'PUT /rest/items/:id/metadata' do
|
59
|
+
body { |object| JSON.generate(object.to_h) }
|
60
|
+
handler(200, 201) { |response| true }
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Dspace
|
2
|
+
module Resources
|
3
|
+
class StatusResource < ResourceKit::Resource
|
4
|
+
|
5
|
+
resources do
|
6
|
+
|
7
|
+
action :test, 'GET /rest/test' do
|
8
|
+
handler(200, 201) { |response| true }
|
9
|
+
end
|
10
|
+
|
11
|
+
action :status, 'GET /rest/status' do
|
12
|
+
handler(200) { |response| JSON.parse(response.body) }
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|