zenodo 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cd009682a5116ded3fc34b4c6cd29f379bb58151
4
- data.tar.gz: 8314835d3f2e89512b92bc9fa04e430eea5ddc74
3
+ metadata.gz: 760bbc73a127edd08e6a2d032397e17926e56763
4
+ data.tar.gz: dfda00d95a5a1eba199f094968903ad76e468bb3
5
5
  SHA512:
6
- metadata.gz: fea91f7edd47ebef37c68a0ee97ff217f229f4799d7a3334c939809e2ca7003eb85302a2c63b09bcfdab01dda7438adafca1b2c67c6a9ef21a7936cde98b617e
7
- data.tar.gz: 5c70998c8a61f1d1db0cbe9f73e51090503a591a165c1689cdff880ee6bdda01a6857f95c9c4608cee8b0918f0231d8d8a5324fcb0fa4f5a5a707682715a5383
6
+ metadata.gz: 5f86205fdf020b77ee74fd7ade072c3ad7f24d95918daf83439984045cefaa3de92d15ef302ee3bec3d3ef3725a07c746337fa5f2eefe5fae06b65fab8f4333f
7
+ data.tar.gz: 1af5d9ada62fb6f04e70d36ea57aa97c28d006eef252038701aee39a821a12f1d20c8ce5242552cfe238ecb919c395f65ef8d03941f0975ee1a2d0ff5f8c0072
data/.gitignore CHANGED
@@ -13,5 +13,6 @@
13
13
  *.so
14
14
  *.o
15
15
  *.a
16
+ *.gem
16
17
  mkmf.log
17
18
  /config/gem_secret.yml
@@ -22,6 +22,7 @@ module Zenodo
22
22
 
23
23
  # Setup HTTP request connection to Zenodo.
24
24
  @connection ||= Faraday.new do |builder|
25
+ builder.request :multipart
25
26
  builder.request :url_encoded
26
27
  builder.response :logger if Zenodo.logger
27
28
  builder.adapter Faraday.default_adapter
@@ -40,7 +41,15 @@ module Zenodo
40
41
  raise ArgumentError, "Unsupported method #{method.inspect}. Only :get, :post, :put, :delete are allowed" unless REQUESTS.include?(method)
41
42
 
42
43
  token_url = UrlHelper.build_url(path: "#{URL}#{path}", params: {access_token: @api_key})
43
- payload = !query.blank? ? JSON.generate(query) : nil
44
+ payload = nil
45
+ if query.present?
46
+ accept = headers.present? ? headers['Accept'] : nil
47
+ if accept.present? && accept == 'application/json'
48
+ payload = JSON.generate(query)
49
+ else
50
+ payload = query
51
+ end
52
+ end
44
53
  response = @connection.run_request(method, token_url, payload, headers)
45
54
 
46
55
  case response.status.to_i
@@ -9,6 +9,7 @@ require 'zenodo/dsl/depositions'
9
9
  require 'zenodo/dsl/deposition_files'
10
10
  require 'zenodo/dsl/deposition_actions'
11
11
  require 'zenodo/utils'
12
+ require 'mime-types'
12
13
 
13
14
  module Zenodo
14
15
  module DSL
@@ -13,7 +13,23 @@ module Zenodo
13
13
  end
14
14
 
15
15
  # Edit POST deposit/depositions/:id/actions/edit
16
+ # Unlock already submitted deposition for editing.
17
+ # @param [String, Fixnum] id A deposition's ID.
18
+ # @raise [ArgumentError] If the method arguments are blank.
19
+ # @return [Zenodo::Resources::deposition, nil].
20
+ def edit_deposition(id:)
21
+ raise ArgumentError, "ID cannot be blank" if id.blank?
22
+ Resources::Deposition.parse(request(:post, "deposit/depositions/#{id}/actions/edit", nil, nil))
23
+ end
16
24
 
17
25
  # Discard POST deposit/depositions/:id/actions/discard
26
+ # Discard changes in the current editing session.
27
+ # @param [String, Fixnum] id A deposition's ID.
28
+ # @raise [ArgumentError] If the method arguments are blank.
29
+ # @return [Zenodo::Resources::deposition, nil].
30
+ def discard_deposition(id:)
31
+ raise ArgumentError, "ID cannot be blank" if id.blank?
32
+ Resources::Deposition.parse(request(:post, "deposit/depositions/#{id}/actions/discard", nil, nil))
33
+ end
18
34
  end
19
35
  end
@@ -3,15 +3,85 @@ require 'zenodo/dsl'
3
3
  module Zenodo
4
4
  module DSL::DepositionFiles
5
5
  # List GET deposit/depositions/:id/files
6
+ # List all deposition files for a given deposition.
7
+ # @param [String, Fixnum] id A deposition's ID.
8
+ # @raise [ArgumentError] If the method arguments are blank.
9
+ # @return [Array, nil].
10
+ def get_deposition_files(id:)
11
+ raise ArgumentError, "ID cannot be blank" if id.blank?
12
+ Resources::DepositionFile.parse(request(:get, "deposit/depositions/#{id}/files", nil))
13
+ end
6
14
 
7
15
  # Create (upload) POST deposit/depositions/:id/files
16
+ # Upload a new file.
17
+ # Note the upload will fail if the filename already exists.
18
+ # @param [String, Fixnum] id A deposition's ID.
19
+ # @param [String] file The file to upload.
20
+ # @param [String] filename The name of the file (optional).
21
+ # @raise [ArgumentError] If the method arguments are blank.
22
+ # @return [Zenodo::Resources::DepositionFile].
23
+ def create_deposition_file(id:, file:, filename: '')
24
+ raise ArgumentError, "ID cannot be blank" if id.blank?
25
+ raise ArgumentError, "File cannot be blank" if file.blank?
26
+ content_type = MIME::Types.type_for(file).first.content_type
27
+ io = Faraday::UploadIO.new(file, content_type)
28
+ filename = File.basename(file) if filename.blank?
29
+ Resources::DepositionFile.parse(
30
+ request(:post, "deposit/depositions/#{id}/files", { name: filename, file: io },
31
+ "Content-Type" => "multipart/form-data")
32
+ )
33
+ end
8
34
 
9
35
  # Sort PUT deposit/depositions/:id/files
36
+ # Sort the files for a deposition. By default, the first file is shown in the file preview.
37
+ # @param [String, Fixnum] id A deposition's ID.
38
+ # @param [Array] deposition_files The deposition files to sort.
39
+ # @raise [ArgumentError] If the method arguments are blank.
40
+ # @return [Array, nil].
41
+ def sort_deposition_files(id:, deposition_files:)
42
+ raise ArgumentError, "ID cannot be blank" if id.blank?
43
+ raise ArgumentError, "Deposition files cannot be blank" if deposition_files.blank?
44
+ Resources::DepositionFile.parse(request(:put, "deposit/depositions/#{id}/files", deposition_files))
45
+ end
10
46
 
11
47
  # Retrieve GET deposit/depositions/:id/files/:file_id
48
+ # Retrieve a single deposition file.
49
+ # @param [String, Fixnum] id A deposition's ID.
50
+ # @param [String] file_id A deposition file ID.
51
+ # @raise [ArgumentError] If the method arguments are blank.
52
+ # @return [Zenodo::Resources::DepositionFile].
53
+ def get_deposition_file(id:, file_id:)
54
+ raise ArgumentError, "ID cannot be blank" if id.blank?
55
+ raise ArgumentError, "File ID cannot be blank" if file_id.blank?
56
+ Resources::DepositionFile.parse(request(:get, "deposit/depositions/#{id}/files/#{file_id}", nil))
57
+ end
12
58
 
13
59
  # Update PUT deposit/depositions/:id/files/:file_id
60
+ # Update a deposition file resource. Currently the only use is renaming an already uploaded file.
61
+ # If you one to replace the actual file, please delete the file and upload a new file.
62
+ # @param [String, Fixnum] id A deposition's ID.
63
+ # @param [String] file_id A deposition file ID.
64
+ # @param [Hash] deposition_file The deposition file to update.
65
+ # @raise [ArgumentError] If the method arguments are blank.
66
+ # @return [Zenodo::Resources::DepositionFile].
67
+ def update_deposition_file(id:, file_id:, deposition_file:)
68
+ raise ArgumentError, "ID cannot be blank" if id.blank?
69
+ raise ArgumentError, "File ID cannot be blank" if file_id.blank?
70
+ raise ArgumentError, "Deposition file cannot be blank" if deposition_file.blank?
71
+ Resources::DepositionFile.parse(request(:put, "deposit/depositions/#{id}/files/#{file_id}", deposition_file))
72
+ end
14
73
 
15
74
  # Delete DELETE deposit/depositions/:id/files/:file_id
75
+ # Delete an existing deposition file resource.
76
+ # Note, only deposition files for unpublished depositions may be deleted.
77
+ # @param [String, Fixnum] id A deposition's ID.
78
+ # @param [String] file_id A deposition file ID.
79
+ # @raise [ArgumentError] If the method arguments are blank.
80
+ # @return [Faraday::Response].
81
+ def delete_deposition_file(id:, file_id:)
82
+ raise ArgumentError, "ID cannot be blank" if id.blank?
83
+ raise ArgumentError, "File ID cannot be blank" if file_id.blank?
84
+ request(:delete, "deposit/depositions/#{id}/files/#{file_id}", nil, nil)
85
+ end
16
86
  end
17
87
  end
@@ -7,4 +7,5 @@ end
7
7
 
8
8
  require 'zenodo/resources/object'
9
9
  require 'zenodo/resources/deposition'
10
+ require 'zenodo/resources/deposition_file'
10
11
 
@@ -0,0 +1,9 @@
1
+ require 'zenodo/resources/object'
2
+
3
+ module Zenodo
4
+ module Resources
5
+ class DepositionFile < Zenodo::Resources::Object
6
+
7
+ end
8
+ end
9
+ end
@@ -1,3 +1,3 @@
1
1
  module Zenodo
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -0,0 +1 @@
1
+ Hello world
@@ -29,6 +29,22 @@ describe Zenodo::DSL::DepositionActions do
29
29
  end
30
30
 
31
31
  # Edit POST deposit/depositions/:id/actions/edit
32
+ describe '#edit_deposition' do
33
+ it 'allows editing of a deposition' do
34
+ VCR.use_cassette('edit_deposition') do
35
+ response = Zenodo.client.edit_deposition(id: deposition_id)
36
+ expect(response).to be_a(Deposition)
37
+ end
38
+ end
39
+ end
32
40
 
33
41
  # Discard POST deposit/depositions/:id/actions/discard
42
+ describe '#discard_deposition' do
43
+ it 'discards proposed edits of a deposition' do
44
+ VCR.use_cassette('discard_deposition') do
45
+ response = Zenodo.client.discard_deposition(id: deposition_id)
46
+ expect(response).to be_a(Deposition)
47
+ end
48
+ end
49
+ end
34
50
  end
@@ -1,5 +1,105 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Zenodo::DSL::DepositionFiles do
4
+ let(:deposition_attributes) do
5
+ {
6
+ 'metadata' => {
7
+ 'title' => 'My first upload',
8
+ 'upload_type' => 'poster',
9
+ 'description' => 'This is my first upload',
10
+ 'creators' =>[{'name' => 'Doe, John','affiliation' => 'ZENODO'}]
11
+ }
12
+ }
13
+ end
14
+ let(:deposition_file_attributes) do
15
+ {
16
+ 'filename' => 'test_file_upload.txt'
17
+ }
18
+ end
19
+ let!(:file) { File.join(APP_ROOT, 'spec/fixtures/test_file_upload.txt') }
20
+ let!(:deposition_id) do
21
+ VCR.use_cassette('create_deposition_with_files') do
22
+ deposition = Zenodo.client.create_deposition(deposition: deposition_attributes)
23
+ deposition['id']
24
+ end
25
+ end
26
+ let!(:deposition_file_id) do
27
+ VCR.use_cassette('create_deposition_file') do
28
+ deposition_file = Zenodo.client.create_deposition_file(
29
+ id: deposition_id, file: file)
30
+ deposition_file['id']
31
+ end
32
+ end
33
+ # let!(:deleted_deposition_file_id) do
34
+ # VCR.use_cassette('create_deposition_file_for_deletion') do
35
+ # deposition_file = Zenodo.client.create_deposition_file(
36
+ # id: deposition_id, file: file, filename: 'foobar.txt')
37
+ # deposition_file['id']
38
+ # end
39
+ # end
4
40
 
41
+ # List GET deposit/depositions/:id/files
42
+ # describe '#get_deposition_files' do
43
+ # it 'returns a array of files for a deposition' do
44
+ # VCR.use_cassette('get_deposition_files') do
45
+ # deposition_files = Zenodo.client.get_deposition_files(id: deposition_id)
46
+ # expect(deposition_files).to be_a(Array)
47
+ # expect(deposition_files.first).to be_a(DepositionFile)
48
+ # end
49
+ # end
50
+ # end
51
+
52
+ # Create (upload) POST deposit/depositions/:id/files
53
+ describe '#create_deposition_file' do
54
+ it 'uploads a file for a deposition' do
55
+ VCR.use_cassette('create_deposition_file') do
56
+ deposition_file = Zenodo.client.create_deposition_file(id: deposition_id, file: file)
57
+ expect(deposition_file).to be_a(DepositionFile)
58
+ end
59
+ end
60
+ end
61
+
62
+ # # Sort PUT deposit/depositions/:id/files
63
+ # describe '#sort_deposition_files' do
64
+ # it 'sorts files for a deposition' do
65
+ # # VCR.use_cassette('sort_deposition_files') do
66
+ # # deposition_files = Zenodo.client.sort_deposition_files(
67
+ # # id: deposition_id, deposition_files: deposition_file_attributes)
68
+ # # expect(deposition_files).to be_a(Array)
69
+ # # expect(deposition_files.first).to be_a(DepositionFile)
70
+ # # end
71
+ # end
72
+ # end
73
+
74
+ # Retrieve GET deposit/depositions/:id/files/:file_id
75
+ describe '#get_deposition_file' do
76
+ it 'gets a deposition file' do
77
+ VCR.use_cassette('get_deposition_file') do
78
+ deposition_file = Zenodo.client.get_deposition_file(id: deposition_id, file_id: deposition_file_id)
79
+ expect(deposition_file).to be_a(DepositionFile)
80
+ end
81
+ end
82
+ end
83
+
84
+ # # Update PUT deposit/depositions/:id/files/:file_id
85
+ # describe '#update_deposition_file' do
86
+ # it 'updates a deposition file' do
87
+ # # VCR.use_cassette('update_deposition_file') do
88
+ # # deposition_file = Zenodo.client.update_deposition_file(
89
+ # # id: deposition_id, deposition_file_id: deposition_file_id,
90
+ # # deposition_file: deposition_file_attributes)
91
+ # # expect(deposition_file).to be_a(DepositionFile)
92
+ # # end
93
+ # end
94
+ # end
95
+ #
96
+ # # Delete DELETE deposit/depositions/:id/files/:file_id
97
+ # describe '#delete_deposition_file' do
98
+ # it 'returns a response with code 204' do
99
+ # VCR.use_cassette('delete_deposition_file') do
100
+ # response = Zenodo.client.delete_deposition_file(id: deposition_id, deposition_file_id: deleted_deposition_file_id)
101
+ # expect(response.status).to eq(204)
102
+ # end
103
+ # end
104
+ # end
5
105
  end
@@ -19,6 +19,7 @@ Gem::Specification.new do |spec|
19
19
 
20
20
  spec.add_dependency 'faraday'
21
21
  spec.add_dependency 'activesupport'
22
+ spec.add_dependency 'mime-types'
22
23
 
23
24
  spec.add_development_dependency 'bundler', '~> 1.7'
24
25
  spec.add_development_dependency 'rake', '~> 10.0'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zenodo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Iorns
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-15 00:00:00.000000000 Z
11
+ date: 2014-11-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: mime-types
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: bundler
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -132,12 +146,14 @@ files:
132
146
  - lib/zenodo/errors/resource_not_found_error.rb
133
147
  - lib/zenodo/resources.rb
134
148
  - lib/zenodo/resources/deposition.rb
149
+ - lib/zenodo/resources/deposition_file.rb
135
150
  - lib/zenodo/resources/object.rb
136
151
  - lib/zenodo/resources/object/attributes.rb
137
152
  - lib/zenodo/resources/object/serializers.rb
138
153
  - lib/zenodo/utils.rb
139
154
  - lib/zenodo/utils/url_helper.rb
140
155
  - lib/zenodo/version.rb
156
+ - spec/fixtures/test_file_upload.txt
141
157
  - spec/spec_helper.rb
142
158
  - spec/zenodo/client_spec.rb
143
159
  - spec/zenodo/dsl/deposition_actions_spec.rb
@@ -169,6 +185,7 @@ signing_key:
169
185
  specification_version: 4
170
186
  summary: A Ruby wrapper for the Zenodo API.
171
187
  test_files:
188
+ - spec/fixtures/test_file_upload.txt
172
189
  - spec/spec_helper.rb
173
190
  - spec/zenodo/client_spec.rb
174
191
  - spec/zenodo/dsl/deposition_actions_spec.rb