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
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 3b3f08f485b23a007cb64a7c526cf2684c4154c2
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 2e8af21ca901677bfe3188c29f97dbc9d53729e4
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: f5223f543ac5d1112864ba60122666dfedb274ec9f69a1cc471686cb11428d3ea13294770d57a314c46af60412413454ac37162862c1fa1b86f2967ace787074
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 3fd6de4861ea64105255b68cf462c8b2ec14e1f2b7495c4f60cc53a91fa7281abdacb795bb7ffc13bc3e9ad60f3486e043a6d51550f87421c4f90052f1bd64a0
         
     | 
    
        data/.gitignore
    ADDED
    
    
    
        data/.rbenv
    ADDED
    
    | 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            2.2.0
         
     | 
    
        data/.rspec
    ADDED
    
    
    
        data/Gemfile
    ADDED
    
    
    
        data/README.md
    ADDED
    
    | 
         @@ -0,0 +1,58 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # DSpace REST Client
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            ## Installation
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            Add this line to your application's Gemfile:
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 8 
     | 
    
         
            +
            gem 'dspace_rest_client'
         
     | 
| 
      
 9 
     | 
    
         
            +
            ```
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            And then execute:
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                $ bundle
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            Or install it yourself as:
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                $ gem install dspace_rest_client
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            ## Get started
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            Some requests requires user authentication.
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 24 
     | 
    
         
            +
            require 'dspace'
         
     | 
| 
      
 25 
     | 
    
         
            +
            client = Dspace::Client.new(dspace_api: 'https://demo.dspace.org/')
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            if !client.is_running?
         
     | 
| 
      
 28 
     | 
    
         
            +
              raise 'Can\'t connect to DSpace API.'
         
     | 
| 
      
 29 
     | 
    
         
            +
            end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            # authenticate
         
     | 
| 
      
 32 
     | 
    
         
            +
            client.login 'dspacedemo+admin@gmail.com', 'dspace'
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
            # create an community
         
     | 
| 
      
 35 
     | 
    
         
            +
            client.communities.create(Dspace::Community.new({'name' => 'Testando'}))
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
            # get a bitstream and your file
         
     | 
| 
      
 38 
     | 
    
         
            +
            bitstream = client.bitstreams.find(id: 20, expand: 'parent')
         
     | 
| 
      
 39 
     | 
    
         
            +
            tmp_file = client.bitstreams.retrieve(id: 20) #<Tempfile:/tmp/..._teste.jpg>
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
            # creating a new bitstream for some item
         
     | 
| 
      
 42 
     | 
    
         
            +
            file = File.new('/your/path/Pictures/Celular/some_book.pdf', 'r')
         
     | 
| 
      
 43 
     | 
    
         
            +
            bitstream = client.items.add_bitstream(file, id: 11, name: 'some_book.pdf', description: 'testing upload a pdf book')
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
            # updating bitstream metadata
         
     | 
| 
      
 46 
     | 
    
         
            +
            bitstream.name = 'new_book_name.pdf'
         
     | 
| 
      
 47 
     | 
    
         
            +
            client.bitstreams.update(bitstream, id: bitstream.id)
         
     | 
| 
      
 48 
     | 
    
         
            +
            ```
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
            To see more examples, visit our Wiki.
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
            ## Development
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
            After checking out the repo, run `bin/setup` to install dependencies. Then, run `rspec spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
            ## Contributing
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
            Bug reports and pull requests are welcome. This project is intended to be a safe, welcoming space for collaboration.
         
     | 
    
        data/Rakefile
    ADDED
    
    | 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require "bundler/gem_tasks"
         
     | 
    
        data/bin/console
    ADDED
    
    | 
         @@ -0,0 +1,14 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #!/usr/bin/env ruby
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require "bundler/setup"
         
     | 
| 
      
 4 
     | 
    
         
            +
            require "dspace"
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            # You can add fixtures and/or initialization code here to make experimenting
         
     | 
| 
      
 7 
     | 
    
         
            +
            # with your gem easier. You can also use a different console, if you like.
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            # (If you use this, don't forget to add pry to your Gemfile!)
         
     | 
| 
      
 10 
     | 
    
         
            +
            # require "pry"
         
     | 
| 
      
 11 
     | 
    
         
            +
            # Pry.start
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            require "irb"
         
     | 
| 
      
 14 
     | 
    
         
            +
            IRB.start
         
     | 
    
        data/bin/setup
    ADDED
    
    
| 
         @@ -0,0 +1,30 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # coding: utf-8
         
     | 
| 
      
 2 
     | 
    
         
            +
            lib = File.expand_path('../lib', __FILE__)
         
     | 
| 
      
 3 
     | 
    
         
            +
            $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'dspace/version'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            Gem::Specification.new do |spec|
         
     | 
| 
      
 7 
     | 
    
         
            +
              spec.date = '2015-12-04'
         
     | 
| 
      
 8 
     | 
    
         
            +
              spec.name = "dspace_rest_client"
         
     | 
| 
      
 9 
     | 
    
         
            +
              spec.version = Dspace::VERSION
         
     | 
| 
      
 10 
     | 
    
         
            +
              spec.authors = ["Mauricio Giacomini Girardello", "Lucas Ernesto Kindinger", "Bruno N. Zanette", "Mateus Rambo Strey"]
         
     | 
| 
      
 11 
     | 
    
         
            +
              spec.email = ["mauriciogiacomini4@gmail.com", "kindingerlek@hotmail.com"]
         
     | 
| 
      
 12 
     | 
    
         
            +
              spec.summary = 'DSpace REST API Client for Ruby'
         
     | 
| 
      
 13 
     | 
    
         
            +
              spec.description = 'DSpace REST-API Client for Ruby! Implements all DSpace REST-API endpoints requests.'
         
     | 
| 
      
 14 
     | 
    
         
            +
              spec.homepage = 'https://gitlab.c3sl.ufpr.br/c3sl/dspace-rest-client'
         
     | 
| 
      
 15 
     | 
    
         
            +
              spec.license = 'GNU - General Public License'
         
     | 
| 
      
 16 
     | 
    
         
            +
              spec.test_files = `git ls-files -z spec/`.split("\0")
         
     | 
| 
      
 17 
     | 
    
         
            +
              spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(spec)/}) }
         
     | 
| 
      
 18 
     | 
    
         
            +
              spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
         
     | 
| 
      
 19 
     | 
    
         
            +
              spec.require_paths = ["lib"]
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
              spec.add_runtime_dependency "json", '~> 1.8', '>= 1.8.3'
         
     | 
| 
      
 22 
     | 
    
         
            +
              spec.add_runtime_dependency "resource_kit", "~> 0.1.4"
         
     | 
| 
      
 23 
     | 
    
         
            +
              spec.add_runtime_dependency "faraday", "~> 0.9.2"
         
     | 
| 
      
 24 
     | 
    
         
            +
              spec.add_runtime_dependency "net-http-persistent", '~> 2.9', '>= 2.9.4'
         
     | 
| 
      
 25 
     | 
    
         
            +
              spec.add_runtime_dependency "activesupport", '~> 4.2', '>= 4.2.0'
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
              spec.add_development_dependency "bundler", "~> 1.10"
         
     | 
| 
      
 28 
     | 
    
         
            +
              spec.add_development_dependency "rake", "~> 10.0"
         
     | 
| 
      
 29 
     | 
    
         
            +
              spec.add_development_dependency 'rspec', '~> 3.4', '>= 3.4.0'
         
     | 
| 
      
 30 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/dspace.rb
    ADDED
    
    | 
         @@ -0,0 +1,31 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require "forwardable"
         
     | 
| 
      
 2 
     | 
    
         
            +
            require "json"
         
     | 
| 
      
 3 
     | 
    
         
            +
            require "resource_kit"
         
     | 
| 
      
 4 
     | 
    
         
            +
            require "faraday"
         
     | 
| 
      
 5 
     | 
    
         
            +
            require "active_support/all"
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            require_relative "dspace/version"
         
     | 
| 
      
 8 
     | 
    
         
            +
            require_relative "dspace/resources/community_resource"
         
     | 
| 
      
 9 
     | 
    
         
            +
            require_relative "dspace/resources/collection_resource"
         
     | 
| 
      
 10 
     | 
    
         
            +
            require_relative "dspace/resources/authentication_resource"
         
     | 
| 
      
 11 
     | 
    
         
            +
            require_relative "dspace/resources/bitstream_resource"
         
     | 
| 
      
 12 
     | 
    
         
            +
            require_relative "dspace/resources/status_resource"
         
     | 
| 
      
 13 
     | 
    
         
            +
            require_relative "dspace/resources/item_resource"
         
     | 
| 
      
 14 
     | 
    
         
            +
            require_relative "dspace/builders/hash_builder"
         
     | 
| 
      
 15 
     | 
    
         
            +
            require_relative "dspace/builders/model_builder"
         
     | 
| 
      
 16 
     | 
    
         
            +
            require_relative "dspace/builders/tempfile_builder"
         
     | 
| 
      
 17 
     | 
    
         
            +
            require_relative "dspace/community"
         
     | 
| 
      
 18 
     | 
    
         
            +
            require_relative "dspace/collection"
         
     | 
| 
      
 19 
     | 
    
         
            +
            require_relative "dspace/item"
         
     | 
| 
      
 20 
     | 
    
         
            +
            require_relative "dspace/metadata"
         
     | 
| 
      
 21 
     | 
    
         
            +
            require_relative "dspace/bitstream"
         
     | 
| 
      
 22 
     | 
    
         
            +
            require_relative "dspace/policy"
         
     | 
| 
      
 23 
     | 
    
         
            +
            require_relative "dspace/client"
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
            module Dspace
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
              class NotAuthorizedError < StandardError; end
         
     | 
| 
      
 28 
     | 
    
         
            +
              class InvalidTokenError < StandardError; end
         
     | 
| 
      
 29 
     | 
    
         
            +
              class InvalidCredentialsError < StandardError; end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -1,5 +1,6 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            module  
     | 
| 
      
 1 
     | 
    
         
            +
            module Dspace
         
     | 
| 
       2 
2 
     | 
    
         
             
              class Bitstream
         
     | 
| 
      
 3 
     | 
    
         
            +
                include Dspace::Builders::HashBuilder
         
     | 
| 
       3 
4 
     | 
    
         | 
| 
       4 
5 
     | 
    
         
             
                attr_accessor :name, :bundle_name,
         
     | 
| 
       5 
6 
     | 
    
         
             
                              :description, :format, :mime_type
         
     | 
| 
         @@ -22,12 +23,12 @@ module DSpaceRest 
     | 
|
| 
       22 
23 
     | 
    
         
             
                  @retrieve_link = args['retrieveLink']
         
     | 
| 
       23 
24 
     | 
    
         
             
                  @check_sum = args['checkSum']
         
     | 
| 
       24 
25 
     | 
    
         
             
                  @sequence_id = args['sequenceId']
         
     | 
| 
       25 
     | 
    
         
            -
                  @policies =  
     | 
| 
      
 26 
     | 
    
         
            +
                  @policies = Dspace::Builders::ModelBuilder.build_policies(args['policies'])
         
     | 
| 
       26 
27 
     | 
    
         
             
                  @expand = args['expand']
         
     | 
| 
       27 
28 
     | 
    
         
             
                end
         
     | 
| 
       28 
29 
     | 
    
         | 
| 
       29 
30 
     | 
    
         
             
                def to_h
         
     | 
| 
       30 
     | 
    
         
            -
                   
     | 
| 
      
 31 
     | 
    
         
            +
                  {
         
     | 
| 
       31 
32 
     | 
    
         
             
                      id: @id,
         
     | 
| 
       32 
33 
     | 
    
         
             
                      name: @name,
         
     | 
| 
       33 
34 
     | 
    
         
             
                      type: @type,
         
     | 
| 
         @@ -44,8 +45,6 @@ module DSpaceRest 
     | 
|
| 
       44 
45 
     | 
    
         
             
                      policies: @policies,
         
     | 
| 
       45 
46 
     | 
    
         
             
                      expand: @expand
         
     | 
| 
       46 
47 
     | 
    
         
             
                  }
         
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
     | 
    
         
            -
                  h
         
     | 
| 
       49 
48 
     | 
    
         
             
                end
         
     | 
| 
       50 
49 
     | 
    
         
             
              end
         
     | 
| 
       51 
50 
     | 
    
         
             
            end
         
     | 
| 
         @@ -1,18 +1,22 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            module  
     | 
| 
      
 1 
     | 
    
         
            +
            module Dspace
         
     | 
| 
       2 
2 
     | 
    
         
             
              module Builders
         
     | 
| 
       3 
3 
     | 
    
         
             
                module HashBuilder
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
      
 5 
     | 
    
         
            +
                  def obj2hash(list)
         
     | 
| 
      
 6 
     | 
    
         
            +
                    self.class.models2hash list
         
     | 
| 
      
 7 
     | 
    
         
            +
                  end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
       5 
9 
     | 
    
         
             
                  def self.models2hash(list)
         
     | 
| 
       6 
     | 
    
         
            -
                     
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
      
 10 
     | 
    
         
            +
                    if list.is_a? Array
         
     | 
| 
      
 11 
     | 
    
         
            +
                      hash = []
         
     | 
| 
       8 
12 
     | 
    
         
             
                      list.each do |m|
         
     | 
| 
       9 
13 
     | 
    
         
             
                        hash << m.to_h
         
     | 
| 
       10 
14 
     | 
    
         
             
                      end
         
     | 
| 
       11 
     | 
    
         
            -
                    end
         
     | 
| 
       12 
15 
     | 
    
         | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
      
 16 
     | 
    
         
            +
                      hash
         
     | 
| 
      
 17 
     | 
    
         
            +
                    end
         
     | 
| 
       14 
18 
     | 
    
         
             
                  end
         
     | 
| 
       15 
19 
     | 
    
         | 
| 
       16 
20 
     | 
    
         
             
                end
         
     | 
| 
       17 
21 
     | 
    
         
             
              end
         
     | 
| 
       18 
     | 
    
         
            -
            end
         
     | 
| 
      
 22 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -1,4 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            module  
     | 
| 
      
 1 
     | 
    
         
            +
            module Dspace
         
     | 
| 
       2 
2 
     | 
    
         
             
              module Builders
         
     | 
| 
       3 
3 
     | 
    
         
             
                module ModelBuilder
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
         @@ -6,7 +6,7 @@ module DSpaceRest 
     | 
|
| 
       6 
6 
     | 
    
         
             
                    return communities if communities.nil?
         
     | 
| 
       7 
7 
     | 
    
         
             
                    colls = []
         
     | 
| 
       8 
8 
     | 
    
         
             
                    communities.each do |c|
         
     | 
| 
       9 
     | 
    
         
            -
                      colls <<  
     | 
| 
      
 9 
     | 
    
         
            +
                      colls << Dspace::Community.new(c)
         
     | 
| 
       10 
10 
     | 
    
         
             
                    end
         
     | 
| 
       11 
11 
     | 
    
         
             
                    colls
         
     | 
| 
       12 
12 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -15,7 +15,7 @@ module DSpaceRest 
     | 
|
| 
       15 
15 
     | 
    
         
             
                    return collections if collections.nil?
         
     | 
| 
       16 
16 
     | 
    
         
             
                    colls = []
         
     | 
| 
       17 
17 
     | 
    
         
             
                    collections.each do |c|
         
     | 
| 
       18 
     | 
    
         
            -
                      colls <<  
     | 
| 
      
 18 
     | 
    
         
            +
                      colls << Dspace::Collection.new(c)
         
     | 
| 
       19 
19 
     | 
    
         
             
                    end
         
     | 
| 
       20 
20 
     | 
    
         
             
                    colls
         
     | 
| 
       21 
21 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -24,7 +24,7 @@ module DSpaceRest 
     | 
|
| 
       24 
24 
     | 
    
         
             
                    return items if items.nil?
         
     | 
| 
       25 
25 
     | 
    
         
             
                    colls = []
         
     | 
| 
       26 
26 
     | 
    
         
             
                    items.each do |c|
         
     | 
| 
       27 
     | 
    
         
            -
                      colls <<  
     | 
| 
      
 27 
     | 
    
         
            +
                      colls << Dspace::Item.new(c)
         
     | 
| 
       28 
28 
     | 
    
         
             
                    end
         
     | 
| 
       29 
29 
     | 
    
         
             
                    colls
         
     | 
| 
       30 
30 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -33,7 +33,7 @@ module DSpaceRest 
     | 
|
| 
       33 
33 
     | 
    
         
             
                    return bitstreams if bitstreams.nil?
         
     | 
| 
       34 
34 
     | 
    
         
             
                    colls = []
         
     | 
| 
       35 
35 
     | 
    
         
             
                    bitstreams.each do |c|
         
     | 
| 
       36 
     | 
    
         
            -
                      colls <<  
     | 
| 
      
 36 
     | 
    
         
            +
                      colls << Dspace::Bitstream.new(c)
         
     | 
| 
       37 
37 
     | 
    
         
             
                    end
         
     | 
| 
       38 
38 
     | 
    
         
             
                    colls
         
     | 
| 
       39 
39 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -42,7 +42,7 @@ module DSpaceRest 
     | 
|
| 
       42 
42 
     | 
    
         
             
                    return metadatas if metadatas.nil?
         
     | 
| 
       43 
43 
     | 
    
         
             
                    colls = []
         
     | 
| 
       44 
44 
     | 
    
         
             
                    metadatas.each do |c|
         
     | 
| 
       45 
     | 
    
         
            -
                      colls <<  
     | 
| 
      
 45 
     | 
    
         
            +
                      colls << Dspace::Metadata.new(c)
         
     | 
| 
       46 
46 
     | 
    
         
             
                    end
         
     | 
| 
       47 
47 
     | 
    
         
             
                    colls
         
     | 
| 
       48 
48 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -51,7 +51,7 @@ module DSpaceRest 
     | 
|
| 
       51 
51 
     | 
    
         
             
                    return policies if policies.nil?
         
     | 
| 
       52 
52 
     | 
    
         
             
                    colls = []
         
     | 
| 
       53 
53 
     | 
    
         
             
                    policies.each do |c|
         
     | 
| 
       54 
     | 
    
         
            -
                      colls <<  
     | 
| 
      
 54 
     | 
    
         
            +
                      colls << Dspace::Policy.new(c)
         
     | 
| 
       55 
55 
     | 
    
         
             
                    end
         
     | 
| 
       56 
56 
     | 
    
         
             
                    colls
         
     | 
| 
       57 
57 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -0,0 +1,26 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Dspace
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Builders
         
     | 
| 
      
 3 
     | 
    
         
            +
                module TempfileBuilder
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
                  def self.build(filename, contents = nil)
         
     | 
| 
      
 6 
     | 
    
         
            +
                    file = Tempfile.new([sanitize_filename(filename), File.extname(filename)]).tap do |f|
         
     | 
| 
      
 7 
     | 
    
         
            +
                      f.write contents
         
     | 
| 
      
 8 
     | 
    
         
            +
                      f.close
         
     | 
| 
      
 9 
     | 
    
         
            +
                    end
         
     | 
| 
      
 10 
     | 
    
         
            +
                  end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                  private
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                  def self.sanitize_filename(filename)
         
     | 
| 
      
 15 
     | 
    
         
            +
                    filename.strip do |name|
         
     | 
| 
      
 16 
     | 
    
         
            +
                      # NOTE: File.basename doesn't work right with Windows paths on Unix
         
     | 
| 
      
 17 
     | 
    
         
            +
                      # get only the filename, not the whole path
         
     | 
| 
      
 18 
     | 
    
         
            +
                      name.gsub!(/^.*(\\|\/)/, '')
         
     | 
| 
      
 19 
     | 
    
         
            +
                      # Strip out the non-ascii character
         
     | 
| 
      
 20 
     | 
    
         
            +
                      name.gsub!(/[^0-9A-Za-z.\-]/, '_')
         
     | 
| 
      
 21 
     | 
    
         
            +
                    end
         
     | 
| 
      
 22 
     | 
    
         
            +
                  end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                end
         
     | 
| 
      
 25 
     | 
    
         
            +
              end
         
     | 
| 
      
 26 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,78 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Dspace
         
     | 
| 
      
 2 
     | 
    
         
            +
              class Client
         
     | 
| 
      
 3 
     | 
    
         
            +
                DSPACE_API = 'https://demo.dspace.org'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
                attr_reader :access_token
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                def initialize(options = {})
         
     | 
| 
      
 8 
     | 
    
         
            +
                  @access_token = options.with_indifferent_access[:access_token]
         
     | 
| 
      
 9 
     | 
    
         
            +
                  @dspace_api = options.with_indifferent_access[:dspace_api]
         
     | 
| 
      
 10 
     | 
    
         
            +
                  @logger = options.with_indifferent_access[:logger]
         
     | 
| 
      
 11 
     | 
    
         
            +
                end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                def connection
         
     | 
| 
      
 14 
     | 
    
         
            +
                  Faraday.new(connection_options) do |req|
         
     | 
| 
      
 15 
     | 
    
         
            +
                    req.request :multipart
         
     | 
| 
      
 16 
     | 
    
         
            +
                    req.request :url_encoded
         
     | 
| 
      
 17 
     | 
    
         
            +
                    req.use(Faraday::Response::Logger, @logger) unless @logger.nil?
         
     | 
| 
      
 18 
     | 
    
         
            +
                    req.adapter :net_http_persistent
         
     | 
| 
      
 19 
     | 
    
         
            +
                  end
         
     | 
| 
      
 20 
     | 
    
         
            +
                end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                def self.resources
         
     | 
| 
      
 23 
     | 
    
         
            +
                  {
         
     | 
| 
      
 24 
     | 
    
         
            +
                      bitstreams: ::Dspace::Resources::BitstreamResource,
         
     | 
| 
      
 25 
     | 
    
         
            +
                      items: ::Dspace::Resources::ItemResource,
         
     | 
| 
      
 26 
     | 
    
         
            +
                      collections: ::Dspace::Resources::CollectionResource,
         
     | 
| 
      
 27 
     | 
    
         
            +
                      communities: ::Dspace::Resources::CommunityResource,
         
     | 
| 
      
 28 
     | 
    
         
            +
                      status: ::Dspace::Resources::StatusResource,
         
     | 
| 
      
 29 
     | 
    
         
            +
                      authentication: ::Dspace::Resources::AuthenticationResource
         
     | 
| 
      
 30 
     | 
    
         
            +
                  }
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                def method_missing(name, *args, &block)
         
     | 
| 
      
 34 
     | 
    
         
            +
                  resource(name) || super
         
     | 
| 
      
 35 
     | 
    
         
            +
                end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                def resources
         
     | 
| 
      
 38 
     | 
    
         
            +
                  @resources ||= {}
         
     | 
| 
      
 39 
     | 
    
         
            +
                end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                def is_running?
         
     | 
| 
      
 42 
     | 
    
         
            +
                  resource(:status).test
         
     | 
| 
      
 43 
     | 
    
         
            +
                end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                def login(email, password)
         
     | 
| 
      
 46 
     | 
    
         
            +
                  @access_token = resource(:authentication).login(email, password)
         
     | 
| 
      
 47 
     | 
    
         
            +
                end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                def logout
         
     | 
| 
      
 50 
     | 
    
         
            +
                  resource(:authentication).logout
         
     | 
| 
      
 51 
     | 
    
         
            +
                  @access_token = nil
         
     | 
| 
      
 52 
     | 
    
         
            +
                end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
                private
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                def resource(name)
         
     | 
| 
      
 57 
     | 
    
         
            +
                  if self.class.resources.keys.include?(name)
         
     | 
| 
      
 58 
     | 
    
         
            +
                    resources[name] ||= self.class.resources[name].new(connection: connection)
         
     | 
| 
      
 59 
     | 
    
         
            +
                    resources[name]
         
     | 
| 
      
 60 
     | 
    
         
            +
                  end
         
     | 
| 
      
 61 
     | 
    
         
            +
                end
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
                def connection_options
         
     | 
| 
      
 64 
     | 
    
         
            +
                  {
         
     | 
| 
      
 65 
     | 
    
         
            +
                      url: @dspace_api || DSPACE_API,
         
     | 
| 
      
 66 
     | 
    
         
            +
                      ssl: {
         
     | 
| 
      
 67 
     | 
    
         
            +
                          verify: false
         
     | 
| 
      
 68 
     | 
    
         
            +
                      },
         
     | 
| 
      
 69 
     | 
    
         
            +
                      headers: {
         
     | 
| 
      
 70 
     | 
    
         
            +
                          content_type: 'application/json',
         
     | 
| 
      
 71 
     | 
    
         
            +
                          accept: 'application/json',
         
     | 
| 
      
 72 
     | 
    
         
            +
                          'rest-dspace-token' => access_token.to_s,
         
     | 
| 
      
 73 
     | 
    
         
            +
                          user_agent: "dspace-rest-client #{Dspace::VERSION}"
         
     | 
| 
      
 74 
     | 
    
         
            +
                      }
         
     | 
| 
      
 75 
     | 
    
         
            +
                  }
         
     | 
| 
      
 76 
     | 
    
         
            +
                end
         
     | 
| 
      
 77 
     | 
    
         
            +
              end
         
     | 
| 
      
 78 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -1,5 +1,6 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            module  
     | 
| 
      
 1 
     | 
    
         
            +
            module Dspace
         
     | 
| 
       2 
2 
     | 
    
         
             
              class Collection
         
     | 
| 
      
 3 
     | 
    
         
            +
                include Dspace::Builders::HashBuilder
         
     | 
| 
       3 
4 
     | 
    
         | 
| 
       4 
5 
     | 
    
         
             
                attr_accessor :name, :logo, :license, :copyright_text,
         
     | 
| 
       5 
6 
     | 
    
         
             
                              :introductory_text, :short_description, :sidebar_text
         
     | 
| 
         @@ -23,13 +24,13 @@ module DSpaceRest 
     | 
|
| 
       23 
24 
     | 
    
         
             
                  @number_items = args['numberItems']
         
     | 
| 
       24 
25 
     | 
    
         
             
                  @expand = args['expand']
         
     | 
| 
       25 
26 
     | 
    
         | 
| 
       26 
     | 
    
         
            -
                  @parent_community =  
     | 
| 
       27 
     | 
    
         
            -
                  @parent_community_list =  
     | 
| 
       28 
     | 
    
         
            -
                  @items =  
     | 
| 
      
 27 
     | 
    
         
            +
                  @parent_community = Dspace::Community.new(args['parentCommunity']) unless args['parentCommunity'].nil?
         
     | 
| 
      
 28 
     | 
    
         
            +
                  @parent_community_list = Dspace::Builders::ModelBuilder.build_communities(args['parentCommunityList'])
         
     | 
| 
      
 29 
     | 
    
         
            +
                  @items = Dspace::Builders::ModelBuilder.build_items(args['items'])
         
     | 
| 
       29 
30 
     | 
    
         
             
                end
         
     | 
| 
       30 
31 
     | 
    
         | 
| 
       31 
32 
     | 
    
         
             
                def to_h
         
     | 
| 
       32 
     | 
    
         
            -
                   
     | 
| 
      
 33 
     | 
    
         
            +
                  {
         
     | 
| 
       33 
34 
     | 
    
         
             
                      id: @id,
         
     | 
| 
       34 
35 
     | 
    
         
             
                      name: @name,
         
     | 
| 
       35 
36 
     | 
    
         
             
                      handle: @handle,
         
     | 
| 
         @@ -47,14 +48,6 @@ module DSpaceRest 
     | 
|
| 
       47 
48 
     | 
    
         
             
                      numberItems: @number_items,
         
     | 
| 
       48 
49 
     | 
    
         
             
                      expand: @expand
         
     | 
| 
       49 
50 
     | 
    
         
             
                  }
         
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
                  h
         
     | 
| 
       52 
     | 
    
         
            -
                end
         
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
                private
         
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
                def obj2hash(list)
         
     | 
| 
       57 
     | 
    
         
            -
                  DSpaceRest::Builders::HashBuilder.models2hash list
         
     | 
| 
       58 
51 
     | 
    
         
             
                end
         
     | 
| 
       59 
52 
     | 
    
         | 
| 
       60 
53 
     | 
    
         
             
              end
         
     |