figshare_api_v2 0.9.5 → 0.9.6
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/History.txt +36 -0
- data/lib/authors.rb +16 -13
- data/lib/base.rb +65 -65
- data/lib/figshare_api_v2.rb +19 -18
- data/lib/institutions.rb +80 -80
- data/lib/oai_pmh.rb +4 -2
- data/lib/other.rb +13 -13
- data/lib/private_articles.rb +135 -112
- data/lib/private_collections.rb +87 -84
- data/lib/private_projects.rb +79 -78
- data/lib/public_articles.rb +60 -51
- data/lib/public_collections.rb +50 -42
- data/lib/public_projects.rb +24 -23
- data/lib/upload.rb +53 -48
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1a7584ac8d8eb3bd0c1750eccfd3568eef74781b1bb3c5d3c3cce12fe17affab
|
4
|
+
data.tar.gz: 3d10aed08ec5bbb2b4f9534510e478d70c4ec3f20b2674e073c33249d9e6b56e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 141ffdc6d2487e5febd08fd547f2836efadd0b3d55907ba9e025f61846efed48c6e8382c52c0729b85093c5916a5c9569f5fa1adcc08d8650ef132f450ddc46f
|
7
|
+
data.tar.gz: cf73c9713e16b66e782ef79246a8f7422166d8ae8f06318d34f9fff2bd8bd517af9b1116050604c4ce4e58841b62590f87f4706384578f0f0b808726bc7d3373
|
data/History.txt
CHANGED
@@ -1,3 +1,39 @@
|
|
1
|
+
robertburrowes Mon Sep 20 12:31:26 2021 +1200
|
2
|
+
Test for listing all institutional accounts, and getting individual account quota.
|
3
|
+
robertburrowes Mon Sep 20 12:30:34 2021 +1200
|
4
|
+
Ran through Rubocop to clean up formatting, picking up a few error in quote usage; extra args; and other misc errors.
|
5
|
+
robertburrowes Thu Sep 2 16:26:24 2021 +1200
|
6
|
+
Reserve DOIs
|
7
|
+
robertburrowes Thu Sep 2 16:22:36 2021 +1200
|
8
|
+
Reworked, to check if articles already exist and to reserve DOIs.
|
9
|
+
robertburrowes Thu Sep 2 16:20:53 2021 +1200
|
10
|
+
Look for duplicate files in the source directories.
|
11
|
+
robertburrowes Thu Sep 2 16:17:02 2021 +1200
|
12
|
+
Fetch article IDs, if the conf file has them set to 0
|
13
|
+
robertburrowes Sat Apr 24 09:17:14 2021 +1200
|
14
|
+
check local dir against figshare
|
15
|
+
robertburrowes Thu Apr 22 12:31:17 2021 +1200
|
16
|
+
exclude sub test dir
|
17
|
+
robertburrowes Thu Apr 22 12:31:06 2021 +1200
|
18
|
+
missing ,
|
19
|
+
robertburrowes Thu Apr 22 12:30:49 2021 +1200
|
20
|
+
delete tmp test scripts
|
21
|
+
robertburrowes Fri Mar 19 13:54:58 2021 +1300
|
22
|
+
tests of creation of articles, and upload, using config file
|
23
|
+
robertburrowes Fri Mar 19 13:54:18 2021 +1300
|
24
|
+
Iterate across just last upload
|
25
|
+
robertburrowes Fri Mar 19 13:51:08 2021 +1300
|
26
|
+
Look for duplicate files within upload set, as defined by upload config file
|
27
|
+
robertburrowes Fri Mar 19 13:26:46 2021 +1300
|
28
|
+
hash to json naming changes
|
29
|
+
robertburrowes Fri Mar 19 13:24:00 2021 +1300
|
30
|
+
changes from hash to json naming
|
31
|
+
robertburrowes Fri Mar 19 13:17:26 2021 +1300
|
32
|
+
run from json config file, to test this works
|
33
|
+
robertburrowes Fri Mar 19 13:15:52 2021 +1300
|
34
|
+
Creating generic upload, that uses json config
|
35
|
+
robertburrowes Thu Mar 18 11:59:15 2021 +1300
|
36
|
+
Testing with Peter and Danes articles
|
1
37
|
robertburrowes Tue Mar 16 14:08:00 2021 +1300
|
2
38
|
private articles create was broken: Added private article body method
|
3
39
|
robertburrowes Tue Dec 1 14:43:50 2020 +1300
|
data/lib/authors.rb
CHANGED
@@ -12,23 +12,27 @@ module Figshare
|
|
12
12
|
# @param order [String] "published_date" Default, "modified_date", "views", "cites", "shares"
|
13
13
|
# @param order_direction [String] "desc" Default, "asc"
|
14
14
|
# @yield [Hash] {id, first_name, last_name, full_name, url_name, is_active, is_public, orcid_id, institution_id, group_id, job_title}
|
15
|
-
def search(
|
16
|
-
|
17
|
-
|
18
|
-
|
15
|
+
def search( search_for:,
|
16
|
+
institute: false,
|
17
|
+
group_id: nil,
|
18
|
+
orcid: nil,
|
19
|
+
is_active: true,
|
20
|
+
is_public: true,
|
21
|
+
order: 'published_date',
|
22
|
+
order_direction: 'desc',
|
19
23
|
&block
|
20
24
|
)
|
21
25
|
args = { 'search_for' => search_for }
|
22
|
-
args['institution'] = @institute_id
|
23
|
-
args['group_id'] = group_id
|
24
|
-
args['is_active'] = is_active
|
25
|
-
args['is_public'] = is_public
|
26
|
-
args['orcid'] = orcid
|
27
|
-
args['order'] = order
|
28
|
-
args['order_direction'] = order_direction
|
26
|
+
args['institution'] = @institute_id unless institute.nil?
|
27
|
+
args['group_id'] = group_id unless group_id.nil?
|
28
|
+
args['is_active'] = is_active unless is_active.nil?
|
29
|
+
args['is_public'] = is_public unless is_public.nil?
|
30
|
+
args['orcid'] = orcid unless orcid.nil?
|
31
|
+
args['order'] = order unless order.nil?
|
32
|
+
args['order_direction'] = order_direction unless order_direction.nil?
|
29
33
|
post(api_query: 'account/authors/search', args: args, &block)
|
30
34
|
end
|
31
|
-
|
35
|
+
|
32
36
|
# Get an authors details
|
33
37
|
#
|
34
38
|
# @param author_id [Integer] Figshare Author ID
|
@@ -37,5 +41,4 @@ module Figshare
|
|
37
41
|
get(api_query: "account/authors/#{author_id}", &block)
|
38
42
|
end
|
39
43
|
end
|
40
|
-
|
41
44
|
end
|
data/lib/base.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
module Figshare
|
1
|
+
module Figshare
|
2
2
|
# Supporting web calls to the API
|
3
3
|
#
|
4
4
|
class Base
|
@@ -8,7 +8,7 @@ module Figshare
|
|
8
8
|
attr_accessor :hostname
|
9
9
|
attr_accessor :api_url
|
10
10
|
attr_accessor :institute_id
|
11
|
-
|
11
|
+
|
12
12
|
# Init reads the Json configuration files, setting @course_codes_to_faculty and @academic_department_code_to_faculty
|
13
13
|
# Opens a connection to the LDAP server, setting @ldap for other methods to use.
|
14
14
|
#
|
@@ -17,14 +17,14 @@ module Figshare
|
|
17
17
|
def initialize(figshare_user:, conf_dir:)
|
18
18
|
figshare_token = load_json_file("#{conf_dir}/figshare_keys.json")
|
19
19
|
@auth_token = figshare_token[figshare_user]
|
20
|
-
|
20
|
+
|
21
21
|
figshare_site_params = load_json_file("#{conf_dir}/figshare_site_params.json")
|
22
|
-
|
22
|
+
|
23
23
|
@hostname = figshare_site_params['host']
|
24
24
|
@api_url = figshare_site_params['api_url']
|
25
25
|
@institute_id = figshare_site_params['institute_id']
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
28
|
# Parse the config file
|
29
29
|
#
|
30
30
|
# @param filename [String] config file name to parse
|
@@ -32,7 +32,7 @@ module Figshare
|
|
32
32
|
private def load_json_file(filename)
|
33
33
|
JSON.parse(File.read(filename))
|
34
34
|
end
|
35
|
-
|
35
|
+
|
36
36
|
# get iterates through the API response, yielding each value to the passed block
|
37
37
|
# When Figshare API usually has no paging option.
|
38
38
|
# If there is no block, then the results are printed (useful for debugging)
|
@@ -67,16 +67,16 @@ module Figshare
|
|
67
67
|
private def get_paginate(api_query:, args: {}, debug: false, by_offset: false, &block)
|
68
68
|
args = {} if args.nil?
|
69
69
|
if ! args.is_a?(Hash)
|
70
|
-
|
70
|
+
raise 'get_paginate(): Expecting args to be a Hash'
|
71
71
|
end
|
72
|
-
|
72
|
+
|
73
73
|
offset = 0
|
74
74
|
page = 1
|
75
75
|
limit = page_size = 100
|
76
76
|
result_count = 0
|
77
77
|
loop do
|
78
78
|
content_type = response = nil
|
79
|
-
form_args = by_offset ? {
|
79
|
+
form_args = by_offset ? { 'limit' => limit, 'offset' => offset } : { 'page_size' => page_size, 'page' => page }
|
80
80
|
WIKK::WebBrowser.https_session( host: @hostname, verify_cert: false ) do |ws|
|
81
81
|
response = ws.get_page( query: "#{@api_url}#{api_query}",
|
82
82
|
authorization: "token #{@auth_token}",
|
@@ -88,10 +88,10 @@ module Figshare
|
|
88
88
|
result_count += page_count
|
89
89
|
break if page_count < page_size # Got less results than we asked for, so it was the last page
|
90
90
|
|
91
|
-
page += 1 #Ready to fetch next page
|
92
|
-
offset += limit #if we use offset, then mor
|
91
|
+
page += 1 # Ready to fetch next page
|
92
|
+
offset += limit # if we use offset, then mor
|
93
93
|
end
|
94
|
-
|
94
|
+
|
95
95
|
return result_count
|
96
96
|
end
|
97
97
|
|
@@ -105,26 +105,26 @@ module Figshare
|
|
105
105
|
# @param content_type [String] Assuming Json, but might need binary ('application/octet-stream')
|
106
106
|
# @yield [String] if given a block, iterates through the result from figshare
|
107
107
|
# @return [Integer] number of results.
|
108
|
-
private def post(api_query:, args: {}, data: nil, debug: false, content_type: 'application/json; charset=UTF-8', &block)
|
108
|
+
private def post(api_query:, args: {}, data: nil, debug: false, content_type: 'application/json; charset=UTF-8', &block)
|
109
109
|
body = nil
|
110
|
-
if data.is_a?(Hash)
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
110
|
+
body = if data.is_a?(Hash)
|
111
|
+
# Convert hash to json, and merge in additional args
|
112
|
+
data.merge(args).to_j
|
113
|
+
elsif data.nil? && ! args.empty?
|
114
|
+
# No data, but args, so just use the args
|
115
|
+
args.to_j
|
116
|
+
else
|
117
|
+
# Data isn't a Hash, so just pass it through (might be nil)
|
118
|
+
data
|
119
|
+
end
|
120
|
+
|
121
|
+
response = nil
|
122
122
|
WIKK::WebBrowser.https_session( host: @hostname, verify_cert: false ) do |ws|
|
123
123
|
response = ws.post_page( query: "#{@api_url}#{api_query}",
|
124
124
|
content_type: content_type,
|
125
125
|
authorization: "token #{@auth_token}",
|
126
126
|
data: body
|
127
|
-
|
127
|
+
)
|
128
128
|
content_type = ws.header_value(key: 'Content-Type')
|
129
129
|
end
|
130
130
|
return iterate_json_response(response: response, content_type: content_type, debug: debug, &block)
|
@@ -140,34 +140,34 @@ module Figshare
|
|
140
140
|
# @param by_offset [Boolean] use offset/limit rather than page/page_size in API calls
|
141
141
|
# @yield [String] if given a block, iterates through the result from figshare
|
142
142
|
# @return [Integer] number of results.
|
143
|
-
private def post_paginate(api_query:, args: {}, debug: false, by_offset: false,
|
143
|
+
private def post_paginate(api_query:, args: {}, debug: false, by_offset: false, &block)
|
144
144
|
page = 1
|
145
145
|
offset = 0
|
146
146
|
limit = page_size = 100
|
147
147
|
result_count = 0
|
148
|
-
|
148
|
+
|
149
149
|
args = {} if args.nil?
|
150
150
|
if ! args.is_a?(Hash)
|
151
|
-
|
151
|
+
raise 'post_paginate(): Expecting args to be a Hash'
|
152
152
|
end
|
153
|
-
|
153
|
+
|
154
154
|
loop do
|
155
155
|
content_type = response = nil
|
156
|
-
form_args = by_offset ? {
|
156
|
+
form_args = by_offset ? { 'limit' => limit, 'offset' => offset } : { 'page_size' => page_size, 'page' => page }
|
157
157
|
WIKK::WebBrowser.https_session( host: @hostname, verify_cert: false ) do |ws|
|
158
158
|
response = ws.post_page( query: "#{@api_url}#{api_query}",
|
159
159
|
content_type: 'application/json; charset=UTF-8',
|
160
160
|
authorization: "token #{@auth_token}",
|
161
161
|
data: args.merge(form_args).to_j
|
162
|
-
|
162
|
+
)
|
163
163
|
content_type = ws.header_value(key: 'Content-Type')
|
164
164
|
end
|
165
165
|
page_count = iterate_json_response(response: response, content_type: content_type, debug: debug, &block)
|
166
166
|
result_count += page_count
|
167
167
|
break if page_count < page_size # Got less results than we asked for, so it was the last page
|
168
168
|
|
169
|
-
page += 1 #Ready to fetch next page
|
170
|
-
offset += limit #if we use offset
|
169
|
+
page += 1 # Ready to fetch next page
|
170
|
+
offset += limit # if we use offset
|
171
171
|
end
|
172
172
|
return result_count
|
173
173
|
end
|
@@ -181,27 +181,27 @@ module Figshare
|
|
181
181
|
# @param debug [Boolean] print result to stdout
|
182
182
|
# @param content_type [String] Assuming Json, but might need binary ('application/octet-stream')
|
183
183
|
# @yield [String] if given a block, iterates through the result from figshare
|
184
|
-
# @return [Integer] number of results
|
184
|
+
# @return [Integer] number of results
|
185
185
|
private def put(api_query:, args: {}, data: nil, debug: false, content_type: 'application/json; charset=UTF-8', &block)
|
186
186
|
body = nil
|
187
|
-
if data.is_a?(Hash)
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
187
|
+
body = if data.is_a?(Hash)
|
188
|
+
# Convert hash to json, and merge in additional args
|
189
|
+
data.merge(args).to_j
|
190
|
+
elsif data.nil? && ! args.empty?
|
191
|
+
# No data, but args, so just use the args
|
192
|
+
args.to_j
|
193
|
+
else
|
194
|
+
# Data isn't a Hash, so just pass it through (might be nil)
|
195
|
+
data
|
196
|
+
end
|
197
197
|
|
198
|
-
|
198
|
+
response = nil
|
199
199
|
WIKK::WebBrowser.https_session( host: @hostname, verify_cert: false ) do |ws|
|
200
|
-
response = ws.
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
200
|
+
response = ws.put_req( query: "#{@api_url}#{api_query}",
|
201
|
+
content_type: content_type,
|
202
|
+
authorization: "token #{@auth_token}",
|
203
|
+
data: body
|
204
|
+
)
|
205
205
|
content_type = ws.header_value(key: 'Content-Type')
|
206
206
|
end
|
207
207
|
return iterate_json_response(response: response, content_type: content_type, debug: debug, &block)
|
@@ -214,18 +214,18 @@ module Figshare
|
|
214
214
|
# @param debug [Boolean] print result to stdout
|
215
215
|
# @yield [Hash] Unlikely to have a result from delete calls, but if we do, we see it here
|
216
216
|
# @return [Integer] number of results (usually 0)
|
217
|
-
private def delete(api_query:, args: {}, debug: false, &block)
|
218
|
-
|
219
|
-
content_type = response = nil
|
217
|
+
private def delete(api_query:, args: {}, debug: false, content_type: 'application/json; charset=UTF-8', &block)
|
218
|
+
response = nil
|
220
219
|
WIKK::WebBrowser.https_session( host: @hostname, verify_cert: false ) do |ws|
|
221
220
|
response = ws.delete_req( query: "#{@api_url}#{api_query}",
|
222
|
-
|
223
|
-
|
221
|
+
authorization: "token #{@auth_token}",
|
222
|
+
form_values: args
|
223
|
+
)
|
224
224
|
content_type = ws.header_value(key: 'Content-Type')
|
225
225
|
end
|
226
226
|
return iterate_json_response(response: response, content_type: content_type, debug: debug, &block)
|
227
227
|
end
|
228
|
-
|
228
|
+
|
229
229
|
# For iterate through the api response
|
230
230
|
#
|
231
231
|
# @param response [String] response from the API call
|
@@ -234,25 +234,25 @@ module Figshare
|
|
234
234
|
# @yield [Hash] each array member in the response (or the entire response, if not iteratable)
|
235
235
|
private def iterate_json_response(response:, content_type:, debug: false )
|
236
236
|
return 0 if response.nil? # got no responses
|
237
|
-
|
237
|
+
|
238
238
|
if content_type =~ /application\/json/
|
239
239
|
response_array = JSON.parse(response)
|
240
|
-
#If we don't have an Array, turn the response into an Array so we can iterate over this one response.
|
241
|
-
response_array = [ response_array ]
|
240
|
+
# If we don't have an Array, turn the response into an Array so we can iterate over this one response.
|
241
|
+
response_array = [ response_array ] unless response_array.instance_of?(Array)
|
242
242
|
return 0 if response_array.empty? # got empty array of responses
|
243
|
-
|
243
|
+
|
244
244
|
count = 0
|
245
245
|
response_array.each do |r|
|
246
246
|
yield r if block_given?
|
247
247
|
p r if debug
|
248
248
|
count += 1
|
249
249
|
end
|
250
|
-
|
250
|
+
|
251
251
|
return count
|
252
|
-
else #just dump the entire response on the caller :)
|
253
|
-
yield response
|
252
|
+
else # just dump the entire response on the caller :)
|
253
|
+
yield response if block_given?
|
254
254
|
return response.length
|
255
255
|
end
|
256
256
|
end
|
257
257
|
end
|
258
|
-
end
|
258
|
+
end
|
data/lib/figshare_api_v2.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
|
-
module Figshare
|
2
|
-
|
1
|
+
module Figshare # :nodoc:
|
2
|
+
# Figshare module initialization
|
3
|
+
#
|
4
|
+
VERSION = '0.9.6'
|
3
5
|
|
4
|
-
require
|
5
|
-
require
|
6
|
+
require 'wikk_webbrowser'
|
7
|
+
require 'wikk_json'
|
6
8
|
require 'time'
|
7
9
|
|
8
10
|
require_relative 'base.rb'
|
@@ -18,8 +20,8 @@ module Figshare
|
|
18
20
|
require_relative 'upload.rb'
|
19
21
|
require_relative 'stats.rb'
|
20
22
|
require_relative 'oai_pmh.rb'
|
21
|
-
|
22
|
-
#
|
23
|
+
|
24
|
+
# HACK: to do a lazy initialization of the Figshare subclasses. i.e. only if they get called.
|
23
25
|
# Usage:
|
24
26
|
# @figshare = Figshare::Init.new(figshare_user: 'figshare_admin', conf_dir: "#{__dir__}/conf")
|
25
27
|
#
|
@@ -36,7 +38,7 @@ module Figshare
|
|
36
38
|
@figshare_user = figshare_user
|
37
39
|
@conf_dir = conf_dir
|
38
40
|
end
|
39
|
-
|
41
|
+
|
40
42
|
# Create Figshare::Authors, if it doesn't exist. Initialized with @figshare_user and @conf_dir
|
41
43
|
#
|
42
44
|
# @return [Figshare::Authors]
|
@@ -50,49 +52,49 @@ module Figshare
|
|
50
52
|
def institutions
|
51
53
|
@institutions ||= Institutions.new(figshare_user: @figshare_user, conf_dir: @conf_dir)
|
52
54
|
end
|
53
|
-
|
55
|
+
|
54
56
|
# Create Figshare::Other, if it doesn't exist. Initialized with @figshare_user and @conf_dir
|
55
57
|
#
|
56
58
|
# @return [Figshare::Other]
|
57
59
|
def other
|
58
60
|
@other ||= Other.new(figshare_user: @figshare_user, conf_dir: @conf_dir)
|
59
61
|
end
|
60
|
-
|
62
|
+
|
61
63
|
# Create Figshare::PrivateArticles, if it doesn't exist. Initialized with @figshare_user and @conf_dir
|
62
64
|
#
|
63
65
|
# @return [Figshare::PrivateArticles]
|
64
66
|
def private_articles
|
65
67
|
@private_articles ||= PrivateArticles.new(figshare_user: @figshare_user, conf_dir: @conf_dir)
|
66
68
|
end
|
67
|
-
|
69
|
+
|
68
70
|
# Create Figshare::PrivateCollections, if it doesn't exist. Initialized with @figshare_user and @conf_dir
|
69
71
|
#
|
70
72
|
# @return [Figshare::PrivateCollections]
|
71
73
|
def private_collections
|
72
74
|
@private_collections ||= PrivateCollections.new(figshare_user: @figshare_user, conf_dir: @conf_dir)
|
73
75
|
end
|
74
|
-
|
76
|
+
|
75
77
|
# Create Figshare::PrivateProjects, if it doesn't exist. Initialized with @figshare_user and @conf_dir
|
76
78
|
#
|
77
79
|
# @return [Figshare::PrivateProjects]
|
78
80
|
def private_projects
|
79
81
|
@private_projects ||= PrivateProjects.new(figshare_user: @figshare_user, conf_dir: @conf_dir)
|
80
82
|
end
|
81
|
-
|
83
|
+
|
82
84
|
# Create Figshare::PublicArticles, if it doesn't exist. Initialized with @figshare_user and @conf_dir
|
83
85
|
#
|
84
86
|
# @return [Figshare::PublicArticles]
|
85
87
|
def public_articles
|
86
88
|
@public_articles ||= PublicArticles.new(figshare_user: @figshare_user, conf_dir: @conf_dir)
|
87
89
|
end
|
88
|
-
|
90
|
+
|
89
91
|
# Create Figshare::PublicCollections, if it doesn't exist. Initialized with @figshare_user and @conf_dir
|
90
92
|
#
|
91
93
|
# @return [Figshare::PublicCollections]
|
92
94
|
def public_collections
|
93
95
|
@public_collections ||= PublicCollections.new(figshare_user: @figshare_user, conf_dir: @conf_dir)
|
94
96
|
end
|
95
|
-
|
97
|
+
|
96
98
|
# Create Figshare::PublicProjects, if it doesn't exist. Initialized with @figshare_user and @conf_dir
|
97
99
|
#
|
98
100
|
# @return [Figshare::PublicProjects]
|
@@ -106,20 +108,19 @@ module Figshare
|
|
106
108
|
def upload
|
107
109
|
@upload ||= Upload.new(figshare_user: @figshare_user, conf_dir: @conf_dir)
|
108
110
|
end
|
109
|
-
|
111
|
+
|
110
112
|
# Create Figshare::Stats, if it doesn't exist. Initialized with @figshare_user and @conf_dir
|
111
113
|
#
|
112
114
|
# @return [Figshare::Stats]
|
113
115
|
def stats
|
114
116
|
@stats ||= Stats.new(figshare_user: @figshare_user, conf_dir: @conf_dir)
|
115
117
|
end
|
116
|
-
|
118
|
+
|
117
119
|
# Create Figshare::OAI_PMH, if it doesn't exist. Initialized with @figshare_user and @conf_dir
|
118
120
|
#
|
119
121
|
# @return [Figshare::OAI_PMH]
|
120
122
|
def oai_pmh
|
121
123
|
@oai_pmh ||= OAI_PMH.new(figshare_user: @figshare_user, conf_dir: @conf_dir)
|
122
124
|
end
|
123
|
-
|
124
125
|
end
|
125
|
-
end
|
126
|
+
end
|