zenodo 0.0.1 → 0.0.2

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 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