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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +11 -0
  3. data/.rbenv +1 -0
  4. data/.rspec +2 -0
  5. data/Gemfile +13 -0
  6. data/README.md +58 -0
  7. data/Rakefile +1 -0
  8. data/bin/console +14 -0
  9. data/bin/setup +7 -0
  10. data/dspace_rest_client.gemspec +30 -0
  11. data/lib/dspace.rb +31 -0
  12. data/lib/{dspacerest → dspace}/bitstream.rb +4 -5
  13. data/lib/{dspacerest → dspace}/builders/hash_builder.rb +10 -6
  14. data/lib/{dspacerest → dspace}/builders/model_builder.rb +7 -7
  15. data/lib/dspace/builders/tempfile_builder.rb +26 -0
  16. data/lib/dspace/client.rb +78 -0
  17. data/lib/{dspacerest → dspace}/collection.rb +6 -13
  18. data/lib/{dspacerest → dspace}/community.rb +6 -8
  19. data/lib/{dspacerest → dspace}/item.rb +11 -19
  20. data/lib/{dspacerest → dspace}/metadata.rb +1 -2
  21. data/lib/{dspacerest → dspace}/policy.rb +2 -4
  22. data/lib/dspace/resources/authentication_resource.rb +22 -0
  23. data/lib/dspace/resources/bitstream_resource.rb +63 -0
  24. data/lib/dspace/resources/collection_resource.rb +50 -0
  25. data/lib/dspace/resources/community_resource.rb +78 -0
  26. data/lib/dspace/resources/item_resource.rb +66 -0
  27. data/lib/dspace/resources/status_resource.rb +19 -0
  28. data/lib/dspace/version.rb +3 -0
  29. data/spec/lib/dspace/resources/authentication_resource_spec.rb +34 -0
  30. data/spec/lib/dspace/resources/bitstream_resource_spec.rb +45 -0
  31. data/spec/lib/dspace/resources/collection_resource_spec.rb +50 -0
  32. data/spec/lib/dspace/resources/community_resource_spec.rb +81 -0
  33. data/spec/lib/dspace/resources/item_resource_spec.rb +69 -0
  34. data/spec/spec_helper.rb +5 -0
  35. metadata +171 -43
  36. data/lib/dspace_client.rb +0 -64
  37. data/lib/dspace_rest_client.rb +0 -17
  38. data/lib/dspacerest/repositories/abstract_repository.rb +0 -37
  39. data/lib/dspacerest/repositories/bitstream_repository.rb +0 -62
  40. data/lib/dspacerest/repositories/collection_repository.rb +0 -78
  41. data/lib/dspacerest/repositories/community_repository.rb +0 -76
  42. data/lib/dspacerest/repositories/dspace_repository.rb +0 -27
  43. data/lib/dspacerest/repositories/item_repository.rb +0 -80
  44. data/lib/dspacerest/strategies/uploads/curl_strategy.rb +0 -27
  45. data/lib/dspacerest/strategies/uploads/rest_strategy.rb +0 -17
@@ -1,4 +1,4 @@
1
- module DSpaceRest
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 = DSpaceRest::Community.new(args['parentCommunity']) unless args['parentCommunity'].nil?
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 = DSpaceRest::Builders::ModelBuilder.build_communities(args['subcommunities'])
24
- @collections = DSpaceRest::Builders::ModelBuilder.build_collections(args['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
- h = {
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
- DSpaceRest::Builders::HashBuilder.models2hash list
51
+ Dspace::Builders::HashBuilder.models2hash list if list.is_a? Array
54
52
  end
55
53
 
56
54
  end
@@ -1,7 +1,6 @@
1
- require 'curb'
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 = DSpaceRest::Collection.new(args['parentCollection']) unless args['parentCollection'].nil?
20
- @parent_collection_list = DSpaceRest::Builders::ModelBuilder.build_collections(args['parentCollectionList']) || []
21
- @parent_community_list = DSpaceRest::Builders::ModelBuilder.build_communities(args['parentCommunityList']) || []
22
- @bit_streams = DSpaceRest::Builders::ModelBuilder.build_bitstreams(args['bitstreams']) || []
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 = DSpaceRest::Builders::ModelBuilder.build_metadatas(args['metadata']) || []
25
+ @metadata = Dspace::Builders::ModelBuilder.build_metadatas(args['metadata'])
27
26
  end
28
27
 
29
28
  def to_h
30
- h = {
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
- @metadata << DSpaceRest::Metadata.new(m)
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,6 +1,5 @@
1
- module DSpaceRest
1
+ module Dspace
2
2
  class Metadata
3
-
4
3
  attr_accessor :key, :value, :language
5
4
 
6
5
  def initialize args
@@ -1,4 +1,4 @@
1
- module DSpaceRest
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
- h = {
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