serrano 0.3.6 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.travis.yml +1 -1
- data/CHANGELOG.md +11 -0
- data/{CONDUCT.md → CODE_OF_CONDUCT.md} +0 -0
- data/Gemfile.lock +31 -31
- data/LICENSE +1 -1
- data/README.md +16 -1
- data/Rakefile +1 -0
- data/lib/serrano.rb +89 -22
- data/lib/serrano/cnrequest.rb +1 -1
- data/lib/serrano/filters.rb +26 -19
- data/lib/serrano/request.rb +10 -5
- data/lib/serrano/request_cursor.rb +12 -6
- data/lib/serrano/utils.rb +6 -2
- data/lib/serrano/version.rb +1 -1
- data/serrano.gemspec +13 -13
- metadata +33 -51
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: e329983c57815e197e683e64cf0a55300ede36bec3ada9a58612d4abd209f02a
|
4
|
+
data.tar.gz: 25dbce2ee336448219f50ea8e669da1bab787ccdd535f86d59c3aece3798fc71
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ffaf70de61b00919b7418125f73e23b34195445de5fcb23d9b32793e30d5d4971ba266e1d8421c76cef6f1e824b6ee87e6235f23a7fb3945f2c5447eea351f8d
|
7
|
+
data.tar.gz: ab93cece3c5e5661bedcf06812ff28276e192fc54a648b0e97902799cabc333ea5d14d51f67a60ef6b83555aabade56a19b5b664152ca1eef0bc2d4667ba217f
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
## 0.5.0 (2018-04-08)
|
2
|
+
|
3
|
+
* Updated dependency versions
|
4
|
+
* Change url used in content negotation from `http://dx.doi.org/` to `https://doi.org/` (#49)
|
5
|
+
* Fix `cursor_max` parameter type check to avoid Fixnum warning (#50)
|
6
|
+
* Add support for `mailto` email polite pool, and docs updated with info (#46) (#47)
|
7
|
+
* Add select parameter throughout methods (#43)
|
8
|
+
* Added additional filter options (#45) (#40)
|
9
|
+
* Added to docs info about additional `sort` parameter options (#41)
|
10
|
+
* Added to docs info about additional field query options (#42)
|
11
|
+
|
1
12
|
## 0.3.6 (2017-04-04)
|
2
13
|
|
3
14
|
* Updated dependency versions
|
File without changes
|
data/Gemfile.lock
CHANGED
@@ -1,47 +1,47 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
serrano (0.
|
5
|
-
faraday (~> 0.
|
6
|
-
faraday_middleware (~> 0.
|
7
|
-
multi_json (~> 1.
|
8
|
-
thor (~> 0.
|
4
|
+
serrano (0.5.0)
|
5
|
+
faraday (~> 0.14.0)
|
6
|
+
faraday_middleware (~> 0.12.2)
|
7
|
+
multi_json (~> 1.13, >= 1.13.1)
|
8
|
+
thor (~> 0.20.0)
|
9
9
|
|
10
10
|
GEM
|
11
11
|
remote: https://rubygems.org/
|
12
12
|
specs:
|
13
|
-
addressable (2.5.
|
14
|
-
public_suffix (
|
13
|
+
addressable (2.5.2)
|
14
|
+
public_suffix (>= 2.0.2, < 4.0)
|
15
15
|
codecov (0.1.10)
|
16
16
|
json
|
17
17
|
simplecov
|
18
18
|
url
|
19
19
|
crack (0.4.3)
|
20
20
|
safe_yaml (~> 1.0.0)
|
21
|
-
docile (1.
|
22
|
-
faraday (0.
|
21
|
+
docile (1.3.0)
|
22
|
+
faraday (0.14.0)
|
23
23
|
multipart-post (>= 1.2, < 3)
|
24
|
-
faraday_middleware (0.
|
24
|
+
faraday_middleware (0.12.2)
|
25
25
|
faraday (>= 0.7.4, < 1.0)
|
26
|
-
hashdiff (0.3.
|
27
|
-
json (2.0
|
28
|
-
multi_json (1.
|
26
|
+
hashdiff (0.3.7)
|
27
|
+
json (2.1.0)
|
28
|
+
multi_json (1.13.1)
|
29
29
|
multipart-post (2.0.0)
|
30
|
-
power_assert (
|
31
|
-
public_suffix (
|
32
|
-
rake (12.
|
30
|
+
power_assert (1.1.1)
|
31
|
+
public_suffix (3.0.2)
|
32
|
+
rake (12.3.1)
|
33
33
|
safe_yaml (1.0.4)
|
34
|
-
simplecov (0.
|
35
|
-
docile (~> 1.1
|
34
|
+
simplecov (0.16.1)
|
35
|
+
docile (~> 1.1)
|
36
36
|
json (>= 1.8, < 3)
|
37
37
|
simplecov-html (~> 0.10.0)
|
38
|
-
simplecov-html (0.10.
|
39
|
-
test-unit (3.2.
|
38
|
+
simplecov-html (0.10.2)
|
39
|
+
test-unit (3.2.7)
|
40
40
|
power_assert
|
41
|
-
thor (0.
|
41
|
+
thor (0.20.0)
|
42
42
|
url (0.3.2)
|
43
|
-
vcr (
|
44
|
-
webmock (
|
43
|
+
vcr (4.0.0)
|
44
|
+
webmock (3.3.0)
|
45
45
|
addressable (>= 2.3.6)
|
46
46
|
crack (>= 0.3.2)
|
47
47
|
hashdiff
|
@@ -50,15 +50,15 @@ PLATFORMS
|
|
50
50
|
ruby
|
51
51
|
|
52
52
|
DEPENDENCIES
|
53
|
-
bundler (~> 1.
|
53
|
+
bundler (~> 1.16, >= 1.16.1)
|
54
54
|
codecov (~> 0.1.10)
|
55
|
-
json (~> 2.
|
56
|
-
rake (~> 12.
|
55
|
+
json (~> 2.1)
|
56
|
+
rake (~> 12.3, >= 12.3.1)
|
57
57
|
serrano!
|
58
|
-
simplecov (~> 0.
|
59
|
-
test-unit (~> 3.2, >= 3.2.
|
60
|
-
vcr (~>
|
61
|
-
webmock (~>
|
58
|
+
simplecov (~> 0.16.1)
|
59
|
+
test-unit (~> 3.2, >= 3.2.7)
|
60
|
+
vcr (~> 4.0)
|
61
|
+
webmock (~> 3.3)
|
62
62
|
|
63
63
|
BUNDLED WITH
|
64
|
-
1.
|
64
|
+
1.16.1
|
data/LICENSE
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Copyright (C)
|
1
|
+
Copyright (C) 2018 Scott Chamberlain
|
2
2
|
|
3
3
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
4
4
|
|
data/README.md
CHANGED
@@ -54,6 +54,11 @@ limit is 50 requests per second. Look for the headers `X-Rate-Limit-Limit`
|
|
54
54
|
and `X-Rate-Limit-Interval` in requests to see what the current rate
|
55
55
|
limits are.
|
56
56
|
|
57
|
+
The Polite Pool:
|
58
|
+
|
59
|
+
To get in the polite pool it's a good idea now to include a `mailto` email
|
60
|
+
address. See docs for more information. TLDR: set your email in an env var `CROSSREF_EMAIL`.
|
61
|
+
|
57
62
|
|
58
63
|
## Install
|
59
64
|
|
@@ -79,10 +84,20 @@ This will also be the way to set up other user options, as needed down the road.
|
|
79
84
|
|
80
85
|
```ruby
|
81
86
|
Serrano.configuration do |config|
|
82
|
-
config.base_url = "
|
87
|
+
config.base_url = "https://api.crossref.org"
|
83
88
|
end
|
84
89
|
```
|
85
90
|
|
91
|
+
We recommend you set your `mailto` email here so you can get in the "polite pool" which gives you faster rate limits:
|
92
|
+
|
93
|
+
```ruby
|
94
|
+
Serrano.configuration do |config|
|
95
|
+
config.mailto = "jane@doe.org"
|
96
|
+
end
|
97
|
+
```
|
98
|
+
|
99
|
+
Or use an env var with name `CROSSREF_EMAIL`
|
100
|
+
|
86
101
|
## Examples
|
87
102
|
|
88
103
|
### Use in a Ruby repl
|
data/Rakefile
CHANGED
data/lib/serrano.rb
CHANGED
@@ -18,13 +18,21 @@ require 'rexml/xpath'
|
|
18
18
|
# Max: 100.
|
19
19
|
# @param sort [String] Field to sort on, one of score, relevance,
|
20
20
|
# updated (date of most recent change to metadata - currently the same as deposited),
|
21
|
-
# deposited (time of most recent deposit), indexed (time of most recent index),
|
22
|
-
# published (publication date)
|
21
|
+
# deposited (time of most recent deposit), indexed (time of most recent index),
|
22
|
+
# published (publication date), published-print (print publication date),
|
23
|
+
# published-online (online publication date), issued (issued date (earliest known publication date)),
|
24
|
+
# is-referenced-by-count (number of times this DOI is referenced by other Crossref DOIs), or
|
25
|
+
# references-count (number of references included in the references section of the document
|
26
|
+
# identified by this DOI). Note: If the API call includes a query, then the sort
|
23
27
|
# order will be by the relevance score. If no query is included, then the sort order
|
24
28
|
# will be by DOI update date.
|
25
29
|
# @param order [String] Sort order, one of 'asc' or 'desc'
|
26
30
|
# @param facet [Boolean/String] Include facet results OR a query (e.g., `license:*`) to facet by
|
27
31
|
# license. Default: false
|
32
|
+
# @param select [String/Array(String)] Crossref metadata records can be
|
33
|
+
# quite large. Sometimes you just want a few elements from the schema. You can "select"
|
34
|
+
# a subset of elements to return. This can make your API calls much more efficient. Not
|
35
|
+
# clear yet which fields are allowed here.
|
28
36
|
# @param verbose [Boolean] Print request headers to stdout. Default: false
|
29
37
|
|
30
38
|
# @!macro cursor_params
|
@@ -52,10 +60,19 @@ require 'rexml/xpath'
|
|
52
60
|
# - oauth [Hash] A hash with OAuth details
|
53
61
|
|
54
62
|
# @!macro field_queries
|
55
|
-
# @param [Hash<Object>] args Field queries, as named parameters.
|
56
|
-
#
|
63
|
+
# @param [Hash<Object>] args Field queries, as named parameters. See
|
64
|
+
# https://github.com/CrossRef/rest-api-doc/blob/master/rest_api.md#field-queries
|
57
65
|
# Field query parameters mut be named, and must start with `query_`. Any dashes or
|
58
|
-
# periods should be replaced with underscores.
|
66
|
+
# periods should be replaced with underscores. The options include:
|
67
|
+
# - query_title: Query title and subtitle
|
68
|
+
# - query_container_title: Query container-title aka. publication name
|
69
|
+
# - query_author: Query author given and family names
|
70
|
+
# - query_editor: Query editor given and family names
|
71
|
+
# - query_chair: Query chair given and family names
|
72
|
+
# - query_translator: Query translator given and family names
|
73
|
+
# - query_contributor: Query author, editor, chair and translator given and family names
|
74
|
+
# - query_bibliographic: Query bibliographic information, useful for citation look up. Includes titles, authors, ISSNs and publication years
|
75
|
+
# - query_affiliation: Query contributor affiliations
|
59
76
|
|
60
77
|
##
|
61
78
|
# Serrano - The top level module for using methods
|
@@ -93,6 +110,28 @@ require 'rexml/xpath'
|
|
93
110
|
# article titles, authors, etc. For some discussion on this, see
|
94
111
|
# https://github.com/CrossRef/rest-api-doc/issues/101
|
95
112
|
#
|
113
|
+
#
|
114
|
+
# The Polite Pool
|
115
|
+
# As of September 18th 2017 any API queries that use HTTPS and have
|
116
|
+
# appropriate contact information will be directed to a special pool
|
117
|
+
# of API machines that are reserved for polite users. If you connect
|
118
|
+
# to the Crossreef API using HTTPS and provide contact
|
119
|
+
# information, then they will send you to a separate pool of machines,
|
120
|
+
# with better control the performance of these machines because they can
|
121
|
+
# block abusive users.
|
122
|
+
#
|
123
|
+
# We have been using `https` in `serrano` for a while now, so that's good
|
124
|
+
# to go. To get into the Polite Pool, also set your `mailto` email address
|
125
|
+
# with `Serrano.configuration` (example below), or set as an environment
|
126
|
+
# variable with the name `CROSSREF_EMAIL` and your mailto will be set
|
127
|
+
# for each request automatically.
|
128
|
+
#
|
129
|
+
# require 'serrano'
|
130
|
+
# Serrano.configuration do |config|
|
131
|
+
# config.mailto = "foo@bar.com"
|
132
|
+
# end
|
133
|
+
#
|
134
|
+
#
|
96
135
|
# Rate limiting
|
97
136
|
# Crossref introduced rate limiting recently. The rate limits apparently vary,
|
98
137
|
# so we can't give a predictable rate limit. As of this writing, the rate
|
@@ -105,6 +144,7 @@ module Serrano
|
|
105
144
|
|
106
145
|
define_setting :access_token
|
107
146
|
define_setting :access_secret
|
147
|
+
define_setting :mailto, ENV["CROSSREF_EMAIL"]
|
108
148
|
define_setting :base_url, "https://api.crossref.org/"
|
109
149
|
|
110
150
|
##
|
@@ -153,9 +193,13 @@ module Serrano
|
|
153
193
|
#
|
154
194
|
# # sample
|
155
195
|
# Serrano.works(sample: 2)
|
196
|
+
#
|
197
|
+
# # select - pass an array or a comma separated string
|
198
|
+
# Serrano.works(query: "ecology", select: "DOI,title", limit: 30)
|
199
|
+
# Serrano.works(query: "ecology", select: ["DOI","title"], limit: 30)
|
156
200
|
#
|
157
201
|
# # cursor for deep paging
|
158
|
-
# Serrano.works(query: "widget", cursor: "*", limit: 100)
|
202
|
+
# Serrano.works(query: "widget", cursor: "*", limit: 100, cursor_max: 1000)
|
159
203
|
# # another query, more results this time
|
160
204
|
# res = Serrano.works(query: "science", cursor: "*", limit: 250, cursor_max: 1000);
|
161
205
|
# res.collect { |x| x['message']['items'].length }.reduce(0, :+)
|
@@ -173,12 +217,16 @@ module Serrano
|
|
173
217
|
# ## query.container-title
|
174
218
|
# res = Serrano.works(query: "ecology", query_container_title: 'Ecology')
|
175
219
|
# res['message']['items'].collect { |x| x['container-title'] }
|
220
|
+
#
|
221
|
+
# # select certain fields
|
222
|
+
# Serrano.works(select: ['DOI', 'title'], limit: 3)
|
176
223
|
def self.works(ids: nil, query: nil, filter: nil, offset: nil,
|
177
224
|
limit: nil, sample: nil, sort: nil, order: nil, facet: nil,
|
178
|
-
options: nil, verbose: false, cursor: nil,
|
225
|
+
select: nil, options: nil, verbose: false, cursor: nil,
|
226
|
+
cursor_max: 5000, **args)
|
179
227
|
|
180
228
|
RequestCursor.new('works', ids, query, filter, offset,
|
181
|
-
limit, sample, sort, order, facet, nil, nil, options,
|
229
|
+
limit, sample, sort, order, facet, select, nil, nil, options,
|
182
230
|
verbose, cursor, cursor_max, args).perform
|
183
231
|
end
|
184
232
|
|
@@ -225,14 +273,17 @@ module Serrano
|
|
225
273
|
# ## query.title
|
226
274
|
# res = Serrano.members(ids: 221, works: true, query_container_title: 'Advances')
|
227
275
|
# res[0]['message']['items'].collect { |x| x['container-title'] }
|
276
|
+
#
|
277
|
+
# # select certain fields
|
278
|
+
# Serrano.members(ids: 340, works: true, select: ['DOI', 'title'], limit: 3)
|
228
279
|
def self.members(ids: nil, query: nil, filter: nil, offset: nil,
|
229
280
|
limit: nil, sample: nil, sort: nil, order: nil, facet: nil,
|
230
|
-
works: false, options: nil, verbose: false,
|
281
|
+
select: nil, works: false, options: nil, verbose: false,
|
231
282
|
cursor: nil, cursor_max: 5000, **args)
|
232
283
|
|
233
284
|
RequestCursor.new('members', ids, query, filter, offset,
|
234
|
-
limit, sample, sort, order, facet, works, nil,
|
235
|
-
verbose, cursor, cursor_max, args).perform
|
285
|
+
limit, sample, sort, order, facet, select, works, nil,
|
286
|
+
options, verbose, cursor, cursor_max, args).perform
|
236
287
|
end
|
237
288
|
|
238
289
|
##
|
@@ -269,14 +320,17 @@ module Serrano
|
|
269
320
|
# ## query.title
|
270
321
|
# res = Serrano.prefixes(ids: "10.1016", works: true, query_title: 'cell biology')
|
271
322
|
# res[0]['message']['items'].collect { |x| x['title'] }
|
323
|
+
#
|
324
|
+
# # select certain fields
|
325
|
+
# Serrano.prefixes(ids: "10.1016", works: true, select: ['DOI', 'title'], limit: 3)
|
272
326
|
def self.prefixes(ids:, filter: nil, offset: nil,
|
273
327
|
limit: nil, sample: nil, sort: nil, order: nil, facet: nil,
|
274
|
-
works: false, options: nil, verbose: false,
|
328
|
+
select: nil, works: false, options: nil, verbose: false,
|
275
329
|
cursor: nil, cursor_max: 5000, **args)
|
276
330
|
|
277
331
|
RequestCursor.new('prefixes', ids, nil, filter, offset,
|
278
|
-
limit, sample, sort, order, facet, works, nil,
|
279
|
-
verbose, cursor, cursor_max, args).perform
|
332
|
+
limit, sample, sort, order, facet, select, works, nil,
|
333
|
+
options, verbose, cursor, cursor_max, args).perform
|
280
334
|
end
|
281
335
|
|
282
336
|
##
|
@@ -318,13 +372,16 @@ module Serrano
|
|
318
372
|
# ## query.title
|
319
373
|
# res = Serrano.funders(ids: "10.13039/100000001", works: true, query_author: 'Simon')
|
320
374
|
# res[0]['message']['items'].collect { |x| x['author'][0]['family'] }
|
375
|
+
#
|
376
|
+
# # select certain fields
|
377
|
+
# Serrano.funders(ids: "10.13039/100000001", works: true, select: ['DOI', 'title'], limit: 3)
|
321
378
|
def self.funders(ids: nil, query: nil, filter: nil, offset: nil,
|
322
379
|
limit: nil, sample: nil, sort: nil, order: nil, facet: nil,
|
323
|
-
works: false, options: nil, verbose: false,
|
380
|
+
select: nil, works: false, options: nil, verbose: false,
|
324
381
|
cursor: nil, cursor_max: 5000, **args)
|
325
382
|
|
326
383
|
RequestCursor.new('funders', ids, query, filter, offset,
|
327
|
-
limit, sample, sort, order, facet, works, nil, options,
|
384
|
+
limit, sample, sort, order, facet, select, works, nil, options,
|
328
385
|
verbose, cursor, cursor_max, args).perform
|
329
386
|
end
|
330
387
|
|
@@ -367,13 +424,16 @@ module Serrano
|
|
367
424
|
# ## query.title
|
368
425
|
# res = Serrano.journals(ids: "2167-8359", works: true, query_container_title: 'Advances')
|
369
426
|
# res[0]['message']['items'].collect { |x| x['container-title'] }
|
427
|
+
#
|
428
|
+
# # select certain fields
|
429
|
+
# Serrano.journals(ids: "2167-8359", works: true, select: ['DOI', 'title'], limit: 3)
|
370
430
|
def self.journals(ids: nil, query: nil, filter: nil, offset: nil,
|
371
431
|
limit: nil, sample: nil, sort: nil, order: nil, facet: nil,
|
372
|
-
works: false, options: nil, verbose: false,
|
432
|
+
select: nil, works: false, options: nil, verbose: false,
|
373
433
|
cursor: nil, cursor_max: 5000, **args)
|
374
434
|
|
375
435
|
RequestCursor.new('journals', ids, query, filter, offset,
|
376
|
-
limit, sample, sort, order, facet, works, nil, options,
|
436
|
+
limit, sample, sort, order, facet, select, works, nil, options,
|
377
437
|
verbose, cursor, cursor_max, args).perform
|
378
438
|
end
|
379
439
|
|
@@ -385,6 +445,10 @@ module Serrano
|
|
385
445
|
# @!macro field_queries
|
386
446
|
# @param ids [Array] DOIs (digital object identifier) or other identifiers
|
387
447
|
# @param works [Boolean] If true, works returned as well. Default: false
|
448
|
+
# @param select [String/Array(String)] Crossref metadata records can be
|
449
|
+
# quite large. Sometimes you just want a few elements from the schema. You can "select"
|
450
|
+
# a subset of elements to return. This can make your API calls much more efficient. Not
|
451
|
+
# clear yet which fields are allowed here.
|
388
452
|
# @return [Array] An array of hashes
|
389
453
|
#
|
390
454
|
# @example
|
@@ -404,11 +468,14 @@ module Serrano
|
|
404
468
|
# ## query.title
|
405
469
|
# res = Serrano.types(ids: "journal", works: true, query_container_title: 'Advances')
|
406
470
|
# res[0]['message']['items'].collect { |x| x['container-title'] }
|
407
|
-
|
471
|
+
#
|
472
|
+
# # select certain fields
|
473
|
+
# Serrano.types(ids: "journal", works: true, select: ['DOI', 'title'], limit: 3)
|
474
|
+
def self.types(ids: nil, offset: nil, limit: nil, select: nil, works: false,
|
408
475
|
options: nil, verbose: false, cursor: nil, cursor_max: 5000, **args)
|
409
476
|
|
410
477
|
RequestCursor.new('types', ids, nil, nil, offset,
|
411
|
-
limit, nil, nil, nil, nil, works, nil, options,
|
478
|
+
limit, nil, nil, nil, nil, select, works, nil, options,
|
412
479
|
verbose, cursor, cursor_max, args).perform
|
413
480
|
end
|
414
481
|
|
@@ -430,7 +497,7 @@ module Serrano
|
|
430
497
|
facet: nil, options: nil, verbose: false)
|
431
498
|
|
432
499
|
Request.new('licenses', nil, query, nil, offset,
|
433
|
-
limit, sample, sort, order, facet, nil, nil, options, verbose).perform
|
500
|
+
limit, sample, sort, order, facet, nil, nil, nil, options, verbose).perform
|
434
501
|
end
|
435
502
|
|
436
503
|
##
|
@@ -470,7 +537,7 @@ module Serrano
|
|
470
537
|
def self.random_dois(sample: 10, options: nil, verbose: false)
|
471
538
|
|
472
539
|
tmp = Request.new('works', nil, nil, nil, nil,
|
473
|
-
nil, sample, nil, nil, nil, false, nil, options, verbose).perform
|
540
|
+
nil, sample, nil, nil, nil, nil, false, nil, options, verbose).perform
|
474
541
|
tmp['message']['items'].collect { |x| x['DOI'] }
|
475
542
|
end
|
476
543
|
|
data/lib/serrano/cnrequest.rb
CHANGED
data/lib/serrano/filters.rb
CHANGED
@@ -4,6 +4,7 @@
|
|
4
4
|
# Information on Crossref API filters
|
5
5
|
#
|
6
6
|
# @example
|
7
|
+
# require 'serrano'
|
7
8
|
# # List filter names
|
8
9
|
# Serrano::Filters.names
|
9
10
|
# # List filter values and description
|
@@ -13,7 +14,7 @@
|
|
13
14
|
module Serrano
|
14
15
|
module Filters
|
15
16
|
def self.names
|
16
|
-
$
|
17
|
+
$filter_details.keys
|
17
18
|
end
|
18
19
|
|
19
20
|
def self.filters
|
@@ -22,22 +23,10 @@ module Serrano
|
|
22
23
|
end
|
23
24
|
end
|
24
25
|
|
25
|
-
$filter_list = [
|
26
|
-
'has_funder','funder','prefix','member','from_index_date','until_index_date',
|
27
|
-
'from_deposit_date','until_deposit_date','from_update_date','until_update_date',
|
28
|
-
'from_first_deposit_date','until_first_deposit_date','from_pub_date','until_pub_date',
|
29
|
-
'has_license','license_url','license_version','license_delay','has_full_text',
|
30
|
-
'full_text_version','full_text_type','public_references','has_references','has_archive',
|
31
|
-
'archive','has_orcid','orcid','issn','type','directory','doi','updates','is_update',
|
32
|
-
'has_update_policy','container_title','publisher_name','category_name','type_name',
|
33
|
-
'from_created_date', 'until_created_date', 'affiliation', 'has_affiliation',
|
34
|
-
'assertion_group', 'assertion', 'article_number', 'alternative_id',
|
35
|
-
'has_clinical_trial_number', 'has_abstract'
|
36
|
-
]
|
37
|
-
|
38
26
|
$filter_details = {
|
39
27
|
"has_funder" => { "possible_values" => nil, "description" => "metadata which includes one or more funder entry" },
|
40
28
|
"funder" => { "possible_values" => "{funder_id}", "description" => "metadata which include the {funder_id} in FundRef data" },
|
29
|
+
"location" => { "possible_values" => "{country_name}", "description" => "funder records where location = {country name}. Only works on /funders route" },
|
41
30
|
"prefix" => { "possible_values" => "{owner_prefix}", "description" => "metadata belonging to a DOI owner prefix {owner_prefix} (e.g. '10.1016' )" },
|
42
31
|
"member" => { "possible_values" => "{member_id}", "description" => "metadata belonging to a CrossRef member" },
|
43
32
|
"from_index_date" => { "possible_values" => '{date}', "description" => "metadata indexed since (inclusive) {date}" },
|
@@ -50,6 +39,14 @@ $filter_details = {
|
|
50
39
|
"until_created_date" => { "possible_values" => '{date}', "description" => "metadata first deposited before (inclusive) {date}" },
|
51
40
|
"from_pub_date" => { "possible_values" => '{date}', "description" => "metadata where published date is since (inclusive) {date}" },
|
52
41
|
"until_pub_date" => { "possible_values" => '{date}', "description" => "metadata where published date is before (inclusive) {date}" },
|
42
|
+
"from_online_pub_date" => { "possible_values" => '{date}', "description" => "metadata where online published date is since (inclusive) {date}" },
|
43
|
+
"until_online_pub_date" => { "possible_values" => '{date}', "description" => "metadata where online published date is before (inclusive) {date}" },
|
44
|
+
"from_print_pub_date" => { "possible_values" => '{date}', "description" => "metadata where print published date is since (inclusive) {date}" },
|
45
|
+
"until_print_pub_date" => { "possible_values" => '{date}', "description" => "metadata where print published date is before (inclusive) {date}" },
|
46
|
+
"from_posted_date" => { "possible_values" => '{date}', "description" => "metadata where posted date is since (inclusive) {date}" },
|
47
|
+
"until_posted_date" => { "possible_values" => '{date}', "description" => "metadata where posted date is before (inclusive) {date}" },
|
48
|
+
"from_accepted_date" => { "possible_values" => '{date}', "description" => "metadata where accepted date is since (inclusive) {date}" },
|
49
|
+
"until_accepted_date" => { "possible_values" => '{date}', "description" => "metadata where accepted date is before (inclusive) {date}" },
|
53
50
|
"has_license" => { "possible_values" => nil, "description" => "metadata that includes any '<license_ref>' elements" },
|
54
51
|
"license_url" => { "possible_values" => '{url}', "description" => "metadata where '<license_ref>' value equals {url}" },
|
55
52
|
"license_version" => { "possible_values" => '{string}', "description" => "metadata where the '<license_ref>''s 'applies_to' attribute is '{string}'"},
|
@@ -57,31 +54,41 @@ $filter_details = {
|
|
57
54
|
"has_full_text" => { "possible_values" => nil, "description" => "metadata that includes any full text '<resource>' elements_" },
|
58
55
|
"full_text_version" => { "possible_values" => '{string}' , "description" => "metadata where '<resource>' element's 'content_version' attribute is '{string}'" },
|
59
56
|
"full_text_type" => { "possible_values" => '{mime_type}' , "description" => "metadata where '<resource>' element's 'content_type' attribute is '{mime_type}' (e.g. 'application/pdf')" },
|
60
|
-
"
|
57
|
+
"full_text_application" => { "possible_values" => '{string}' , "description" => "metadata where <resource> link has one of the following intended applications: text-mining, similarity-checking or unspecified" },
|
61
58
|
"has_references" => { "possible_values" => nil , "description" => "metadata for works that have a list of references" },
|
62
59
|
"has_archive" => { "possible_values" => nil , "description" => "metadata which include name of archive partner" },
|
63
60
|
"archive" => { "possible_values" => '{string}', "description" => "metadata which where value of archive partner is '{string}'" },
|
64
61
|
"has_orcid" => { "possible_values" => nil, "description" => "metadata which includes one or more ORCIDs" },
|
62
|
+
"has_authenticated_orcid" => { "possible_values" => nil , "description" => "metadata which includes one or more ORCIDs where the depositing publisher claims to have witness the ORCID owner authenticate with ORCID"},
|
65
63
|
"orcid" => { "possible_values" => '{orcid}', "description" => "metadata where '<orcid>' element's value = '{orcid}'" },
|
66
64
|
"issn" => { "possible_values" => '{issn}', "description" => "metadata where record has an ISSN = '{issn}' Format is 'xxxx_xxxx'." },
|
67
|
-
"type" => { "possible_values" => '{type}', "description" => "metadata records whose type = '{type}' Type must be an ID value from the list of types returned by the '/types' resource" },
|
68
65
|
"directory" => { "possible_values" => "{directory}", "description" => "metadata records whose article or serial are mentioned in the given '{directory}'. Currently the only supported value is 'doaj'" },
|
69
66
|
"doi" => { "possible_values" => '{doi}', "description" => "metadata describing the DOI '{doi}'" },
|
70
67
|
"updates" => { "possible_values" => '{doi}', "description" => "metadata for records that represent editorial updates to the DOI '{doi}'" },
|
71
68
|
"is_update" => { "possible_values" => nil, "description" => "metadata for records that represent editorial updates" },
|
72
69
|
"has_update_policy" => { "possible_values" => nil, "description" => "metadata for records that include a link to an editorial update policy" },
|
73
70
|
"container_title" => { "possible_values" => nil, "description" => "metadata for records with a publication title exactly with an exact match" },
|
74
|
-
"publisher_name" => { "possible_values" => nil, "description" => "metadata for records with an exact matching publisher name" },
|
75
71
|
"category_name" => { "possible_values" => nil, "description" => "metadata for records with an exact matching category label" },
|
72
|
+
"type" => { "possible_values" => '{type}', "description" => "metadata records whose type = '{type}' Type must be an ID value from the list of types returned by the '/types' resource" },
|
76
73
|
"type_name" => { "possible_values" => nil, "description" => "metadata for records with an exacty matching type label" },
|
77
74
|
"award_number" => { "possible_values" => "{award_number}", "description" => "metadata for records with a matching award nunber_ Optionally combine with 'award_funder'" },
|
78
75
|
"award_funder" => { "possible_values" => '{funder doi or id}', "description" => "metadata for records with an award with matching funder. Optionally combine with 'award_number'" },
|
76
|
+
"has_assertion" => { "possible_values" => nil, "description" => "metadata for records with any assertions" },
|
79
77
|
"assertion_group" => { "possible_values" => nil, "description" => "metadata for records with an assertion in a particular group" },
|
80
78
|
"assertion" => { "possible_values" => nil, "description" => "metadata for records with a particular named assertion" },
|
81
|
-
"affiliation" => { "possible_values" => nil, "description" => "metadata for records with at least one contributor with the given affiliation" },
|
82
79
|
"has_affiliation" => { "possible_values" => nil, "description" => "metadata for records that have any affiliation information" },
|
83
80
|
"alternative_id" => { "possible_values" => nil, "description" => "metadata for records with the given alternative ID, which may be a publisher_specific ID, or any other identifier a publisher may have provided" },
|
84
81
|
"article_number" => { "possible_values" => nil, "description" => "metadata for records with a given article number" },
|
82
|
+
"has_abstract" => { "possible_values" => nil, "description" => "metadata for records which include an abstract" },
|
85
83
|
"has_clinical_trial_number" => { "possible_values" => nil, "description" => "metadata for records which include a clinical trial number" },
|
86
|
-
"
|
84
|
+
"content_domain" => { "possible_values" => nil, "description" => "metadata where the publisher records a particular domain name as the location Crossmark content will appear" },
|
85
|
+
"has_content_domain" => { "possible_values" => nil, "description" => "metadata where the publisher records a domain name location for Crossmark content" },
|
86
|
+
"has_crossmark_restriction" => { "possible_values" => nil, "description" => "metadata where the publisher restricts Crossmark usage to content domains" },
|
87
|
+
"has_relation" => { "possible_values" => nil, "description" => "metadata for records that either assert or are the object of a relation" },
|
88
|
+
"relation_type" => { "possible_values" => nil, "description" => "One of the relation types from the Crossref relations schema (e.g. is-referenced-by, is-parent-of, is-preprint-of)" },
|
89
|
+
"relation_object" => { "possible_values" => nil, "description" => "Relations where the object identifier matches the identifier provided" },
|
90
|
+
"relation_object_type" => { "possible_values" => nil, "description" => "One of the identifier types from the Crossref relations schema (e.g. doi, issn)" },
|
91
|
+
"public_references" => { "possible_values" => nil, "description" => "metadata where publishers allow references to be distributed publically" },
|
92
|
+
"publisher_name" => { "possible_values" => nil, "description" => "metadata for records with an exact matching publisher name" },
|
93
|
+
"affiliation" => { "possible_values" => nil, "description" => "metadata for records with at least one contributor with the given affiliation" }
|
87
94
|
}
|
data/lib/serrano/request.rb
CHANGED
@@ -22,14 +22,15 @@ module Serrano
|
|
22
22
|
attr_accessor :sort
|
23
23
|
attr_accessor :order
|
24
24
|
attr_accessor :facet
|
25
|
+
attr_accessor :select
|
25
26
|
attr_accessor :works
|
26
27
|
attr_accessor :agency
|
27
28
|
attr_accessor :options
|
28
29
|
attr_accessor :verbose
|
29
30
|
|
30
31
|
def initialize(endpt, id, query, filter, offset,
|
31
|
-
limit, sample, sort, order, facet,
|
32
|
-
options, verbose)
|
32
|
+
limit, sample, sort, order, facet, select,
|
33
|
+
works, agency, options, verbose)
|
33
34
|
|
34
35
|
self.endpt = endpt
|
35
36
|
self.id = id
|
@@ -41,6 +42,7 @@ module Serrano
|
|
41
42
|
self.sort = sort
|
42
43
|
self.order = order
|
43
44
|
self.facet = facet
|
45
|
+
self.select = select
|
44
46
|
self.works = works
|
45
47
|
self.agency = agency
|
46
48
|
self.options = options
|
@@ -50,21 +52,24 @@ module Serrano
|
|
50
52
|
def perform
|
51
53
|
filt = filter_handler(self.filter)
|
52
54
|
|
55
|
+
self.select = self.select.join(",") if self.select && self.select.class == Array
|
56
|
+
|
53
57
|
args = { query: self.query, filter: filt, offset: self.offset,
|
54
58
|
rows: self.limit, sample: self.sample, sort: self.sort,
|
55
|
-
order: self.order, facet: self.facet
|
59
|
+
order: self.order, facet: self.facet,
|
60
|
+
select: self.select }
|
56
61
|
opts = args.delete_if { |k, v| v.nil? }
|
57
62
|
|
58
63
|
if verbose
|
59
64
|
conn = Faraday.new(:url => Serrano.base_url, :request => options || []) do |f|
|
60
65
|
f.response :logger
|
61
|
-
f.adapter Faraday.default_adapter
|
62
66
|
f.use FaradayMiddleware::RaiseHttpException
|
67
|
+
f.adapter Faraday.default_adapter
|
63
68
|
end
|
64
69
|
else
|
65
70
|
conn = Faraday.new(:url => Serrano.base_url, :request => options || []) do |f|
|
66
|
-
f.adapter Faraday.default_adapter
|
67
71
|
f.use FaradayMiddleware::RaiseHttpException
|
72
|
+
f.adapter Faraday.default_adapter
|
68
73
|
end
|
69
74
|
end
|
70
75
|
|
@@ -26,6 +26,7 @@ module Serrano
|
|
26
26
|
attr_accessor :sort
|
27
27
|
attr_accessor :order
|
28
28
|
attr_accessor :facet
|
29
|
+
attr_accessor :select
|
29
30
|
attr_accessor :works
|
30
31
|
attr_accessor :agency
|
31
32
|
attr_accessor :options
|
@@ -35,8 +36,9 @@ module Serrano
|
|
35
36
|
attr_accessor :args
|
36
37
|
|
37
38
|
def initialize(endpt, id, query, filter, offset,
|
38
|
-
limit, sample, sort, order, facet,
|
39
|
-
options, verbose, cursor,
|
39
|
+
limit, sample, sort, order, facet, select,
|
40
|
+
works, agency, options, verbose, cursor,
|
41
|
+
cursor_max, args)
|
40
42
|
|
41
43
|
self.endpt = endpt
|
42
44
|
self.id = id
|
@@ -48,6 +50,7 @@ module Serrano
|
|
48
50
|
self.sort = sort
|
49
51
|
self.order = order
|
50
52
|
self.facet = facet
|
53
|
+
self.select = select
|
51
54
|
self.works = works
|
52
55
|
self.agency = agency
|
53
56
|
self.options = options
|
@@ -60,29 +63,31 @@ module Serrano
|
|
60
63
|
def perform
|
61
64
|
filt = filter_handler(self.filter)
|
62
65
|
fieldqueries = field_query_handler(self.args)
|
66
|
+
self.select = self.select.join(",") if self.select && self.select.class == Array
|
63
67
|
|
64
68
|
if self.cursor_max.class != nil
|
65
|
-
if self.cursor_max.
|
69
|
+
if !self.cursor_max.kind_of?(Integer)
|
66
70
|
raise "cursor_max must be of class int"
|
67
71
|
end
|
68
72
|
end
|
69
73
|
|
70
74
|
arguments = { query: self.query, filter: filt, offset: self.offset,
|
71
75
|
rows: self.limit, sample: self.sample, sort: self.sort,
|
72
|
-
order: self.order, facet: self.facet,
|
76
|
+
order: self.order, facet: self.facet, select: self.select,
|
77
|
+
cursor: self.cursor }.tostrings
|
73
78
|
arguments = arguments.merge(fieldqueries)
|
74
79
|
opts = arguments.delete_if { |k, v| v.nil? }
|
75
80
|
|
76
81
|
if verbose
|
77
82
|
$conn = Faraday.new(:url => Serrano.base_url, :request => options || []) do |f|
|
78
83
|
f.response :logger
|
79
|
-
f.adapter Faraday.default_adapter
|
80
84
|
f.use FaradayMiddleware::RaiseHttpException
|
85
|
+
f.adapter Faraday.default_adapter
|
81
86
|
end
|
82
87
|
else
|
83
88
|
$conn = Faraday.new(:url => Serrano.base_url, :request => options || []) do |f|
|
84
|
-
f.adapter Faraday.default_adapter
|
85
89
|
f.use FaradayMiddleware::RaiseHttpException
|
90
|
+
f.adapter Faraday.default_adapter
|
86
91
|
end
|
87
92
|
end
|
88
93
|
|
@@ -90,6 +95,7 @@ module Serrano
|
|
90
95
|
$conn.headers["X-USER-AGENT"] = make_ua
|
91
96
|
|
92
97
|
if self.id.nil?
|
98
|
+
$endpt2 = self.endpt
|
93
99
|
js = self._req(self.endpt, opts)
|
94
100
|
cu = js['message']['next-cursor']
|
95
101
|
max_avail = js['message']['total-results']
|
data/lib/serrano/utils.rb
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
def make_ua
|
2
|
-
|
2
|
+
requa = 'Faraday/v' + Faraday::VERSION
|
3
3
|
habua = 'Serrano/v' + Serrano::VERSION
|
4
|
-
|
4
|
+
ua = requa + ' ' + habua
|
5
|
+
if Serrano.mailto
|
6
|
+
ua = ua + " (mailto:%s)" % Serrano.mailto
|
7
|
+
end
|
8
|
+
return ua
|
5
9
|
end
|
6
10
|
|
7
11
|
def field_query_handler(x)
|
data/lib/serrano/version.rb
CHANGED
data/serrano.gemspec
CHANGED
@@ -7,8 +7,8 @@ Gem::Specification.new do |s|
|
|
7
7
|
s.name = 'serrano'
|
8
8
|
s.version = Serrano::VERSION
|
9
9
|
s.platform = Gem::Platform::RUBY
|
10
|
-
s.required_ruby_version = '>= 2.
|
11
|
-
s.date = '
|
10
|
+
s.required_ruby_version = '>= 2.1'
|
11
|
+
s.date = '2018-04-08'
|
12
12
|
s.summary = "Crossref Client"
|
13
13
|
s.description = "Low Level Ruby Client for the Crossref Search API"
|
14
14
|
s.authors = "Scott Chamberlain"
|
@@ -22,17 +22,17 @@ Gem::Specification.new do |s|
|
|
22
22
|
s.bindir = 'bin'
|
23
23
|
s.executables = ['serrano']
|
24
24
|
|
25
|
-
s.add_development_dependency 'bundler', '~> 1.
|
26
|
-
s.add_development_dependency 'rake', '~> 12.
|
27
|
-
s.add_development_dependency 'test-unit', '~> 3.2', '>= 3.2.
|
28
|
-
s.add_development_dependency 'simplecov', '~> 0.
|
25
|
+
s.add_development_dependency 'bundler', '~> 1.16', '>= 1.16.1'
|
26
|
+
s.add_development_dependency 'rake', '~> 12.3', '>= 12.3.1'
|
27
|
+
s.add_development_dependency 'test-unit', '~> 3.2', '>= 3.2.7'
|
28
|
+
s.add_development_dependency 'simplecov', '~> 0.16.1'
|
29
29
|
s.add_development_dependency 'codecov', '~> 0.1.10'
|
30
|
-
s.add_development_dependency 'json', '~> 2.
|
31
|
-
s.add_development_dependency 'vcr', '~>
|
32
|
-
s.add_development_dependency 'webmock', '~>
|
30
|
+
s.add_development_dependency 'json', '~> 2.1'
|
31
|
+
s.add_development_dependency 'vcr', '~> 4.0'
|
32
|
+
s.add_development_dependency 'webmock', '~> 3.3'
|
33
33
|
|
34
|
-
s.add_runtime_dependency 'faraday', '~> 0.
|
35
|
-
s.add_runtime_dependency 'faraday_middleware', '~> 0.
|
36
|
-
s.add_runtime_dependency 'thor', '~> 0.
|
37
|
-
s.add_runtime_dependency 'multi_json', '~> 1.
|
34
|
+
s.add_runtime_dependency 'faraday', '~> 0.14.0'
|
35
|
+
s.add_runtime_dependency 'faraday_middleware', '~> 0.12.2'
|
36
|
+
s.add_runtime_dependency 'thor', '~> 0.20.0'
|
37
|
+
s.add_runtime_dependency 'multi_json', '~> 1.13', '>= 1.13.1'
|
38
38
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: serrano
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Scott Chamberlain
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-04-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -16,40 +16,40 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1.
|
19
|
+
version: '1.16'
|
20
20
|
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 1.
|
22
|
+
version: 1.16.1
|
23
23
|
type: :development
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
27
|
- - "~>"
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: '1.
|
29
|
+
version: '1.16'
|
30
30
|
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: 1.
|
32
|
+
version: 1.16.1
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: rake
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
37
|
- - "~>"
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: '12.
|
39
|
+
version: '12.3'
|
40
40
|
- - ">="
|
41
41
|
- !ruby/object:Gem::Version
|
42
|
-
version: 12.
|
42
|
+
version: 12.3.1
|
43
43
|
type: :development
|
44
44
|
prerelease: false
|
45
45
|
version_requirements: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
47
|
- - "~>"
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
version: '12.
|
49
|
+
version: '12.3'
|
50
50
|
- - ">="
|
51
51
|
- !ruby/object:Gem::Version
|
52
|
-
version: 12.
|
52
|
+
version: 12.3.1
|
53
53
|
- !ruby/object:Gem::Dependency
|
54
54
|
name: test-unit
|
55
55
|
requirement: !ruby/object:Gem::Requirement
|
@@ -59,7 +59,7 @@ dependencies:
|
|
59
59
|
version: '3.2'
|
60
60
|
- - ">="
|
61
61
|
- !ruby/object:Gem::Version
|
62
|
-
version: 3.2.
|
62
|
+
version: 3.2.7
|
63
63
|
type: :development
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -69,21 +69,21 @@ dependencies:
|
|
69
69
|
version: '3.2'
|
70
70
|
- - ">="
|
71
71
|
- !ruby/object:Gem::Version
|
72
|
-
version: 3.2.
|
72
|
+
version: 3.2.7
|
73
73
|
- !ruby/object:Gem::Dependency
|
74
74
|
name: simplecov
|
75
75
|
requirement: !ruby/object:Gem::Requirement
|
76
76
|
requirements:
|
77
77
|
- - "~>"
|
78
78
|
- !ruby/object:Gem::Version
|
79
|
-
version: 0.
|
79
|
+
version: 0.16.1
|
80
80
|
type: :development
|
81
81
|
prerelease: false
|
82
82
|
version_requirements: !ruby/object:Gem::Requirement
|
83
83
|
requirements:
|
84
84
|
- - "~>"
|
85
85
|
- !ruby/object:Gem::Version
|
86
|
-
version: 0.
|
86
|
+
version: 0.16.1
|
87
87
|
- !ruby/object:Gem::Dependency
|
88
88
|
name: codecov
|
89
89
|
requirement: !ruby/object:Gem::Requirement
|
@@ -104,122 +104,104 @@ dependencies:
|
|
104
104
|
requirements:
|
105
105
|
- - "~>"
|
106
106
|
- !ruby/object:Gem::Version
|
107
|
-
version: '2.
|
108
|
-
- - ">="
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: 2.0.3
|
107
|
+
version: '2.1'
|
111
108
|
type: :development
|
112
109
|
prerelease: false
|
113
110
|
version_requirements: !ruby/object:Gem::Requirement
|
114
111
|
requirements:
|
115
112
|
- - "~>"
|
116
113
|
- !ruby/object:Gem::Version
|
117
|
-
version: '2.
|
118
|
-
- - ">="
|
119
|
-
- !ruby/object:Gem::Version
|
120
|
-
version: 2.0.3
|
114
|
+
version: '2.1'
|
121
115
|
- !ruby/object:Gem::Dependency
|
122
116
|
name: vcr
|
123
117
|
requirement: !ruby/object:Gem::Requirement
|
124
118
|
requirements:
|
125
119
|
- - "~>"
|
126
120
|
- !ruby/object:Gem::Version
|
127
|
-
version: '
|
128
|
-
- - ">="
|
129
|
-
- !ruby/object:Gem::Version
|
130
|
-
version: 3.0.3
|
121
|
+
version: '4.0'
|
131
122
|
type: :development
|
132
123
|
prerelease: false
|
133
124
|
version_requirements: !ruby/object:Gem::Requirement
|
134
125
|
requirements:
|
135
126
|
- - "~>"
|
136
127
|
- !ruby/object:Gem::Version
|
137
|
-
version: '
|
138
|
-
- - ">="
|
139
|
-
- !ruby/object:Gem::Version
|
140
|
-
version: 3.0.3
|
128
|
+
version: '4.0'
|
141
129
|
- !ruby/object:Gem::Dependency
|
142
130
|
name: webmock
|
143
131
|
requirement: !ruby/object:Gem::Requirement
|
144
132
|
requirements:
|
145
133
|
- - "~>"
|
146
134
|
- !ruby/object:Gem::Version
|
147
|
-
version: '
|
148
|
-
- - ">="
|
149
|
-
- !ruby/object:Gem::Version
|
150
|
-
version: 2.3.2
|
135
|
+
version: '3.3'
|
151
136
|
type: :development
|
152
137
|
prerelease: false
|
153
138
|
version_requirements: !ruby/object:Gem::Requirement
|
154
139
|
requirements:
|
155
140
|
- - "~>"
|
156
141
|
- !ruby/object:Gem::Version
|
157
|
-
version: '
|
158
|
-
- - ">="
|
159
|
-
- !ruby/object:Gem::Version
|
160
|
-
version: 2.3.2
|
142
|
+
version: '3.3'
|
161
143
|
- !ruby/object:Gem::Dependency
|
162
144
|
name: faraday
|
163
145
|
requirement: !ruby/object:Gem::Requirement
|
164
146
|
requirements:
|
165
147
|
- - "~>"
|
166
148
|
- !ruby/object:Gem::Version
|
167
|
-
version: 0.
|
149
|
+
version: 0.14.0
|
168
150
|
type: :runtime
|
169
151
|
prerelease: false
|
170
152
|
version_requirements: !ruby/object:Gem::Requirement
|
171
153
|
requirements:
|
172
154
|
- - "~>"
|
173
155
|
- !ruby/object:Gem::Version
|
174
|
-
version: 0.
|
156
|
+
version: 0.14.0
|
175
157
|
- !ruby/object:Gem::Dependency
|
176
158
|
name: faraday_middleware
|
177
159
|
requirement: !ruby/object:Gem::Requirement
|
178
160
|
requirements:
|
179
161
|
- - "~>"
|
180
162
|
- !ruby/object:Gem::Version
|
181
|
-
version: 0.
|
163
|
+
version: 0.12.2
|
182
164
|
type: :runtime
|
183
165
|
prerelease: false
|
184
166
|
version_requirements: !ruby/object:Gem::Requirement
|
185
167
|
requirements:
|
186
168
|
- - "~>"
|
187
169
|
- !ruby/object:Gem::Version
|
188
|
-
version: 0.
|
170
|
+
version: 0.12.2
|
189
171
|
- !ruby/object:Gem::Dependency
|
190
172
|
name: thor
|
191
173
|
requirement: !ruby/object:Gem::Requirement
|
192
174
|
requirements:
|
193
175
|
- - "~>"
|
194
176
|
- !ruby/object:Gem::Version
|
195
|
-
version: 0.
|
177
|
+
version: 0.20.0
|
196
178
|
type: :runtime
|
197
179
|
prerelease: false
|
198
180
|
version_requirements: !ruby/object:Gem::Requirement
|
199
181
|
requirements:
|
200
182
|
- - "~>"
|
201
183
|
- !ruby/object:Gem::Version
|
202
|
-
version: 0.
|
184
|
+
version: 0.20.0
|
203
185
|
- !ruby/object:Gem::Dependency
|
204
186
|
name: multi_json
|
205
187
|
requirement: !ruby/object:Gem::Requirement
|
206
188
|
requirements:
|
207
189
|
- - "~>"
|
208
190
|
- !ruby/object:Gem::Version
|
209
|
-
version: '1.
|
191
|
+
version: '1.13'
|
210
192
|
- - ">="
|
211
193
|
- !ruby/object:Gem::Version
|
212
|
-
version: 1.
|
194
|
+
version: 1.13.1
|
213
195
|
type: :runtime
|
214
196
|
prerelease: false
|
215
197
|
version_requirements: !ruby/object:Gem::Requirement
|
216
198
|
requirements:
|
217
199
|
- - "~>"
|
218
200
|
- !ruby/object:Gem::Version
|
219
|
-
version: '1.
|
201
|
+
version: '1.13'
|
220
202
|
- - ">="
|
221
203
|
- !ruby/object:Gem::Version
|
222
|
-
version: 1.
|
204
|
+
version: 1.13.1
|
223
205
|
description: Low Level Ruby Client for the Crossref Search API
|
224
206
|
email: myrmecocystus@gmail.com
|
225
207
|
executables:
|
@@ -230,7 +212,7 @@ files:
|
|
230
212
|
- ".gitignore"
|
231
213
|
- ".travis.yml"
|
232
214
|
- CHANGELOG.md
|
233
|
-
-
|
215
|
+
- CODE_OF_CONDUCT.md
|
234
216
|
- Gemfile
|
235
217
|
- Gemfile.lock
|
236
218
|
- LICENSE
|
@@ -265,7 +247,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
265
247
|
requirements:
|
266
248
|
- - ">="
|
267
249
|
- !ruby/object:Gem::Version
|
268
|
-
version: '2.
|
250
|
+
version: '2.1'
|
269
251
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
270
252
|
requirements:
|
271
253
|
- - ">="
|
@@ -273,7 +255,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
273
255
|
version: '0'
|
274
256
|
requirements: []
|
275
257
|
rubyforge_project:
|
276
|
-
rubygems_version: 2.
|
258
|
+
rubygems_version: 2.7.3
|
277
259
|
signing_key:
|
278
260
|
specification_version: 4
|
279
261
|
summary: Crossref Client
|